1. 程式人生 > >linux特殊的檔案許可權之ACL許可權

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許可權