您好,登錄后才能下訂單哦!
這篇文章給大家介紹ACL中怎么設置用戶訪問指定文件/目錄的權限,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
Linux 對文件和目錄有以下默認權限。
文件 -> 644
-> -rw-r-r-
(所有者有讀寫權限,組成員有只讀權限, 其他人也只有讀權限)
目錄 -> 755
-> drwxr-xr-x
(所有者有讀、寫和執行權限,組成員有讀和執行的權限,其他人也有讀和執行的權限)
比如: 默認情況下,所有者可以訪問和編輯他們自己主目錄中的文件, 也可以訪問相關同組人的文件,但他們不能修改這些文件,因為組成員沒有寫權限,而且讓組成員有寫權限也是不明智的。 基于同樣的原因,他/她也不能修改其他人的文件。 然而在某些情況下,多個用戶想要修改同一個文件, 那該怎么辦呢?
假設有個名叫 magi
的用戶,他想要修改 httpd.conf
文件怎么辦呢? 這個文件是歸 root 用戶所有的,這樣如何授權呢? 為了解決這種情況,訪問控制列表(ACL)誕生了。
什么是 ACL?
ACL 表示訪問控制列表(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 optionsDefault mount options: (none)
上面的輸出很明顯第說明 /dev/sdb1
分區沒有啟用 ACL。
如果結果中沒有列出 acl
,則你需要在掛載選項中加上 acl
。 為了讓它***生效, 修改 /etc/fstab
中 /app
這一行成這樣:
# more /etc/fstab UUID=f304277d-1063-40a2-b9dc-8bcf30466a03 / ext4 defaults 1 1/dev/sdb1 /app ext4 defaults,acl 1 1
或者,你也可以使用下面命令將其添加道文件系統的超級塊中:
# tune2fs -o +acl /dev/sdb1
現在,通過運行以下命令來動態修改選項:
# mount -o remount,acl /app
再次運行 tune2fs
命令來看選項中是否有 acl
了:
# tune2fs -l /dev/sdb1 | grep optionsDefault mount 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: rootuser::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
: 修改文件的當前 ACL
u
: 指明用戶
magi
: 用戶名
rwx
: 要設置的權限
/etc/apache2/apache2.conf
: 文件名稱
再查看一次新的 ACL 值:
# getfacl /etc/apache2/apache2.conf # file: etc/apache2/apache2.conf# owner: root# group: rootuser::rw-user:magi:rwxgroup::r--mask::rwxother::r--
注意: 若你發現文件或目錄權限后面有一個加號(+
),就表示設置了 ACL。
# ls -lh /etc/apache2/apache2.conf-rw-rwxr--+ 1 root root 7.1K Sep 19 14: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: rootuser::rwxuser:magi:rwxgroup::r-xmask::rwxother::r-x
現在 /etc/apache2/sites-available/
中的文件和目錄都設置了 ACL。
# ls -lh /etc/apache2/sites-available/total 20K-rw-rwxr--+ 1 root root 1.4K Sep 19 14:56 000-default.conf-rw-rwxr--+ 1 root root 6.2K Sep 19 14:56 default-ssl.conf-rw-rwxr--+ 1 root root 1.4K Dec 8 02:57 mywebpage.com.conf-rw-rwxr--+ 1 root root 1.4K Dec 7 19: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: rootuser::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: rootuser::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
關于ACL中怎么設置用戶訪問指定文件/目錄的權限就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。