리눅스의 기본 권한
- 읽기(r)
- 쓰기(w)
- 실행(x)
확장 권한
- setuid
- setgid
- sticky bit
setuid
- 사용자가 바이너리 파일이나 스크립트와 같은 실행 파일을 실행하면 파일을 실행한 사용자가 주체가 되어 프로세스를 실행
- 하지만, setuid가 설정되어 있는 파일을 실행하면 파일을 실행한 사용자가 아니라 파일을 소유하고 있는 사용자의 권한으로 프로세스를 실행
- 설정되어 있는 파일은 사용자 권한 필드에서 실행 권한이 x 대신 "s" 로 표시
- 만약 파일에 실행권한이 설정되어 있지 않은 상태에서 setuid를 설정하면 S(대문자)로 표시
- 이는 실행 권한이 설정되어 있지 않다는 것
- 대표적으로 passwd 명령에 사용
[user@centos7 ~]$ which passwd
/bin/passwd
[user@centos7 ~]$ ls -l /bin/passwd
-rwsr-xr-x. 1 root root 27856 Apr 1 2020 /bin/passwd
- 시스템의 모든 passwd 명령은 setuid가 설정되어 있음.
- 이 명령을 사용하면 /etc/shadow 파일의 내용이 변경됌.
- 사용자가 특정 파일을 편집하기 위해선 해당 파일의 쓰기 권한을 가지고 있어야 함.
- 다음은 /etc/shadow 파일에 대한 정보
[root@centos7 ~]$ ls -l /etc/shadow
----------. 1 root root 1274 May 19 20:30 /etc/shadow
- root 사용자는 파일에 대한 권한을 어느 정도 무시할 수 있는 관리자이기 때문에 /etc/shadow 파일을 수정할 수 있음
#1 shell
[user01@centos7 ~]$ ps $$
PID TTY STAT TIME COMMAND
25137 pts/0 S 0:00 -bash
[user01@centos7 ~]$ passwd
Changing password for user user01.
Changing password for user01.
(current) UNIX password:
#2 shell
[root@centos7 ~]# ps -ef
...
root 25220 25137 0 22:31 pts/0 00:00:00 passwd
...
- /bin/passwd 파일을 소유하고 있는 사용자는 root 이며 setuid가 설정되어 있으므로 일반 사용자가 passwd 명령을 사용할 때 root 사용자의 권한으로 자신의 해시 패스워드를 변경할 수 있음.
setgid
- setuid처럼 바이너리 파일 또는 스크립트 파일에 설정되어 있으면 명령을 실행할 때 프로세스의 사용자 그룹이 파일의 사용자 그룹으로 실행.
- 하지만, setgid는 일반적으로 바이너리 파일보다 디렉토리에 설정하여 사용하는 경우가 많음
- 디렉토리에 setgid 가 설정되어 있다면 해당 디렉토리에서 파일을 생성 했을 때 파일의 사용자 그룹은 파일을 생성한 사용자의 기본 그룹으로 지정되지 않고 setgid가 설정된 디렉토리의 사용자 그룹으로 상속
- 실행권한이 표시되는 부분에서 "s"로 표현되며 만약 실행 권한이 설정되어 있지 않으면 S(대문자)로 표현
- 특정 데몬이 관리하는 디렉토리에 설정하여 사용
- 대표적인 디렉토리는 /run/log/journal
[user@centos7 ~]$ ls -ld /run/log/journal
drwxr-sr-x. 3 root systemd-journal 60 May 19 16:01 /run/log/journal
[root@centos7 ~]# mkdir /run/log/journal/dirA
[root@centos7 ~]# touch /run/log/journal/fileA
[root@centos7 ~]# ls -l /run/log/journal/
total 0
drwxr-s---+ 2 root systemd-journal 60 May 19 16:01 d13bc643231c9b4695acf1069826bca6
drwxr-sr-x. 2 root systemd-journal 40 May 19 22:28 dirA
-rw-r--r--. 1 root systemd-journal 0 May 19 22:29 fileA
- 디렉토리와 파일 모두 systemd-journal이 기본 그룹으로 지정
- 생성한 디렉토리는 setgid 설정이 상속되었음
sticky bit
- sticky bit를 설정하면 파일을 rwx 권한과는 별개로 소유한 사용자만 파일을 삭제할 수 있음.
- 커뮤니티 게시판을 작성자만 지울 수 있는 것처럼
- 디렉토리에만 설정이 가능
- 실행권한 대신 t로 표시되며 실행권한이 설정되어 있지 않고 sticky bit만 설정되어 있는 경우 T(대문자)로 표시
- 대표적인 디렉토리는 /tmp, /var/tmp
[user01@centos7 ~]$ ls -ld /tmp/ /var/tmp/
drwxrwxrwt. 24 root root 4096 May 19 22:32 /tmp/
drwxrwxrwt. 13 root root 4096 May 19 22:32 /var/tmp/
[user02@centos7 ~]$ touch /tmp/fileA
[user02@centos7 ~]# su user01
Password:
[user01@centos7 ~]$ cd /tmp/
[user01@centos7 tmp]$ ls -ld /tmp/
drwxrwxrwt. 24 root root 4096 May 19 22:32 /tmp/
[user01@centos7 tmp]$ ls -l fileA
-rw-rw-r--. 1 user02 user02 0 May 19 22:46 fileA
[user01@centos7 tmp]$ rm -f fileA
rm: cannot remove ‘fileA’: Operation not permitted
- user02 사용자로 fileA 를 만들고 user01 사용자로 fileA를 지우려 시도
- 하지만, "파일 소유자가 user02" + "stick bit가 설정된 /tmp 디렉토리" 라서 삭제 불가능
확장 권한 설정
- 확장 권한 설정을 할 때는 chmod 명령을 사용
- 표준 권한을 부여할 때와 마찬가지로 심볼릭(Symbolic) 방식과 8진수(Octal)방식으로 설정
심볼릭 방식
권한 설정 | 심볼릭 |
setuid 설정 (해제) | u+s (u-s) |
setgid 설정 (해제) | g+s (g-s) |
sticky bit 설정 (해제) | o+t (o-t) |
[root@centos7 ~]# ls -l /bin/passwd
-rwsr-xr-x. 1 root root 27856 Apr 1 2020 /bin/passwd
[root@centos7 ~]# chmod u-s /bin/passwd
[root@centos7 ~]# ls -l /bin/passwd
-rwxr-xr-x. 1 root root 27856 Apr 1 2020 /bin/passwd
[root@centos7 ~]# chmod u+s /bin/passwd
[root@centos7 ~]# ls -l /bin/passwd
-rwsr-xr-x. 1 root root 27856 Apr 1 2020 /bin/passwd
8진수 방식
- 8진수 방식으로 표준 권한을 설정할 때에는 chmod ### FILE 형식
- 확장권한을 설정하려면 8진수를 하나 더 추가해서 chmod #### FILE 형식으로 사용
- 첫 번째 #이 확장 권한을 나타내며 sst를 2진수 비트로 계산
[root@centos7 dir1]# ls -ld /run/log/journal/
drwxr-sr-x. 3 root systemd-journal 60 5월 17 14:30 /run/log/journal/
[root@centos7 dir1]# chmod -2000 /run/log/journal/
[root@centos7 dir1]# ls -ld /run/log/journal/
drwxr-xr-x. 3 root systemd-journal 60 5월 17 14:30 /run/log/journal/
[root@centos7 dir1]# chmod 2755 /run/log/journal/
[root@centos7 dir1]# ls -ld /run/log/journal/
drwxr-sr-x. 3 root systemd-journal 60 5월 17 14:30 /run/log/journal/
'RHCSA 준비 > 02. 고급 권한 관리' 카테고리의 다른 글
2.3 접근 제어 리스트(ACL) 설정 (setfacl, getfacl) (0) | 2021.05.21 |
---|---|
2.2 접근 제어 리스트 (Access Control List) 소개 (0) | 2021.05.21 |