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


14

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

Answers:


19

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


19
如果用户是新组的成员,则文件的所有者可以更改该文件的组所有权。
Kusalananda

7

为了正常运行,只有root和owner可以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

我们创建了一个目录,并以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

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

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

现在我们是所有者,我们当然可以使用该文件来做我们想做的事情:

14:15 mybox:mydir echo bar > yourfile 
14:15 mybox:mydir chmod a+x yourfile
14:16 mybox:mydir cat yourfile
bar

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

14:17 mybox:mydir ls -l yourfile2
-rw-r--r--  1 root  staff  4 Apr 11 14:14 yourfile2

您是否知道任何Linux发行版是否支持Windows等其他安全功能?如果我在Windows中,我可以将文件的删除权限设置为拒绝,以防止即使目录允许也可以删除。
李彦宏

当前的许多Linux版本(大多数?)都支持文件级访问控制列表(getfacl / setfacl),它比“经典”样式文件权限具有更大的灵活性。* nix中的文件删除通过从目录中删除到文件的链接来进行,因此文件的删除始终由目录权限控制;文件权限本身在那里不起作用。
低音

非常符合Unix的“一切都是文件”的哲学。因此,您是说在Linux上无法做到这一点?
凯文·李

3
@KevinLi这个答案不是很完整。您可以在目录上设置粘性位,以限制非所有者删除或重命名文件的能力。请参阅此问题及其答案: unix.stackexchange.com/questions/79395/…无需使用ACL或其他方案。
安德鲁·亨利

@KevinLi * nix文件系统与Windows的文件系统非常不同。这些文件与目​​录层次结构分开存在,并且它们在目录中可以具有指向它们的多个“硬链接”。删除文件实际上意味着删除硬链接,这是在目录上完成的。该文件会跟踪指向它的硬链接数,只要至少有一个硬链接指向该文件,实际文件就会保留在磁盘上。因此,删除操作受目录权限的控制,如安德鲁所说,目录权限确实有一个特殊选项,仅允许文件所有者和根目录进行删除。
低音

1

chmod命令会直接直接调用相同名称的系统调用。chmod(2)系统调用的手册页(在Linux 4.10上)说:

调用进程的有效UID必须与文件的所有者匹配,否则该进程必须具有特权(Linux:它必须具有 CAP_FOWNER功能)。

如果调用过程没有特权(Linux:没有 CAP_FSETID功能),并且文件组与进程的有效组ID或其补充组ID之一不匹配,则该 S_ISGID位将被关闭,但这不会导致返回错误。

因此,是的,以root身份运行的进程可以更改任何文件的权限(如果尚未删除该文件)。 CAP_FOWNER功能。


同样有趣的是 chown ; 手册页上chown(2)说:

只有特权进程(Linux:具有此CAP_CHOWN功能的进程)才能更改文件的所有者。文件的所有者可以将文件的组更改为该所有者是其成员的任何组。特权进程(Linux:with CAP_CHOWN)可以任意更改组。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.