'Stick Bit'에 해당되는 글 1건
- 2015.03.28 [14] SETUID, SETGID, Stickybit, UMASK
- 2014.11.25
p74
원래 소유주에게 권한을 빌려와서 실행할 때만 소유권을 가짐
SETUID 4777 r w s r w x r w x
SETGID 2777 r w x r w s r w x
Sticky bit 1777 r w x r w x r w t
S,s / T,t : x 권한의 유무에 따라 없으면 S(대문자), 있으면 s(소문자) 이다.
1. Sticky bit
[실습]
# mkdir /sb/
# useradd badnom
samadal 계정으로 /sb/ 디렉터리에 testfile 생성 위해 757 권한 부여
# chmod 757 /sb/
[samadal@samadal ~]$ touch /sb/testfile
badnom 이 해당 파일 삭제
[badnom@samadal ~]$ rm /sb/testfile
rm: remove write-protected 일반 빈 파일 `/sb/testfile'? y
관리자가 해당 사태를 보고 Sticky bit 를 진행.
# chmod 1777 /sb/
# ll -d /sb/
drwxrwxrwt 2 root root 4096 2014-11-25 13:06 /sb/
samadal 이 한번 더 올린다.
[samadal@samadal ~]$ touch /sb/testfile
badnom 이 한번 더 삭제를 시도하지만 실패
[badnom@samadal ~]$ rm /sb/testfile
rm: remove write-protected 일반 빈 파일 `/sb/testfile'? y
rm: cannot remove `/sb/testfile': 명령을 허용하지 않음
즉, Sticky bit 는 소유자만 삭제하게 할 수 있다. 공유폴더에 많이 쓰는 권한.
samadal로는 지워진다.
[samadal@samadal ~]$ rm /sb/testfile
[samadal@samadal ~]$ ll /sb/
합계 0
* /tmp/ 디렉터리가 대표적인 Sticky bit 를 사용하는 예
2. SetUID
[실습]
find 명령어 활용하여 오늘 쓴 명령어 중 SetUID 적용된 명령어 찾기
ex)
# find / -name chmod
passwd에 SetUID가 설정된 것을 확인
# find / -name passwd -exec ls -l {} \;
-rwsr-xr-x. 1 root root 25980 2012-02-22 20:44 /usr/bin/passwd
-rw-r--r--. 1 root root 1666 2014-11-25 12:57 /etc/passwd
-rw-r--r--. 1 root root 146 2012-02-22 20:44 /etc/pam.d/passwd
이 passwd 명령어에 SetUID 빼고 samadal로 passwd 변경을 다시 시도 해보자.
/usr/bin/passwd 명령어실행 p/w변경
4755
rwsr-xr-x O O
755
rwxr-xr-x O X
4750
rwsr-x--- X X
*
other의 실행 권한이 0이면 실행 자체도 안된다. 일반적으로 서버에서는 보안상 4750 권한을 준다.
*
/usr/bin/passwd 명령어 소스파일 자체 안에 root만 변경 가능하도록 되어있다.
(x 권한은 컴파일, 링커를 거쳐야지만 생성됨. 즉 일반 파일의 Max 권한은 666이라 할 수 있다.)
3. SetGID
[실습]
# cd ~samadal
# mkdir ./testdir/
# touch ./testdir/test
# chown .samadal ./testdir/
# ll
합계 4
-rwsr--r-- 1 root root 0 2014-11-25 12:53 test
drwxr-xr-x 2 root samadal 4096 2014-11-25 13:59 testdir
그룹 소유권이 samadal인 디렉터리에 test2 생성
# touch ./testdir/test1
# ll ./testdir
합계 0
-rw-r--r-- 1 root root 0 2014-11-25 13:59 test
-rw-r--r-- 1 root root 0 2014-11-25 13:59 test1
=> dir의 GID가 samadal이라 해도 파일을 생성하면 소유권은 root:root 이다.
SetGID 설정
# chmod 2755 ./testdir/
# ll
합계 4
-rwsr--r-- 1 root root 0 2014-11-25 12:53 test
drwxr-sr-x 2 root samadal 4096 2014-11-25 13:59 testdir
SetGID 설정 된 디렉터리에 test2 생성
# touch ./testdir/test2
# ll ./testdir/
합계 0
-rw-r--r-- 1 root root 0 2014-11-25 13:59 test
-rw-r--r-- 1 root root 0 2014-11-25 13:59 test1
-rw-r--r-- 1 root samadal 0 2014-11-25 14:00 test2
=> test2 그룹 소유자가 SetGID 디렉터리의 소유주를 따라감
SetGID : 해당 권한이 있는 디렉터리 안에 파일이나 디렉터리 생성되면 해당 소유주를 따라 소유주가 자동 변경.
[실습]
./testdir/ 을 4755 로 권한 변경
# chmod 4755 ./testdir/
# ll
합계 4
-rwsr--r-- 1 root root 0 2014-11-25 12:53 test
drwsr-sr-x 2 root samadal 4096 2014-11-25 14:00 testdir
=> GID의 s가 chmod 4755 명령어로는 바뀌지 않는다.
# chmod g-s ./testdir/
# ll
합계 4
-rwsr--r-- 1 root root 0 2014-11-25 12:53 test
drwsr-xr-x 2 root root 4096 2014-11-25 14:00 testdir
=> 변경 완료
[문제]
옵션을 찾아서 아래의 설명에 필요한 대로 각 한번의 명령어로 디렉터리를 생성한다.
1) /tmp/test/test1/test2/ 디렉터리 생성
2) /tmp/test 디렉터리는 Sticky bit, 모든 사용자가 모든 권한 가짐
3) /tmp/test/test1 디렉터리 소유자는 모든 권한을, 그룹은 읽기 및 실행권한, 다른 유저는 실행권한을 가진다.
4) /tmp/test/test1/test2/ 디렉터리는 소유자는 모든 권한을, 그룹은 읽기 권한을, 다른 유저는 아무런 권한 없음
# mkdir -p /tmp/test/test1/test2/
# chmod 1777 /tmp/test/
# chmod 751 /tmp/test/test1/
# chmod g-x,o-rx /tmp/test/test1/test2/
* SetUID 위험성
특정 소스파일을 실행 시 자동으로 root 권한 획득하는 프로그램 심어두고 해킹에 악용될 수 있다.
그렇기 때문에 서버관리자는 SetUID 적용된 리스트를 잘 관리해야 한다.
SetUID 적용된 파일 오류 제외하고 출력하라는 명령어
# find / -user root -perm +4000 2> /dev/null
4. UMASK
파일 및 디렉터리가 만들어질 때 기본적으로 설정될 사용권한을 결정
UMASK
Directory 관리자 d1 755 777 - 755 = 022
Max : 777 사용자 d2 775 777 - 775 = 002
File 관리자 f1 644 666 - 644 = 022
Max : 666 사용자 f2 664 666 - 664 = 002
1) UMASK 사용 예
# vi /etc/login.defs
57 # the permission mask will be initialized to 022.
58 UMASK 077
59
2) umask 확인
# umask
0022
[samadal@samadal ~]$ umask
0002
[umask 실습]
# umask 000
# umask
0000
# mkdir ./t1/
# touch ./t2
# ll
합계 7
drwxrwxrwx 2 root root 4096 2014-11-25 14:45 t1
-rw-rw-rw- 1 root root 0 2014-11-25 14:45 t2
=> t1과 t2의 권한이 최대로 되어있다.
# umask 123
# mkdir ./t3/
# ll
합계 11
drwxrwxrwx 2 root root 4096 2014-11-25 14:45 t1
-rw-rw-rw- 1 root root 0 2014-11-25 14:45 t2
drw-r-xr-- 2 root root 4096 2014-11-25 14:46 t3
=> 하지만 이렇게 변경된 umask 는 현재 열려있는 터미널에서만 먹힌다.(1회성)
이곳의 설정 값을 바꾸면 영구적인 변경이 가능하다.
# vi /etc/profile
58 # By default, we want umask to get set. This sets it for login shell
59 # Current threshold for system reserved uid/gids is 200
60 # You could check uidgid reservation validity in
61 # /usr/share/doc/setup-*/uidgid file
62 if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
63 umask 002
64 else
65 umask 022
[문제]
473 이라는 허가권을 갖는 d3와 f3를 만들기 위한 umask 값은?
=> 304
256 이라는 허가권을 갖는 d4와 f4를 만들기 위한 umask 값은?
=> 521
'Study > CentOS' 카테고리의 다른 글
[16] rpm(1) (0) | 2015.03.28 |
---|---|
[15] gzip, bzip2, tar, man (0) | 2015.03.28 |
[13] 계정 복구, 계정 관련 Trouble Shooting, chown -R (0) | 2015.03.28 |
[12] 소유권, 허가권 실습, ftp 관련 권한 (0) | 2015.03.28 |
[11] 허가권, 소유권, chmod, chown, chgrp (0) | 2015.03.28 |