FACL:Filesystem Acess Control List
Linux(和其他Unix等POSIX兼容的操作系統)有一種被稱為訪問控制列表(ACL)的權限控制方法,它是一種權限分配之外的普遍范式。例 如,默認情況下你需要確認3個權限組:owner、group和other。而使用ACL,利用文件擴展屬性保存額外的訪問控制權限,你可以增加權限給其他用戶或組別,而不單只是簡單 的"other"或者是擁有者不存在的組別。可以允許指定的用戶A、B、C擁有寫權限而不再是讓他們整個組擁有寫權限。
ACL支持多種Linux文件系統,包括ext2, ext3, ext4, XFS, Btfrs, 等。如果你不確定你的文件系統是否支持ACL,請參考文檔。
場景:Tom,Jerry兩個用戶,Tom在一個公共目錄創建一個文件,只希望Jerry也可以訪問,並能夠編輯修改保存。用戶之間文件共享。
安裝acl管理工具
CentOS/Fedora/RHEL 中:
yum install acl
Ubuntu/Debian 中:
sudo apt-get install acl
安裝ACL完成后,需要激活我們磁盤分區的ACL功能,這樣我們才能使用它。
首先,我們檢查ACL功能是否已經開啟。
vim /etc/fstab
查看到/ /boot均沒有開啟ACL功能,在需要開啟ACL的分區的選項前增加acl標記。
eg.
基礎ACL通過兩條命令管理:setfacl用於增加或者修改ACL,getfacl用於顯示分配完的ACL。
getfacl
[root@RedHat tmp]# cp /etc/inittab . [root@RedHat tmp]# ls inittab project test [root@RedHat tmp]# getfacl inittab # file: inittab # owner: root # group: root user::rw- group::r-- other::r--
setfacl
-m: 設定
u:UID:perm
g:GID:perm
d:u:UID:perm
d:g:GID:perm
為某一個目錄設置默認的訪問控制列表。意味着在這個目錄下新建的文件將自動繼承目錄的訪問控制列表權限。
setfacl -m u:hadoop:rw inittab
-x:取消
u:UID
g:GID
setfacl -x u:hadoop inittab
--mask:
在hadoop用戶下 [hadoop@RedHat tmp]$ echo 123 >> inittab -bash: inittab: Permission denied 在root用戶下 [root@RedHat tmp]# setfacl -m u:hadoop:rw inittab [root@RedHat tmp]# getfacl inittab # file: inittab # owner: root # group: root user::rw- user:hadoop:rw- group::r-- mask::rw- other::r--
添加acl權限后
-rw-rw-r--+ 1 root root 495 7月 26 19:06 inittab
在hadoop用戶下 [hadoop@RedHat tmp]$ echo 123 >> inittab [hadoop@RedHat tmp]$ tail -3 inittab # ln -sf /lib/systemd/system/<target name>.target /etc/systemd/system/default.target # 123
讓developteam組中的所有用戶對testfile有讀寫權限
[root@RedHat tmp]# mkdir testfile [root@RedHat tmp]# getfacl testfile # file: testfile # owner: root # group: root user::rwx group::r-x other::r-x [root@RedHat tmp]# setfacl -m g:developteam:rw testfile [root@RedHat tmp]# getfacl testfile/ # file: testfile/ # owner: root # group: root user::rwx group::r-x group:developteam:rw- mask::rwx other::r-x
用戶訪問文件 權限應用次序 用戶進程匹配如下:
owner --> group--> other
owner --> facl,user --> group --> facl,group --> other