看来我仍然想念有关权限工作方式的一些事情。顺便说一句,我在 debian 7 系统上。刚才我有我下载的这个文件,它属于myuser:myuser
,即用户和组都设置为我。它也驻留在我的$HOME
目录中,因为那是我下载它的地方。
到现在为止还挺好。现在我想与电脑的其他一些用户共享这个文件,为此我想将文件的组所有权切换到组“用户”。但是失败了:
nass@quarx:~/xmas_carol$ chgrp -R users *
chgrp: changing group of movie.mov': Operation not permitted
Run Code Online (Sandbox Code Playgroud)
文件夹的内容是:
-rwxr-xr-x 1 nass nass 2482411461 Feb 6 03:57 movie.mov
Run Code Online (Sandbox Code Playgroud)
我对权限的情况感到模糊。有人能解释一下吗
ter*_*don 23
您的用户可能不是该users
组的成员,因此您无权向该组提供文件。为了显示:
$ groups
terdon sudo netdev fuse vboxsf vboxusers
$ ls -l file
-rw-r--r-- 1 terdon terdon 604 Feb 6 03:04 file
$ chgrp users file
chgrp: changing group of ‘file’: Operation not permitted
$ chgrp vboxusers file
$ ls -l file
-rw-r--r-- 1 terdon vboxusers 604 Feb 6 03:04 file
Run Code Online (Sandbox Code Playgroud)
POSIX 规范中提到了这种行为:
只有文件的所有者或具有适当权限的用户才能更改文件的所有者或组。
当指定的组不是有效组 ID 或调用进程的补充组 ID 之一时,某些实现将 chgrp 的使用限制为具有适当权限的用户。
这样做的主要原因是,如果您不是某个组的成员,则您应该无法修改该组有权访问的内容。这个关于chown
权限的答案也很重要。
传统上,在共享系统上,您有一个users
所有普通用户都属于的组,这是每个用户的主要组。这样,创建的文件归users
组所有,所有用户都可以读取它们。
无论如何,由于这不是现在基于 Debian 的发行版的设置方式,因此让特定用户访问您的文件的方法是
将文件/目录的组所有权更改为您和其他用户都是其成员的组;
只需相应地更改文件/目录的权限:
$ chmod 755 /home/terdon
$ ls -ld /home/terdon
drwxr-xr-x 170 terdon terdon 491520 Apr 20 13:43 /home/terdon/
Run Code Online (Sandbox Code Playgroud)
这将使每个人都可以访问该目录。
在最近的 UNIC 上(“最近”在这里的含义相当广泛),您不能将文件的组所有权更改为您不是其成员的组。对于像您这样的用例,不同 UNIX 风格的旧版本支持这一点,但事实证明这是一个安全问题。
能够将组所有权更改为外部组的问题是一个非常简单的问题:如果文件所在的文件系统启用了组配额,则具有恶意的用户可以简单地填充外部组的配额,使用户无法将此组作为主要组 ID 以创建任何其他文件。这甚至很容易影响已经运行的进程,并导致它们因“磁盘满”而死亡。
为了规避您的问题,有(至少)两种可能性:首先,您可以要求系统的超级用户将预期目标组添加到您帐户的补充组列表中。当然,如果您在其他方面与该组没有关系,这只会产生有限的意义。
不需要使文件可全局写入的另一种方法,当然是不希望的,是使用 ACL 为预期的组提供读写权限:
$ setfacl -m group:thegroupsname:rwx the_file(s)
Run Code Online (Sandbox Code Playgroud)