chown - 不允许操作

46 linux terminal command-line user-groups

我以 minime 身份登录。

我不明白为什么它不允许我在没有 su 权限的情况下 chown 拥有我的文件。显然我可以使用 sudo,但我想知道为什么?因为 www-data 组?

chown minime:www-data user-functions.php

ls -lh

-rw-r--r--  1 minime minime    24K Jan  6 16:11 user-functions.php

Error:

chown: changing ownership of `user-functions.php': Operation not permitted
Run Code Online (Sandbox Code Playgroud)

ter*_*don 58

非特权用户(不是 root)不能chown文件到其他用户名。要使用chown,用户必须具有目标用户的权限。换句话说,只能root将一个文件交给另一个用户。

正如解释这里(感谢@slhck):

只有有效用户 ID 等于文件用户 ID 或具有适当权限的进程才能更改文件的所有权。如果 _POSIX_CHOWN_RESTRICTED 对路径有效:

  • 更改用户 ID 仅限于具有适当权限的进程。

  • 当且仅当 owner 等于文件的用户 ID 或 ( uid_t)-1 且 group 相等时,允许更改组 ID 的进程的有效用户 ID 等于文件的用户 ID,但没有适当的权限调用进程的有效组 ID 或其补充组 ID 之一。

@Gilles这个Unix & Linux answer 中很好地解释了这背后的基本原理:

此限制的原因是,将文件赠送给其他用户可能会导致在不常见但仍然很重要的情况下发生坏事。例如:

  • 如果系统启用了磁盘配额,Alice 可以在只有她可以访问的目录下创建一个全局可写文件(因此其他人无法访问该目录中的全局可写文件),然后运行 ​​chown 使该文件归于另一个用户比尔。即使只有 Alice 可以使用该文件,该文件也将计入 Bill 的磁盘配额。
  • 如果 Alice 向 Bill 赠送了一个文件,则没有任何痕迹表明 Bill 没有创建该文件。如果文件包含非法或以其他方式妥协的数据,这可能是一个问题。
  • 某些程序要求其输入文件属于特定用户,以便对请求进行身份验证(例如,该文件包含一些程序将代表该用户执行的指令)。这通常不是一个安全的设计,因为即使 Bill 创建了一个包含语法正确指令的文件,他也可能不打算在这个特定时间执行它们。尽管如此,允许 Alice 创建一个包含任意内容的文件并将其作为 Bill 的输入只会让事情变得更糟。