将文件的所有权从一个用户更改为第一个用户控制的另一个用户

将文件的所有权从一个用户更改为第一个用户控制的另一个用户

我已经知道我不能随意使用 chown作为普通用户user1但是在我的情况下,我有两个用户:Sudoers 文件允许在 as 中使用user2sudo 。user1user2

是否仍然无法将user1文件的所有权授予user2

到目前为止我想出的最好的办法就是执行user1

user1@localhost$ sudo --user user2 cp fileOwnedByUser1 /tmp/fileOwnedByUser1
user1@localhost$ rm fileOwnedByUser1
user1@localhost$ sudo --user user2 mv /tmp/fileOwnedByUser1 fileOwnedByUser1

然而,这似乎笨拙且低效。有更好的方法来user1做到这一点吗?到目前为止,我唯一想到的就是user1在文件中以 root 身份运行“chown” Sudoers

答案1

事实上,允许 user1 通过 sudo 以 user2 的身份运行命令,这对于内核中较低级别的文件权限决策并不重要。在那里,chown保留给 root (Linux 也允许具有该功能的进程CAP_CHOWN,但这对您没有帮助,因为为进程提供此功能相当于间接授予其 root 权限)。

您可以编写一个 sudo 规则(可能使用一个小包装脚本),允许 user1 调用chown属于 user2 的文件。问题是这是不安全的,因为文件的所有权检查和调用之间存在竞争条件chown:user1(甚至第三个用户,取决于目录权限)可以在检查和操作之间替换另一个文件。

您可以编写一个小程序,使用fchown系统调用:打开文件,调用lstat,验证当前所有权,如果一切正常,则调用fchown.这里不存在文件替换的风险,因为检查和操作是在同一文件句柄上执行的。

相关内容