![chown 给一个我可以通过 sudo 来访问的用户](https://linux22.com/image/543450/chown%20%E7%BB%99%E4%B8%80%E4%B8%AA%E6%88%91%E5%8F%AF%E4%BB%A5%E9%80%9A%E8%BF%87%20sudo%20%E6%9D%A5%E8%AE%BF%E9%97%AE%E7%9A%84%E7%94%A8%E6%88%B7.png)
我们的一个用户对多个非 root 用户(用于特定项目的角色帐户)具有 sudo 权限,他希望能够在这些用户之间更改文件的所有权:例如,如果 sudoers 看起来像
jane ALL=(widget-dev,releng) ALL
jane ALL=(root) rchown
然后用户“jane”可以对 jane、widget-dev 和 releng 所拥有的文件使用假设的“rchown”(代表“restricted chown”)实用程序,将它们提供给其中任何一个用户。
我还没能找到一个现有的实用程序可以做到这一点。我们的一个用户正在要求这样做,这似乎是一件合理的事情,但我想我会在这里问一下,征集战争故事和安全噩梦的可怕警告,然后再开始写作(两个坏主意)
- 另一个配置文件解析器
- 以 root 身份运行。
编辑后又增加了对逻辑的担忧:我们只想在用户可以以目标用户身份运行所有命令的情况下这样做……对吗?也许它从未被实现过,因为它陷入了如此彻底的站点特定问题中。
答案1
您可以直接使用 sudo 执行此操作。当我第一次开始思考如何做到这一点时,我很快意识到,如果您尝试直接映射它们,您必须为 n 个用户指定的 chown 数量将是 n^2。但是,如果您要求用户在重新分配每个文件之前拥有它的所有权,则可以将其减少到 2n。因此,您的 sudoers 文件可能如下所示:
User_Alias CHOWNADMIN1 = jane
Cmnd_Alias CHOWNUSR1 = /bin/chown --from widget-dev jane *, /bin/chown --from jane widget-dev *
Cmnd_Alias CHOWNUSR2 = /bin/chown --from releng jane *, /bin/chown --from releng amy *
CHOWNADMIN1 ALL= NOPASSWD: CHOWNUSR1, CHOWNUSR2
通过此设置,Jane 现在可以执行两步流程来更改所有权:
chown --from widget-dev jane /tmp/foofile
chown --from jane releng /tmp/foofile
请注意,您必须使用 --from 限制此权限,否则您可能会授予用户“jane”拥有 /etc/shadow 或 /root/.ssh/id_rsa 等文件的权限(这可能会很糟糕)。
当然,你现在可以编写一个非常简单的脚本来自动化 chowns。也许像下面这样,但是和一些错误检查:
#!/bin/bash
FROM=$1
shift
TO=$1
shift
sudo chown --from $FROM $USER $*
sudo chown --from $USER $TO $*
现在 Jane 可以运行“rchown releng widget-dev /tmp/foofile”或类似命令。