1. 程式人生 > 實用技巧 >ACL許可權以及Linux對許可權的判斷順序

ACL許可權以及Linux對許可權的判斷順序

ACL許可權

ACL許可權是對UGO許可權的擴充套件。基本UGO許可權將檔案的作用目標分為三類,其中O這一類包含的使用者太籠統,如果我們想單獨設定某個使用者或某個組對檔案的某種許可權,則可使用ACL(Access Control List)。

ACL可以針對單一使用者、單一組、單一檔案或目錄來進行r、w、x的許可權控制。

CentOS 7預設支援ACL,Centos6及以前系統可能需要手動開啟。

獲取檔案的許可權資訊:

getfacl命令

會顯示基本許可權資訊以及ACL許可權。

[chirou@duorou ~ ]$ getfacl demo/
# file: demo/		# 檔名
# owner: chirou		# 屬主
# group: chirou		# 屬組
user::rwx			# 屬主許可權
group::rwx			# 屬組許可權
other::r-x			# 其他人許可權
user:libai:rwx		# 針對李白使用者所設定的許可權

設定ACL許可權

setfacl命令

  • -m:設定許可權
  • -R:遞迴設定
  • -x:刪除單個許可權
  • -b:刪除所有ACL許可權
注:對使用者和組設定ACL許可權時,使用者和組必須事先存在。
# 修改屬主的許可權
setfacl -m u::許可權 /PATH/File

# 修改屬組的許可權
setfacl -m g::許可權 /PATH/File

# 修改其他人的許可權
setfacl -m o::許可權 /PATH/File

# 修改具體某一個使用者的許可權
setfacl -m u:使用者名稱:許可權 /PATH/File

# 修改具體某一個組的許可權
setfacl -m g:組名:許可權 /PATH/File

# 刪除某個組的許可權
setfacl -x g:group /PATH/File

# 刪除某個使用者的許可權
setfacl -x u:user /PATH/File

# 刪除所有ACL許可權
setfacl -b /PATH/File

# 遞迴設定目錄內所有檔案,注意-R選項要在設定的許可權後面。
setfacl -m u:使用者名稱:許可權 -R /PATH/File

# 設定mask值
setfacl -m m:rwx /PATH/File
  • default:繼承/預設,設定繼承許可權後,在該目錄內建立檔案,會繼承目錄的ACL許可權。對已存在的檔案沒有影響。default只會對設定的許可權有效,設定繼承許可權後再更改目錄的許可權不會對繼承許可權有影響。
# 設定某檔案的繼承許可權,在原設定ACL許可權前面加上d:即可
setfacl -m d:u:user:r /PATH/File

# 設定繼承許可權panghu使用者對目錄有讀許可權
[chirou@duorou ~ ]$ setfacl -m d:u:panghu:r demo/
[chirou@duorou ~ ]$ getfacl demo/
# file: demo/
# owner: chirou
# group: chirou
user::rwx
group::rwx
other::r-x
default:user::rwx
default:user:panghu:r--
default:group::rwx
default:mask::rwx
default:other::r-x

# 修改其他人的許可權後,default許可權不會變化
[chirou@duorou ~ ]$ setfacl -m o::rwx demo/
[chirou@duorou ~ ]$ getfacl demo/
# file: demo/
# owner: chirou
# group: chirou
user::rwx
group::rwx
other::rwx
default:user::rwx
default:user:panghu:r--
default:group::rwx
default:mask::rwx
default:other::r-x

# 新建的目錄會繼承許可權。
[chirou@duorou ~ ]$ mkdir demo/d1/d2 ; getfacl demo/d1/d2
# file: demo/d1/d2
# owner: chirou
# group: chirou
user::rwx
user:panghu:r--
user:libai:rwx
group::rwx
mask::rwx
other::r-x
default:user::rwx
default:user:panghu:r--
default:user:libai:rwx
default:group::rwx
default:mask::rwx
default:other::r-x

# 刪除某個繼承許可權
[chirou@duorou ~ ]$ setfacl -x d:u:panghu demo/
建議:為了方便管理檔案許可權,應將其他人的許可權設定為空。
chmod o=- /PATH/File

mask值:

mask值能限制最大許可權,除了屬主和other不受影響,其他使用者(包括屬組、單獨設定的某個組、單獨設定的某個使用者)都需要與mask值進行按位與運算之後得出的結果才是最後真正生效的值。

如果先設定mask值,再使用chmod修改許可權或setfacl修改某個使用者或組的許可權,mask值也會發生改變。所以用了ACL設定許可權後,不要用chmod改變許可權,會影響已設定的ACL許可權和mask值。

當設定了ACL之後,原來顯示的屬組許可權,會變成mask許可權。

注:一般而言不用更改mask許可權,只要賦予mask最大許可權(rwx),則給使用者或群組設定的ACL許可權本身就是有效的。

設定了ACL許可權的檔案會在基礎許可權後面顯示一個加號。

ACL許可權對root無效。
# 將root對demo目錄的許可權置空。
[chirou@duorou ~ ]$ setfacl -m u:root:- demo/

# root一樣能進入目錄並刪除檔案。
[root@duorou chirou ]# cd demo/
[root@duorou demo ]# getfacl .
# file: .
# owner: chirou
# group: chirou
user::rwx
user:root:---
group::rwx
mask::rwx
other::r-x

[root@duorou demo ]# ls
d1  d2  d3  f1  fff
[root@duorou demo ]# rm -rf fff

系統判斷許可權順序

  • 1、首先判斷使用者是否是屬主,如果是則以屬主的許可權為準,如果不是則往下判斷。
  • 2、判斷使用者是否有ACL許可權,如果有則以ACL許可權effective為準,如果effective為空,則繼續往下判斷。
  • 3、判斷使用者是否屬於屬組,如果屬於則以屬組許可權為準,如果不是則往下判斷。
  • 4、使用者既不是屬主或屬組成員,effective許可權也為空,那麼就會以other的許可權為準。
[chirou@duorou ~ ]$ setfacl -m u:libai:r demo/
# 使用mask將libai使用者的許可權置空
[chirou@duorou ~ ]$ setfacl -m m:- demo/
[chirou@duorou ~ ]$ getfacl demo/
# file: demo/
# owner: chirou
# group: chirou
user::rwx
user:libai:r--			#effective:---
group::rw-			#effective:---
mask::---
other::rw-

# libai使用者與ACL許可權匹配為空,然後會再與other許可權匹配,所以擁有對demo目錄的讀和寫許可權。
[chirou@duorou ~ ]$ sudo -u libai ls /home/chirou/demo
d1  f1
[chirou@duorou ~ ]$ rm -rf /home/chirou/demo/f1