Linux系統中傳統的權限設定方法比較簡單,僅有3種身份、3種權限而已,通過配合chmod和chown等指令來對檔案的權限或所有者進行設定。如果要進行比較複雜的權限設定,例如某個目錄要開放給某個特定的使用者使用時,這些傳統的方法就無法滿足要求了。
例如對于/home/project目錄,該目錄的所有者是student使用者,所屬組是users組,預設權限是770。現在有個名為natasha的使用者,屬于natasha組,希望能夠對/home/project目錄具有讀寫執行權限;還有一個名為instructor的使用者,屬于instructor組,希望能夠對/home/project目錄具有讀取和執行權限。
很明顯,利用chmod或chown指令是無法完成這個要求的。因而,Linux系統提供了ACL(Access Control List)專門來完成這種細部權限設定。
設定ACL使用的是setfacl指令,該指令格式如下:
setfacl [選項] 設定值 檔案名
常用選項:
-m,設定一個ACL規則。
-x,取消一個ACL規則。
-b,取消所有的ACL規則。
例:設定natasha對/home/project目錄具有rwx權限。
[root@localhost ~]# setfacl -m u:natasha:rwx /home/project/
[root@localhost ~]# ll -d /home/project/
drwxrwxrwx+ 2 student users 4096 12月 2 16:43 /home/project/
設定完ACL後,檢視檔案詳細資訊時在權限部分會多出一個“+”的辨別,代表檔案啟用了ACL權限。
下面再設定instructor使用者對/home/project目錄具有r-x權限。
[root@localhost ~]# setfacl -m u:instructor:r-x /home/project/
通過getfacl指令可以來檢視ACL權限。
[root@localhost ~]# getfacl /home/project/
getfacl: Removing leading '/' from absolute path names
# file: home/project/
# owner: student
# group: users
user::rwx
user:instructor:r-x
user:natasha:rwx
group::rwx
mask::rwx
other::rwx
通過“setfacl –m”指令可以來修改ACL。
例:将instructor使用者的權限修改為rwx。
[root@localhost ~]# setfacl -m u:instructor:rwx /home/project/
通過“setfacl -x”指令可以從ACL中去除某個使用者。
例:将instructor使用者從ACL中去除。
[root@localhost ~]# setfacl -x u:instructor /home/project/
ACL可以針對使用者設定,也可以針對使用者組設定。要使用ACL必須要有檔案系統的支援,Linux中标準的EXT2/EXT3/EXT4檔案系統都支援ACL功能。但是要注意,RHEL6中預設的檔案系統支援ACL,如果是新挂載的分區,則不支援ACL應用,可以在挂載檔案系統時使用“-o acl”選項啟動ACL支援。
例:将/dev/sdb1分區挂載到/home目錄,并啟動ACL支援。檔案系統挂載之後,通過mount指令确認ACL已啟動。
[root@localhost ~]# mount -o acl /dev/sdb1 /home
[root@localhost ~]# mount | grep home
/dev/sdb1 on /home type ext4 (rw,acl)
如果想要在系統啟動時自動應用ACL功能,則需要修改/etc/fstab檔案,添加以下行:
[root@localhost ~]# vim /etc/fstab
/dev/sdb1 /home ext4 defaults,acl 0 0
ACL用于提供額外權限,主要用來對權限進行微調。在系統中設定權限時,主要還是應該依靠chmod、chown這些傳統的方法,而不能以ACL為主,否則維護起來會比較吃力。
因而當在生産環境中設定權限時,建議先用chmod、chown設定總體權限,然後根據需要再用ACL設定細部權限。
本文轉自 yttitan 51CTO部落格,原文連結:http://blog.51cto.com/yttitan/1577458