歡迎光臨
每天分享高質量文章

使用 ACL 設置用戶訪問指定檔案/目錄的權限 | Linux 中國

ACL 表示訪問控制串列(Access Control List,ACL),它為檔案系統提供了附加的、更具有彈性的權限機制。 它被設計來為補充 UNIX 檔案權限機制。
— Magesh Maruthamuthu


本文導航
編譯自 | https://www.2daygeek.com/how-to-configure-access-control-lists-acls-setfacl-getfacl-linux/ 
 作者 | Magesh Maruthamuthu
 譯者 | lujun9972

當提到檔案和目錄的權限時,你的第一反應可能是“屬主/群組/其它”權限。 這些權限可以通過 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。

  1. # tune2fs -l /dev/sdb1 | grep options

  2. Default mount options: (none)

上面的輸出很明顯第說明 /dev/sdb1 分割槽沒有啟用 ACL。

如果結果中沒有列出 acl,則你需要在掛載選項中加上 acl。 為了讓它永久生效, 修改 /etc/fstab 中 /app 這一行成這樣:

  1. # more /etc/fstab

  2. UUID=f304277d-1063-40a2-b9dc-8bcf30466a03 / ext4 defaults 1 1

  3. /dev/sdb1        /app ext4 defaultsacl 1 1

或者,你也可以使用下麵命令將其添加道檔案系統的超級塊中:

  1. # tune2fs -o +acl /dev/sdb1

現在,通過運行以下命令來動態修改選項:

  1. # mount -o remount,acl /app

再次運行 tune2fs 命令來看選項中是否有 acl 了:

  1. # tune2fs -l /dev/sdb1 | grep options

  2. Default mount options acl

嗯,現在 /dev/sdb1 分割槽中有 ACL 選項了。

如何查看預設的 ACL 值

要查看檔案和目錄預設的 ACL 值,可以使用 getfacl 命令後面加上檔案路徑或者目錄路徑。 註意, 當你對非 ACL 檔案/目錄運行 getfacl 命令時, 則不會顯示附加的 user和 mask 引數值。

  1. # getfacl /etc/apache2/apache2.conf

  2. # file etc/apache2/apache2.conf

  3. # owner root

  4. # group root

  5. user::rw-

  6. group::r--

  7. other::r--

如何為檔案設置 ACL

以下麵格式運行 setfacl 命令可以為指定檔案設置 ACL。在下麵的例子中,我們會給 magi 用戶對 /etc/apache2/apache2.conf 檔案 rwx 的權限。

  1. # setfacl -m u:magi:rwx /etc/apache2/apache2.conf

仔細分析起來:

◈ setfacl: 命令
◈ -m: 修改檔案的當前 ACL
◈ u: 指明用戶
◈ magi: 用戶名
◈ rwx: 要設置的權限
◈ /etc/apache2/apache2.conf: 檔案名稱

再查看一次新的 ACL 值:

  1. # getfacl /etc/apache2/apache2.conf

  2. # file etc/apache2/apache2.conf

  3. # owner root

  4. # group root

  5. user::rw-

  6. user:magi:rwx

  7. group::r--

  8. mask::rwx

  9. other::r--

註意: 若你發現檔案或目錄權限後面有一個加號(+),就表示設置了 ACL。

  1. # ls -lh /etc/apache2/apache2.conf

  2. -rw-rwxr--+ 1 root root 7.1K Sep 19 14:58 /etc/apache2/apache2.conf

如何為目錄設置 ACL

以下麵格式運行 setfacl 命令可以遞迴地為指定目錄設置 ACL。在下麵的例子中,我們會將 /etc/apache2/sites-available/ 目錄中的 rwx 權限賦予 magi 用戶。

  1. # setfacl -Rm u:magi:rwx /etc/apache2/sites-available/

其中:

◈ -R: 遞迴到子目錄中

再次查看一下新的 ACL 值。

  1. # getfacl /etc/apache2/sites-available/

  2. # file etc/apache2/sites-available/

  3. # owner root

  4. # group root

  5. user::rwx

  6. user:magi:rwx

  7. group::r-x

  8. mask::rwx

  9. other::r-x

現在 /etc/apache2/sites-available/ 中的檔案和目錄都設置了 ACL。

  1. # ls -lh /etc/apache2/sites-available/

  2. total 20K

  3. -rw-rwxr--+ 1 root root 1.4K Sep 19 14:56 000-default.conf

  4. -rw-rwxr--+ 1 root root 6.2K Sep 19 14:56 default-ssl.conf

  5. -rw-rwxr--+ 1 root root 1.4K Dec 8 02:57 mywebpage.com.conf

  6. -rw-rwxr--+ 1 root root 1.4K Dec 7 19:07 testpage.com.conf

如何為組設置 ACL

以下麵格式為指定檔案運行 setfacl 命令。在下麵的例子中,我們會給 appdev 組賦予 /etc/apache2/apache2.conf 檔案的 rwx 權限。

  1. # setfacl -m g:appdev:rwx /etc/apache2/apache2.conf

其中:

◈ g: 指明一個組

對多個用戶和組授權,只需要用 逗號 區分開,就像下麵這樣。

  1. # setfacl -m u:magi:rwx,g:appdev:rwx /etc/apache2/apache2.conf

如何刪除 ACL

以下麵格式運行 setfacl 命令會刪除檔案對指定用戶的 ACL。這隻會刪除用戶權限而保留 mask 的值為只讀。

  1. # setfacl -x u:magi /etc/apache2/apache2.conf

其中:

◈ -x: 從檔案的 ACL 中刪除

再次查看 ACL 值。在下麵的輸出中我們可以看到 mask 的值是讀。

  1. # getfacl /etc/apache2/apache2.conf

  2. # file etc/apache2/apache2.conf

  3. # owner root

  4. # group root

  5. user::rw-

  6. group::r--

  7. mask::r--

  8. other::r--

使用 -b 來刪除檔案中所有的 ACL。

  1. # setfacl -b /etc/apache2/apache2.conf

其中:

◈ -b: 刪除所有的 ACL 條目

再次查看刪掉後的 ACl 值就會發現所有的東西都不見了,包括 mask 的值也不見了。

  1. # getfacl /etc/apache2/apache2.conf

  2. # file etc/apache2/apache2.conf

  3. # owner root

  4. # group root

  5. user::rw-

  6. group::r--

  7. other::r--

如何備份並還原 ACL

下麵命令可以備份和還原 ACL 的值。要製作備份, 需要進入對應的目錄然後這樣做(假設我們要備份 sites-available 目錄中的 ACL 值)。

  1. # cd /etc/apache2/sites-available/

  2. # getfacl -R * > acl_backup_for_folder

還原的話,則運行下麵命令:

  1. # 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[2] 譯者:lujun9972 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出

LCTT 譯者

lujun9972 ? ? ? ?
共計翻譯:51 篇
貢獻時間:39 天


推薦文章

< 左右滑動查看相關文章 >

點擊圖片、輸入文章 ID 或識別二維碼直達

赞(0)

分享創造快樂

© 2022 知識星球   网站地图