chown:从其他用户那里获取所有权

chown:从其他用户那里获取所有权

假设我有:

  • user1111有ID的用户1111
  • user2222有ID的用户2222
  • 具有上述两个用户所属group3333ID 的组3333

我创建:

  • user1111, 文件夹a
  • user1111, 一个文件a/b
  • user2222, 一个文件a/c

该文件夹和两个文件都有 777 权限:

$ stat --printf='%a %u %g %n\n' a a/b a/c
777 1111 1111 a
777 1111 3333 a/b
777 2222 3333 a/c

我理解不允许这样做的含义是user1111

user1111$ chown -v 2222 a/b
chown: changing ownership of 'a/b': Operation not permitted
failed to change ownership of 'a/b' from user1111 to 2222

即不允许用户这样做是可以的分配所有权归其他用户。

我不明白为什么这是不允许的:

user2222$ chown -v 2222 a/b
chown: changing ownership of 'a/b': Operation not permitted
failed to change ownership of 'a/b' from user1111 to 2222

即为什么用户不能其他用户的所有权?

编辑以添加 @binarysta 的更多信息:

user1111$ chown -v user2222: a/b
chown: changing ownership of 'a/b': Operation not permitted
failed to change ownership of 'a/b' from user1111:group3333 to user2222:group2222

user1111$ chown -v user2222:group3333 a/b
chown: changing ownership of 'a/b': Operation not permitted
failed to change ownership of 'a/b' from user1111:group3333 to user2222:group3333

user2222$ chown -v user2222: a/b
chown: changing ownership of 'a/b': Operation not permitted
failed to change ownership of 'a/b' from user1111:group3333 to user2222:group2222

user2222$ chown -v user2222:group3333 a/b
chown: changing ownership of 'a/b': Operation not permitted
failed to change ownership of 'a/b' from user1111:group3333 to user2222:group3333

答案1

  • 只有 root 可以更改文件的所有者。所有者无法转让所有权,除非所有者是root或用于sudo运行该命令。

  • 文件的所有者可以更改文件的所属组(如果文件所有者属于该组)。文件的所属组可以通过 更改root为任何组。除所有者之外的所属组的成员无法更改文件的所属组。

setuid :当设置了可执行文件的 setuid 权限时,用户可以使用与用户匹配的访问级别来执行该程序拥有该文件

能够使用非特权用户更改文件的所有权可能会导致许多安全问题,例如:

  • 用户可以为可执行脚本设置uid,然后将所有权更改为root,在这种情况下,脚本将以root权限执行。
  • 通过更改所有权,就无法追踪谁真正创建了文件。
  • 如果为每个用户定义了配额,可能会导致磁盘配额问题。
  • 只有文件的所有者才能更改权限/元数据 ( chmod)

答案2

只有root具有该功能的进程CAP_CHOWN才能更改文件所有者(请参阅参考资料man capabilities)。

但是您可以使用 ACL 为某些用户或组设置特殊权限(请参阅 参考资料man setfacl)。

使用 NFSv4 ACL,您甚至可以授予非所有者用户或组更改 ACL 的权限(通常仅限于 root、文件所有者和带有 的进程CAP_FOWNER),请参阅man nfs4_acl

相关内容