사용자들이 파일을 작성할 수 있도록 디렉토리의 권한을 만들어줘야 하죠.. 하지만 이렇게 되면 동시에 다른 사용자의 파일도 지울수 있게 되는겁니다.
chmod 777 abc --> 이렇게 절대모드로 퍼미션을 줄때 항상 숫자 3자리만 사용했죠..
chmod 1777 abc 요렇게요..
4는 setuid, 2는 setgid, 1은 sticky bit입니다.
(setuid와 setgid에 대해서는 다른문서를 찾아보세요~~)
리눅스활용 (보안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 |
---|---|
ext3 파일 시스템 (0) | 2007.03.11 |
리눅스 파일 시스템에 관련된 질문입니다. (0) | 2007.03.11 |