我已经知道我不能随意使用 chown作为普通用户user1
但是在我的情况下,我有两个用户:Sudoers 文件允许在 as 中使用user2
sudo 。user1
user2
是否仍然无法将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
.这里不存在文件替换的风险,因为检查和操作是在同一文件句柄上执行的。