chmod
)파일 종류 | Description |
---|---|
- | 파일 |
d | 디렉토리 |
l | 소프트 링크 |
c | character device file |
b | block device file |
p | FIFO file |
s | socket file |
권한 | Dexcription |
---|---|
r | Readable |
w | Writable |
x | eXecutable |
s | 실행 파일이 setuid 프로그램을 실행할 때, setuid한 uid인 것처럼 실행한다는 의미 |
chmod
$ chmod [option] [WHO][+ | -][r | w | x] FILE
-R
: 재귀적으로 파일들과 디렉터리들의 모드들을 바꾼다.
-v
: 자세한 모드; 실행되고 있는 모든 파일을 나열한다
who | description | e.g., |
---|---|---|
u | user(owner: 소유권자) | chmod u+x file , o 와 헷갈리지 말 것!! |
g | group | chmod g+x file |
o | other | chmod o-x file |
a | 모든 사람 위의 셋 모두, "ugo"와 같다chmod ugo=rwX <FILE> | chmod ugo=x : 실행 권한만 줌chmod a+x |
operator | description |
---|---|
+ | 지정된 모드들은 지정된 클래스들에 더한다 |
- | 지정된 클래스들로부터 지정된 모드들은 지운다 |
= | 지정된 클래스들을 위해서 지정된 모드들이 정확한 모드들로 만들어지게 된다 |
mode | name | description |
---|---|---|
r | read | 파일을 읽거나 디렉터리 안 내용물의 리스트를 보여준다 |
w | write | 파일이나 디렉터리에 쓴다 |
x | excute | 파일을 실행하거나 디렉터리 트리로 되돌아간다 |
X | 특별한 실행, special excute | x 대신에 사용될 수 있는 것으로 보아야 한다.(사용자, 그룹이나 다른 사람들에게) 벌써 최소한 한번의 실행 허가가 설정된 적이 있는 파일에 실행 허가를 적용한다. + 와 함께 사용되는 경우와 일반적인 파일들 (텍스트 파일들과 같이)에서는 실행 허가를 설정하지 않고 큰 디렉터리 트리에 그룹이나 다른 사람들이 접근할 수 있게 해주는 -R 옵션과 결합하여 사용될 경우, 이 두 경우에만 유용하다. chmod -R a+rx 를 막 사용한 경우에 주로 발생하며, chmod -R a+rx 대신 X 을 사용함으로써 같은 일을 할 수 있다. |
s | setuid,gid | chmod 명령어는 파일이나 디렉터리의 특별한 모드들이나 추가적인 허가들 역시 바꿀 수 있다. 그 기호적인 모드들은 setuid 나 setgid 모드들을 나타내기 위해서 s를 사용하고, sticky 모드를 나타내기 위해서 t를 사용한다. 이 모드들은 다른 클래스들이 지정되었지는 아닌지와 관계없이 적절한 클래스들에게만 적용될 수 있다. 대부분의 운영 시스템들은 8진법 모드들을 사용하여 특별한 모드들을 지정하는 것을 보조하고 있지만 어떤 운영체제들은 그렇지 않다. 이러한 시스템들에서는 오직 기호적인 모드들만 사용될 수 있다. |
t | sticky |
Who? | description | ex |
---|---|---|
a | = all: u,g,o | chmod a+x file = chmod +x file |
$ sudo chown [-R] pllpokko <chown file>
chown file
의 u(소유권자)를 pllpokko
로 변경-R
: 디렉토리 지정시 디렉토리와 그 안에 들어있는 모든 파일 사용자 변경$ sudo chown -R [소유권자]:[그룹] <chown file>
$ sudo chown -R sam:abbey example
[소유권자]:[그룹]
으로 지정한 파일을 spcified 소유권자와 그룹으로 변경example
파일의 소유권자를 sam, 그룹을 abbey로 변경$ chown -R 1000:1000 /var/jenkins_home/
/var/jenkins_home/
디렉터리의 UID와 GID를 1000, 1000으로 변경$ sudo chgrp [-R] pllpokko <chgrp file>
chgrp file
의 g(그룹)을 pllpokko
그룹으로 변경한다.-R
: 디렉토리 지정시 디렉토리와 그 안에 들어있는 모든 그룹 변경$ sudo chgrp wheel /usr/bin/su
$ ls -l /usr/bin/su
umask
$ umask -S
u=rwx,g=rwx,o=rx
$ umask
002 (0002 라는 뜻)
umask
= default permissionroot
가 생성한 파일
-rw-r--r--
(0644)
user
가 생성한 파일
-rw-rw-r--
(0664)
root
, user
가 생성한 directory
drwxrwxr-x
(0775): 디렉토리는 모두 실행권한있음
실행권한이 있어야 디렉토리로 이동할 수 있기 때문
umask
주의점
umask
설정은 휘발성이기 때문에 재부팅하면 다시 돌아온다/etc/profile
, /etc/.login
)에서 umask
값을 022
$HOME
에서 .pofile
, .login
, .bash_profile
, [shell rc files]
에서 umask
값을 022
로 설정umask
설정chmod
명령과 비슷하다$ umask [u|g|o|a][+|-|=][r|w|x][,...]
e.g.
$ umask o-x,g=rw
umask
설정SUID
(4): 파일이 실행 가능하면, 프로그램이 실행될 때 프로세스의 유효 UID를 파일 소유자의 ID로 바꾼다.SGID
(2): SUID와 비슷하게, 파일이 실행가능하면 프로세스의 유효 GID를 파일의 그룹의 ID로 바꾼다.Sticky
(1): 디렉토리에서 삭제를 제한해 다른 사용자 소유의 파일을 지울 수 없게 한다. 보통 /tmp
, /var/tmp
에 설정되어 있다.ping
은 raw
socket을 여는데, 이는 Super User 특권이 필요하다.ping
을 사용할 수 있도록 ping
은 root 소유이고, SUID가 설정되어 있어, ping
을 실행하면, 실행한 사용자의 UID와 상관없이 UID 0 으로 실행된다.myprogram
을 SUID
로 root
를 가질 수 있게 해보자.$ touch myprogram
-rw-rw-r-- 1 markyang markyang 0 Feb 6 09:15 myprogram
$ chmod +x myprogram
-rwxr-xr-x 1 root root 0 Feb 6 09:15 myprogram
$ sudo chown 0:0 myprogram
-rwxr-xr-x 1 root root 0 Feb 6 09:15 myprogram
$ sudo chmod 4755 myprogram
-rwsr-xr-x 1 root root 0 Feb 6 09:15 myprogram
└── SUID가 설정되었다. 이 파일의 소유자 ID는 root, 파일의 그룹 ID는 root 이므로, 실행될 때 root로 실행된다.