RSS구독하기:SUBSCRIBE TO RSS FEED
즐겨찾기추가:ADD FAVORITE
글쓰기:POST
관리자:ADMINISTRATOR
'set-bit'에 해당되는 글 1

출처 : 대전국제IT교육센터 정성재 강사

 

1. 개요
일반적으로 유닉스에서는 3계층(사용자, 그룹, 기타사용자)에 3가지권한(읽기, 쓰기, 실행)를 부여
한다. 쉬운 방법으로 8진수방법을 많이 이용하는 데 'chmod 755 a.out'라 하면 사용자에게는 모든
권한를 부여하고, 그룹사용자와 기타 사용자는 읽기와 실행권한만 부여한다. 이런 방법이 일반적이
지만 사실은 8진수 4자리를 이용한다.

2. 8진수를 이용한 허가권
(1) 4개의 8진수를 이용한 허가권표
  

8진수의 값 8진수 1번째자리 8진수 2번째자리 8진수 3번째자리 8진수 4번째자리
4 set-UID r r r
2 set-GID w w w
1 sticky-bit x x x
  Special User group Others


(설명) 첫번째 8진수는 특수 허가권 설정에 사용되고, 두번째는 파일의 소유자에 대한 허가권, 세번
       째는 그룹에 대한 허가권, 네번째는 나머지 모든 사용자에 대한 허가권을 설정하는 데 사용된
       다. 보통 사용시에는 첫번째인 특수허가권이 빠지고, 3자리만으로 소유권을 부여하는 데 이런
       경우에는 특수허가권에 대한 값이 0이다.

(2) 허가권 값의 예
   1) 0400 => 파일의 소유자에게 읽기(r)만을 허가함. 400과 동일하다.
   2) 0755 => 파일의 소유자에게는 읽기, 쓰기, 실행권한을 부여하고, 나머지 모든 사용자에게는
          읽기와 실행권한만을 부여함 755와 동일하다.
   3) 4755 => set-UID 허가권이 지정되어 있다는 점을 제외하고는 755와 동일함. set-UID허가권을
             가진 파일을 실행할 경우 프로세스는 이 프로세스를 실행한 사용자의 권한이 아니라,
             파일 소유자와 동등한 권한을 가지게 된다. 따라서, 소유자가 루트이고 파일이 set-UID
             허가권이 있으면 이 파일을 실행시킬 수 있는 사람은 누구라도 슈퍼유저의 권한을 가진
             다. set-UID는 보안상의 허점이 발견될 수 있으니 지정시 주의해야 한다.
   4) 2755 => 755와 비슷하지만 set-GID허가권이 설정되어 있다는 점이 다르다. set-GID 허가권을
             가진 파일이 실행되면 그 파일의 그룹이 가지는 모든 권한을 가지게 된다.
   5) 1755 => 755와 비슷하지만 sticky-bit를 지정한다는 점이 다르다. sticky-bit는 프로그램의
             실행이 종료된 뒤에도 실행코드를 계속해서 메모리에 남겨두어 다음번에 그 프로그램을
             다시 실행시킬 때 상대적으로 실행속도를 빠르게 하는 역할을 하고 공식적으로는 텍스
             트모드저장 허가로 알려져 있다. 실질적으로는 공유모드로 사용된다.

3. 문자열을 이용한 허가권
(1) 문자열을 이용한 허가권표

set-UID(s) read(r) read(r) read(r)
set-GID(s) write(w) write(w) write(w)
sticky-bit(t) excute(x) excute(x) excute(x)
Special User(u) Group(g) Others(o)


   (설명) 허가권을 각각 u(사용자), g(그룹), o(다른 사용자) 또는 a(all=전체)로 허가권을 부여
         한다. 또한 허가권을 r(읽기), w(쓰기), x(실행), s(set-UID 또는 set-GID), 또는
         t(sticky-bit)로 부여한다. 허가권 부여의 기호는 +로, 허가권의 회수는 -를 사용한다.
(2) 사용예
   chmod a+rw * => 모든 사용자에게 현재 디렉토리의 모든파일에 대하여 읽기와 쓰기권한을 부여함.
   chmod a+rx,u+w a.out => a.out이라는 파일에 대해 모든 사람에게 읽기와 쓰기권한을 부여하고,
                          소유자에게는 쓰기권한까지 부여한다.
   chmod u+s aa => aa라는 파일에 set-UID를 지정한다.
   chmod g+s aa => aa라는 파일에 set-GID를 지정한다.

4. Set-Bit 이해하기
(1) Set-Bit : Set-Bit란 기본권한이외에 특수한 목적을 위해 부여되는 특수권한이다. Set-Bit에는
              Set-UID, Set-GID, Sticky Bit이 있으며, 이러한 권한은 시스템운영에 꼭 필요하지만
              보안상의 위험을 초래할 수 있으므로 정확한 이해가 필요하다.

