Acl

預設 ACL 對新文件和文件夾設置的權限

  • September 4, 2016

我想在文件夾內設置預設權限,以便所有新創建的文件夾和文件都具有此預設權限。

所以我做了一些研究,我發現最好的執行緒就是這個

所以我想出了這個小“測試”:

#!/bin/bash

# setup folder
rm -rf ./test
mkdir ./test
cd ./test

# Reset all files/folders
sudo chmod -R 0000 ./ # delete all permissions
sudo chmod -R -st ./ # remove all special bits
sudo setfacl -Rdx u::,g::,o:: ./ # remove all default user/group permissions

# set new permissions and ownership
sudo chown -R christopher:users ./ # Set user and group for all files/folders
sudo chmod -R 550 ./ # set default permissions to all files/folders
sudo chmod 750 ./ # set folder main permission
sudo setfacl -d -m u::rx ./ # set user default permission (same as 550)
sudo setfacl -d -m g::rx ./ # set group default permission (same as 550)

# test the default permissions
nano myFile # write some data in it and save

現在我想測試它。

首先是getfacl ./什麼創建了這個輸出:

# file: .
# owner: christopher
# group: users
user::rwx
group::r-x
other::---
default:user::r-x
default:group::r-x
default:other::---

在此之後,我還嘗試getfacl ./myFile了以下輸出:

# file: myFile
# owner: christopher
# group: users
user::r--
group::r--
other::---

這顯然不起作用,所以我有兩個問題:

  1. 我究竟做錯了什麼?新創建的文件myFile應該具有權限 r-xr-x— 就像在指定的 setfacl 命令中一樣。那麼為什麼不是這樣呢?
  2. 當我設置 SUID/GUID/OUID 標誌 (sst) 時,這也不起作用。但我也不確定如何使用它們,因為定義說set the SUID or GUID flag on a folder will inherit its own permission to new created files within the folder. 有沒有權限?還是只有所有者使用者/組?
  3. 也許你可以幫我修復我的小腳本。但是,如果您這樣做,仍然存在問題,即我需要新創建的文件夾的不同預設權限以及新創建的文件的預設權限。因為新創建的文件夾應始終獲得 550 權限,而新創建的文件應始終獲得 440 權限。在命令find -type上可以有所不同。所以我可以做一些事情,比如find ./ -type d -exec chmod 550 {} \;立即將所有文件夾的權限設置為 550。(type f文件的模擬)。但這僅適用於已經創建和存在的文件夾/文件。但是對於新創建的文件夾和文件,我需要一些“預設”權限,但兩者的預設權限是分開的。

預設 ACL 設置的權限被創建文件的程序提供的任何模式所掩蓋。通常,創建正常文件的程序將權限設置為0666(即沒有執行位),並讓umask句柄從組和其他人中刪除訪問權限。對於目錄,模式通常設置為0777使 x 位存在,因為它們經常需要。

創建“私有”文件(如 SSH 密鑰)的程序會將權限指定為0600,以確保除了使用者自己之外沒有人可以訪問。

手冊acl(5)說:

對象創建和預設 ACL

  1. 修改文件權限位對應的訪問 ACL 條目,使其不包含 mode 參數指定的權限中未包含的權限。

因此,由於 ACLu::對應於文件使用者的通常權限位,因此權限被創建程序提供的內容所掩蓋。(從某種意義上說,預設 ACL 似乎取代了 umask。)我懷疑如果您創建一個目錄,您會看到它確實獲得了x您想要的 -bit。

從技術上講,這不會影響特定使用者的 ACL 條目,如u:foo:rwx,但這些受 ACL 遮罩的限制。遮罩與傳統的組權限位有對應關係,似乎上面引用的規則也適用於遮罩,因此 ACL 遮罩受創建文件時設置的組權限位的限制。

咱們試試吧:

$ mkdir dir ; chmod 750 dir ; setfacl -d -m u::rx -m g::rx -m u:foo:rwx dir 
$ touch dir/file ; mkdir dir/subdir

創建的文件屏蔽了 x 位(getfacl此處顯示了設置的位和應用遮罩後的有效值):

$ getfacl dir/file
user::r--
user:foo:rwx                    #effective:rw-
group::r-x                      #effective:r--
mask::rw-
other::---

但是目錄沒有:

$ getfacl dir/subdir/
user::r-x
user:foo:rwx
group::r-x
mask::rwx
...

這可能會回答(1)和(3)。至於(2):IIRC,目錄上的setgid -bit(g+s)使在其中創建的新文件繼承目錄的(而不是模式)。粘性位 ( +t) 控制刪除不屬於您的文件,實際上我不知道 setuid-bit ( u+s) 會在目錄上做什麼。

引用自:https://unix.stackexchange.com/questions/305893