[CS] 운영체제 구조와 리눅스 권한 관리
목차
운영체제 개념
운영체제(Operating System) 는 시스템 하드웨어를 관리할 뿐 아니라 응용 소프트웨어를 실행하기 위한 하드웨어 추상화 플랫폼과 공통 시스템 서비스를 제공하는 시스템 소프트웨어다.

운영체제 부팅 과정 (Linux)
Windows도 유사한 과정을 거치지만 아래는 Linux 기준으로 정리한다.
| 단계 | 명칭 | 역할 |
|---|---|---|
| 1 | BIOS (Basic Input/Output System) | POST(Power On Self Test) 수행 및 물리적 Boot 디바이스 선정 |
| 2 | MBR (Master Boot Record) | HDD 0번 섹터(512Byte)에서 부트로더 위치 탐색 |
| 3 | GRUB (Grand Unified Bootloader) | 멀티 부트·복구 옵션 등 처리. LILO, GRUB2, uboot 계열 |
| 4 | Kernel (Linux Kernel) | HW 디바이스·파일시스템 초기화, sbin/init 실행 (pid 1) |
| 5 | Init (Init Process) | root 유저 프로세스로 systemd 등 부팅 과정 수행, /etc/inittab 실행 |
| 6 | Runlevel | 환경에 맞는 응용 소프트웨어(서비스) 기동. Linux 계열 전용 개념 |
GRUB이 별도 소프트웨어로 분리된 이유: 멀티부팅·복구 옵션이 늘어나면서 MBR 512Byte 공간이 부족해졌기 때문.
우분투 부트로더와 부팅 프로세스
부트로더 관련 파일
- grub.cfg :
/etc/grub.d/*내용과/etc/default/grub을 통해 생성 - /etc/fstab : 부팅 과정에서 파일시스템을 마운트하는 설정
init() 과정의 변천
고전적인 유닉스 계열의 System V init에서 출발해, Ubuntu 14/16을 거치며 요구사항이 늘어나면서 systemd로 발전했다.
systemd란
startup 프로세스를 구동하는 현대적 시스템으로, 기존 init 대비 다음 장점을 가진다.
- 병렬(동시성) 실행으로 부팅 속도 대폭 향상
- 프로세스 간 dependency 손쉽게 처리
- 서비스 모니터링 편의성 향상 (재시작, Crash 감지)
- 저널 로깅 시스템으로 편리한 모니터링
- 컴포넌트 추가·삭제 용이
우분투의 혼재 명령어 (SysV / Upstart / systemd)
우분투에서는 세 방식의 명령어가 혼재되어 모두 동작한다.
sudo service --status-all
sudo service network-manager restart
sudo systemctl restart network-manager
같은 역할의 스크립트라면 init 명령어보다 systemd 명령어 사용을 권장한다.

다중 사용자
여러 명이 컴퓨터를 사용하게 되면서 각자의 권한과 비밀이 생겼고, 다중 사용자 시스템이 필요해졌다.
| 구분 | 내용 |
|---|---|
| 장점 | 각자의 계정으로 독립적으로 컴퓨터를 사용할 수 있음 |
| 단점 | 시스템 복잡도 증가 |
유닉스 시스템은 설계 자체가 다중 사용자를 전제로 한다. Windows는 기본적으로 자기 자신이 관리자 권한을 가지지만, Linux는 관리자(root)와 일반 사용자가 명확히 분리된다.
사용자 권한

리눅스는 root 관리자와 일반 사용자가 명확히 구분된다. 우분투는 root 계정을 기본적으로 비활성화해두어 권한 남용을 방지한다.
리눅스의 철학: “나는 그냥 사용자이고, 필요할 때 root 권한을 빌려서 사용한다.”
사용자 그룹 및 권한(퍼미션)
관련 명령어 체계
- 계정 종류: root 유저 / 사용자 계정 (
/etc/passwd,/etc/shadow,/etc/group) - 내 권한 확인:
whoami,id - 그룹 계정 및 권한: sudoer & sudo
- 사용자·그룹 생성/삭제:
adduser,useradd,usermod,deluser,userdel,addgroup,delgroup - 파일 권한:
chmod,chown,chgrp,umask - 특수 권한:
setuid,setgid
사용자 계정: superuser와 user
슈퍼유저 (root)
- 시스템 운영 관리자 계정으로, 리눅스에서는 root 유저를 말한다.
whoami: 현재 계정 확인id: 보유 권한 및 소속 그룹 확인
sudo — 권한 대여
sudo (superuser do): 슈퍼유저의 권한을 일시적으로 빌려 명령을 실행한다. root 계정을 직접 사용하는 것보다 권장되는 방식이다.
su [username] — 사용자 전환
사용자로 로그인한 것과 같은 효과. 관리자가 사용자 계정의 이슈를 분석할 때 사용한다.
| 명령어 | 설명 |
|---|---|
su user2 | user2 권한으로 로그인 (user2 비밀번호 필요) |
su - user2 | user2 권한으로 로그인 + user2의 홈 디렉토리 사용 |
su 또는 su root | root 권한으로 로그인 (우분투는 root 암호 비활성화) |
sudo su | 현재 디렉토리에서 root 권한으로 전환 |
sudo su - | root의 홈 디렉토리에서 root 권한으로 전환 |
sudo su - user2 | user2의 홈 디렉토리에서 user2 권한으로 전환 (sudoer 비밀번호 필요) |
사용자 계정과 그룹 계정
계정 관련 주요 파일:
cat /etc/passwd: 사용자 계정 확인cat /etc/shadow: 사용자 암호cat /etc/group: 사용자 그룹 확인
adduser (대화형 사용자 추가)
adduser [options] [--home DIR] [--shell SHELL] [--disabled-password] user
useradd (비대화형 사용자 추가 / adduser의 하위 실행파일)
useradd [options] user
| 명령어 | 설명 |
|---|---|
useradd user3 | 사용자 user3 추가 |
useradd -D | 사용자 생성 기본값 확인 |
useradd -D -b /usr | 기본 홈 디렉토리를 /usr로 변경 |
useradd -D -s /bin/bash | 기본 셸을 bash로 변경 |
useradd -D -e 2020-12-31 | 사용자 계정 만료일 설정 |
암호 정책 변경 (chage / passwd)
chage [option] user
| 명령어 | 설명 |
|---|---|
passwd [options] user | 암호 변경 |
passwd -l user | 계정 잠금 |
passwd -u user | 계정 잠금 해제 |
passwd -S user | 계정 상태 확인 |
passwd -n <mindays> user | 암호 최소 기간 |
passwd -x <maxdays> user | 암호 최대 기간 |
chage user2 | 암호 정책 변경 (대화형) |
chage -l user2 | 암호 정책 확인 |
chage -E 2020-12-31 -m 1 -M 90 -W 7 user2 | 만료일·최소·최대·경고일 일괄 설정 |
사용자 삭제 (deluser / userdel)
deluser [options] user
userdel user
| 명령어 | 설명 |
|---|---|
deluser user2 | 사용자 계정 삭제 |
deluser --remove-home user2 | 계정 + 홈 디렉토리 삭제 |
userdel user2 | 계정 삭제 (홈 디렉토리 유지) |
userdel -f user2 | 로그인 중이더라도 강제 삭제 |
동일 ID로 새 사용자를 만들 경우 이전 디렉토리에 자동 매핑되므로 주의.
그룹 생성 / 삭제
addgroup [options] group # 그룹 생성 (groupadd의 래퍼)
delgroup [options] group # 그룹 삭제
usermod — 사용자 정보 수정 및 그룹 할당
usermod [options] user
| 명령어 | 설명 |
|---|---|
usermod -c <name> user2 | 사용자 이름 수정 |
usermod -aG sudo user2 | user2를 sudo 그룹에 추가 |
adduser user2 sudo | user2를 sudo 그룹에 추가 (동일 효과) |
deluser user2 sudo | user2를 sudo 그룹에서 제거 |
파일의 권한
사용자 접근 권한 구분

파일 생성 권한 (umask)
umask(user mask) : 파일·디렉토리 생성 시 기본 권한에서 차감할 비트를 지정한다.

chmod — 파일 권한 변경 (change mode)
chmod [OPTION]... [MODE]... FILE
권한 대상: 소유자(User) / 그룹(Group) / 그외(Other)
| 명령어 | 설명 |
|---|---|
chmod 777 hello.txt | user/group/other 모두 rwx 부여 |
chmod 700 hello.txt | user에만 rwx 부여, group/other 권한 없음 |
chmod u+x hello.txt | user에 실행(x) 권한 추가 |
chmod u-x hello.txt | user에 실행(x) 권한 삭제 |
chmod g+rw hello.txt | group에 읽기/쓰기 권한 추가 |
chmod g-rx hello.txt | group에 읽기/실행 권한 삭제 |
chmod o+rwx hello.txt | other에 읽기/쓰기/실행 권한 추가 |
chmod o-rwx hello.txt | other에 읽기/쓰기/실행 권한 삭제 |
chmod +x hello.txt | user/group/other 모두 실행 권한 추가 |
chown / chgrp — 소유권 변경
chown [OPTION]... [USER][:GROUP] FILE # 소유자·그룹 변경
chgrp [OPTION]... GROUP FILE # 그룹만 변경
| 명령어 | 설명 |
|---|---|
chown user2 hello.txt | 소유자를 user2로 변경 |
chown user2:user2 hello.txt | 소유자와 그룹 모두 user2로 변경 |
chown :user2 hello.txt | 그룹만 user2로 변경 |
chgrp user2 hello.txt | 그룹을 user2로 변경 |
파일의 특수 실행 권한 (setuid / setgid / sticky)
파일 권한을 일시적으로 소유주(setuid) 또는 소유 그룹(setgid)의 권한으로 빌려서 실행한다. Sticky bit은 해당 디렉토리에 생성된 파일을 해당 사용자 소유주로 저장한다.
| 종류 | 숫자 값 | 설정 명령어 | 표기 (실행 권한 O) | 표기 (실행 권한 X) |
|---|---|---|---|---|
| SetUID | 4xxx | chmod u+s filename | rws------ | rwS------ |
| SetGID | 2xxx | chmod g+s filename | rwxrws--- | rwxrwS--- |
| Sticky | 1xxx | chmod +t dirname | drwxrwxrwt | drwxrwxrwT |
기존 실행 권한을 포함하면 소문자(s/t), 실행 권한 없이 특수 비트만 있으면 대문자(S/T)로 표기된다.
실습 시나리오
시나리오: user1이 만든 읽기 전용 파일에 user2가 setuid 권한을 통해 접근
- user1의 readonly 파일 생성
/bin/cat을 복사해mycat으로 생성하고 setuid 실행 권한 부여- user2는 파일을 직접 읽을 수 없지만, setuid가 설정된
mycat을 통해 읽을 수 있음
