스티키 비트

Linux : 2007.03.11 09:38

Sticky bit
 
스틱키비트가 걸려있는 대표적인 곳은 /tmp디렉토리 이구요.. 여러 사용자가 같이 사용하는 디렉토리에는 스틱키비트가 필요합니다.
 
왜냐하면..음~ 이건 디렉토리의 퍼미션에 대한 이해가 있어야하는건데.. 아신다고 생각하고 간단히 말하겠습니다.
 
예를들어 어떤 계정이던.. 홈 디렉토리를 보면 계정사용자에게 rwx관한이 주어져 있습니다. 그럼 그 디렉토리에 root가 파일을 하나 만들었다고 가정합니다. 퍼미션은 _rw_r__r__ 이렇게요...
 
퍼미션대로면 root이외에는 지울 수가 없죠..하지만 그 계정의 사용자는 그 파일을 지울 수가 있습니다. 파일을 지우는건 파일보다 디렉토리의 퍼미션이 우선하기 때문입니다.(디렉토리 퍼미션중에 쓰기가 들어가 있기때문)
 
그렇다면 여러사용자가 공동작업을 하는 디렉토리의 경우..
사용자들이 파일을 작성할 수 있도록 디렉토리의 권한을 만들어줘야 하죠.. 하지만 이렇게 되면 동시에 다른 사용자의 파일도 지울수 있게 되는겁니다.
 
이럴때 스틱키비트를 걸어주면 파일을 작성할수는 있지만 남의 파일을 지울 수는 없게되는겁니다.
 
스틱키비트의 설정법은 절대모르방법만 말씀드리겟습니다.
chmod 777 abc --> 이렇게 절대모드로 퍼미션을 줄때 항상 숫자 3자리만 사용했죠..
 
스틱키비트를 설정할때는 앞에 한자리가 추가됩니다.
chmod 1777 abc 요렇게요..
 
여기서 제일 앞자리를 계산하는법은,
4는 setuid, 2는 setgid, 1은 sticky bit입니다.
(setuid와 setgid에 대해서는 다른문서를 찾아보세요~~)
 
마지막으로 퍼미션을 볼때 소문자 t로 되어있는것과 대문자T로 되어있는 경우가 있는데.. t가 보이는 부분이 원래 타인의 실행권한을 보여주는 자리이죠.. 그런데 t가 있어서 실행권한이 있는건지 없는건지 구별을 못하게되죠.. 그래서 소문자 대문자를 쓰는데요..
 
대문자로 보이는 경우는 실행권한이 없을때구요, 소문자로 보이는 경우는 실행권한이 있을때입니다.
 
 

리눅스활용 (보안SUID SGID STID)

suid나 sgid는 루트가 아닌 사용자들이 잠깐 루트의 사용권한을 써서 프로그램을 실행해야할 필요가 있을 때 주는 권한 설정이다.

(1). SUID는 절대표기 값은 4000이다 일반사용자가 소유자 권한으로 실행할 수 있도록 하는 것 보안상 문제가 있기 때문에 조심해서 사용하여야 한다.

(2). SGID는 절대표기 값은 2000 일반사용자가 소유그룹의 권한을 실행할 수 있도록 하는 것 파일 적용이 되면 다른 그룹이 소유그룹의 권한으로 파일을 실행하는 것과 같다.

(3). STICKY BIT는 모든 사용자가 쓸 수 있는 디렉토리를 적용하여 디렉토리 내에 있는 파일을 임의대로 삭제할 수 없고, 오직 소유자에게만 삭제, 변경 권한이 있다. 리눅스에서는 /tmp 디렉토리가 대표적 인 stick bit로 설정이 되어있다.

먼저 sticky bit부터 알아본다. 이 파일을 알아보기 위해선 다음과 같이 입력해보라.

#ls -dl /tmp의 경우 소유자와 소유그룹이 root로 되어있더라도 다른 사용자가 읽고 쓰고 할 수 있다.

왜냐하면 퍼미션이 t로 되어있기 때문이다. 이temp폴더는 임시저장장소로 윈도우즈의 임시저장장소와도 같다고 볼 수 있다.

먼저 예제로 통해 퍼미션에 대해 알아보자.

ex)먼저 root로 접속을 한다.

root#cd /temp 안에서 파일을 하나 만든다.

temp#touch file1

#su (다른 계정으로 접속을 해보라.)

#rm -rf file을 해보라 그럼 지워지지 않을 것이다. 이것은 퍼미션 마지막에 t 때문이다.

4자리 퍼미션 계산법을 알아보자. (- : 파일 , d : 디렉토리)

구분

소유자(user)

소유그룹(group)

타인(other)

-

d

r

w

x

r

w

x

r

w

x

.

.

읽기

쓰기

실행

읽기

쓰기

실행

읽기

쓰기

실행

..

..

4

2

1

4

2

1

4

2

1

.

.

.

s

.

.

s

.

.

s

.

4자리값

.

4

4

.

