我想允许不拥有目录中文件的某个用户执行chmod
这些文件。以交互方式,我知道我可以通过配置sudo
sudoers 配置文件来实现这一点,我还可以定义一个别名,例如
alias chmod='sudo chmod'
在 .bashrc、.profile 或 .bash_profile 中,这样用户就不必sudo chmod
每次都输入了。如果chmod
不是从 bash shell 中的命令行执行,而是从程序执行,这种方法就会失效。我怎样才能让它仍然有效?
背景是设置同步,我想使用它来同步来自不同用户的文件。此外,不应以 身份运行,而应以 用户 身份syncthing
运行。该用户无权对其不拥有但已同步的文件执行操作(由组管理的读/写权限),这就是失败的原因。root
syncuser
syncuser
chmod
这种情况肯定更常发生。我非常确信除了以 身份运行之外还有其他解决方案syncthing
,root
但目前我不知道如何...
答案1
当我在完全不同的背景下遇到类似问题时,我发现 chmod 仅限于 root。这是设计使然。我的解决方案是在存储文件的文件夹上执行 incron 作业 (inotify) [1]。incron(以 root 身份运行)会将所有新文件 chmod 为“user:user”,以便对其进行进一步处理。
[1]http://inotify.aiken.cz/?section=inotify&page=about&lang=en
答案2
如果您使用的是较新的 Linux,则可以使用功能系统赋予 syncthing 修改任何文件权限的能力。这还将赋予它一些额外的能力,例如更改文件的扩展属性或修改任何文件的访问时间。请参阅man 7 capabilities
完整列表。
为此,只需使用setcap "CAP_FOWNER=EP" syncthing
。syncthing
如果您不在正确的文件夹中,请将其替换为可执行文件的完整路径。
答案3
我遇到了同样的问题:
[YNQCP] 12:42:21 INFO: Puller: shortcut: chmod /some/file.name: operation not permitted
chmod
另请参阅有关允许非所有者使用和的更普遍问题的其他早期问题chown
。
就我的情况而言,我们有一台计算机上有多个用户,所有用户都有 sudo 权限。他们共享一个文件夹和多个子文件夹,这些子文件夹应该会自动同步并可供所有人使用。我查看了chmod 777
主文件夹和子文件夹,但syncthing
仍然出现问题并尝试访问chmod
文件(为什么?)。
我使用了以 root 身份运行的 hack 解决方案syncthing
。这可以正常工作,但会产生:
这似乎是一个更好的选择,然后尝试弄乱权限设置,以便syncthing
允许对不属于自己的文件进行 chmod 操作。
另一种解决方案是创建一个 syncthing 用户并授予其文件所有权,然后让其他人通过 使用它们chmod 777
。
其他地方也报告了此问题:
- https://forum.syncthing.net/t/puller-folder-documents-file-xxx-shortcut-chmod-users-yyy-documents-xxx-operation-not-permitted/1594
- https://forum.syncthing.net/t/what-does-operation-not-permitted-mean-in-failed-our-of-sync/7507/9
- https://github.com/syncthing/syncthing/issues/1783
- https://github.com/syncthing/syncthing-android/issues/151
- https://github.com/syncthing/syncthing/issues/1404
- https://github.com/syncthing/syncthing/issues/2727
- https://github.com/syncthing/syncthing-android/issues/154
- 还有很多!