메뉴 건너뛰기

리눅스 관련 모음

본문시작

조회 수 50855 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

국산 통나무 수공예 남원제기, 남원목기

자료가 도움이 되셨다면
혼수용품제수용품 필요시
남원제기 공식 홈페이지 http://남원제기.kr
남원목기 공식 홈페이지 http://otchil.kr
에서 구매 해 주세요
정성껏 모시겠습니다.
 
실제 예(passwd명령어)로 SetUID, SetGID 이해하기

/etc/passwd 파일은 여러 가지로 보안의 문제점을 가지고 있습니다. 패스워드를 변경하기 위해 사용하는 명령어인 passwd라는 명령어는 /bin/passwd에 명령어 형태로 존재합니다. 물론 이 명령어는 계정을 가지 사용자이면 누구나 사용가능합니다. 다음의 퍼미션을 확인해 보도록 하겠습니다.


패스워드 보관파일

[root@host /root]# ls -l /etc/passwd

-rw-r--r--   1 root   root  1251 Nov 29 14:55 /etc/passwd


패스워드변경 명령어

[root@host /root]# ls -l /usr/bin/passwd

-r-s--x--x  1 root  root  10704 Apr 15  1999 /usr/bin/passwd


위의 예에서 알수 있듯이 계정사용자의 정보를 보관하고 있는 파일인 passwd파일은 거의 대부분 /etc/passwd에 존재하며, 이 파일의 퍼미션은 644입니다. 즉, 누구나 읽어 볼 수는 있습니다. 단 수정가능한 사용자는 이 파일의 소유자인 root만이 가능하지만, 흔히 계정을 가진 사용자라면 누구나 이파일에 있는 자신의 패스워드를 변경가능하지 않은가? 이상하지 않습니까?

이것의 비밀은 setuid라는 것에 있습니다.

setuid를 설명하기 전에 유닉스시스템에서 명령어가 실행되는 절차를 확인해 보겠습니다.


2. 명령어 실행절차

일반적으로 시스템사용자가 명령어를 실행시켰을 때 명령어를 찾아서 실행시키는 경로와 절차는 다음과 같습니다.

  1. 현재 작업디렉토리에서 찾음.
  2. $PATH에서 찾음
  3. 찾은후에 실행권한 체크
  4. 권한이 있다면 실행시킨 사용자의 UID로 실행
  5. 권한이없다면 이 파일이 Setuid bit가 있는가를 확인
  6. Setuid bit가 있다면 명령어 소유주의 UID(Effective UID)로 실행

3. SetUID 파일 찾기

일반적으로 시스템에서 SetUID로 실행가능한 명령어는 몇 개로 제한이 되어있습니다. 이미 설정되어있는 명령어외에 새롭게 생성된 SetUID파일(명령어)가 있나를 정기적으로 체크해보셔야합니다.

다음과 같은 find 명령어로 SetUID파일을 찾아보시기 바랍니다.

[root@host /root]# find / -user root -perm -4000 -print -xdev

/bin/login
/bin/su
/bin/mount
/bin/umount
/bin/ping
/sbin/pwdb_chkpwd
/sbin/dump
/sbin/restore

그리고 /usr/bin/passwd라는 명령어의 퍼미션정보를 보면 s라는 것이 있습니다. 이것이 setuid bit입니다.

일반사용자가 자기의 패스워드를 변경하기 위해 "passwd"라는 명령어를 사용했을 때는 s라는 퍼미션(SetUID 퍼미션) 때문에 root권한으로 실행이 되는 것입니다. 따라서 /etc/passwd파일이 root소유임에도 불구하고 일반사용자가 변경이 가능하게 되는 것입니다.

그런데, 해커들은 바로 이런 SetUID퍼미션이 설정되어 있으면서 root소유로 되어있는 명령어들을 해킹에 이용하게되며 가장 대표적인 명령어가 passwd라는 명령어입니다.

