13일차 - 리눅스 (Special Permission)

Jk Lim·2023년 4월 26일
0

MLOps 부트캠프

목록 보기
12/34

13일차는

  1. umask와
  2. Special Permission (특수 권한)에 대해 학습하였다.

1.umask

  • 디렉토리나 파일을 생성할 때, 자동으로 부여되는 권한 설정 값
  • umask 적용 실습
    [root@localhost ~]# ls -l /etc/profile
    -rw-r--r--. 1 root root 1819  41  2020 /etc/profile
    [root@localhost ~]# ls -l /etc/bashrc
    -rw-r--r--. 1 root root 2853  41  2020 /etc/bashrc
    [root@localhost ~]# ls -l .bash_profile
    -rw-r--r--. 1 root root 176 1229  2013 .bash_profile
    [root@localhost ~]# ls -l .bashrc
    -rw-r--r--. 1 root root 176 1229  2013 .bashrc
    [user@localhost ~]$ umask
    0002
    [user@localhost ~]$ vim .bash_profile   ### 해당 파일 가장 아래에 umask 0200 추가
    [user@localhost ~]$ source .bash_profile ### 설정 파일 적용
    [user@localhost ~]$ umask
    0200
  • login → .bash_profile → .bashrc → /etc/bashrc
  • 현재 사용자에게만 젹용하려면 .bash_profile 이나 .bashrc를 바꿔야한다.
    (etc 폴더 : 환경설정 파일 - 전역 설정)
    (etc/profile : 로그인 하는 사용자가 적용받는 profile)
    (etc/bashrc(bash run control) : bash를 수행할 때 실행되는 파일)

참고 : umask는 파일이 실행권한을 갖는 것을 방지한다.
file max default permission은 666
directory max default permission은 777이다.
이유는 파일의 실행은 파일이 기본으로 가져야 하는 권한이 아니기 때문.
umask의 동작도 파일이 실행 권한을 기본으로 갖는 것을 방지한다.
예를 들어
666 - 023 = 643 = r w - r - - - w x ⇒ 2의 보수를 통해 실행 권한을 제거한다.


2. Special Permission (특수 권한)

스페셜 퍼미션의 필요이유

1. root 계정으로 직접 접속하는 경우를 최소화
/etc/shadow 파일은 사용자의 패스워드를 저장하는 파일인데 권한이 아무것도 없다. 이런 퍼미션은 일반사용자에게 패스워드를 변경하지 못하게 할 것이다. 즉, root계정을 직접 사용하지 못하게 하면서도 root 권한이 필요 없는 것은 아니기 때문에 실행할 때만 root 권한으로 변경해 주는 퍼미션이 필요하다.

2. 공용 디렉토리에 대한 삭제 권한 제한
/tmp 의 기능은 application이 동작하면 각 PID를 가지고 메모리에 올라가 동작하게 되는데 그 때, 각 PID별 임시파일이 생성될 수 있고 각각의 권한으로 동작시킨 process들이 모두 임시파일을 생성할 수 있어야 한다. 이말은 other 영역에 write 권한이 해당 디렉토리에 존재해야 한다는 것인데, 이는 생성도 되지만 삭제도 가능하기 때문에 임의 사용자가 파일 생성 및 삭제가 되어 모순적인 부분이 있다. 이러한 문제를 방지하기 위해 스페셜 퍼미션이 필요하다.

  • chmod 명령어에 넘버릭, 심볼릭 기호를 사용하여 Special Permission 부여
  • setuid : 4000, s / setgid : 2000, s / sticky bit : 1000, t

(1) setuid (4000 / s)

[user@localhost ~]$ sudo chmod 4001 ruid_euid_check   # setuid 설정
[sudo] user의 암호: 
[user@localhost ~]$ ls -l ruid_euid_check 
---S-----x. 1 root root 8560  4월 26 11:24 ruid_euid_check
  • setuid의 원리 : ruid_euid_check 파일을 실제 실행할 때, user는 일반 실행을 해야하지만, 위의 코드처럼 setuid가 셋팅되면 파일을 실행할 때, 파일 소유자 권한의 EUID가 셋팅되어 실행됨.
  • RUID 와 EUID의 이해 및 일반 실행과 sudo 실행 setuid 실행의 차이점 이해
