透過 ACL 的機制,可以讓一個檔案同時有多個 Owner or Group
6.1 POSIX Access Control Lists (ACLs)
=====================================
若 partition 格式為 ext4,mount 的時候必須加上 -o acl
參數:(以下為範例)
1
| $ mount -o acl /dev/vdb1 /mnt
|
或是在 /etc/fstab 上的參數設定加上 acl 也行
也可以透過指令 sudo tune2fs -o user_xattr,acl /dev/vdb1
直接把屬性加入到 partition 的 superblock 中
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
| [vagrant@server tmp]$ getfacl acl_test.txt
user::rw- group::rw- other::r--
[vagrant@server tmp]$ setfacl -m u:user1:r-x acl_test.txt [vagrant@server tmp]$ getfacl acl_test.txt
user::rw- user:user1:r-x group::rw- mask::rwx other::r--
[vagrant@server tmp]$ setfacl -m u:user2:r-- acl_test.txt [vagrant@server tmp]$ setfacl -m u:user3:rwx acl_test.txt [vagrant@server tmp]$ getfacl acl_test.txt
user::rw- user:user1:r-x user:user2:r-- user:user3:rwx group::rw- mask::rwx other::r--
[vagrant@server tmp]$ setfacl -m g:user4:r-x acl_test.txt [vagrant@server tmp]$ getfacl acl_test.txt
user::rw- user:user1:r-x user:user2:r-- user:user3:rwx group::rw- group:user4:r-x mask::rwx other::r--
[vagrant@server tmp]$ setfacl -x u:user1 acl_test.txt [vagrant@server tmp]$ setfacl -x u:user2 acl_test.txt [vagrant@server tmp]$ getfacl acl_test.txt
user::rw- user:user3:rwx group::rw- group:user4:r-x mask::rwx other::r--
[vagrant@server tmp]$ setfacl -x u:user3 acl_test.txt [vagrant@server tmp]$ setfacl -x g:user4 acl_test.txt [vagrant@server tmp]$ getfacl acl_test.txt
user::rw- group::rw- mask::rw- other::r--
$ getfacl acl_test.txt | setfacl --set-file=- acl_clone.txt
|
補充 (使用 setfacl 變更檔案的傳統權限)
1 2 3 4 5 6 7 8 9 10 11 12
| [vagrant@server tmp]$ ll total 8 -rw-rw-r--+ 1 vagrant vagrant 0 Feb 23 03:09 acl_test.txt -rwx--x--x. 1 vagrant vagrant 22 Feb 23 01:45 vagrant-shell
[vagrant@server tmp]$ setfacl -m u::rwx acl_test.txt [vagrant@server tmp]$ setfacl -m g::rwx acl_test.txt [vagrant@server tmp]$ setfacl -m o::rwx acl_test.txt [vagrant@server tmp]$ ll total 8 -rwxrwxrwx+ 1 vagrant vagrant 0 Feb 23 03:09 acl_test.txt -rwx--x--x. 1 vagrant vagrant 22 Feb 23 01:45 vagrant-shell
|
flags
表示 SUID, SGID, StickyBit:(下面的範例表示檔案有 SUID 的屬性)
1 2 3 4 5 6 7 8 9
| [vagrant@server tmp]$ getfacl /bin/passwd getfacl: Removing leading '/' from absolute path names
user::rwx group::r-x other::r-x
|
補充(使用 setfacl 修改 mask 設定)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| [vagrant@server tmp]$ getfacl acl_test.txt
user::rwx group::rwx mask::rwx other::rwx
[vagrant@server tmp]$ setfacl -m m::r-x acl_test.txt [vagrant@server tmp]$ getfacl acl_test.txt
user::rwx group::rwx mask::r-x other::rwx
|
補充(已經有 ACL 的設定就不要再用 chmod)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| [vagrant@server tmp]$ ll total 8 -rwxr-xrwx+ 1 vagrant vagrant 0 Feb 23 03:09 acl_test.txt -rwx--x--x. 1 vagrant vagrant 22 Feb 23 01:45 vagrant-shell [vagrant@server tmp]$ chmod 123 acl_test.txt [vagrant@server tmp]$ ll total 8 ---x-w--wx+ 1 vagrant vagrant 0 Feb 23 03:09 acl_test.txt -rwx--x--x. 1 vagrant vagrant 22 Feb 23 01:45 vagrant-shell [vagrant@server tmp]$ getfacl acl_test.txt
user::--x group::rwx mask::-w- other::-wx
|
補充(若要稽核使用者使用檔案的狀況)
可使用 kernel 中的 Audit 功能,設定可參考 /etc/audit
目錄中的設定
補充(其他)
tar 打包時要包含 ACL & SELinux 的權限,要加入 -xattr
參數
6.2 Securing Files with ACLs
============================
透過 -b
參數可回復沒有 ACL 權限設定的狀態,例如 setfacl -b filename
Setting an explicit ACL mask
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
| [vagrant@server tmp]$ setfacl -m u:user1:rwx passwd [vagrant@server tmp]$ setfacl -m u:user2:r-x passwd [vagrant@server tmp]$ setfacl -m g:user3:rwx passwd [vagrant@server tmp]$ setfacl -m g:user4:r-x passwd [vagrant@server tmp]$ getfacl passwd
user::rw- user:user1:rwx user:user2:r-x group::r-- group:user3:rwx group:user4:r-x mask::rwx other::r--
[vagrant@server tmp]$ setfacl -m m::r-x passwd [vagrant@server tmp]$ getfacl passwd
user::rw- user:user1:rwx user:user2:r-x group::r-- group:user3:rwx group:user4:r-x mask::r-x other::r--
|
設定檔案建立時的預設 ACL 權限(d
)
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
| [vagrant@server tmp]$ mkdir ABC [vagrant@server tmp]$ chmod 777 ABC/ [vagrant@server tmp]$ touch ABC/file.txt [vagrant@server tmp]$ getfacl ABC/file.txt
user::rw- group::rw- other::r--
[vagrant@server tmp]$ setfacl -m d:u:user1:rwx ABC/ [vagrant@server tmp]$ touch ABC/file2.txt [vagrant@server tmp]$ getfacl ABC/file2.txt
user::rw- user:user1:rwx group::rwx mask::rw- other::rw-
[vagrant@server tmp]$ ls -l ABC/ total 4 -rw-rw-rw-+ 1 vagrant vagrant 0 Feb 23 03:50 file2.txt -rw-rw-r--. 1 vagrant vagrant 0 Feb 23 03:50 file.txt
|
遞迴設定 ACL 權限(-R + X)
1 2 3
|
$ setfacl -R -m u:user1:rX /dir
|
移除 ACL 權限(-x
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| $ getfacl acl_clone.txt
user::rw- user:user1:r-x group::rw- group:group1:rw- group:group2:r-x mask::rwx other::---
$ setfacl -x u:user1,g:group2 acl_clone.txt $ getfacl acl_clone.txt
user::rw- group::rw- group:group1:rw- mask::rw- other::---
|
Practice: Using ACLs to Grant and Limit Access
實作結果:
- 讓 sodor group 與 controller group 在 /shares/steamies 目錄有相同的權限,但 user james 則是例外沒有任何權限
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| [student@server0 ~]$ sudo getfacl /shares/steamies/ getfacl: Removing leading '/' from absolute path names
user::rwx group::rwx other::--- default:user::rwx default:group::rwx default:other::---
[student@server0 ~]$ sudo setfacl -Rm g:sodor:rwX /shares/steamies [student@server0 ~]$ sudo getfacl /shares/steamies/ getfacl: Removing leading '/' from absolute path names
user::rwx group::rwx group:sodor:rwx mask::rwx other::--- default:user::rwx default:group::rwx default:other::---
[student@server0 ~]$ sudo setfacl -Rm u:james:- /shares/steamies [student@server0 ~]$ sudo getfacl /shares/steamies/ getfacl: Removing leading '/' from absolute path names
user::rwx user:james:--- group::rwx group:sodor:rwx mask::rwx other::--- default:user::rwx default:group::rwx default:other::---
|
- /shares/steamies 目錄底下的現有檔案都需要設定成上面的 ACL 權限
因為上面已經使用 -R
參數,因此這個部分已經完成
- 新增的目錄 & 檔案也會有相同的 ACL 權限
表示 sodor group 還是會有 rwx 權限,james user 也是同樣沒權限:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| [student@server0 ~]$ sudo setfacl -m d:g:sodor:rwx /shares/steamies [student@server0 ~]$ sudo setfacl -m d:u:james:- /shares/steamies [student@server0 ~]$ sudo getfacl /shares/steamies getfacl: Removing leading '/' from absolute path names
user::rwx user:james:--- group::rwx group:sodor:rwx mask::rwx other::--- default:user::rwx default:user:james:--- default:group::rwx default:group:sodor:rwx default:mask::rwx default:other::---
|