즉, 다시말씀드려서 passwd라는 명령어가 실행이 될 때 root 권한으로 /etc/passwd내용을 변경하게되는데 바로 이싯점에 즉 root권한으로 실행이 되고 있을 때에 정규적인 작업만을 하게하는 것이 아니라 자기가 목적하는 악의적인 작업까지 하게 만드는 것입니다.


4. SetUID 파일 설정하기

일반적으로 파일퍼미션은 "chmod 777 파일이름"등과 같이 숫자로 지정하는 것이 일반적입니다.

하지만 SetUID를 지정할 때에는 이 3자리숫자앞에 SetUID퍼미션을 하나더 사용하면 됩니다.

[root@hlxsvr /imsi]# ls -l
-rw-r--r--  1 root   root        0 Oct 27 14:06 testfile

[root@hlxsvr /imsi]# chmod 4755 testfile
[root@hlxsvr /imsi]# ls -l
-rwsr-xr-x    1 root     root            0 Oct 27 14:06 testfile*


5. SetUID, SetGID, Sticky-bit

SetUID설정을 할 때와 마찬가지로 퍼미션의 3자리숫자앞에 2또는 1을 함께입력하면 SetGID와 Sticky-bit을 설정할 수 있습니다.

4000 : SetUID설정

2000 : SetGID설정

1000 : Sticky-bit설정

참고로 Sticky-bit설정은 대부분 /tmp 디렉토리에 설정되어 있는데, 가장 흔한 용도는 공용디렉토리로 사용하기 위한 것입니다.  즉, Sticky-bit로 설정된 디렉토리는 모든 사용자가 write가능하며 write된 파일은 그 사용자의 소유되 됩니다. Sticky-bit 때문에 가능한 것이지요. 물론 삭제할 수 있는 권한또한 root와 해당사용자만이 가능합니다.

따라서 사용자들에게 공용으로 사용될 디렉토리를 Sticky-bit로 설정해두면 이런 것들이 가능하게 됩니다.

 

출처: http://www.superuser.co.kr/



   

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
30 유동아이피를 고정아이피로 만들기 햇빛소년 2011.06.20 38719
29 내년부터 시험없이 국가기술자격 딴다 햇빛소년 2011.05.19 40864
28 공기정화 식물을 키워라! 햇빛소년 2011.05.19 37154
27 Iptables 간략 사용하기 햇빛소년 2011.05.12 65944
» 실제 예(passwd명령어)로 SetUID, SetGID 이해하기 햇빛소년 2011.05.12 50855
25 서버설치후 해야할 일 file 햇빛소년 2011.05.12 44490
24 리눅스 시스템정보 알아내기 file 햇빛소년 2011.05.12 48326
23 리눅스 관리자가 알아두어야 할 50가지 햇빛소년 2011.05.12 62173
22 crontab 설정 햇빛소년 2011.05.12 45481
21 ssh로 특정 ip접근 hosts.deny 자동 추가 햇빛소년 2011.05.12 45672
20 [1원짜리 팁] hosts.deny 햇빛소년 2011.05.11 51812
19 sendmail + dovecot 설정 file 햇빛소년 2011.05.11 42860
18 MySQL에러[Warning] IP address '211.154.154.171' could not be resolved: no reverse address mapping. 햇빛소년 2011.05.09 51831
17 Linux Disable Core Dumps file 햇빛소년 2011.05.02 47024
16 Mail Server 구축(postfix, dovecot, amavisd-new, spamassassin, clamav) file 햇빛소년 2011.05.02 96990
15 httpd 스크립트 - /etc/rc.d 햇빛소년 2011.05.01 52246
14 파이프, 필터, 리다이렉션 햇빛소년 2011.04.16 48887
13 SURBL을 이용해 스팸 정확도 극대화하기 file 햇빛소년 2011.04.14 51368
12 spamassassin /320.pre -> Rule2XSBBody 체크시 에러 해결법 햇빛소년 2011.04.13 48471
11 rndc: connection to remote host closed 네임서버오류 햇빛소년 2011.04.10 55764
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 Next
/ 10