2007년 3월 13일 화요일

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

보안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치면 원래 자기자리로 되돌아간다.

댓글 없음:

댓글 쓰기