(참고1) 'ls -l'을 이용한 파일의 종류확인하기
  보통 'ls -l' 명령을 내리면 다음과 같이 나온다.
   -rwxrw-r--    1 posein   posein         95  4월  9 15:13 a.out
  파일의 권한과 관련된 부분이 -rwxrw-r--이다. 처음 -부분이 파일의 종류를 나타내는 것이다.
    - : 일반파일
    d : 디렉토리
    l : 링크파일
    b : 블럭디바이스(디스크 드라이버)
    c : 캐릭터 디바이스(입출력 관련 특수 파일)
    P : 네임드 파이프
    s : 소켓

(2) set-UID가 부여된 파일을 살펴보기
   1) 설명: Set-UID가 설정된 파일로는 passwd명령이 있다. 이 명령은 보통 패스워드를 변경하는
          명령이다. 이 명령어를 가지고 Set-bit에 대해 알아보자.
   2) 예
    ㄱ. [root@www bin]# cd /usr/bin 한다.
    ㄴ. [root@www bin]# ls -l passwd
        -r-s--x--x    1 root     root        15368  5월 29  2002 passwd
         => 살펴보면 사용자권한의 x자리에 s라는 글자가 있다. 이것이 set-UID가 부여된 것이다.
           이 명령의 소유자는 root이다. 따라서 이 명령어를 실행시킬 수 있는 사람은 root와 동일
          하게 passwd 명령을 이용하는 것이다.
   3) Set-Bit가 필요한 이유
     일반사용자가 자기 자신의 패스워드를 변경한다고 가정하자. 이 경우에 passwd명령으로 패스워
    드변경한 후에 실제적인 기록은 /etc/shadow파일에 변경되어야 한다. 그러나, 일반사용자는
    /etc/shadow파일에 쓰기권한은 물론 읽기권한조차 부여가 되어있지 않다. 이런 경우에는 passwd
    명령을 이용한 순간에는 root권한으로 /etc/shadow라는 파일에 기록할 필요가 있게 된다. 이러한
    이유로 Set-Bit가 필요하다. 보안상 Set-Bit는 위험하지만 꼭 필요한 요소이다.

(3)set-UID를 이용해보기
   1) 설명: Set-Bit가 이해되지 않는다면 와우리눅스 6.2(커널 2.2버전)을 설치하여 다음을 테스트
           해보면 쉽게 이해되리라 생각된다. 현재 리눅스(커널 2.4버전이상)에서는 되지 않는다.
           예전에 백도어(Back Door)로 많이 이용되면 방법이다.
   2) 방법 : 보통 리눅스에서는 bash를 사용한다. 이 bash파일을 이용하여 set-UID를 이용해보자.
    ㄱ. bash의 실행파일이 /bin/bash이므로, /bin디렉토리로 이동하자.
        [posein@house posein]$ cd /bin
    ㄴ. 'ls -l bash' 해본다.
       [posein@house /bin]$ ls -l bash
       -rwxr-xr-x    1 root     root       377960  5월 19  2000 bash*
        => 이 파일의 특성을 살펴보면 소유자는 root이고 실행파일로서 실행권한은 모든 계층에서
          사용가능하게 되어 있다. 다른 것이 있다면 속성은 변경권한은 루트에게만 있다는 것이다.
          이 파일은 모든 사용자들이 로그인과 동시에 사용된다.
    ㄷ. bash파일에 set-UID를 부여해본다. 일단 속성의 변경은 파일의 소유자인 root에게 있으므로
       루트권한을 획득했다고 가정한다.
      [root@house /bin]# chmod u+s bash
    ㄹ. bash파일의 속성을 확인해보자.
       [root@house /bin]# ls -l bash
       -rwsr-xr-x    1 root     root       377960  5월 19  2000 bash*
        => 속성이 바뀌었음을 알 수 있다.
    ㅁ. 이 파일은 모든 사용자들이 사용하는 파일이므로 일반사용자로 로그인해보자. 로그인해보면
       무엇인가 다름을 느낄 수 있다.
       [posein@house posein]#
        => 프롬프트부터 다르다. 리눅스에서 '$'는 일반사용자를 나타내고 '#'은 루트권한자임을
          나타낸다. 리눅스에서 현재접속한 일반사용자는 루트권한자로 처리한다는 것을 알 수 있
          다.
    ㅂ. 명령어를 이용하여 사용자 확인해보자. 먼저, who명령어를 이용해보자.
       [posein@house posein]# who
       posein   pts/0    Jun 25 01:20
        => 접속한 사람은 'posein'이라는 것을 알 수 있다.
    ㅅ. 또 다른 명령인 whoami명령을 이용해보자.
       [posein@house posein]# whoami
       root
        => 루트로 인식함을 알 수 있다.
    ㅇ. 루트의 권한인지 사용해보자.
      파일의 소유자가 루트이고 루트만이 변경가능한 파일인 /etc/inittab파일을 이용하여 테스트해
      보도록 하자.
      [posein@house posein]# vi /etc/inittab
       => 편집을 해보도록 한다. 편집을 시작하자 마자 ex모드 명령줄에서 'Warning: Changing a
         readonly file'라고 경고메시지가 뜬다. 즉 일단은 일반사용자로 인식했기 때문에 읽기전용
         이라는 메시지가 뜬다. 그러나, 무시하고 ':wq!'를 이용하여 저장해보자. 저장이 되서 변경
         됨을 알 수 있다. 즉 루트권한자로서 실행이 가능함을 알 수 있다. 참고로 뛰어난 해커들은
         이런식으로 원본파일에 set-UID속성을 부여하지 않는다. 일단 루트권한을 획득한 뒤 원본파
         일을 다른 이름으로 바꿔서 복사시킨 후에 set-UID를 걸어서 백도어로 사용한다.