[user@localhost ~]$ ./ruid_euid_check
[Init] UID=1000, EUID=1000            ### user 계정의 UID = 1000
[user@localhost ~]$ sudo ./ruid_euid_check 
[Init] UID=0, EUID=0                  ### root 계정의 UID = 0
[user@localhost ~]$ sudo chmod 4755 ruid_euid_check ### 해당 프로그램에 setuid 부여
[user@localhost ~]$ ls -l ruid_euid_check
-rwsr-xr-x. 1 root root 8560  4월 26 11:24 ruid_euid_check
[user@localhost ~]$ ./ruid_euid_check 
[Init] UID=1000, EUID=0               ### 실행 시 갖는 권한이 root로 바뀜
### UID = RUID (Real UID) 원래 가지고 있는 UID 권한
### EUID (Effective UID) 파일을 실행할때 갖는 권한
### 일반적으로는 두 UID 값이 같다.

패스워드 변경 권한 관련 실습

  • 패스워드 변경은 원래 일반 유저가 할 수 없지만 (shadow 파일 : 사용자의 패스워드가 저장되어 있음. 퍼미션이 아무것도 없어서 이것만 보면 일반사용자는 패스워드 설정이 불가능해 보인다.) passwd의 퍼미션이 4755로 설정되어 있어서, root이외의 사용자가 실행을 하여도 root권한으로 EUID설정이 되어서 패스워드 변경을 할 수 있게 된다.
    (소유자 실행 권한이 s로 되어있음)
[user@localhost ~]$ ls -l /etc/shadow
----------. 1 root root 1243  4월 25 11:03 /etc/shadow
[user@localhost ~]$ passwd
user 사용자의 비밀 번호 변경 중
user에 대한 암호 변경 중  
(현재) UNIX 암호:
[user@localhost ~]$ which passwd
/bin/passwd
[user@localhost ~]$ ls -l /bin/passwd
-rwsr-xr-x. 1 root root 27856  4월  1  2020 /bin/passwd

(2) setgid (2000 / s)

  • setgid는 파일 그룹의 권한으로 셋팅되어 실행됨.
  • other에 속하는 사용자가 실행 시 egid 값을 파일의 그룹 권한으로 set 해서 실행한다.
user@user-Aspire-E5-576:~$ ls -l /usr/bin/bsd-write
-rwxr-sr-x 1 root tty 14488  3월 30  2020 /usr/bin/bsd-write
## tty 그룹 : 터미널 제어 그룹

응용실습

[user@localhost ~]$ which more
/bin/more
[user@localhost ~]$ more /etc/shadow
/etc/shadow: 허가 거부
[user@localhost ~]$ ls -l /bin/more
-rwxr-xr-x. 1 root root 41112 10월  1  2020 /bin/more
[user@localhost ~]$ sudo chmod u+s /bin/more
[sudo] user의 암호: 
[user@localhost ~]$ more /etc/shadow | head -1
root:$6$y0/RnGsqoVqT8bY6$//gfmmHX9AbuLUXVM1X8zwzIXi/UAD.O/MVzcrBJ./DSH3iSfz7ZnhlSbzUfLPtSfc6a2U5AfM3DPmbDMUPkn/::0:99999:7:::

(3) sticky bit (1000 / t)

  • 공통적으로 쓰기권한이 있는 디렉토리는 생성 뿐만 아니라 삭제도 할 수 있는 권한이 있다. 이러한 취약점을 보완하기 위해 sticky bit라는 것을 공통으로 사용하는 디렉토리에 추가 할 수 있다. 이렇게 sticky bit가 설정된 디렉토리에서는 다른 사용자가 권한이 있다고 하더라도 디렉토리나 파일을 삭제할 수 없다.
### tmp 폴더의 other 실행 권한이 t로 되어있다.
[root@localhost /]# ls -ld /tmp
drwxrwxrwt. 26 root root 4096  4월 26 14:17 /tmp

0개의 댓글