퍼미션에 대하여 보안SUID SGID STID

No. 31 | 작성자 : 관리자 | 작성일 : 2007/03/13 19:13


보안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 라 입력하고 다시찾아본다.


다른계정에서 파일 받기 와 지우기........

다른곳에서 원격접속시 telnet 자기자신의 계정안에서 자신의 파일을 지우기 위해선 !rm 파일명dmf 사용한다.(!란 자기자신의 파일이란 뜻이다.)

다른계정에서 파일받기

우선파일을 받을 디렉토리에서 ftp로 접속을 한다.
ftp 211.x.x.x
아이디 : 입력(su를 사용할 수 있는 id로 입력을 한다.)
pass -> xxxx입력
접속이 되면 다운받을 디렉토리로 이동을 하여
#get 파일명을 입력하면 자기계정으로 파일이 복사된다.

ls -al /etc/passwd
ls -al /etc/shadow -> shadow파일 실행시 * 가붙은 것은 접속이 불가능한 것을 말한다.
telnet으로 *로 된 것을 접속하면 접속이 되질 않는다.

* 가 붙지 않은 것은 바로 telnet접속이 가능하다 즉암호없이 접속이 가능하다는 것이다.
* 가 붙지 않은 것은 *를 붙인다면 조금은 안전하다고 할 수 있다.

#pwunconv /etc/shadow라치면 암호화된 shadow파일들이 /etc/passwd파일안에 암호화된파일이
적혀나온다....이 암호화된 파일은 해커들이 볼 수 있다. 그러므로 가급적이면 사용하지 않는다.
다시 shadow로 되돌리려면 pwconv치면 원래 자기자리로 되돌아간다.

이올린에 북마크하기(0) 이올린에 추천하기(0)
2007/03/13 19:13 2007/03/13 19:13
TAG

트랙백 주소 :: http://tc.kimsaem.net/kimsaem/trackback/31

따뜻한 댓글 부탁드립니다. 포스트 내용과 관련 없는 댓글은 방명록을 이용해 주세요~! (^_^/)