sudo 替代方案,允许特定用户从程序执行 chmod

sudo 替代方案,允许特定用户从程序执行 chmod

我想允许不拥有目录中文件的某个用户执行chmod这些文件。以交互方式,我知道我可以通过配置sudosudoers 配置文件来实现这一点,我还可以定义一个别名,例如

alias chmod='sudo chmod'

在 .bashrc、.profile 或 .bash_profile 中,这样用户就不必sudo chmod每次都输入了。如果chmod不是从 bash shell 中的命令行执行,而是从程序执行,这种方法就会失效。我怎样才能让它仍然有效?

背景是设置同步,我想使用它来同步来自不同用户的文件。此外,不应以 身份运行,而应以 用户 身份syncthing运行。该用户无权对其不拥有但已同步的文件执行操作(由组管理的读/写权限),这就是失败的原因。rootsyncusersyncuserchmod

这种情况肯定更常发生。我非常确信除了以 身份运行之外还有其他解决方案syncthingroot但目前我不知道如何...

答案1

当我在完全不同的背景下遇到类似问题时,我发现 chmod 仅限于 root。这是设计使然。我的解决方案是在存储文件的文件夹上执行 incron 作业 (inotify) [1]。incron(以 root 身份运行)会将所有新文件 chmod 为“user:user”,以便对其进行进一步处理。

[1]http://inotify.aiken.cz/?section=inotify&pa​​ge=about&lang=en

答案2

如果您使用的是较新的 Linux,则可以使用功能系统赋予 syncthing 修改任何文件权限的能力。这还将赋予它一些额外的能力,例如更改文件的扩展属性或修改任何文件的访问时间。请参阅man 7 capabilities完整列表。

为此,只需使用setcap "CAP_FOWNER=EP" syncthingsyncthing如果您不在正确的文件夹中,请将其替换为可执行文件的完整路径。

答案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

其他地方也报告了此问题:

相关内容