2

2

.

1

1

..

7

7

7

rws/rwx/rwx ->요렇게 될 경우 퍼미션이 4777이 된다.........소유자실행파일이 x ->가 s로바뀌었다.

이것은 SUID가 설정됐다는 것이 된다. 그리므로 퍼미션777에서 s는 r같은 4로 인식을 한다. 그리고 가장 앞에 붙는다. 그러므로 4777이된다. 만약 SGID가 설정되었다면 2가붙는다 즉 2777이 된다. 그리고 타인에 T란 퍼미션이 붙는다면 1이 추가되어 1777이 된다.

구분

소유자(user)

소유그룹(group)

타인(other)

suid

sgid

stick

r

w

x

r

w

x

r

w

x

실행

실행

실행

읽기

쓰기

실행

읽기

쓰기

실행

읽기

쓰기

실행

4

2

1

4

2

1

4

2

1

4

2

1

.

.

.

.

s

.

.

s

.

.

s

.

.

.

.

.

4

4

.

2

2

.

1

1

..

7

7

7


퍼미션이 ex) s/rwx/rwx/rwx 이것은 잘못된 예이다. 퍼미션은 각 실행파일에 붙는다.

즉 rws/rwx/rwx 요렇게 붙는다.s는 x가 있다는 가정하에 그곳에 s가붙는다. 

그럼 이제 4자리 퍼미션으로 변경하여 보자.

ex)#root /admin 방안에 파일을 만들어서 chmod를 적용하여보자.........

퍼미션계산법은 휴우......................음 한번해보세용 요렇게 만들어보세요.

ex) r-s/rwg/r-t ->/4+2+1/4+1/4+2+1/4+1/->퍼미션이 7575가된다......

참고로 추가를 할려면 다음과 같이 하면된다.

chmod u+s 파일이름 -> suid를 적용한다는 뜻이다. (u -> user)

chmod u-s 파일이름 -> suid를 적용해제 시키겠다는 뜻이다. (u -> user)

chmod g+s 파일이름 -> sgid를 적용하겠다는 뜻이다. (g -> group)

chmod g-s 파일이름 -> sgid를 적용해제 시키겠다는 뜻이다. (g -> group)

chmod o+t 파일이름 -> stick bit를 적용시키겠다는 뜻이다. (o -> other)

chmod o-t 파일이름 -> stick bit를 적용 해제시키겠다는 뜻이다. (o -> other)


suid, sgid, sticky 박탈하기

요번명령을 실행하는 것은 보안상 불가피한 파일은 위의 퍼미션을 해제하는 것이 좋다.

그렇기 때문에 아래와 같은 작업과정을 거쳐서 퍼미션을 박탈한다는 것이다.

모든 파일의 퍼미션을 박탈한다는 것은 아니다. 꼭 퍼미션이 적용해야만 될 파일을 제외하고는

모두 박탈한다.

이번엔 퍼미션 파일찾기 명령을 실행하여보자.

각각 sgid, suid ,stickybit 가 적용된 파일을 찾기 위해선 다음과 같이하면 된다.

#find / -perm -04000 >setuid.txt

#find / -perm -02000 >setgid.txt

#find / -perm -01000 >sticky.txt

각각 다른창으로 실행을 하면 각각에 대한 정보가 txt로 입력이 된다.

만약을 위해서 같은 파일을 하나씩 복사해 놓는다.

각각에 파일을 모두다 적용이 되면 #vi setuid.txt를 적용시키고 연다.

setuid.txt 에서 기본적으로 위 퍼미션을 적용해야 될 파일은 다음과 같다.


/usr/bin/procmail

/usr/sbin/sendmail

/usr/bin/passwd

/bin/su

파일들을 찾아서 .txt안에 라인들을 일단 삭제한다.

다음은 삭제한 파일을 제외한 나머지 파일을 한꺼번에 퍼미션해제 한다.

#cat setuid.txt |xargs chmod u-s 요렇게 치면 전체가 한꺼번에 퍼미션이 해제된다.

(반대로 추가한다면 u-s , u+s로 해주면된다.

setgid.txt의 경우는 다음과 같다.

/usr/bin/procmail

/usr/sbin/sendmail

파일들을 찾아서 .txt안에 라인들을 일단 삭제한다. (그런데 파일이 있을수도 없을수도 있다)

#cat setgid.txt |xargs chmod g-s 라적용하면 된다.

(반대로 추가한다면 g-s , g+s로 해주면된다.)

stick key역시 위와 동일하다.

다음은 제대로 적용이 되었는지 한번 확인을 해본다.

#find / -perm -02000 라 입력하고 다시찾아본다.

'Linux' 카테고리의 다른 글

리눅스보안 - 필수 보안 조치법  (0) 2007.03.11
스티키 비트  (0) 2007.03.11
ext3 파일 시스템  (0) 2007.03.11
리눅스 파일 시스템에 관련된 질문입니다.  (0) 2007.03.11
Posted by Real_G