Linux 권한 관리 (3) UID 권한 설정, GID 권한 설정, Sticky BIT 권한, chattr 권한 설정

SUID 권한, SGID 권한, SBIT 권한 은 모두 매우 안전 하지 않 은 권한 에 속 합 니 다. 여 기 는 학습 을 이해 하기 위해 서 만 생산 환경 에서 이러한 권한 을 설정 하지 않 습 니 다!
1. UID 권한 설정 (SUID 권한)
1. Set UID 권한 의 제한 과 기능
  • 실행 가능 한 바 이 너 리 프로그램 만 SUID 권한 을 설정 할 수 있 습 니 다 (일반 셸 스 크 립 트 에 유효 하지 않 음)
  • 명령 집행 자 는 이 프로그램 에 대해 집행 (x 권한 을 가진다
  • 명령 집행 자 는 이 프로그램 을 실행 할 때 이 프로그램 파일 의 소유자 신분 을 얻 습 니 다 (프로그램 을 실행 하 는 과정 에서 영혼 부 체 는 파일 의 소유자 입 니 다)
  • SUID 권한 은 이 프로그램 이 실행 되 는 과정 에서 만 유효 합 니 다
  • 2. Set UID 권한 설정 방법
    chmod 4755    
    
    chmod +x,u+s    
    

    TIPS
  • 당초 umask 값 은 0022 이 고, 첫 번 째 는 특수 권한 위 치 를 가리 키 며, 권한 을 설정 할 때 자주 입력 755 644 하 는데, 이 때 는 특수 권한 을 생략 한 것 이다.
  • 파일 일반 권한 앞 에 4 를 추가 하면 SUID 권한 을 나 타 냅 니 다.
  • 파일 이 Set UID 권한 이 있 으 면 파일 소유자 가 대응 하 는 권한 이 rws 로 변 합 니 다.
  • Set UID 권한 을 설정 하려 면 소유자 가 이 파일 의 실행 x 권한 을 가 져 야 합 니 다. 그렇지 않 으 면 파일 소유자 가 대응 하 는 권한 이 rwS 로 변 합 니 다. 이것 은 잘못된 권한 입 니 다.

  • 실례
    [root/tmp/suid]# touch 4755.sh
    [root/tmp/suid]# touch u+s.sh
    [root/tmp/suid]# ll
        4.0K
    -rw-r--r-- 1 root root  0 6    8 09:22 4755.sh
    -rw-r--r-- 1 root root  0 6    8 09:22 u+s.sh
    
    [root/tmp/suid]# chmod 4755 4755.sh
    [root/tmp/suid]# chmod +x,u+s u+s.sh
    [root/tmp/suid]# ll
        4.0K
    -rwsr-xr-x 1 root root  0 6    8 09:22 4755.sh*
    -rwsr-xr-x 1 root root  0 6    8 09:22 u+s.sh*

    3. Set UID 권한 을 취소 하 는 방법
    chmod 0755    
    
    chmod u-s    
    

    실례
    [root/tmp/suid]# ll
        4.0K
    -rwsr-xr-x 1 root root  0 6    8 09:22 4755.sh*
    -rwsr-xr-x 1 root root  0 6    8 09:22 u+s.sh*
    
    [root/tmp/suid]# chmod 0755 4755.sh
    
    [root/tmp/suid]# chmod u-s u+s.sh
    
    [root/tmp/suid]# ll
        4.0K
    -rwxr-xr-x 1 root root  0 6    8 09:22 4755.sh*
    -rwxr-xr-x 1 root root  0 6    8 09:22 u+s.sh*

    4. SUID 권한 을 적용 하 는 시스템 명령
    passwd 명령
  • passwd 명령 은 실제로 /etc/shadow 파일 을 수정 하 였 으 며, 이 파일 의 권한 은 000 입 니 다.이론 적 으로 루트 사용자 만 이 파일 을 수정 할 수 있 는 권한 이 있어 야 합 니 다.
  • [root/tmp/suid]# ll /etc/shadow
    ---------- 1 root root 829 6    8 02:21 /etc/shadow
  • passwd 는 SUID 권한 을 가지 고 있 으 며 일반 사용자 가 passwd 명령 을 실행 할 때 신분 이 자동 으로 루트 로 전환 되 기 때문에 일반 사용 자 는 자신의 비밀 번 호 를 수정 할 수 있 습 니 다.
  • [root/tmp/suid]# ll /usr/bin/passwd
    -rwsr-xr-x. 1 root root 28K 6   10 2014 /usr/bin/passwd*

    다른 일반적인 SUID 권한 을 가 진 명령 (파일)
    find / -perm -4000
    
    /usr/bin/mount
    /usr/bin/su
    /usr/bin/chsh
    /usr/bin/chage
    /usr/bin/gpasswd
    /usr/bin/newgrp
    /usr/bin/chfn
    /usr/bin/umount
    /usr/bin/pkexec
    /usr/bin/crontab
    /usr/bin/sudo
    /usr/bin/passwd
    /usr/sbin/pam_timestamp_check
    /usr/sbin/unix_chkpwd
    /usr/sbin/usernetctl
    /usr/sbin/mount.nfs

    5. 위험한 Set UID
  • 관건 적 인 디 렉 터 리 는 쓰기 권한 을 엄 격 히 통제 해 야 한다.예 를 들 어 /, /usr 등 이다.
  • 시스템 에 기본 으로 있어 야 할 Set UID 권한 의 파일 을 목록 으로 만 들 고 다른 파일 이 Set UID 권한 을 부 여 받 았 는 지 정기 적 으로 확인 합 니 다.

  • SUID 나 SGID 권한 이 있 는 모든 파일 보기
    find / -perm -4000 -o -perm -2000

    SUID, SGID 권한 의 스 크 립 트 검사
    #!/bin/bash
    
    find / -perm -4000 -o -perm -2000 > /tmp/setuid.check
    
    for i in $(cat /tmp/setuid.check)
        do
            grep $i /home/suid.log> /dev/null
    
            if [ "$?" != "0" ]
                then
                echo "$i isn't in listfile!">>/home/suid_log_$(date +%F)
            fi
        done
    
    rm -rf /tmp/setuid.check

    2. GID 권한 설정 (SGID 권한)
    1. Set GID 파일 에 대한 역할
  • 실행 가능 한 바 이 너 리 프로그램 만 SGID 권한 설정
  • 명령 집행 자 는 이 프로그램 에 대해 집행 권한 x 을 가 져 야 한다
  • 명령 집행 자가 프로그램 을 실행 할 때 그룹 신분 이 이 프로그램 파일 의 소속 그룹 으로 업그레이드
  • Set GID 권한 은 프로그램 실행 중 에 만 유효 합 니 다
  • 2. Set GID 디 렉 터 리 에 대한 역할
  • 일반 사용 자 는 이 디 렉 터 리 에 rx 권한 을 가 져 야 이 디 렉 터 리 에 들 어 갈 수 있 습 니 다.
  • 일반 사용자 가 이 디 렉 터 리 에 있 는 유효한 그룹 은 이 디 렉 터 리 의 그룹 으로 변 합 니 다.
  • 일반 사용자 가 이 디 렉 터 리 에 w 권한 을 가지 고 있다 면 새 파일 의 기본 그룹 은 이 디 렉 터 리 의 그룹 입 니 다.

  • 3. Set GID 설정
    chmod 2755    
    
    chmod +x,g+s    
    

    TIPS
  • 파일 일반 권한 앞 에 2 를 추가 하면 SGID 권한 을 대표 합 니 다.
  • 파일 에 SGID 권한 이 있 으 면 파일 소속 그룹 에 대응 하 는 권한 이 rws 로 변 합 니 다.
  • SGID 권한 을 설정 하려 면 해당 파일 의 실행 x 권한 이 소속 그룹 에 있어 야 합 니 다. 그렇지 않 으 면 파일 소속 그룹 에 대응 하 는 권한 이 rwS 로 바 뀌 고 이 는 무효 권한 입 니 다.

  • 실례
  • 새 파일 file 을 만 듭 니 다. x 실행 권한 이 없 으 면 SGID 권한 을 직접 설정 하면 그룹 권한 이 r-S 으로 변 경 됩 니 다. 이 권한 은 사용 할 수 없습니다
  • [root/tmp/sgid]# touch file
    [root/tmp/sgid]# chmod g+s file
    
    [root/tmp/sgid]# ll
        0
    -rw-r-Sr-- 1 root root 0 6    8 10:44 file
  • file 파일 에 실행 권한 을 추가 하고 정상 적 인 SUID 권한 으로 변경
  • [root/tmp/sgid]# chmod +x file
    
    [root/tmp/sgid]# ll
        0
    -rwxr-sr-x 1 root root 0 6    8 10:44 file*
  • 디 렉 터 리 dir 를 만 들 고 권한 을 2777 로 변경 합 니 다 (일반 사용자 가 이 디 렉 터 리 에서 파일 을 만 들 수 있 도록)
  • [root/tmp/sgid]# chmod 2777 dir/
    [root/tmp/sgid]# ll
        0
    drwxrwsrwx 2 root root 6 6    8 10:48 dir/
  • 일반 사용자 vagrant 로 전환 하여 dir 디 렉 터 리 에서 파일 을 만 듭 니 다. 이 를 통 해 파일 소속 그룹 은 root (dir 소속 그룹)
  • 입 니 다.
    [vagrant/tmp/sgid/dir]$ touch file
    [vagrant/tmp/sgid/dir]$ ll
        0
    -rw-rw-r-- 1 vagrant root 0 6    8 10:52 file

    4. GID 설정 취소
    chmod 0755    (         )
    
    chmod g-s    
    

    실례
  • chmod 0755 파일 에 유효 하지만 폴 더 에 유효 하지 않 은 것 같 습 니 다
  • [root/tmp/sgid]# ll
        0
    drwxrwsrwx 2 root root 6 6    8 10:48 dir/
    -rwxr-sr-x 1 root root 0 6    8 10:44 file*
    
    [root/tmp/sgid]# chmod 0755 dir/
    [root/tmp/sgid]# chmod 0755 file
    
    [root/tmp/sgid]# ll
        0
    drwxr-sr-x 2 root root 17 6    8 10:52 dir/
    -rwxr-xr-x 1 root root  0 6    8 10:44 file*
  • chmod g-s 파일 과 폴 더 에 모두 유효 합 니 다
  • [root/tmp/sgid]# ll
        0
    drwxrwsrwx 2 root root 6 6    8 10:57 dir/
    -rwxr-sr-x 1 root root 0 6    8 10:44 file*
    
    [root/tmp/sgid]# chmod g-s dir/
    [root/tmp/sgid]# chmod g-s file
    
    [root/tmp/sgid]# ll
        0
    drwxrwxrwx 2 root root 6 6    8 10:57 dir/
    -rwxr-xr-x 1 root root 0 6    8 10:44 file*

    5. SUID 권한 을 적용 하 는 시스템 명령
    locate 명령
  • locate 명령 은 실제로 /var/lib/mlocate/mlocate.db 파일 을 조회 하고 이 파일 의 권한 은 640 입 니 다.이론 적 으로 일반 사용 자 는 이 파일 을 찾 아 볼 권한 이 없다.
  • [root/tmp/sgid]# ll /var/lib/mlocate/mlocate.db
    -rw-r----- 1 root slocate 2.4M 6    8 03:20 /var/lib/mlocate/mlocate.db
  • locate 는 SGID 권한 을 가지 고 있 으 며, 일반 사용자 가 locate 명령 을 실행 할 때 그룹 신분 은 자동 으로 slocate 로 전환 되 며, slocate 그룹 은 /var/lib/mlocate/mlocate.db 파일 을 읽 을 수 있 는 권한 이 있 기 때문에 일반 사용 자 는 locate 명령 으로 파일 을 검색 할 수 있 습 니 다.
  • [vagrant/tmp/sgid/dir]$ ll /usr/bin/locate
    -rwx--s--x 1 root slocate 40K 4   11 03:46 /usr/bin/locate*

    SGID 권한 을 가 진 다른 일반적인 명령 (파일)
    
    find / -perm -2000
    
    /usr/bin/wall
    /usr/bin/lockfile
    /usr/bin/write
    /usr/bin/ssh-agent
    /usr/bin/locate
    /usr/sbin/netreport
    /usr/sbin/sendmail.sendmail
    /usr/libexec/utempter/utempter
    /usr/libexec/openssh/ssh-keysign

    3. Sticky BIT (SBIT 권한)
    1. SBIT 접착 위치 작용
  • 접착 위 치 는 현재 디 렉 터 리 에 만 유효 합 니 다
  • 일반 사용 자 는 이 디 렉 터 리 에 w 와 x 권한 을 가지 고 있 습 니 다. 즉, 일반 사용 자 는 이 디 렉 터 리 에 쓰기 권한 이 있 습 니 다
  • 붙 어 있 지 않 으 면 일반 사용자 가 w 권한 을 가지 고 있 기 때문에 이 디 렉 터 리 에 있 는 모든 파일 을 삭제 할 수 있 습 니 다. 다른 사용자 가 만 든 파일 을 포함 합 니 다.루트 를 제외 한 모든 파일 을 삭제 할 수 있 는 접착 위 치 를 부여 합 니 다. 일반 사용 자 는 w 권한 이 있어 도 자신 이 만 든 파일 만 삭제 할 수 있 습 니 다.
  • 다른 사용자 가 만 든 파일 은 삭제 할 수 없습니다.
    SBIT 가 있 는 디 렉 터 리 를 손 으로 만 드 는 것 을 권장 하지 않 습 니 다.
    2. SBIT 설정
    chmod 1755    
    
    chmod o+t    
    

    TIPS
  • 파일 일반 권한 앞 에 1 를 추가 하면 SBIT 권한 을 나타 낸다.
  • 파일 에 SGID 권한 이 있 으 면 파일 소속 그룹 에 대응 하 는 권한 이 rwt 로 변 합 니 다.

  • 실례
  • 생 성 dir_1755dir_o+t 두 디 렉 터 리 에 각각 SBIT 권한 부여
  • [root/tmp/sbit]# mkdir dir_1755
    [root/tmp/sbit]# mkdir dir_o+t
    [root/tmp/sbit]#
    [root/tmp/sbit]#
    [root/tmp/sbit]# chmod 1755 dir_1755/
    [root/tmp/sbit]# chmod o+t dir_o+t/
    [root/tmp/sbit]# ll
        0
    drwxr-xr-t 2 root root 6 6    8 11:34 dir_1755/
    drwxr-xr-t 2 root root 6 6    8 11:34 dir_o+t/

    3. SBIT 취소
    chmod 0755    
    
    chmod o-t    
    

    실례
    [root/tmp/sbit]# ll
        0
    drwxr-xr-t 2 root root 6 6    8 11:34 dir_1755/
    drwxr-xr-t 2 root root 6 6    8 11:34 dir_o+t/
    
    [root/tmp/sbit]# chmod 0755 dir_1755/
    [root/tmp/sbit]# chmod o-t dir_o+t/
    
    [root/tmp/sbit]# ll
        0
    drwxr-xr-x 2 root root 6 6    8 11:34 dir_1755/
    drwxr-xr-x 2 root root 6 6    8 11:34 dir_o+t/

    4. SBIT 권한 을 적용 한 시스템 디 렉 터 리
    /tmp 디 렉 터 리
  • /tmp 디 렉 터 리 는 실제 777 권한 을 가지 고 있 으 며, 정상 적 인 경우 에는 모든 사용자 가 디 렉 터 리 에 있 는 파일
  • 을 삭제 할 수 있다.
    [root/tmp/sbit]# ll -d /tmp
    drwxrwxrwt. 12 root root 4.0K 6    8 11:33 /tmp/
  • 그러나 일반 사용 자 는 다른 사람 이 만 든 파일 을 삭제 할 수 없습니다
  • [vagrant/tmp]$ ll /tmp/test.md
    -rw-r--r-- 1 root root 215 5   31 04:24 /tmp/test.md
    
    [vagrant/tmp]$ rm test.md
    rm:              "test.md"?yes
    rm:     "test.md":       

    4. chattr 권한
    1. chattr 명령
    chattr [+-=] [  ] [     ]
    
    /tmp [+-=]: 권한 증가+: 삭제 권한-: 권한 설정
    옵션=: (insert) 삽입
  • 파일: 파일 을 삭제 하고 이름 을 바 꿀 수 없고 파일 데 이 터 를 추가 하거나 수정 할 수 없습니다.
  • 디 렉 터 리: 파일 을 만 들 거나 삭제 할 수 없고 디 렉 터 리 아래 파일 데 이 터 를 수정 할 수 있 습 니 다
  • i: (append) 추가
  • 파일: 데 이 터 를 삭제 하고 수정 할 수 없고 a 형식 으로 파일 에 데 이 터 를 추가 할 수 있 습 니 다.
  • 디 렉 터 리: 디 렉 터 리 에 만 파일 을 추가 하고 수정 할 수 있 으 며 파일 을 삭제 할 수 없습니다
  • 2. lsattr 파일 시스템 속성 보기
    lsattr [  ] [   ]
    

    옵션echo ' ' > file: 모든 파일 과 디 렉 터 리 표시-a: 대상 이 디 렉 터 리 라면 하위 파일 의 속성 이 아 닌 디 렉 터 리 자체 의 속성 만 표시 합 니 다.
    3. 실례
    파일 적용 -d 옵션
                ,           。
    
  • 파일 파일 만 들 기 filei, 그리고 일부 내용 을 마음대로 쓰기
  • [root/tmp/chattr]$ touch file_i
    
    [root/tmp/chattr]$ date > file_i
    [root/tmp/chattr]$ cat file_i
    2018  06  08      12:04:57 UTC
  • i
  • [root/tmp/chattr]# chattr +i file_i
    
    [root/tmp/chattr]# lsattr file_i
    ----i----------- file_i
  • 삭제 불가
  • [root/tmp/chattr]# rm file_i
    rm:     "file_i":       
  • 개명 불가
  • [root/tmp/chattr]# mv file_i file
    mv:    "file_i"    "file":       
  • 데 이 터 를 늘 릴 수 없습니다
  • [root/tmp/chattr]# date >> file_i
    bash: file_i:     
  • 데이터 수정 불가
  • [root/tmp/chattr]# date > file_i
    bash: file_i:     

    디 렉 터 리 적용 chattr +i file_i 옵션
  • 디 렉 터 리 만 들 기 diri. 디 렉 터 리 아래 파일 file
  • 을 만 듭 니 다.
    [root/tmp/chattr]# mkdir dir_i
    [root/tmp/chattr]# touch dir_i/file
    
    [root/tmp/chattr]# ll dir_i/
        0
    -rw-r--r-- 1 root root 0 6    8 12:13 file
  • i
  • [root/tmp/chattr]# chattr +i dir_i/
    
    [root/tmp/chattr]# lsattr -d dir_i/
    ----i----------- dir_i/
  • 파일 을 만 들 수 없습니다
  • [root/tmp/chattr]# touch dir_i/file2
    touch:     "dir_i/file2":     
  • 파일 삭제 불가
  • [root/tmp/chattr]# rm dir_i/file
    rm:     "dir_i/file":     
  • 디 렉 터 리 아래 파일 데 이 터 를 수정 할 수 있 습 니 다
  • [root/tmp/chattr]# date > dir_i/file
    [root/tmp/chattr]# cat dir_i/file
    2018  06  08      12:17:16 UTC

    좋은 웹페이지 즐겨찾기