幹擾 Linux 擴展 ACL 和「常規」權限的奇怪現象

幹擾 Linux 擴展 ACL 和「常規」權限的奇怪現象

我有一些遺留程式碼,用於檢查某些文件是否只讀且只能由其所有者讀取,即權限設定為 0400。我正在嘗試設定擴展 ACL,但這也以一種奇怪的方式更改了“常規”權限位:

$ ls -l hostkey.pem 
-r-------- 1 root root 0 Jun  7 23:34 hostkey.pem
$ setfacl -m user:apache:r hostkey.pem 
$ getfacl hostkey.pem 
# file: hostkey.pem
# owner: root
# group: root
user::r--
user:apache:r--
group::---
mask::r--
other::---

$ ls -l hostkey.pem 
-r--r-----+ 1 root root 0 Jun  7 23:34 hostkey.pem

在此之後,遺留程式碼開始抱怨該檔案是群組可讀的(而實際上不是!)

是否可以設定擴充 ACL,使其他使用者也具有唯讀存取權限,而該檔案似乎僅具有 0400「常規」權限?

答案1

我們在 Linux ACL 實驗中看到過類似的情況,尤其是透過 Samba。但在大多數情況下,即使常規權限/檔案模式位元以奇怪的方式更改,系統總體上仍然按預期運行。

我記得在某處讀過(抱歉,不記得在哪裡了),在創建文件時(可能透過 Samba),在將資料寫入文件之前,ACL 權限沒有正確反映在模式位中。這會影響使用觸控等方式建立的文件。

其他需要考慮的事情是您是否想要設定預設 ACL。

當使用 ACL 保護的檔案建立新目錄時,我們會使用類似的方法;最後一個指令透過管道將 getfacl 傳送到 setfacl 中,複製目前設定的 ACL,用作在此目錄中建立的新檔案的預設 ACL:

chown --recursive $username:$userrole /home/data/private/$datadir
chmod --recursive u=rwx,g=,o= /home/data/private/$datadir

# remove previous ACLs
setfacl --recursive --remove-all /home/data/private/$datadir

# User/group access for owner, group leader and web server
setfacl --recursive -m u:$username:rwx /home/data/private/$datadir
setfacl --recursive -m g:RGLeader:rx /home/data/private/$datadir
setfacl --recursive -m u:www-data:rwx /home/data/private/$datadir

# Copy access modes to default access modes
getfacl --access /home/data/private/$datadir | setfacl --recursive -d -M- /home/data/private/$datadir

相關內容