谁可以更改文件/目录的权限?

use*_*341 15 permissions files

我相信(不确定)文件/目录的所有者和 root 用户是唯一被允许更改文件/目录权限的用户。我是正确的还是有其他用户也可以更改权限?

Rak*_*kib 21

只有所有者和root(超级用户)才可以更改文件或目录的权限。这意味着所有者和超级用户可以设置读取 ( r)、写入 ( w) 和执行 ( x) 权限。但是只允许使用命令chown/更改文件和目录的所有权(用户/组)。chgrproot

  • 如果用户是新组的成员,则文件的所有者可能会更改该文件的组所有权。 (21认同)

Bas*_*ass 8

为了正常操作,只有 root 和所有者可以chmod。此外,root 可以chownchgrp,而且所有者可以chgrp,只要所有者是目标组的成员。

出于安全考虑,还有另一种情况:任何对包含该文件的目录具有写权限的用户都可以用副本替换该文件,从而成为所有者,获得修改权限和内容的能力。

像这样:

14:14 mybox:~ mkdir mydir
14:14 mybox:~ cd mydir/
14:14 mybox:mydir echo foo | sudo tee yourfile
foo
14:14 mybox:mydir ls -ld . yourfile 
drwxr-xr-x  3 me    staff  102 Apr 11 14:14 .
-rw-r--r--  1 root  staff    4 Apr 11 14:14 yourfile
Run Code Online (Sandbox Code Playgroud)

我们创建了一个目录,并以 root 身份写入了一个文件。由于 root 拥有该文件,我们不能写入它,也不能 chmod:

14:15 mybox:mydir echo bar > yourfile 
-bash: yourfile: Permission denied
14:15 mybox:mydir chmod a+x yourfile
chmod: Unable to change file mode on yourfile: Operation not permitted
Run Code Online (Sandbox Code Playgroud)

但是,我们确实对该目录具有写权限,因此我们可以替换文件以获取所有权:

14:15 mybox:mydir mv yourfile yourfile2
14:15 mybox:mydir cp yourfile2 yourfile
14:15 mybox:mydir ls -ld . yourfile 
drwxr-xr-x  4 me   staff  136 Apr 11 14:15 .
-rw-r--r--  1 me   staff    4 Apr 11 14:15 yourfile
Run Code Online (Sandbox Code Playgroud)

现在我们是所有者,我们当然可以对那个文件做我们想做的事情:

14:15 mybox:mydir echo bar > yourfile 
14:15 mybox:mydir chmod a+x yourfile
14:16 mybox:mydir cat yourfile
bar
Run Code Online (Sandbox Code Playgroud)

类似地,任何对通向该文件的完整路径中的任何目录具有写权限的任何用户都可以从那时起替换目录结构,从而获得具有给定名称的文件的所有权。当然,实际原始文件(我们将其重命名为“yourfile2”)的所有权或权限没有改变。

14:17 mybox:mydir ls -l yourfile2
-rw-r--r--  1 root  staff  4 Apr 11 14:14 yourfile2
Run Code Online (Sandbox Code Playgroud)

  • @KevinLi 这个答案并不完整。您可以在目录上设置 *sticky bit* 以限制非所有者删除或重命名文件的能力。请参阅此问题及其答案:http://unix.stackexchange.com/questions/79395/how-does-the-sticky-bit-work 无需使用 ACL 或其他方案。 (4认同)