使用setfacl后出现权限被拒绝的问题

9

有3个用户:A、B、C。

A 在他的主文件夹中有/home/A/mydir

B 可以读取/home/A的内容

C 可以读取和写入/home/A的内容

我尝试了以下方法:

setfacl -Rm u:B:r /home/A/
setfacl -Rm u:C:rw /home/A/

su B
ls /home/A
ls: cannot access /home/A: Permission denied
mydir
cd /home/A
-bash: cd: /home/A/: Permission denied

cat /etc/fstab:

/dev/sdb1 /media/external ext3 默认,acl 0 2


getfacl /home/A:

getfacl: Removing leading '/' from absolute path names
# file: home/A
# owner: A
# group: A
user::rwx
user:B:r--
user:C:rw-
group::---
mask::rw-
other::---

通常您希望使用setfacl重新计算掩码。您能打印输出“getfacl /home/A”的结果吗? - alvits
我更新了主贴。 - filippo
2
我明白了问题所在。你需要给B和C赋予执行权限。即使可读可写,但如果没有设置执行权限,则目录也不能进入。 - alvits
谢谢!现在它可以工作了!但是逻辑在哪里?如果我只是阅读它,为什么要设置执行权限呢? - filippo
2
在Unix系统中打开目录需要执行权限... - Stephan Kulla
你不仅仅是在读它,你正在遍历它。遍历一个目录需要执行权限。 - alvits
2个回答

10

正如 tampis 已经说过的,在Linux中要进入一个目录(或列出其内容或读取其中的文件),需要拥有该目录的执行权限。将您的 setfacl 命令更改为类似于以下内容:

setfacl -Rm u:B:rx /home/A/
setfacl -Rm u:C:rwx /home/A/

2
这太疯狂了。sudo setfacl -Rm u:user1:rx /x/x/cd /x/x/权限被拒绝。 - Toolkit
这只能工作是因为家目录已经被B和C设置为可执行?如果你首先运行[root]> setfacl -Rm u:C:rwx /home/A/shared/,然后[C]> cd /home/A/shared,会怎样?每个父目录都需要x权限以进行遍历吗? - cloudsurfin
1
是的,路径中的每个目录都需要设置可执行位才能进入子文件夹。 - mofoe

1

您还需要在目录上拥有执行权限和读取权限。

"setfacl -m  u:B:r-x /home/A"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接