为什么该chown
命令仅限 root 用户使用?为什么非 root 用户不能使用 chown 放弃他们拥有的文件?
答案1
大多数unix系统都阻止用户“泄露”文件,也就是说,用户只有chown
拥有目标用户和组权限才可以运行。由于使用chown
需要拥有该文件或成为 root 用户(用户永远无法占用其他用户的文件),因此只有 root 可以运行chown
将文件的所有者更改为另一个用户。
进行此限制的原因是,将文件赠送给其他用户可能会导致在不常见但仍然重要的情况下发生不好的事情。例如:
- 如果系统启用了磁盘配额,Alice 可以在只有她可以访问的目录下创建一个全局可写文件(因此其他人都无法访问该全局可写文件),然后运行
chown
以使该文件归另一用户 Bill 所有。即使只有 Alice 可以使用该文件,该文件也会计入 Bill 的磁盘配额。 - 如果爱丽丝将一个文件交给比尔,则没有任何痕迹表明比尔没有创建该文件。如果文件包含非法或其他有害数据,这可能会成为问题。
- 某些程序要求其输入文件属于特定用户,以便验证请求(例如,该文件包含程序将代表该用户执行的一些指令)。这通常不是一个安全的设计,因为即使 Bill 创建了一个包含语法正确的指令的文件,他也可能不打算在这个特定时间执行它们。尽管如此,允许 Alice 创建具有任意内容的文件并将其作为 Bill 的输入只会让事情变得更糟。
答案2
在 Linux 上,您需要 CAP_CHOWN 功能才能进行 chown。 root 被授予这样的权限。参考: http://vouters.dyndns.org/tima/Linux-OpenVMS-C-Implementing_chown.html 以获得解释。如果您打算提供 CAP_CHOWN 功能,请使用 libcap-ng 或 libcap 构建代码,如下所示: http://vouters.dyndns.org/tima/Linux-PAM-C-Pluggable_Authentication_Modules_programming_example.html 您必须简单地将 CAP_AUDIT_WRITE 替换为 CAP_CHOWN。
答案3
您可以启动该命令,但如果您不是 root,则该命令将不起作用。这很简单:想象一个可以将软件更改为 root 用户的用户。它可以添加 setuid 位,瞧,这个人就是 root 了!因此,用户可以使用 chmod 添加该位,但没有机会更改文件的所有者。