Don't Panic
in CS ☕ 7분 읽기

[CS] 운영체제 구조와 리눅스 권한 관리

#CS
목차

운영체제 개념

운영체제(Operating System) 는 시스템 하드웨어를 관리할 뿐 아니라 응용 소프트웨어를 실행하기 위한 하드웨어 추상화 플랫폼과 공통 시스템 서비스를 제공하는 시스템 소프트웨어다.

20220925_153225


운영체제 부팅 과정 (Linux)

Windows도 유사한 과정을 거치지만 아래는 Linux 기준으로 정리한다.

단계명칭역할
1BIOS (Basic Input/Output System)POST(Power On Self Test) 수행 및 물리적 Boot 디바이스 선정
2MBR (Master Boot Record)HDD 0번 섹터(512Byte)에서 부트로더 위치 탐색
3GRUB (Grand Unified Bootloader)멀티 부트·복구 옵션 등 처리. LILO, GRUB2, uboot 계열
4Kernel (Linux Kernel)HW 디바이스·파일시스템 초기화, sbin/init 실행 (pid 1)
5Init (Init Process)root 유저 프로세스로 systemd 등 부팅 과정 수행, /etc/inittab 실행
6Runlevel환경에 맞는 응용 소프트웨어(서비스) 기동. 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 명령어 사용을 권장한다.

20220925_165822


다중 사용자

여러 명이 컴퓨터를 사용하게 되면서 각자의 권한과 비밀이 생겼고, 다중 사용자 시스템이 필요해졌다.

구분내용
장점각자의 계정으로 독립적으로 컴퓨터를 사용할 수 있음
단점시스템 복잡도 증가

유닉스 시스템은 설계 자체가 다중 사용자를 전제로 한다. Windows는 기본적으로 자기 자신이 관리자 권한을 가지지만, Linux는 관리자(root)와 일반 사용자가 명확히 분리된다.


사용자 권한

20220925_171244

리눅스는 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 user2user2 권한으로 로그인 (user2 비밀번호 필요)
su - user2user2 권한으로 로그인 + user2의 홈 디렉토리 사용
su 또는 su rootroot 권한으로 로그인 (우분투는 root 암호 비활성화)
sudo su현재 디렉토리에서 root 권한으로 전환
sudo su -root의 홈 디렉토리에서 root 권한으로 전환
sudo su - user2user2의 홈 디렉토리에서 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 user2user2를 sudo 그룹에 추가
adduser user2 sudouser2를 sudo 그룹에 추가 (동일 효과)
deluser user2 sudouser2를 sudo 그룹에서 제거

파일의 권한

사용자 접근 권한 구분

20220927_034902

파일 생성 권한 (umask)

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

20220927_035617

chmod — 파일 권한 변경 (change mode)

chmod [OPTION]... [MODE]... FILE

권한 대상: 소유자(User) / 그룹(Group) / 그외(Other)

명령어설명
chmod 777 hello.txtuser/group/other 모두 rwx 부여
chmod 700 hello.txtuser에만 rwx 부여, group/other 권한 없음
chmod u+x hello.txtuser에 실행(x) 권한 추가
chmod u-x hello.txtuser에 실행(x) 권한 삭제
chmod g+rw hello.txtgroup에 읽기/쓰기 권한 추가
chmod g-rx hello.txtgroup에 읽기/실행 권한 삭제
chmod o+rwx hello.txtother에 읽기/쓰기/실행 권한 추가
chmod o-rwx hello.txtother에 읽기/쓰기/실행 권한 삭제
chmod +x hello.txtuser/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)
SetUID4xxxchmod u+s filenamerws------rwS------
SetGID2xxxchmod g+s filenamerwxrws---rwxrwS---
Sticky1xxxchmod +t dirnamedrwxrwxrwtdrwxrwxrwT

기존 실행 권한을 포함하면 소문자(s/t), 실행 권한 없이 특수 비트만 있으면 대문자(S/T)로 표기된다.

실습 시나리오

시나리오: user1이 만든 읽기 전용 파일에 user2가 setuid 권한을 통해 접근

  1. user1의 readonly 파일 생성
  2. /bin/cat을 복사해 mycat으로 생성하고 setuid 실행 권한 부여
  3. user2는 파일을 직접 읽을 수 없지만, setuid가 설정된 mycat을 통해 읽을 수 있음

20220927_041654