티스토리 뷰
File이나 Directory의 권한은 ugo시스템에 의해 제어됩니다.
아래 예제에서 /var/www/html디렉토리는 owner user인 root는 rwx, owner group인 root는 rx, 그리고 그 외에는 rx권한이 있습니다.
[root@bastion ~]# mkdir -p /var/www/html
[root@bastion ~]# cd /var/www
[root@bastion www]# ls -al
total 12
drwxr-xr-x 3 root root 4096 Jul 22 21:15 .
drwxr-xr-x. 21 root root 4096 Jul 22 21:15 ..
drwxr-xr-x 2 root root 4096 Jul 22 21:15 html
만약 admins라는 그룹에 속한 사용자에게는 rwx, editors라는 그룹 사용자는 rw, readers라는 그룹 사용자에게는 r권한만 주고 싶다면 어떻게 해야할까요?
ugo system으로는 해결할수가 없습니다.
이를 지원하기 위해 ACL(Access Control List)이라는 기능을 제공합니다.
파일이나 디렉토리의 ACL정보를 읽는 명령은 getfacl이고, 변경하는 명령은 setfacl입니다.
- getfacl <file / directory>
- setfacl
구분 | Syntax | 예제 |
owner user | setfacl -m u::<permission> <file OR directory> | - setfacl -m u::rwx ./html - setfacl -m u::7 ./html |
named user | setfacl -m u:<username OR UID>:<permission> <file OR directory> | - setfacl -m u:user1:rw ./html - setfacl -m u:1001:6 ./html |
ower group | setfacl -m g::<permission> <file OR directory> | - setfacl -m g::rwx ./html - setfacl -m g::7 ./html |
named group | setfacl -m g:<groupname OR GID>:<permission> <file OR directory> | - setfacl -m g:group1:rw ./html - setfacl -m g:2001:6 ./html |
others | setfacl -m o::<permission> <file OR directory> | - setfacl -m o::--- ./html - setfacl -m 0::0 ./html |
mask | setfacl -m m::<permission> <file OR directory> | - setfacl -m m::rw ./html - setfacl -m m::6 ./html |
default | default ACL이 지정되면 그 디렉토리 내에 파일/디렉토리가 생성될 때 지정된 기본값이 적용됩니다. setfacl -m d:u::<permission> <directory> setfacl -m d:g::<permission> <directory> setfacl -m d:o::<permission> <directory> setfacl -m d:m::<permission> <directory> |
- setfacl -m d:u::rwx,d:g::rw,d:o::0,m:rw html |
TIP: 대문자 'X'로 permission을 지정하면 디렉토리에만 실행권한이 부여되고 파일에는 부여되지 않습니다.
[root@bastion www]# setfacl -R -m u:root:rwX ./html
[root@bastion www]# getfacl ./html
# file: html
# owner: admin
# group: admins
user::rwx
user:root:rwx
user:ocean:rwx
group::rw-
group:operators:rwx
mask::rwx
other::---
[root@bastion www]# getfacl ./html/file1.html
# file: html/file1.html
# owner: root
# group: root
user::rw-
user:root:rw-
group::r--
mask::rw-
other::r--
ACL 삭제: -x는 특정 ACL만 삭제이고, -b는 전체 ACL을 삭제함
- setfacl -x [ u | g | o | m ]:name <file OR directory>
- setfacl -x d: [ u | g | o | m ]:name <directory> : default ACL 설정을 삭제
- setfacl -k <directory> : 디렉토리의 모든 ACL 설정을 삭제
- setfacl -b <file or directory> : 전체 ACL 삭제
mask 기능
mask는 권한의 한계를 의미합니다. mask가 지정되면 ACL로 권한을 더 많이 부여해도 mask에 지정된 권한까지만 동작합니다.
named user, owner group, named group에 적용됩니다. 다시 말해 mask에 지정한 권한 한계는 owner user와 others에는 적용되지 않습니다.
예제로 이해하기
예제를 통해 이해해 보도록 하겠습니다.
아래와 같이 user와 group을 만듭니다. user의 암호는 모두 'passw0rd'로 합니다.
Group | users |
admins | admin |
editors | editor1, editors2 |
readers | user1, user2 |
[root@bastion www]# groupadd admins
[root@bastion www]# groupadd editors
[root@bastion www]# groupadd readers
[root@bastion www]# useradd admin -g admins -p passw0rd
[root@bastion www]# useradd editor1 -g editors -p passw0rd
[root@bastion www]# useradd editor2 -g editors -p passw0rd
[root@bastion www]# useradd user1 -g readers -p passw0rd
[root@bastion www]# useradd user2 -g readers -p passw0rd
/var/www/html디렉토리를 만들고, owner는 admin:admins로 부여합니다.
[root@bastion var]# mkdir -p /var/www/html
[root@bastion var]# chown -R admin:admins /var/www
/var/www디렉토리와 모든 하위 디렉토리에 아래와 같이 ACL을 적용합니다.
대상 | ACL |
admin | rwx |
editor1, editor2 | rw |
user1, user2 | r |
admins | rwx |
editors | rw |
readers | r |
others user/groups | 권한없음 |
default | user: rwx group: rw others: 권한없음 |
mask | rw |
[root@bastion var]# setfacl -Rm u::rwx,u:editor1:rw,u:editor2:rw,g::rw,g:editors:rw,g:readers:r,o::0 /var/www
[root@bastion var]# setfacl -Rm d:u::rwx,d:g::rw,d:o::0 /var/www
[root@bastion var]# setfacl -Rm m::rw /var/www
[root@bastion var]# getfacl /var/www
getfacl: Removing leading '/' from absolute path names
# file: var/www
# owner: admin
# group: admins
user::rwx
user:editor1:rw-
user:editor2:rw-
group::rw-
group:editors:rw-
group:readers:r--
mask::rw-
other::---
default:user::rwx
default:group::rw-
default:other::---
ACL이 적용된 file/directory는 ugo 시스템 정보의 마지막이 '+'로 변경됩니다.
[root@bastion var]# ls -al /var/www/
total 16
drwxrw----+ 3 admin admins 4096 Jul 22 22:04 .
drwxr-xr-x. 21 root root 4096 Jul 22 21:15 ..
drwxrw----+ 2 admin admins 4096 Jul 22 21:15 html
mask를 r로 줄여봅시다. 즉, owner user인 admin을 제외하고는 최대 권한을 읽기까지만 허용하는것입니다.
아래와 같이 #effective라는 key로 실제 적용되는 권한을 표시합니다.
즉, 사용자인 editor1, editor2, 그룹 admins, editors는 읽기와 쓰기 권한이 있지만, mask로 허용된 읽기권한밖에 갖지 못합니다.
[root@bastion var]# setfacl -Rm m::r /var/www
[root@bastion var]# getfacl /var/www
getfacl: Removing leading '/' from absolute path names
# file: var/www
# owner: admin
# group: admins
user::rwx
user:editor1:rw- #effective:r--
user:editor2:rw- #effective:r--
group::rw- #effective:r--
group:editors:rw- #effective:r--
group:readers:r--
mask::r--
other::---
default:user::rwx
default:group::rw-
default:other::---
editor1, editor2의 ACL을 제거해 보겠습니다.
[root@bastion var]# setfacl -x u:editor1 /var/www/html
[root@bastion var]# setfacl -x u:editor2 /var/www/html
[root@bastion var]# getfacl /var/www/html
getfacl: Removing leading '/' from absolute path names
# file: var/www/html
# owner: admin
# group: admins
user::rwx
group::rw-
group:editors:rw-
group:readers:r--
mask::rw-
other::---
default:user::rwx
default:group::rw-
default:other::---
마지막으로 전체 ACL을 삭제합니다.
html디렉토리의 ugo 정보의 마지막에 '+'가 없어진것을 확인할 수 있습니다.
[root@bastion var]# setfacl -R -b /var/www
[root@bastion var]# ls -al /var/www
total 12
drwxrw---- 3 admin admins 4096 Jul 22 22:04 .
drwxr-xr-x. 21 root root 4096 Jul 22 21:15 ..
drwxrw---- 2 admin admins 4096 Jul 22 21:15 html
유용한 사용 예시
파일 이용한 ACL 적용하기
getfacl <source> > <acl filename>
setfacl --set-file=<acl filename> <target>
[root@bastion www]# setfacl -m u:ocean:7 ./html
[root@bastion www]# getfacl ./html
# file: html
# owner: admin
# group: admins
user::rwx
user:ocean:rwx
group::rw-
mask::rwx
other::---
[root@bastion www]# mkdir docs
[root@bastion www]# getfacl ./html > acl
[root@bastion www]# setfacl --set-file=./acl docs
[root@bastion www]# getfacl docs
# file: docs
# owner: root
# group: root
user::rwx
user:ocean:rwx
group::rw-
mask::rwx
other::---
이를 조금 응용하면 아래와 같이 source 파일 또는 디렉토리에 적용된 ACL을 target 파일 또는 디렉토리에 적용할수 있습니다.
getfacl <source> | setfacl --set-file=- <target>
예) getfacl ./html | setfacl --set-file=- ./docs
[root@bastion www]# setfacl -m g:operators:rwx ./html
[root@bastion www]# getfacl ./html | setfacl --set-file=- ./docs
[root@bastion www]# getfacl ./docs
# file: docs
# owner: root
# group: root
user::rwx
user:ocean:rwx
group::rw-
group:operators:rwx
mask::rwx
other::---
'Infrastructure > OS' 카테고리의 다른 글
Red Hat System Administration II: 기본 스토리지 관리 (0) | 2020.08.26 |
---|---|
Red Hat System Administration II: SELinux 보안 관리 (0) | 2020.08.25 |
Red Hat System Administration II: System 성능 튜닝 (0) | 2020.07.21 |
Red Hat System Administration II: Job 실행시간 예약 (0) | 2020.07.16 |
Red Hat System Administration II: 반복문, 조건문, 재귀식 사용 (0) | 2020.07.16 |
- Total
- Today
- Yesterday
- SAGA
- 리퀴드폴리탄
- 육각형인간
- 호모프롬프트
- API Composition
- 애자일
- 디토소비
- 버라이어티가격
- micro service
- agile
- 분초사회
- AXON
- 스포티파이
- 요즘남편 없던아빠
- 도파밍
- CQRS
- 스핀프로젝트
- 마이크로서비스
- 마이크로서비스 패턴
- spotify
- 돌봄경제
- Event Sourcing
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |