ACL 和 umask 之間的衝突
我有一個目錄,可以由幾個 unix 組讀取和寫入。這是通過使用 ACL 來實現的。假設我是這樣做的:
mkdir /tmp/test setfacl -d -m g:group1:rwx /tmp/test
效果很好,整個組(以及我添加的其他組)都可以讀/寫到這個目錄。但是有一個例外:當有人使用創建子文件夾時,
mkdir -p
這個目錄是用 unix 權限 0755 創建的,因為預設的 umask 是 022。這導致該組的其他使用者不能再寫入這個子文件夾的問題,因為ACL 現在看起來像這樣:group:group1:rwx #effective:r-x
由於某種原因,使用“mkdir”(沒有 -p 參數)時不會發生這種情況。一種解決方案是將 umask 設置為 002 但這確實是一件壞事,因為這也會影響在 ACL 控制的目錄之外創建的文件和目錄,並且這些文件預設情況下不應是組可寫的。
所以我想知道是否有另一種可能性來解決這個問題。能夠完全禁用/忽略 ACL 控制目錄的舊 unix 樣式權限內容將是完美的。或者禁用這個“有效的 ACL”的東西。那可能嗎?或者是否有另一種方法來解決由“mkdir -p”之類的程序引起的不可寫目錄的問題?最後,我想要一個根據我配置的 ACL 完全(並且遞歸)可讀和可寫的目錄,並且這永遠不會改變(僅通過修改 ACL 本身)。
注意:重現問題:
$ mkdir /tmp/test $ setfacl -d -m g:group1:rwx /tmp/test $ umask 0022 $ mkdir /tmp/test/aa $ mkdir -p /tmp/test/bb $ ls -log /tmp/test drwxrwxr-x+ 2 4096 Mar 9 23:38 aa drwxr-xr-x+ 2 4096 Mar 9 23:38 bb $ getfacl /tmp/test/bb | grep ^group:group1 group:group1:rwx #effective:r-x
這是 gnu 的一個錯誤
mkdir
:http ://savannah.gnu.org/bugs/?19546沒有辦法禁用傳統的 Unix 權限。由於mkdir
工作正常,您可以編寫一個覆蓋mkdir
. 在 shell 函式-p
中,在 args 中查找 a 並執行一系列非 p 使用mkdir
的 s。許多基於 Linux 的系統現在將 umask 0002 與使用者私有組一起使用,因此不會出現此問題。
這是 gnu
mkdir
( #14371 ) 的一個錯誤,它已在 coreutils 8.22 中修復。
- 受影響:Debian Wheezy 7、RHEL/CentOS 5 和 6 受影響(可能還有 Ubuntu Trusty 14.04)
- 不受影響:Debian 8 Jessie、RHEL/CentOS 7(可能還有 Tbuntu Utopic 14.10)
有一些解決方法。
解決方法 #1:包裝器(Mark Wagner 已經建議)
由於 mkdir 有效,您可以編寫一個覆蓋 mkdir 的 shell 函式(或腳本 /usr/local/bin/mkdir,因為這通常在 /bin 之前)。該腳本在 args 中查找 -p,然後遞歸呼叫不帶“-p”的 mkdir。
解決方法 #2:umask 0002
如果您可以控制呼叫 mkdir 的腳本,則可以在呼叫 mkdir 之前設置遮罩:
(umask 0002 ; mkdir -p /path/to/dir)
您的其他問題:
所以我想知道是否有另一種可能性來解決這個問題。能夠完全禁用/忽略 ACL 控制目錄的舊 unix 樣式權限內容將是完美的。
不,兼容性需要權限,另請閱讀為什麼組上的 chmod(1) 會影響 ACL 遮罩?
或者禁用這個“有效的 ACL”的東西。
不