- Unix/Linux 시스템의 공유 디렉터리 설정 및 특수 권한 설정
setuid 설정된 파일은 실행시 소유자의 권한으로 전환
root 만 접근 할 수 있는 파일이나 명령에 대해, 일반 사용자로 접근하는 것이 기능상 필요한 경우
setgid 설정된 파일은 실행시 소유 그룹의 권한으로 전환
일반 파일 그룹의 멤버가 파일 소유자의 그룹과 상관없이 디렉터리 내의 모든 파일에 접근이 필요한 공유 디렉터리에 유용
sticky bit 가 설정된 디렉터리는 퍼미션이 777인 파일의 소유자만이 삭제 가능하며 수정이나 실행 읽기 생성은 모든 사용자에게 허용된다.
핵심은 777퍼미션을 갖는 디렉터리지만 파일을 만든 계정과 root 계정만 삭제 할 수 있다는 점이다.
Unix 시스템은 파일에 대한 권한 및 파일 종류를 나타내기 위해 16bit 를 사용하며 아래와 같은 의미를 가짐
4bit(파일 종류)3bit(특수권한)3bit(소유자 접근권한)3bit(그룹 소유자 접근권한)-3bit(기타 사용자 접근 권한)
이중 2번째 3bit 를 통해 특수권한을 확인하고 부여 할 수 있음
stat 명령어의 Access 항목 및 ls-al 을 확인해보면 파일 시스템 권한 확인가능
$ stat test
File: test
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd01h/64769d Inode: 3408051 Links: 1
Access: (4755/-rwsr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2021-12-21 13:27:50.333437618 +0900
Modify: 2021-12-21 13:27:50.333437618 +0900
Change: 2021-12-21 13:28:34.306955587 +0900
Birth: -
$ ls -al test
-rwsr-xr-x 1 root root 0 Dec 21 13:27 test
$ stat test
File: test
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd01h/64769d Inode: 3408051 Links: 1
Access: (2755/-rwxr-sr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2021-12-21 13:27:50.333437618 +0900
Modify: 2021-12-21 13:27:50.333437618 +0900
Change: 2021-12-21 13:29:12.596275893 +0900
Birth: -
$ ls -al test
-rwxr-sr-x 1 root root 0 Dec 21 13:27 test
$ stat tmp
File: tmp
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: fd01h/64769d Inode: 3670017 Links: 70
Access: (1777/drwxrwxrwt) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2021-12-21 10:50:56.913827436 +0900
Modify: 2021-12-21 13:25:19.664236075 +0900
Change: 2021-12-21 13:25:19.664236075 +0900
Birth: -
$ ls -al test
-rwxrwxrwt 1 root root 0 Dec 21 13:27 test
find /bin /usr/bin /sbin -perm -4000 -o -perm -4000 |xargs ls -l
find /bin /usr/bin /sbin -perm -2000 -o -perm -2000 |xargs ls -l
find /bin /usr/bin /sbin -perm -1000 -o -perm -1000 |xargs ls -l
//setuid
chmod 4755 setuid-prog
//setgid
chmod 2755 setgid-prog
//sticky bit
chmod -R 1777 /opt/mytmp
sticky bit 가 부여된 디렉터리내의 파일을 소유자 및 root 가 아닌 사용자가 수정 및 삭제 하려고 하는 경우 아래와 같이 작업 불가
$ mv test test2
mv: cannot move 'test' to 'test2': Operation not permitted
// setuid 회수
$ chmod u-s filename
// setgid 회수
$ chmod g-s filename
// sticky bit 회수
$ chmod o-t filename name
참고자료