为什么用户不能更改自己文件的组所有权?

Mar*_*ter 14 permissions group

为什么用户不能更改他拥有的文件的组权限。假设我有用户martin

$ ls -lAd /home/martin/
drwx------ 8 martin martin 4096 Apr 20 01:06 /home/martin/
Run Code Online (Sandbox Code Playgroud)

出于某种原因,我希望用户paul能够访问我的家。

$ chgrp paul /home/martin/
chgrp: changing group of `/home/martin/': Operation not permitted
Run Code Online (Sandbox Code Playgroud)

用户无法更改自己文件的组所有权是否存在安全原因?

我正在使用Debian 7(喘气)。

ter*_*don 18

您只能chgroup加入您所属的群组:

$ groups
terdon sudo netdev fuse vboxsf vboxusers 
$ chgrp fuse file
$ ls -l  file
-rw-r--r-- 1 terdon fuse 531 Apr 15 19:17 file
$ chgrp mysql file
chgrp: changing group of ‘file’: Operation not permitted
Run Code Online (Sandbox Code Playgroud)

POSIX 规范中提到了这种行为:

只有文件的所有者或具有适当权限的用户才能更改文件的所有者或组。

当指定的组不是有效组 ID 或调用进程的补充组 ID 之一时,某些实现将 chgrp 的使用限制为具有适当权限的用户。

这样做的主要原因是,如果您不是某个组的成员,则您应该无法修改该组有权访问的内容。这个关于chown权限的答案也很重要。

传统上,在共享系统上,您有一个users所有普通用户都属于的组,这是每个用户的主要组。这样,创建的文件归users组所有,所有用户都可以读取它们。

无论如何,由于这不是现在基于 Debian 的发行版的设置方式,因此授予特定用户访问您目录的权限的方法是

  1. 将目录的组所有权更改为您和其他用户都是其成员的组;

  2. 只需相应地更改目录的权限:

    $ chmod 755 /home/martin
    $ ls -ld /home/martin/
    drwxr-xr-x 170 martin martin 491520 Apr 20 13:43 /home/martin/
    
    Run Code Online (Sandbox Code Playgroud)

    这将使每个人都可以访问该目录。包括保罗。