首頁 > 軟體

使用 ACL 設定使用者存取指定檔案/目錄的許可權

2020-06-16 16:56:58

當提到檔案和目錄的許可權時,你的第一反應可能是“屬主/群組/其它”許可權。 這些許可權可以通過 chmodchown 等命令來修改。

檔案和目錄都有屬主 (檔案所有者 )、群組 (所屬組) 以及其它許可權,這些許可權構成一個集合。 然而這些許可權集合有它的侷限性,無法做到為不同的使用者設定不同的許可權。

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 允許你賦予任何某使用者/組存取某項資源的許可權。 setfaclgetfacl 命令會幫助你管理 ACL 而不會有任何麻煩。

 

什麼是 setfacl?

setfacl 用於設定檔案和目錄的 ACL。

 

什麼 getfacl?

getfacl - 獲取檔案的 ACL 。對於每個檔案, getfacl 都會顯示檔名、檔案所有者、所屬組以及ACL。 如果目錄有預設 ACL, getfacl 也會顯示這個預設的 ACL。

 

如何確認是否啟用了 ACL?

執行 tune2fs 命令來檢查是否啟用了 ACL。

  1. #tune2fs-l /dev/sdb1 |grep options
  2. Defaultmount options:(none)

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

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

  1. #more/etc/fstab
  2. UUID=f304277d-1063-40a2-b9dc-8bcf30466a03/ ext4 defaults 11
  3. /dev/sdb1 /app ext4 defaultsacl 11

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

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

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

  1. #mount-o remount,acl /app

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

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

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

 

如何檢視預設的 ACL 值

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

  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.1KSep1914: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.4KSep1914:56000-default.conf
  4. -rw-rwxr--+1 root root 6.2KSep1914:56default-ssl.conf
  5. -rw-rwxr--+1 root root 1.4KDec802:57 mywebpage.com.conf
  6. -rw-rwxr--+1 root root 1.4KDec719: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 譯者:lujun9972 校對:wxy

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

本文永久更新連結地址http://www.linuxidc.com/Linux/2018-01/150110.htm


IT145.com E-mail:sddin#qq.com