我有这样设置的文件夹:
/srv/samba/视频
getfacl /srv/samba/video
# file: srv/samba/video
# owner: root
# group: nogroup
user::rwx
group::---
group:sambaclients:rwx
group:deluge:rwx
mask::rwx
other::---
default:user::rwx
default:group::---
default:group:sambaclients:rwx
default:group:deluge:rwx
default:mask::rwx
default:other::---
这意味着,用户 deluge 对文件夹 /srv/samba/video 具有 rwx 权限。
但是,当以用户 deluge 身份运行命令时,我收到奇怪的权限错误。
在文件夹 /srv/samba/video 中时:
sudo -u deluge mkdir foo
运行完美。
但是当使用绝对路径时:
sudo -u deluge mkdir /srv/samba/video/foo
我收到的许可被拒绝。
运行时sudo -u deluge id
,我得到输出
uid=113(deluge) gid=124(deluge) skupiny=124(deluge)
这表明用户 deluge 确实在组 deluge 中。此外,当我向用户 deluge 授予权限而不仅仅是组 deluge 时,行为也是一样的。以非系统用户身份执行时,它确实有效。
我想要使用绝对路径的原因是我正在使用自动触发的下载后脚本,该脚本会将一些文件提取到文件夹中。
我自己花了太多时间解决这个问题。
mkdir
不是唯一失败的命令,touch
也在做同样的事情,所以我怀疑这不是mkdir
的错。
如果您需要更多信息,我会尝试将其放在这里,只需询问即可。提前谢谢。
编辑:
问题的根源似乎是在 perent folder 上设置的 acl /srv/samba
,它确实没有授予 deluge 权限(但也没有拒绝它)。
getfacl /srv/samba
# file: srv/samba
# owner: root
# group: nogroup
user::rwx
group::---
group:sambaclients:rwx
mask::rwx
other::---
default:user::rwx
default:group::---
default:group:sambaclients:rwx
default:mask::rwx
default:other::---
如果我也授予该文件夹权限,它会突然开始工作,所以我相信 acl on 以/srv/samba
某种方式拒绝了 deluge 的权限。
所以问题是:我如何将 acl 设置为和,/srv/samba
以便/srv/samba/video
sambaclients 可以访问整个/srv/samba
和子目录,而 deluge 只能访问/srv/samba/video
和子目录?
答案1
用户deluge
必须能够看到父目录的内容/srv/samba
。因此,对其应用可执行位:chmod o+x /srv/samba
解决了该问题。
它使用相对路径工作的原因是,当使用 sudo 命令时,我们已经在目录中/srv/samba/video
,因此没有应用任何权限检查。