linux特殊的檔案許可權之ACL許可權
1、ACL許可權簡介
按之前學習的linux基本許可權的知識,linux中的一個檔案(或資料夾)有三個使用者身份,所有者,所屬組,其他人等。在上圖,如果給一個資料夾/av設定所有者Tony為:rwx許可權,所屬組stu為:rwx許可權,其他人為無許可權,但現在想給老王設定許可權:r-x許可權,而且不去改變現有的資料夾的基本許可權設定,那麼該怎麼辦呢?這就需要用到ACL許可權的知識。
2、檢視分割槽ACL許可權是否開啟
我們看某個檔案(Linux系統中目錄也是檔案,一切皆是檔案)是否支援 ACL 許可權,首先要看檔案所在的分割槽是否支援 ACL 許可權。
①、檢視當前系統有哪些分割槽:df -h
②、檢視指定分割槽詳細檔案資訊:dumpe2fs -h 分割槽路徑
3、開啟分割槽ACL許可權
①、臨時開啟分割槽 ACL 許可權
mount -o remount,acl 分割槽名稱
如mount -o remount,acl /
重新掛載根分割槽,並掛載加入 acl 許可權。注意這種命令開啟方式,如果系統重啟了,那麼根分割槽許可權會恢復到初始狀態。
②、永久開啟分割槽 ACL 許可權
一、修改配置檔案 /etc/fstab
二、重新掛載檔案系統或重啟系統,使得修改生效(但要小心,/etc/fstab千萬別寫錯了,否則重新掛載可能會使系統崩潰)
mount -o remount /
4、ACL許可權檢視與設定
①、檢視ACL命令
getfacl 檔名
# 檢視ACL許可權
②、設定ACL許可權
setfacl 選項 檔名
給使用者設定ACL許可權: setfacl -m u:使用者名稱:許可權 指定檔名
給使用者組設定ACL許可權: setfacl -m g:組名:許可權 指定檔名
選項 | 說明 |
-m | 設定ACL許可權 |
-x | 刪除指定的ACL許可權 |
-b | 刪除所有的ACL許可權 |
-d | 設定預設ACL許可權 |
-k | 刪除預設ACL許可權 |
-R | 遞迴設定ACL許可權 |
注意:我們給使用者或使用者組設定 ACL 許可權其實並不是真正我們設定的許可權,是與 mask 的許可權“相與”之後的許可權才是使用者的真正許可權,一般預設mask許可權都是rwx,與我們所設定的許可權相與就是我們設定的許可權。mask 許可權下面我們會詳細講解。
範例:
所有者root使用者在根目錄下建立一個檔案目錄/project,然後建立一個QQ群所屬組,所屬組裡面建立兩個使用者zhangsan和lisi。所有者和所屬組許可權和其他人許可權是770。然後建立一個旁聽使用者 pt,給他設定/project目錄的 ACL 為 r-x。
目錄 /project 的所有者和所屬組其他人許可權設定為 770。接下來我們建立旁聽使用者 pt,並賦予 acl 許可權 rx
為了驗證 pt 使用者對於 /project 目錄沒有寫許可權,我們用 su 命令切換到 pt 使用者,然後進入 /project 目錄,在此目錄下建立檔案,看是否能成功:
上面提示許可權不夠,說明 acl 許可權賦予成功,注意如下所示,如果某個目錄或檔案下有 + 標誌,說明其具有 acl 許可權。
5、最大有效許可權mask及刪除acl許可權
前面第4點我們講過,我們給使用者或使用者組設定 ACL 許可權其實並不是真正我們設定的許可權,是與 mask 的許可權“相與”之後的許可權才是使用者的真正許可權,一般預設mask許可權都是rwx,與我們所設定的許可權相與就是我們設定的許可權。有時我們對於某個檔案不想讓別人設定寫(w)的acl許可權,這時就可以改變mask的值為:rx即(r-x)即可。那麼我們怎麼設定呢?
setfacl -m m:許可權 檔名
6、刪除 ACL 許可權
①、刪除指定使用者的 ACL 許可權
setfacl -x u:使用者名稱 檔名
②、刪除指定使用者組的 ACL 許可權
setfacl -x g:組名 檔名
③、刪除檔案的所有 ACL 許可權
setfacl -b 檔名
7、預設ACL許可權和遞迴ACL許可權
①、通過加上選項 -R 遞迴設定檔案的 ACL 許可權,所有的子目錄和子檔案也會擁有相同的 ACL 許可權。
setfacl -m u:使用者名稱:許可權 -R 檔名
②、如果給父目錄設定了預設的 ACL 許可權,那麼父目錄中所有新建的子檔案會繼承父目錄的 ACL 許可權。
setfacl -m d:u:使用者名稱:許可權 檔名 # d是default的意思
參考連結:
Linux系列教程(十六)——Linux許可權管理之ACL許可權