ACL(Access Control List)即存取控制清單。主要是針對單一使用者,單一檔案或目錄進行rwx許可權的細部設定。可以針對使用者(User)、群組(Group)、預設屬性掩碼(mask)進行設定。ACL是Linux系統許可權額外支援的一項功能,需要檔案系統的支援,例如:ReiserFS , EXT2 , EXT3 , EXT4 , JFS , XFS等都支援ACL功能。 *擁有ACL功能:
 - [root@rhel6 ~]# mount -o acl /dev/iscsi/sharedisk /data/ 
 
 - [root@rhel6 ~]# mount | grep sharedisk 
 
 - /dev/mapper/iscsi-sharedisk on /data type ext4 (rw,acl) 
 
 
 - 註:如果是用tune2fs命令啟用分區的ACL功能,用mount命令是看不到的. 
 
 - [root@rhel6 ~]# tune2fs -o acl /dev/iscsi/sharedisk 
 
 - [root@rhel6 ~]# tune2fs -l /dev/iscsi/sharedisk | grep -i "default mount option"
 
 - Default mount options: acl 
 
 - [root@rhel6 ~]# umount /data/ 
 
 - [root@rhel6 ~]# mount /dev/iscsi/sharedisk /data/ 
 
 - [root@rhel6 ~]# mount | grep sharedisk 
 
 - /dev/mapper/iscsi-sharedisk on /data type ext4 (rw) 
 
