본문 바로가기

Solaris/기술과 팁

Sticky bit


원본 출처 : http://nobless_05.blog.me/50081222489


디렉토리에 주어지는 권한으로

Sticky bit 가 설정된 디렉토리에 있는 파일은 접근 권한과 상관없이 파일의 소유자와 관리자만 파일을 삭제 가능하다.
 
 
 
Sticky bit가 주어진 대표적인 디렉토리 /tmp이다.
 
다른 사용자가 /tmp 디렉토리에 다른 파일을 생성하면 역시 생성한 소유자의 소유로 파일이 생성된다.

파일을 삭제할 때에도 생성한 사람만이 삭제를 할 수가 있다.
 
 
 


-> Others(나머지) 사용자의 퍼미션 값에 실행의 값이 'x'가 아닌 't' 로 되어있다.
 
   즉, sticky bit는 파일의 나머지 사용자의 권한을 나타내는 퍼미션값에 't'기호가 명시되어있다.
 
 
 
ex)#chmod 1755 rick
 
--->rick이라는 폴더에 stick bit를 설정한것이다.

     (1755라는게 1755자체가 sticky bit가 아니고 1이 sticky bit가 되는것이다. 나머지 755는 퍼미션을 의미한다.)
 
 
 
 
 
 
 
<apple login>
 
#cd /tmp
 
#touch test1
 
#ls -al test1
 
 
 
<banana login>
 
#cd /tmp
 
#touch test2
 
#ls -al test2
 
 
 
파일의 퍼미션이 보통 644로 되어있을것이다.(umask값이 다르면 다를수 있음)
 
그런데 apple이 자신이 만든 파일이 아닌 test2 파일을 지울 수 없을것이다.(rm으로 해보면 권한거부 메시지가 뜬다)
 
 
 
당연한 현상인가? 아래의 테스트를 해보자.
 
 
 
<root login>
 
#cd /
 
#chmod 0777 /tmp
 
-> sticky bit을 없애버렸다.
 
 
 
<apple login>
 
#cd /tmp
 
#rm test2
 
-> 삭제가 되었다.
 
 
 
분명 파일의 퍼미션은 644였다. 그런데 삭제가 된 이유는????
 
664 상태이지만 파일의 퍼미션보다 디렉토리의 퍼미션이 우선되기 때문에 다른 계정의 사용자가 지울수 있게 된다.
 
 
 
이렇게 된다면 문제가 생기는 경우가 있다.
 
여러사용자가 사용하는 디렉토리의 경우 사용자들이 파일을 작성,삭제,수정할 수 있도록

디렉토리의 권한을 만들어줘야 하지만 이렇게 되면 다른 사용자의 파일도 삭제가 가능하다.
 
아까 말했듯이 디렉토리의 퍼미션이 파일의 퍼미션보다 우선순위가 높기 때문이다.
 
(파일에 퍼미션을 걸어봐야 디렉토리 퍼미션을 보게 된다는 것이다.)
 
이럴 때 sticky bit를 걸어주면 파일을 작성할 수는 있지만 남의 파일을 지울 수는 없다.
 
 
 
리눅스에서 /tmp 디렉토리가 sticky bit가 설정되어있다.
 
 
 
 
 
 
 
#adduser  banana
#passwd  banana
#ls -l /
 
drwxrwxrwt   12 root root   4096 Jun 10 21:38 tmp
---> sticky bit 가 설정되어 있다.(1777)
 
 
 
*apple로 로그인
$cd  /tmp
$touch  apple.txt
$ll
-rw-rw-r--  1 apple apple    0 12월 12 00:34 apple.txt
 
 
 
*banana로 로그인
$cd  /tmp
$rm apple.txt
--->sticky bit 로 인하여 다른 계정이 만든 파일이 지워지지 않는다.

디렉토리 퍼미션이 777 이라면 다른 계정이 만든 파일을 지울수 있다.
(파일을 삭제할 때는 파일의 w 권한이 적용되는 것이 아니고 그 파일이 속한 디렉토리의 w 권한이 적용된다.

파일의 w 권한은 파일의 내용을 수정할 수 있다는 의미이다.)
 
sticky bit 는 주로 공용 디렉토리(인터넷 게시판)에 설정하며 루트나 파일 소유자만이 해당 파일을 삭제할 수 있다.