본문 바로가기
IT Network System/Linux Srv

Linux File permissions

by Skills 2020. 11. 20.

* symbol 

 - (ex. -rw-r--r-- )에서 맨앞의 -는 file인지 directory인지 구분하는 symbol이다.

 - 앞에가 directory인 경우에는 d, file인 경우에는 -라는 symbol로 표시된다.

 

* 권한

 - ls 명령으로 현재 파일에 부여되는 권한을 확인할 수 있다.

 - rw-r--r--로 표시되는 부분이 부여된 권한을 나타낸다. 3개씩 끊어서 보면

  ① 앞에 3개 (rw-) : user 즉 소유자(owner)의 권한이다.

  ② 중간에 3개 (r--) : group에 대한 권한

  ③ 마지막 3개 (r--) : others에 대한 권한이 된다.

 - 이 권한을 8진수로 표현하면 rwx(read, write, execute) 권한을 다 갖는 경우 7이 된다.

 - 각 권한을 숫자값으로 표현하면 r = 4, w = 2, x = 1 이기 때문에 r + w + x = 7이 되는 것이다. 

 

* 특수권한

 - 파일에 대한 접근 권한 및 파일 종류를 나타내기 위해 리눅스에서는 16bit를 사용한다.

   3bit : user, group, other (각 3bit씩 총 9bit)

   4bit : 파일의 종류 표현

   3bit : 특수 권한 SetUID, SetGID, Sticky Bit 3가지가 있다. (SetUID = 4, SetGID = 2, Sticky Bit = 1)

 

① SetUID

 - SetUID가 설정되어 있는 실행 파일은 UID(user)의 권한으로 파일을 실행할 수 있다.

 - SetUID가 설정되어 있지 않은 본래 최고 허가권은 777 (rwx rwx rwx)이다.

 - SetUID가 설정되어 있으면, 맨 앞자리에 4가 붙어서 4777(rws rwx rwx)이 된다. 뒤에 허가권은 바뀔 수 있음!

 - rws rwx rwx 혹은 rwS rwx rwx로 표현된다.

소문자 s일 경우 : user에 본래 x(실행)권한이 있다는 의미이다.

대문자 S일 경우 : user에 본래 x(실행)권한이 없다는 의미이다.

 

↓passwd 명령어에 관한 파일, /usr/bin/passwd의 파일

 - 이 파일의 허가권은 rwsr-xr-x(4755), 소유권은 root:root로 SetUID가 걸려있는 실행파일임을 알 수 있다. (즉, 이 파일의 소유자인 root의 권한을 잠깐 빌려올 수 있다는 의미이다.)

 

만약, /usr/bin/passwd 파일의 허가권을 바꾼다면?

 - 4777은 기존의 passwd 파일의 권한이다. 기존의 권한으로는 소유자 루트의 권한을 잠깐 빌려오기 때문에 명령어 실행과 비밀번호 변경이 모두 가능하다.

 

 - 755일 경우 명령어 실행은 되지만, 비밀번호 변경은 안된다. 

 - 4750일 경우에는 명령어 실행조차 되지 않는다. 이 마지막 경우가 서버에서 주로 사용되는 경우이다.

 

 - find 명령어를 이용하여 SetUID가 걸려있는 파일을 찾을 수 있는데, root 권한을 잠시 빌려오는 SetUID로 해킹이 이루어지는 경우가 많다.

 - user가 root인 SetUID가 걸려있는 파일을 백도어 파일이라고 하는데, find / -user root -perm /4000 2> /dev/null 명령어를 사용하여 백도어 파일을 찾을 수 있다. (뒤의 2> /dev/null은 오류를 제외하고 출력하게 해준다.)

 

② SetGID

 - 어떤 사용자가 만들어도 SetGID가 걸려있는 디렉터리이면, 그 디렉터리의 GID로 하위 GID가 설정된다. (잘 사용안함)

 - SetGID는 2777 (rwx rws rwx) 등으로 표현된다.

 - SetUID와 마찬가지로 group에 실행권한이 있으면 소문자 s, 실행권한이 없으면 대문자 S이다.

 

 - 허가권을 2757로 변경하고 user1로 로그인해서 test 디렉터리에 test123 파일을 생성했다.

 

 - 원래 소유권이 user1:user1로 되어야 할 test123 파일이 상위 디렉터리인 test 디렉터리의 SetGID에 의해 user1:root로 변했다.

 

 - 이번에는 허가권이 2757(rwx r-s rwx)인 test 디렉터리를 SetUID 권한(rws r-x r-x)으로 만들기 위해 chmod 4755를 했지만 위의 사진으로 알 수 잇듯이 허가권이 rws r-s r-x, 즉 6755로 바뀌었다.

 

 - 그러니까 숫자로는 특수 권한이 해제가 안되고 특수 권한을 없애려면 symbolic method로 해야 한다.

 

③ Sticky Bit

 - Sticky Bit가 설정되어 있는 디렉터리에선 누구든지 자유롭게 접근이 가능하고, 파일이나 디렉터리를 생성할 수 있다.

 - 삭제 시에는 파일이나 디렉터리의 소유자나 관리자만이 삭제가 가능하다. (이러한 특성 때문에 공용 디렉터리에서 많이 쓰인다.)

 - SetUID와 SetGID가 각각 user와 group에 관한 것이라 Sticky Bit 또한 other와 상관이 있을 것이라 생각할 수 있지만 전혀 관계가 없다.

 - Sticky Bit는 1777(rwx rwx rwt)등으로 표현된다.

 - SetUID와 SetGID와는 다르게 s대신 t가 붙는다. other 실행권한이 있으면 소문자 t, 실행권한이 없으면 대문자 T이다.

 

Sticky Bit 설명을 위해 학생 goodstudent와 badstudent 교수 root로 가정하고 진행해보겠다!

 

교수(root)는 학생들의 숙제 업로드를 위해 /assignment/디렉터리를 만들고 757(rwx r-x rwx)권한을 주었다.

 

부지런한 goodstudent는 /assignment/ 디렉터리에 자신의 과제를 적어서 올렸다.

 

과제가 하기 싫은 badstudent는 /assignment/ 디렉터리에 들어가보니 goodstudent가 한 과제가 존재한다. cp로 copy도 가능하고, goodst의 과제를 삭제하는 것도 가능하다.

이를 막기 위해서 교수(root)는 /assignment/ 디렉터리에 Sticky Bit를 설정한다.

 

goodstudent는 다시 /assignment/ 디렉터리에 자신의 숙제를 추가한다.

 

goodstudent의 숙제를 확인한 badstudent가 과제를 삭제하려고 하지만 명령을 허용하지 않고, 수정하려고 해도 권한 거부 문구가 뜬다.

728x90

'IT Network System > Linux Srv' 카테고리의 다른 글

데비안 패키지 관리자 시스템(DPMS)  (0) 2020.11.20
리눅스 패키지 놀이  (0) 2020.11.20
Boot loader  (0) 2020.11.20
[Linux Srv 실습] FTP  (0) 2020.11.20
[Linux Srv 실습] apache2  (6) 2020.11.19

댓글