ACL相關設定命令getfacl:擷取檔案或目錄的ACL設定資訊.setfac:設定檔案或目錄的ACL設定資訊.chacl:同setfacl,也是用來設定ACL設定資訊(不常用).
 - [root@rhel6 data]# setfacl --help
 
 - setfacl 2.2.49 -- set file access control lists
 
 - Usage: setfacl [-bkndRLP] { -m|-M|-x|-X ... } file ... 
 
 -  -m, --modify=acl 變更檔或目錄的ACL規則
 
 -  -M, --modify-file=file 從一個檔案讀入ACL設定資訊並以此為模版修改當前檔案或目錄的ACL規則
 
 -  -x, --remove=acl 刪除檔案或目錄指定的ACL規則
 
 -  -X, --remove-file=file 從一個檔案讀入ACL設定資訊並以此為模版刪除當前檔案或目錄的ACL規則
 
 -  -b, --remove-all 刪除檔案或目錄所有的ACL規則
 
 -  -k, --remove-default 刪除檔案或目錄預設的ACL規則
 
 -  --set=acl 設定當前檔案的ACL規則
 
 -  --set-file=file 從檔案讀入ACL規則來設定當前檔案或目錄的ACL規則
 
 -  --mask 重新計算有效許可權,即使ACL mask被明確指定
 
 -  -n, --no-mask 不要重新計算有效許可權。setfacl預設會重新計算ACL mask,除非mask被明確的制定
 
 -  -d, --default 設定目錄預設的ACL規則(只對目錄有效)
 
 -  -R, --recursive 遞迴處理
 
 -  -L, --logical logical walk, follow symbolic links
 
 -  -P, --physical physical walk, do not follow symbolic links
 
 -  --restore=file restore ACLs (inverse of `getfacl -R')
 
 -  --test test mode (ACLs are not modified)
 
註:設定了ACL的目錄或檔案,在屬性的最後一位會出現一個“+”號,查看檔案或目錄所屬群組的準確許可權應該使用getfacl命令。
 
 - 目錄: 
 
 - [root@rhel6 data]# mkdir acl_dir 
 
 - [root@rhel6 data]# ll -d acl_dir 
 
 - drwxr-xr-x. 2 root root 1024 Mar 24 10:29 acl_dir/ 
 
 - [root@rhel6 data]# getfacl acl_dir/ 
 
 - # file: acl_dir 
 
 - # owner: root "基本規則" 
 
 - # group: root 
 
 - user::rwx 
 
 - group::r-x "預設規則" 
 
 - other::r-x 
 
 
 - [root@rhel6 data]# su - user1 
 
 - [user1@rhel6 ~]$ touch /data/acl_dir/acl_user1 
 
 - touch: cannot touch `/data/acl_dir/acl_user1': Permission denied //user1使用者對acl_dir目錄不具有寫入權限,無法建立檔案
 
 - [user1@rhel6 ~]$ exit 
 
 - [root@rhel6 data]# setfacl -m u:user1:rwx acl_dir/ //賦予user1使用者對acl_dir目錄具有讀寫執行的許可權
 
 - [root@rhel6 data]# getfacl --all-effective acl_dir/
 
 - # file: acl_dir 
 
 - # owner: root 
 
 - # group: root 
 
 - user::rwx 
 
 - user:user1:rwx #effective:rwx 
 
 - group::r-x #effective:r-x 
 
 - mask::rwx 
 
 - other::r-x 
 
 - [root@rhel6 data]# su - user1 
 
 - [user1@rhel6 ~]$ touch /data/acl_dir/acl_user1 //可成功建立檔案
 
 - [user1@rhel6 ~]$ ll -d /data/acl_dir/ //acl_dir目錄屬性後面多了一個"+" 
 
 - drwxr-xr-x+ 2 root root 1024 Mar 24 10:33 /data/acl_dir/
 
 - 註:對於目錄而言,必須給予可執行檔許可權,否則無法cd到對應的目錄中
 
 -  
 
 - 檔案: 
 
 - [root@rhel6 data]# touch acl_file 
 
 - [root@rhel6 data]# getfacl acl_file 
 
 - # file: acl_file 
 
 - # owner: root 
 
 - # group: root 
 
 - user::rw- 
 
 - group::r--
 
 - other::r--
 
 - [root@rhel6 data]# su - user1 
 
 - [user1@rhel6 ~]$ echo "access test" > /data/acl_file
 
 - -bash: /data/acl_file: Permission denied //user1使用者對acl_file檔案不具有寫入權限
 
 
 - [root@rhel6 data]# setfacl -m u:user1:rw acl_file //賦予user1使用者對acl_file檔案的讀寫權限
 
 - [root@rhel6 data]# getfacl --all-effective acl_file 
 
 - # file: acl_file 
 
 - # owner: root 
 
 - # group: root 
 
 - user::rw- 
 
 - user:user1:rw- #effective:rw- 
 
 - group::r-- #effective:r--
 
 - mask::rw- 
 
 - other::r--
 
 
 - [root@rhel6 data]# su - user1 
 
 - [user1@rhel6 ~]$ echo "access test" > /data/acl_file //可成功寫入acl_file檔案
 
 - [user1@rhel6 data]$ cat acl_file 
 
 - access test 
 
 
 - [user1@rhel6 ~]$ ll /data/ 
 
 - total 16 
 
 - drwxrwxr-x+ 2 root root 1024 Mar 24 10:33 acl_dir 
 
 - -rw-rw-r--+ 1 root root 12 Mar 24 10:39 acl_file
 
 - drwx------. 2 root root 12288 Mar 24 10:24 lost+found
 
 
 - mask: 
 
 - [root@rhel6 data]# setfacl -m m:r acl_dir/ 
 
 - [root@rhel6 data]# getfacl acl_dir/ 
 
 - # file: acl_dir 
 
 - # owner: root 
 
 - # group: root 
 
 - user::rwx 
 
 - user:user1:rwx #effective:r-- 
 
 - group::r-x 
 
 - mask::r--
 
 - other::r-x 
 
 
 - [root@rhel6 data]# su - user1 
 
 - [user1@rhel6 data]$ cd acl_dir/ 
 
 - -bash: cd: acl_dir/: Permission denied 
 
 -  
 
 - 由於user1使用者在這個目錄上沒有x許可權,所以連這個目錄都不能進入,儘管我們已經賦予user1使用者rwx的ACL設定資訊。 
 
 - 最終許可權由mask控制,許可權必須在mask內,否則相對mask多出來的許可權也是無效的。 
 
 
 - [root@rhel6 data]# mkdir dir 
 
 - [root@rhel6 data]# setfacl -d -m u:user1:rwx dir/ //讓dir/目錄下的所有檔案和目錄繼承dir/目錄的ACL設定資訊 
 
 - [root@rhel6 data]# getfacl dir/ 
 
 - # file: dir/ 
 
 - # owner: root 
 
 - # group: root 
 
 - user::rwx 
 
 - group::r-x 
 
 - other::r-x 
 
 - default:user::rwx 
 
 - default:user:user1:rwx 
 
 - default:group::r-x 
 
 - default:mask::rwx 
 
 - default:other::r-x 
 
 
 - [root@rhel6 data]# touch dir/test 
 
 - [root@rhel6 data]# getfacl dir/test //dir目錄中建立的檔案user1使用者同樣具有rwx許可權
 
 - # file: dir/test 
 
 - # owner: root 
 
 - # group: root 
 
 - user::rw- 
 
 - user:user1:rwx #effective:rw- 
 
 - group::r-x #effective:r--
 
 - mask::rw- 
 
 - other::r--
 
 
 - [root@rhel6 data]# setfacl -x u:user1 acl_file //移除acl_file中的user1的ACL設定 
 
 - [root@rhel6 data]# getfacl acl_file 
 
 - # file: acl_file 
 
 - # owner: root 
 
 - # group: root 
 
 - user::rw- 
 
 - group::r--
 
 - mask::r--
 
 - other::r--
 
 - [root@rhel6 data]# ll acl_file 
 
 - -rw-r--r--+ 1 root root 12 Mar 24 10:39 acl_file //檔案屬性的"+"依然存在
 
 
 
 - [root@rhel6 data]# setfacl -b acl_file //移除acl_file中所有的ACL設定 
 
 - [root@rhel6 data]# getfacl acl_file 
 
 - # file: acl_file 
 
 - # owner: root 
 
 - # group: root 
 
 - user::rw- 
 
 - group::r--
 
 - other::r--
 
 - [root@rhel6 data]# ll acl_file 
 
 - -rw-r--r--. 1 root root 12 Mar 24 10:39 acl_file //檔案屬性的"+"已還原成"."
 
 
 - [root@rhel6 data]# getfacl dir/ > acl.bak //匯出dir目錄的ACL設定資訊 
 
 - [root@rhel6 data]# setfacl --set-file=acl.bak acl_dir/ //將ACL設定資訊匯入acl_dir目錄 
 
 - [root@rhel6 data]# getfacl acl_dir/ 
 
 - # file: acl_dir/ 
 
 - # owner: root 
 
 - # group: root 
 
 - user::rwx 
 
 - group::r-x 
 
 - other::r-x 
 
 - default:user::rwx 
 
 - default:user:user1:rwx 
 
 - default:group::r-x 
 
 - default:mask::rwx 
 
 - default:other::r-x