了解Linux命令setfacl

Setfacl實用程序設置文件和目錄的訪問控制列表(ACL)。 在命令行中 ,一系列命令之後是一系列文件(接下來可以跟著另一個命令序列......)。

選項-m-x在命令行上需要一個ACL。 多個ACL條目由逗號字符(`,')分隔。 選項-M-X從文件或標準輸入讀取ACL。 ACL條目格式在ACL ENTRIES部分中描述。

--set--set-file選項設置文件或目錄的ACL。 之前的ACL被替換。 此操作的ACL條目必須包含權限。

-m(--modify)-M(--modify-file)選項修改文件或目錄的ACL。 此操作的ACL條目必須包含權限。

-x( -- remove -X(-- remove -file)選項刪除ACL enries。 除非定義了POSIXLY_CORRECT,否則只有不帶perms字段的ACL條目才被接受為參數。

當使用-M-X選項從文件讀取時,setfacl接受getfacl產生的輸出。 每行至多有一個ACL條目。 在磅符號(`#')之後,直到行尾的所有內容都被視為註釋。

如果在不支持ACL的文件系統上使用setfacl,setfacl將在文件模式權限位上運行。 如果ACL不能完全符合權限位,setfacl將修改文件模式權限位以盡可能接近地反映ACL,將錯誤消息寫入標準錯誤,並返回退出狀態大於0的狀態。

概要

setfacl [-bkndRLPvh] [{-m | -x} acl_spec] [{-M | -X} acl_file]文件...

setfacl --restore =文件

PERMISSIONS

具有CAP_FOWNER能力的文件所有者和進程被授予修改文件ACL的權利。 這與訪問文件模式所需的權限類似。 (在當前的Linux系統上,root是唯一具有CAP_FOWNER功能的用戶。)

OPTIONS

-b,--remove-all

刪除所有擴展ACL條目。 所有者,組和其他人的基本ACL條目將被保留。

-k,--remove-default

刪除默認ACL。 如果不存在默認ACL,則不會發出警告。

-n,--no-mask

不要重新計算有效的權利掩碼。 setfacl的默認行為是重新計算ACL掩碼條目,除非明確指定掩碼條目。 掩碼條目設置為擁有組的所有權限的聯合,以及所有已命名的用戶和組條目。 (這些正是受掩碼條目影響的條目)。

- 面具

即使明確給出ACL掩碼條目,也要重新計算有效的權限掩碼。 (請參閱-n選項。)

-d, - 默認

所有操作都適用於默認ACL。 輸入集中的常規ACL條目將被提升為默認ACL條目。 輸入集中的默認ACL條目將被丟棄。 (如果發生這種情況,會發出警告)。

--restore =文件

恢復由`getfacl -R'或類似命令創建的權限備份。 使用此機制恢復完整目錄子樹的所有權限。 如果輸入包含所有者註釋或組註釋,並且setfacl由root運行,則所有文件的所有者和擁有組也將被恢復。 除了`--test'外,該選項不能與其他選項混合使用。

- 測試

測試模式。 列出所產生的ACL,而不是更改任何文件的ACL。

-R, - 遞歸

遞歸地將操作應用於所有文件和目錄。 這個選項不能和`--restore'混合使用。

-L, - 邏輯

邏輯走,遵循符號鏈接。 默認行為是遵循符號鏈接參數,並跳過子目錄中遇到的符號鏈接。 這個選項不能和`--restore'混合使用。

-P, - 物理

物理漫步,跳過所有符號鏈接。 這也跳過了符號鏈接參數。 這個選項不能和`--restore'混合使用。

- 版

打印setfacl的版本並退出。

- 幫幫我

打印幫助解釋命令行選項。

命令行選項結束。 所有剩餘的參數都被解釋為文件名,即使它們以破折號開頭。

如果文件名參數是單個破折號,則setfacl從標準輸入讀取文件列表。

ACL入口

setfacl實用程序可識別以下ACL條目格式(為清楚起見,插入了空格):

[d [efault]:] [u [ser]:] uid [: perms ]

指定用戶的權限。 如果uid為空,則文件所有者的權限。

[d [efault]:] g [group]: gid [: perms ]

已命名組的權限。 如果gid為空,則擁有組的權限。

[d [efault]:] m [問] [:] [: 燙髮 ]

有效的權利掩碼

[d [efault]:] o [ther] [:] [: perms ]

其他人的權限。

分隔符和非分隔符之間的空格被忽略。

正確的ACL條目包括權限在修改和設置操作中使用。 (選項-m-M ,-- set--set-file )。 不帶perms字段的條目用於刪除條目(選項-x-X )。

對於uidgid,您可以指定一個名稱或一個數字。

perms字段是指示權限的字符的組合:read (r) ,write (w) ,execute (x) ,僅當文件是目錄或已經具有某用戶(X)的執行權限時才執行。 或者, perms字段可以是八進制數字(0-7)。

自動創建的條目

最初,文件和目錄僅包含所有者,組和其他人的三個基本ACL條目。 有一些規則需要滿足才能使ACL有效:

*

三個基本條目不能被刪除。 每個這些基本條目類型必須有一個條目。

*

無論何時ACL包含命名用戶條目或命名組對象,它還必須包含有效的權限掩碼。

*

無論何時ACL包含任何默認ACL條目,三個默認ACL基本條目(默認所有者,默認組和默認其他)也必須存在。

*

每當默認ACL包含命名用戶條目或命名組對象時,它還必須包含默認有效權限掩碼。

為了幫助用戶確保這些規則,setfacl在以下條件下從現有條目創建條目:

*

如果ACL包含已命名的用戶或已命名的組條目,並且不存在掩碼條目,則會創建包含與組條目相同權限的掩碼條目。 除非給出-n選項,否則將對掩碼條目的權限進行進一步調整,以包含受掩碼條目影響的所有權限的聯合。 (請參閱-n選項說明)。

*

如果創建了默認ACL條目,並且默認ACL中不包含所有者,擁有組或其他條目,則會將ACL擁有者,擁有組或其他條目的副本添加到默認ACL中。

*

如果默認ACL包含已命名的用戶條目或已命名的組條目,並且不存在任何掩碼條目,則會添加包含與默認默認ACL的組條目相同權限的掩碼條目。 除非給出-n選項,否則掩碼條目的權限將進一步調整為包含受掩碼條目影響的所有權限的聯合。 (請參閱-n選項說明)。

例子

授予額外的用戶讀取權限

setfacl -mu:lisa:r文件

撤銷所有組和所有指定用戶的寫入權限(使用有效權限掩碼)

setfacl -mm :: rx文件

從文件的ACL中刪除已命名的組條目

setfacl -xg:員工檔案

將一個文件的ACL複製到另一個文件

getfacl file1 | setfacl --set-file = - file2

將訪問ACL複製到默認ACL中

getfacl -a dir | setfacl -d -M- dir

符合POSIX 1003.1e標準草案17

如果定義了環境變量POSIXLY_CORRECT,setfacl的默認行為將如下更改:所有非標準選項都被禁用。 ``default:''前綴被禁用。 -x-X選項也接受權限字段(並忽略它們)。

也可以看看

umask (1),