[Linux] 확장 권한 및 접근 제어 목록

728x90

확장 권한

setuid 

파일의 소유주 권한으로 명령어 실행

파일의 소유주가 root 일 때 setuid 를 주는 것이 의미가 있다.

다른 일반 사용자에게 setuid 를 줘도 큰 의미가 없다.

chmod u+s [file 명]

setgid

file :

파일의 소유그룹 권한으로 명령어 실행

 

directory :

setgid 부연된 디렉토리의 파일들에 대해서 소유그룹이 계속해서 소유그룹 권한을 행사함. setgid는 하위 새로 만들어지는 디렉토리에 상속 특정 디렉토리에 setgid 가 부여됐다면 그것은 해당 디렉토리에 만들어지는 모든 파일이나 디렉토리에 대해 소유 그룹이 setgid 디렉토리의 소유 그룹으로 만들어진다.

chmod g+s [file/dir 명]

 

sticky bit

해당 디렉토리에 생성된 파일이 디렉토리에 대한 삭제 권한을 파일의 소유자와 root에게만 가능하도록 함.

삭제 뿐 만 아니라 mv 처럼 파일에 변화가 생기는 모든 요소들을 막아준다.

chmod o+t [dir 명]

$ ls  -ld  /tmp       =>    스티키 비트가 붙어있는 디렉토리이다.

게시글 삭제를 생각하면 편하다. 게시글을 만든 사람과 관리자만 게시글을 삭제할 수 있다!

 

확정권한 설정

확장권한 실습

ptest 디렉토리 생성

$ mkdir /ptest

/ptest에 모든 권한을 rwx로 주고 setgid 권한도 줄 것

$ chmod 2777 /ptest

user01로 사용자 전환

$ su - user01

/ptest 안에 파일 file01 과 디렉토리 dir01 생성 

$ mkdir /ptest/dir01
$ touch /ptest/file01

file01과 dir01 소유권 확인 및 dir01의 퍼미션 확인

$ ls -l /ptest/

root로 사용자 전환

$ su -

dir01의 소유권을 user01로 바꾸고 소유그룹을 student로 변경 하고 
sticky bit 권한과 모든 사용자에게 rwx 권한을 줄것 

$ groupadd student
$ chown user01:student /ptest/dir01
$ chmod 1777 /ptest/dir01     
$ ls -l /ptest/

file01에 setuid 권한을 줄 것

$ chmod u+s /ptest/file01

user02로 사용자 전환

$ su - user02

./dir01 안에 파일 file02와 디렉토리 dir02 생성

$ mkdir /ptest/dir01/dir02
$ touch /ptest/dir01/file02

file02 와 dir02의 소유권 확인

$ ls -l /ptest/dir01/
total 4
drwxr-xr-x 2 user02 student 4096 Feb 23 03:52 dir02
-rw-r--r-- 1 user02 student    0 Feb 23 03:53 file02

user03로 사용자 전환 /ptest/dir01/file02 삭제 해볼 것

$ su - user03
$ rm -rf /ptest/dir01/file02
rm: cannot remove '/ptest/dir01/file02': Operation not permitted
dir01 에 스티키 비트가 부여되서 파일 삭제 불가


/ptest/file01 삭제 해볼 것

$ rm -rf /ptest/file01


setgid 권한이 주어진 파일이나 디렉토리를 검색하는 방법은?

$ find / -perm -2000 -ls 2> /dev/null

또는 

$ ls -lR / | grep '^......s....'

접근 제어 목록 (Access Control List : ACL)

acl 의 목적

특정 사용자, 특정 그룹의 구성원에게 권한 별도로 부여하기 위해서 사용한다.

특정사용자 특정 그룹의 구성원에게 별도의 권한 줄 수 없다.

acl을 설정할 경우

소유주(y/n) y -> 소유주의 권한

n

특정사용자(y/n) y-> 특정사용자의 권한

n

소유그룹(y/n) y -> 소유그룹의 권한

n

특정그룹(y/n) y -> 특정그룹의 권한

n

기타사용자의 권한

acl 권한의 확인 방법

ls -l 했을 경우에 아래 사진처럼 권한을 확인할 수 있다.

1 : 파일의 종류

2~10 : 권한부분(2~4 소유주 5~7 소유그룹 8~10 기타사용자)

11 : acl 설정확인 부분

     . or 공백 이면 acl 설정이 되지 않았다.

     + - acl 설정이 되어 있다.

acl의 영향 받는 대상

특정사용자, 소유그룹, 특정그룹만 영향을 받음

소유주와 기타사용자는 acl의 영향(mask)을 받지 않는다.

mask의 권한

acl 대상이 받을 수 있는 최대 권한

-acl 대상의 권한과 mask 권한을 and 연산해서 결과가 나옴.

acl을 설정할 경우에 생기는 변화

ls -l의 권한 항목 중에서

  • 11번이 +로 변함
  • 기존에 소유그룹의 권한(5~7번)이 마스크 권한으로 대체됨.

acl에 관련된 명령어

getfacl : acl 설정 확인

setfacl : acl 설정

 

setfacl [option] [acl엔트리 파일명/디렉토리명]

acl 엔트리

setfacl 옵션

일반 acl과 기본(default) acl

일반 acl : acl이 설정되어 있는 그 자체에 대해서 권한행사

 

기본 acl

  • 기본 acl이 설정되어 있는 디렉토리에 대해서는 아무런 권한을 행사할 수 없음.
  • 대신 기본 acl이 설정되어 있는 디렉토리에 파일이나 디렉토리를 생성할 경우 기본 acl 설정이 생성 파일이나 디렉토리에 부여됨.
  • 생성된 디렉토리에는 기본acl이 상속 된다.

실습

user02를 aclgroup 구성원으로 넣을 것(기본 그룹으로 바꾸는 것 아님)

$ usermod -aG 3000 user02

/ptest 모든 내용 777로 권한 설정하여 디렉토리 생성하고 소유그룹을 다시 root로 변경

$ chmod -m 777 /ptest
$ chown root:root /ptest

/ptest 에 user03 은 접근 할 수 없도록 설정

$ setfacl -m u:user03:0 /ptest

/ptest 에 파일 aclfile01 과 디렉토리 acldir01 생성

$ mkdir /ptest/acldir01
$ touch /ptest/aclfile01

aclfile01은 user01 만이 읽기, 쓰기, 실행 가능하도록 설정하고 
나머지는 읽기, 쓰기만 실행가능하도록 설정한다.

$ chmod 666 /ptest/aclfile01
$ setfacl -m u:user01:7 /ptest/aclfile01

acldir01는 aclgroup 만이 읽기 쓰기가능하고 나머지는 읽기만 가능하도록 설정 
디렉토리의 실행 권한이 있어야만 읽기 쓰기가 가능해진다.

$ chmod 555 /ptest/acldir01
$ setfacl -m g:aclgroup:6 /ptest/acldir01/

 

 

728x90