TL;DR:为什么我收到“操作不允许”的提示?我该如何解决?
我遇到了一个无法解决的问题。我正在以用户 a:组 a) 的身份创建一个目录,我想将其更改为用户 b:组 a。我不明白为什么不允许此操作。以下是正在发生的事情:
user a@foo:~$ mkdir /home/user b/foo/test
uber a@foo:~$ chmod 0777 /home/user b/foo/test
user a@foo:~$ ls -alF /home/user b/foo/ | grep test
drwxrwxrwx 2 user a group a 4096 Jan 6 19:53 test/
user a@foo:~$ chown user b:group a /home/user b/foo/test
chown: changing ownership of `/home/user b/foo/test': Operation not permitted
(为了简单起见,我更改了用户和组名)
其他可能相关的事情:
- 用户 A 在组 A 和组 B 中。
- 用户 B 在组 B 中。
- /home/user b 中的目录 foo 具有 0750,并且归用户 B:组 A 所有。
我急切地想了解为什么不允许执行此操作,以及如何解决这个问题(不使用 sudo 的解决方案是一个优点)?
答案1
只有当您是 root(或具有 CAP_CHOWN Posix 功能)时,您才可以更改文件的所有权。这是因为泄露文件会引发一些安全问题(例如,如果启用了磁盘配额,您可能会填满用户 b 的配额)。
如果允许的话,请使用 sudo chown,它就会起作用。
但是,您可以将拥有组更改为您是其成员的组,因此您应该能够 chgrp“group b”“/home/user b/foo/test”,这可能是无需成为 root 即可与用户 b 共享文件的替代方法,具体取决于您想要实现的目标。
为了获得更灵活的权限,您可能需要研究 ACL。
答案2
A 部分:
由于只有所有者和根 (TBOMK),因此不允许该操作。
B 部分:答案现在显而易见。要么让用户 b 执行此操作,要么您可能不得不硬着头皮使用 sudo。如果您不想使用 sudo,我猜是因为您没有 root 权限,必须让其他人来执行此操作,但这似乎是仅有的两个解决方案。