2021-05-12 14:32:11
使用 ACL 設定使用者存取指定檔案/目錄的許可權
當提到檔案和目錄的許可權時,你的第一反應可能是“屬主/群組/其它”許可權。 這些許可權可以通過 chmod
、 chown
等命令來修改。
檔案和目錄都有屬主 (檔案所有者 )、群組 (所屬組) 以及其它許可權,這些許可權構成一個集合。 然而這些許可權集合有它的侷限性,無法做到為不同的使用者設定不同的許可權。
Linux 對檔案和目錄有以下預設許可權。
- 檔案 ->
644
->-rw-r-r-
(所有者有讀寫許可權,組成員有唯讀許可權, 其他人也只有讀許可權) - 目錄 ->
755
->drwxr-xr-x
(所有者有讀、寫和執行許可權,組成員有讀和執行的許可權,其他人也有讀和執行的許可權)
比如: 預設情況下,所有者可以存取和編輯他們自己主目錄中的檔案, 也可以存取相關同組人的檔案,但他們不能修改這些檔案,因為組成員沒有寫許可權,而且讓組成員有寫許可權也是不明智的。 基於同樣的原因,他/她也不能修改其他人的檔案。 然而在某些情況下,多個使用者想要修改同一個檔案, 那該怎麼辦呢?
假設有個名叫 magi
的使用者,他想要修改 httpd.conf
檔案怎麼辦呢? 這個檔案是歸 root 使用者所有的,這樣如何授權呢? 為了解決這種情況,存取控制列表Access Control List(ACL)誕生了。
什麼是 ACL?
ACL 表示存取控制列表Access Control List(ACL),它為檔案系統提供了附加的、更具有彈性的許可權機制。 它被設計來為補充 UNIX 檔案許可權機制。 ACL 允許你賦予任何某使用者/組存取某項資源的許可權。 setfacl
與 getfacl
命令會幫助你管理 ACL 而不會有任何麻煩。
什麼是 setfacl?
setfacl
用於設定檔案和目錄的 ACL。
什麼 getfacl?
getfacl
- 獲取檔案的 ACL 。對於每個檔案, getfacl
都會顯示檔名、檔案所有者、所屬組以及ACL。 如果目錄有預設 ACL, getfacl
也會顯示這個預設的 ACL。
如何確認是否啟用了 ACL?
執行 tune2fs
命令來檢查是否啟用了 ACL。
#tune2fs-l /dev/sdb1 |grep options
Defaultmount options:(none)
上面的輸出很明顯第說明 /dev/sdb1
分割區沒有啟用 ACL。
如果結果中沒有列出 acl
,則你需要在掛載選項中加上 acl
。 為了讓它永久生效, 修改 /etc/fstab
中 /app
這一行成這樣:
#more/etc/fstab
UUID=f304277d-1063-40a2-b9dc-8bcf30466a03/ ext4 defaults 11
/dev/sdb1 /app ext4 defaults,acl 11
或者,你也可以使用下面命令將其新增道檔案系統的超級塊中:
#tune2fs-o +acl /dev/sdb1
現在,通過執行以下命令來動態修改選項:
#mount-o remount,acl /app
再次執行 tune2fs
命令來看選項中是否有 acl
了:
#tune2fs-l /dev/sdb1 |grep options
Defaultmount options: acl
嗯,現在 /dev/sdb1
分割區中有 ACL 選項了。
如何檢視預設的 ACL 值
要檢視檔案和目錄預設的 ACL 值,可以使用 getfacl
命令後面加上檔案路徑或者目錄路徑。 注意, 當你對非 ACL 檔案/目錄執行 getfacl
命令時, 則不會顯示附加的 user
和 mask
引數值。
# getfacl /etc/apache2/apache2.conf
#file: etc/apache2/apache2.conf
# owner: root
# group: root
user::rw-
group::r--
other::r--
如何為檔案設定 ACL
以下面格式執行 setfacl
命令可以為指定檔案設定 ACL。在下面的例子中,我們會給 magi
使用者對 /etc/apache2/apache2.conf
檔案 rwx
的許可權。
#setfacl-m u:magi:rwx /etc/apache2/apache2.conf
仔細分析起來:
setfacl
: 命令-m
: 修改檔案的當前 ACLu
: 指明使用者magi
: 使用者名稱rwx
: 要設定的許可權/etc/apache2/apache2.conf
: 檔名稱
再檢視一次新的 ACL 值:
# getfacl /etc/apache2/apache2.conf
#file: etc/apache2/apache2.conf
# owner: root
# group: root
user::rw-
user:magi:rwx
group::r--
mask::rwx
other::r--
注意: 若你發現檔案或目錄許可權後面有一個加號(+
),就表示設定了 ACL。
#ls-lh /etc/apache2/apache2.conf
-rw-rwxr--+1 root root 7.1KSep1914:58/etc/apache2/apache2.conf
如何為目錄設定 ACL
以下面格式執行 setfacl
命令可以遞回地為指定目錄設定 ACL。在下面的例子中,我們會將 /etc/apache2/sites-available/
目錄中的 rwx
許可權賦予 magi
使用者。
#setfacl-Rm u:magi:rwx /etc/apache2/sites-available/
其中:
-R
: 遞回到子目錄中
再次檢視一下新的 ACL 值。
# getfacl /etc/apache2/sites-available/
#file: etc/apache2/sites-available/
# owner: root
# group: root
user::rwx
user:magi:rwx
group::r-x
mask::rwx
other::r-x
現在 /etc/apache2/sites-available/
中的檔案和目錄都設定了 ACL。
#ls-lh /etc/apache2/sites-available/
total 20K
-rw-rwxr--+1 root root 1.4KSep1914:56000-default.conf
-rw-rwxr--+1 root root 6.2KSep1914:56default-ssl.conf
-rw-rwxr--+1 root root 1.4KDec802:57 mywebpage.com.conf
-rw-rwxr--+1 root root 1.4KDec719:07 testpage.com.conf
如何為組設定 ACL
以下面格式為指定檔案執行 setfacl
命令。在下面的例子中,我們會給 appdev
組賦予 /etc/apache2/apache2.conf
檔案的 rwx
許可權。
#setfacl-m g:appdev:rwx /etc/apache2/apache2.conf
其中:
g
: 指明一個組
對多個使用者和組授權,只需要用 逗號
區分開,就像下面這樣。
#setfacl-m u:magi:rwx,g:appdev:rwx /etc/apache2/apache2.conf
如何刪除 ACL
以下面格式執行 setfacl
命令會刪除檔案對指定使用者的 ACL。這只會刪除使用者許可權而保留 mask
的值為唯讀。
#setfacl-x u:magi /etc/apache2/apache2.conf
其中:
-x
: 從檔案的 ACL 中刪除
再次檢視 ACL 值。在下面的輸出中我們可以看到 mask
的值是讀。
# getfacl /etc/apache2/apache2.conf
#file: etc/apache2/apache2.conf
# owner: root
# group: root
user::rw-
group::r--
mask::r--
other::r--
使用 -b
來刪除檔案中所有的 ACL。
#setfacl-b /etc/apache2/apache2.conf
其中:
-b
: 刪除所有的 ACL 條目
再次檢視刪掉後的 ACl 值就會發現所有的東西都不見了,包括 mask
的值也不見了。
# getfacl /etc/apache2/apache2.conf
#file: etc/apache2/apache2.conf
# owner: root
# group: root
user::rw-
group::r--
other::r--
如何備份並還原 ACL
下面命令可以備份和還原 ACL 的值。要製作備份, 需要進入對應的目錄然後這樣做(假設我們要備份 sites-available
目錄中的 ACL 值)。
#cd/etc/apache2/sites-available/
# getfacl -R *> acl_backup_for_folder
還原的話,則執行下面命令:
#setfacl--restore=/etc/apache2/sites-available/acl_backup_for_folder
via: https://www.2daygeek.com/how-to-configure-access-control-lists-acls-setfacl-getfacl-linux/
作者:Magesh Maruthamuthu 譯者:lujun9972 校對:wxy
本文永久更新連結地址:http://www.linuxidc.com/Linux/2018-01/150110.htm
相關文章