我设置了类似的掩码setfacl -R -d -m m::rw .
,它在本地机器上运行良好(我现在已经通过 ssh 连接了,它是无头的)。我可以让两个用户修改和读取目录。但是当我使用sshfs访问其中一个用户修改目录时,有效设置不是rw-,而是设置为r--。如果我手动 ssh 进入计算机并使用 sudo 作为用户创建文件,则不会发生这种情况。不过,我可以使用 sshfs 创建目录并且它可以工作。
答案1
我想出了一个暂时使用 inotify 的有点 hacky 的解决方案。
我编写了一个 shell 脚本,使用inotifywait
frominotify-tools
等待创建文件,然后当创建文件时,它将运行我的setfacl
命令来设置共享目录,然后找到共享目录中的每个子目录并将其标记为可执行文件(我只希望目录可执行,如果需要,您可以排除该部分。)
这是脚本:
#!/bin/sh
while inotifywait -qqre create /share; do
setfacl -R -m u:user2:rw /share
for dir in $(tree /share); do
setfacl -m u:user2rwx ${dir}
setfacl -m u:user1:rwx ${dir}
done
done
user2
是通过 sshfs 访问共享的用户。
需要inotify-tools
和tree
.你可能可以用find
而不是做一些事情,tree
但我想tree
会更容易。
我可以向chmod +x
文件添加对外部命令的支持(我无法像其他用户一样将文件标记为可执行)并记录想要标记为可执行的文件并重新添加可执行位。
我还没有在生产环境中进行彻底的测试(看看如果文件更改权限/权限时无法打开程序的行为方式),但从我所看到的来看它工作得很好。
我认为问题可能是它从我当前的系统获取掩码规则,但我不能 100% 确定。我无法以 root 或普通用户身份从远程系统更改 sshfs 目录的 acl,因此我无法从远程系统更改掩码权限。