(4) sticky bit에 대하여
   1) 설명: sticky bit는 /tmp디렉토리에서 사용되고 있다. 이 디렉토리를 살펴본다.
   2) 방법
    ㄱ. 일단 최상위 디렉토리로 이동해보자.
       [posein@house posein]$ cd /
    ㄴ. 속성의 확인
       [posein@house /]$ ls -l
       drwxrwxrwt    9 root     root         4096  6월 25 01:45 tmp/
        => /tmp디렉토리에 sticky 비트가 설정되어 있음을 알 수 있다. 이 디렉토리에서는 모든
          사용자가 파일이나 디렉토리를 만들고 지울 수 있다. 그러나, 해당파일이나 디렉토리를
          지울 수 있는 것은 그 파일이나 디렉토리의 소유자만 가능한다. 즉 절대로 다른 사람들이
          만든 파일이나 디렉토리등은 지울 수 없다. 그래서 sticky bit를 공유모드라고 한다.

5. umask
(1) 설명 : 새로운 파일 생성시 기본 허가권을 설정하는 명령이다.
(2) 사용법
   umask [option] [값]
(3) option
   -S : umask의 값을 문자로 표기한다.
(4) 사용예
   1) 현재 설정된 umask의 값을 보여준다.
    [posein@house posein]$ umask
    002
   2) 설정된 umask의 값을 문자로 보여줌.
    [posein@house posein]$ umask -S
    u=rwx,g=rwx,o=rx
   3) umask의 값을 바꾼다.
    [posein@house posein]$ umask 022
     => umask의 값을 022로 바꾼다.
   4) 문자값을 이용한 umask의 값 설정
    [posein@house posein]$ umask u=rwx,g=rw,o=rw
  (5) umask값과 기본 허가권과의 관계
    기본적으로 새 파일이 생성되면 보통 0666이라는 허가권을 요청한다. 즉, 모든 사용자에게 실행
   권한을 제외한 모든 권한이 부여된다. 그 후 umask의 설정상태를 참조하여 부여해야 될 권한은
   부여하게 되고 부여하지 않아야 될 권한은 부여하지 않는다. 만약에 umask값이 002라면
   기본값인 0666을 이진수화하면 000 110 110 110 이 되고,
   umask인 002를 이진수화하면  000 000 010이 된다. 여기서 umask값은 역수화 된다. 따라서
   111 111 101이 된다. 기본값과 umask값을 AND연산을 한다.
   000 110 110 110 + 000 111 111 101 = 000 110 110 100 이 된다.
   따라서 생성되는 기본 권한은 'rw-rw-r--'이다.
   (실습) umask값과 기본 권한
     1. 현재 umask값을 확인해 보기
       [posein@house posein]$ umask
       002
     2. 빈 파일을 생성하는 touch 명령으로 파일을 생성한다.
       [posein@house posein]$ touch aaa
     3. 기본 허가권을 확인해본다.
       [posein@house posein]$ ls -l
       -rw-rw-r--    1 posein   posein          0  5월  2 21:24 aaa
       => 기본 권한이 rw-rw-r--인 것을 알 수 있다.
     4. umask값을 변경한다. 022로 변경
       [posein@house posein]$ umask 022
     5. 빈 파일을 생성한다.
       [posein@house posein]$ touch bbb
     6. 기본 허가권을 확인해 본다.
       [posein@house posein]$ ls -l
       -rw-r--r--    1 posein   posein          0  5월  2 23:07 bbb
       => 기본 허가권이 rw-r--r-- 로 바뀐다.

Trackback
Reply
우주곰:지구곰이 아닙니다.
지구곰이 아닙니다.
Categories (190)
Information (5)
About uzoogom (5)
My Advanced Linux (73)
Learning Linux (96)
OperatingSystem (5)
Databases (4)
OpenSource (1)
Tips! (1)
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31