ACL(Access Control List)
> 파일과 디렉토리의 확장 속성 중 하나이다.
> setfacl 명령어를 사용해서 파일의 소유자나 그룹을 더 만들 수 있다.
> getfacl 명령어를 사용해서 확장 속성의 정보를 확인 할 수 있다.
>> 파일의 확장 속성은 Sahdow Inode에 저장 되어있다.
> 원래는 file1을 user01, user02 등의 사용자가 변경하고 싶으면 group의 권한에 사용자를 추가해주면 되지만 각각의 사용자 마다의 권한을 달리해줄 수는 없었다.
> 파일에 대한 ACL 설정을 통해서 file1에 대해서 소유자를 root 사용자 외에도 user01, user02 등 다중 사용자가 소유할 수 있도록 설정 할 수 있다.
>> 물론 그룹에 관해서도 추가로 속하도록 설정 할 수 있다.
> setfacl 명령어는 기본적으로 chmod 명령어와 같은 역할을 가진다.
>> Permission Mode를 변경 하는 역할을 가진다.
> chmod 명령어는 파일에 대한 사용권한이나 그룹권한이 하나로 정해져 있지만 setfacl 명령어를 사용하면, 파일에 대한 사용권한이나 그룹권한을 늘려 줄 수 있다.
[ 명령어 형식 ]
# getfacl file1
# getfacl file1 file2 . . . .
옵션 |
설명 |
-d |
기본정보에 대해 확인 |
-R |
recursive의 약자로 디렉토리의 경우 하위 디렉토리 내용 까지 확인 가능 |
# setfacl -m [ acl ] file1
# setfacl -x [ acl ] file1
옵션 |
설명 |
-m |
modify의 약자로 권한을 지정하거나 수정 할 때 사용 |
-x |
권한을 삭제할 때 사용 |
-R |
recursive의 약자로 디렉토리의 경우 하위 디렉토리와 파일까지 권한을 변경 |
-b |
권한 및 mask 등 지정한 권한을 전부 제거 |
[EX] 파일의 속성정보 중 사용자와 그룹에 대한 정보 변경 및 삭제
○ 사용시스템
- CentOS 5.5
chmod CMD = setfacl -m
ⓐ 테스트 용 파일 생성 및 정보 확인
# cd /test
# rm -rf /test/*
# touch file1
# ls -l file1
ⓑ chmod 명령어를 사용하여 퍼미션 변경
# chmod 664 file1
# ls -l file1
# getfacl file1
ⓒ setfacl 명령어를 사용하여 퍼미션 변경
# setfacl -m user::rwx file1
# ls -l file1
# getfacl file1
[EX] 파일에 대한 새로운 사용자 추가 및 그룹 추가
ⓐ setfacl 명령어를 사용하여 file1에 대한 새로운 사용자와 퍼미션 추가
# getfacl file1
# setfacl -m u:user01:7 file1
# ls -l file1
# getfacl file1
> '+' (심볼) : 기존의 퍼미션의 확장 퍼미션이 존재한다는 것. 숨겨진.
ⓑ setfacl 명령어를 사용하여 file1에 대한 새로운 그룹과 퍼미션 추가
# groupadd class1
# grep class1 /etc/group
# setfacl -m g:class1:7 file1
# getfacl file1
ⓒ file1에 대한 추가된 새로운 사용자/그룹 삭제
# setfacl -x u:user01 file1 ( # setfacl -x u:user01:rwx file1 )
# getfacl file1
# setfacl -x g:class1 file1
# getfacl file1
[EX] root 사용자의 파일을 일반 사용자(user01)가 사용할 수 있도록 설정
ⓐ 테스트용 파일 생성
# cd /test
# rm -rf /test/*
# echo 1111 > file1
ⓑ file1에 대한 새로운 사용자 및 퍼미션 추가
# setfacl -m u:user01:7 file1
# getfacl file1
ⓒ user01 사용자로 퍼미션 테스트
# su user01
$ echo 2222 >> file1
$ cat file1
$ exit
ACL은 기존의 퍼미션 보다 먼저 적용된다.
[EX] 확장 속성정보를 동일하게 유지하는 파일 만들기
ⓐ 실습용 파일 생성
# cd /test
# rm -rf /test/*
# touch file{1,2,3,4}
ⓑ 한 개의 파일에 대한 확장 속성 생성
# setfacl -m u:user01:7 file1
# getfacl file1
ⓒ 확장 속성을 다른 파일에 복사
# getfacl file > file.acl
# setfacl --set-file=file.acl file2
# getfacl file1 | setfacl --set-file=- file2
# getfacl file1 file2
[EX] 디렉토리의 확장 속성정보(Default ACL)
Default ACL → Directory 주어지는 ACL 정보
ⓐ 실습용 디렉토리 생성
# mkdir dir1
# getfacl dir1
user::rwx >> default:user::rwx ( d:u::7 )
group::r-x >> default:group::r-w ( d:g::5 )
other::r-x >> default:other::r-x ( d:o::5 )
ⓑ 디렉토리에 대한 default acl 설정
# setfacl -m d:u::7,d:g::5,d:o::5 dir1
ⓒ default acl 정보 추가
# setfacl -m d:u:user01:7, d:m::5 dir1
# getfacl dir1
ⓓ default acl의 상속에 대한 테스트
>> 디렉토리 안에 파일이 생성 될 때 디렉토리의 default acl 정보를 상속 받는다.
# mkdir dir1/subdir1
# getfacl dir1/subdir1
# setfacl -m d:u::7,d:g::7,d:o::7,m::7 dir1
>> # setfacl -m d:u::rwx,d:group::rwx,d:other:rwx,d:mask:rwx dir1
# getfacl dir1 dir1/subdir1
# mkdir dir1/subdir2
# getfacl dir1/subdir2
> 상위 디렉토리를 바꿀 때 하위 디렉토리도 다 바꿔줘야 한다.
# find /test -type f -name "file* -exec setfacl --set-file=file.acl {} \;