확장 권한
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/