9. 퍼미션
이 장에서는 시스템 보안의 필수적인 부분을 살펴보고 다음 명령어들을 소개한다.
id
: 사용자 ID 정보를 표시chmod
: 파일 모드를 변경umask
: 기본 파일 퍼미션 설정su
: 다른 사용자로 쉘을 실행sudo
: 다른 사용자로 명령어를 실행chown
: 파일 소유자를 변경chgrp
: 파일 그룹 소유자를 변경passwd
: 사용자 비밀번호를 변경
소유자, 그룹 멤버, 기타사용자
$ file /etc/shadow
/etc/shadow: regular file, no read permission
$ less /etc/shadow
/etc/shadow: Permission denied
이 오류 메시지의 원인은 이 파일을 읽을 권한이 없는 일반 사용자이기 때문이다.
유닉스 보안 모델에서 사용자는 파일과 디렉토리를 소유할 수 있다. 사용자가 파일 또는 디렉토리를 소유할 때, 그 사용자는 소유물의 접근을 제어한다. 또한 사용자들은 한 명 이상으로 구성된 그룹에 속할 수 있다.
$ id
uid=1023(lim) gid=1024(lim) groups=1024(lim),27(sudo),1001(linux-study)
사용자 계정이 생성되면, 사용자들은 사용자 ID(user ID) 또는 uid라 불리는 번호를 할당 받는다. 그 사용자는 주 그룹 ID(gid)를 할당 받고 추가로 다른 그룹에도 속할 수 있다.
이러한 정보는 어디에서 오는가? 리눅스에 존재하는 다른 것들처럼, 다수의 텍스트 파일에서 얻어온다.
# 사용자 계정
$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
systemd-timesync:x:100:102:systemd Time Synchronization,,,:/run/systemd:/bin/false
systemd-network:x:101:103:systemd Network Management,,,:/run/systemd/netif:/bin/false
systemd-resolve:x:102:104:systemd Resolver,,,:/run/systemd/resolve:/bin/false
systemd-bus-proxy:x:103:105:systemd Bus Proxy,,,:/run/systemd:/bin/false
syslog:x:104:108::/home/syslog:/bin/false
_apt:x:105:65534::/nonexistent:/bin/false
messagebus:x:106:109::/var/run/dbus:/bin/false
lxd:x:107:65534::/var/lib/lxd/:/bin/false
uuidd:x:108:113::/run/uuidd:/bin/false
dnsmasq:x:109:65534:dnsmasq,,,:/var/lib/misc:/bin/false
sshd:x:110:65534::/run/sshd:/usr/sbin/nologin
pollinate:x:111:1::/var/cache/pollinate:/bin/false
jehos:x:1000:1000::/home/jehos:/bin/bash
2chaes:x:1002:1003::/home/linux-study/2chaes:/bin/bash
lim:x:1023:1024::/home/linux-study/lim:/bin/bash
# ...
# 그룹
$ cat /etc/group
root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:syslog
tty:x:5:
disk:x:6:
lp:x:7:
mail:x:8:
news:x:9:
uucp:x:10:
man:x:12:
proxy:x:13:
kmem:x:15:
dialout:x:20:
fax:x:21:
voice:x:22:
cdrom:x:24:
floppy:x:25:
tape:x:26:
sudo:x:27:jehos,2chaes,pildn90,across0406,hatchling13,redniche,bfhj0708,rudalson,handj310,leedg1569,skarlgus,sprtms9062,fishandcat,flzl2008,lunate24,gandalf,kdy,lifili,youngju,wt,hsim,braveek1,lim,overwatch,alphanomega,okokokk2,lovsoso,vingo,dddlee1234,leefmus,stupid42
audio:x:29:
dip:x:30:
www-data:x:33:
backup:x:34:
operator:x:37:
list:x:38:
irc:x:39:
src:x:40:
gnats:x:41:
shadow:x:42:
utmp:x:43:
video:x:44:
sasl:x:45:
plugdev:x:46:
staff:x:50:
games:x:60:
users:x:100:
nogroup:x:65534:
systemd-journal:x:101:
systemd-timesync:x:102:
systemd-network:x:103:
systemd-resolve:x:104:
systemd-bus-proxy:x:105:
input:x:106:
crontab:x:107:
syslog:x:108:
messagebus:x:109:
netdev:x:110:
lxd:x:111:
mlocate:x:112:
uuidd:x:113:
ssh:x:114:
admin:x:115:
jehos:x:1000:
linux-study:x:1001:2chaes,pildn90,across0406,hatchling13,redniche,bfhj0708,rudalson,handj310,leedg1569,skarlgus,sprtms9062,fishandcat,flzl2008,lunate24,gandalf,kdy,lifili,youngju,wt,hsim,braveek1,lim,overwatch,alphanomega,okokokk2,lovsoso,vingo,dddlee1234,leefmus,stupid42
2chaes:x:1003:
lifili:x:1019:
youngju:x:1020:
wt:x:1021:
hsim:x:1022:
braveek1:x:1023:
lim:x:1024:
overwatch:x:1025:
# ...
# 비밀번호
$ cat /etc/group
root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:syslog
tty:x:5:
disk:x:6:
lim:...
읽기, 쓰기, 실행
파일과 디렉토리의 접근권은 읽기 권한, 쓰기 권한, 실행 권한이란 용어로 정의된다.
$ ls -l foo.txt
-rw-r--r-- 1 limhm staff 0 5 18 20:19 foo.txt
처음 10개의 문자는 파일 속성을 나열한 것이다. 첫 문자는 파일 종류(file type)를 나타낸다. 나머지 9개의 문자는 파일 모드(file mode)를 나타낸다.
속성 | 파일 종류 |
---|---|
- | 일반 파일 |
d | 디렉토리 (어떤 파일인지 정보를 가지고있는 특별한 파일) |
l | 심볼릭 링크 (심볼릭 링크의 파일 속성은 항상 rwxrwxrwx이고 그것은 더미 값이다. 실제 파일 속성은 심볼릭 링크가 가르키는 파일의 속성이다.) |
c | 문자 특수 파일 (이 파일 종류는 터미널이나 모뎀같이 바이트의 열로 데이터를 처리하는 디바이스를 나타낸다.) |
b | 블록 특수 파일 (이 파일 종류는 하드 드라이브나 CD-ROM 드라이브같이 블록 단위의 데이터를 처리하는 디바이스를 나타낸다.) |
속성 | 파일 | 디렉토리 |
---|---|---|
r | 파일 열기와 읽기를 허용한다. | 실행 속성이 설정되어 있으면 디렉토리의 내용물을 나용할 수 있게끔 허용한다. |
w | 파일 쓰기 또는 잘라내기는 허용하지만, 이름 변경이나 파일삭제는 허용하지 않는다. 파일 삭제나 파일 이름 변경은 디렉토리 속성에 의해 결정된다. | 실행 속성이 설정되어 있으면 디렉토리 내의 파일들을 생성, 삭제, 이름 변경이 가능하도록 허용한다. |
x | 파일이 프로그램으로 처리되고 파일이 실행되도록 허용한다. | 디렉토리에 들어올 수 있도록 허용한다. |
chmod - 파일 모드 변경
파일 또는 디렉토리의 모드를 변경하기 위해서는 chmod
명령어를 사용한다. 모드의 변경은 오직 파일 소유자나 슈퍼유저만이 가능하다는 것을 명심해야 한다. chmod
는 모드 변경을 표현하는 두 방법을 제공한다.
1. 8진법 표현
8진법 | 2진법 | 파일 모드 |
---|---|---|
0 | 000 | --- |
1 | 001 | --x |
2 | 010 | -w- |
3 | 011 | -wx |
4 | 100 | r— |
5 | 101 | r-x |
6 | 110 | rw- |
7 | 111 | rwx |
$ ls -l foo.txt
-rw-r--r-- 1 limhm staff 0 5 18 20:19 foo.txt
$ chmod 600 foo.txt
$ ls -l foo.txt
-rw------- 1 limhm staff 0 5 18 20:19 foo.txt
2. 기호 표현
기호 | 의미 |
---|---|
u | 파일이나 디렉토리 소유자를 의미(user) |
g | 그룹 소유자(group) |
o | 기타 사용자(other) |
a | all의 약자로, u,g,o의 조합 |
$ ls -l foo.txt
-rw------- 1 limhm staff 0 5 18 20:19 foo.txt
$ chmod go=rw foo.txt
$ ls -l foo.txt
-rw-rw-rw- 1 limhm staff 0 5 18 20:19 foo.txt