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 权限在将数据写入文件之前未正确反映在模式位中。这会影响使用 touch 等方式创建的文件。

还需要考虑的一点是您是否想要设置默认 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

相关内容