组权限允许,但仍然收到拒绝许可。

我有一个ext4分区,我已经将所有子目录的组所有者设置为mygroup。
# chgrp -R mygroup /mount/abc
# chmod -R g+swrx /mount/abc

我的用户是该组的一部分。在该分区中有一个文件夹,它的所有者是用户“nobody”,现在属于组“mygroup”。我的用户是“mygroup”的一部分。这是一个ls -l的输出:
myuser@host:/mount/abc/folder$ ls -l
drwxr-sr-x 2 nobody      mygroup      4096 Apr 25 12:08 ./
drwxrwsrwx 6 nobody      mygroup      4096 Apr 24 07:57 ../
-rw-r-xr-- 1 otheruser   mygroup    159539 Apr 23 23:44 test.png*

myuser@host:/mount/abc/folder$ groups myuser
myuser : mygroup {... a list of other groups also...} 

myuser@host:/mount/abc/folder$ rm test.png 
rm: remove write-protected regular file ‘test.png’? y
rm: cannot remove ‘test.png’: Permission denied

myuser@host:/mount/abc/folder$ touch test.txt
touch: cannot touch ‘test.txt’: Permission denied

请注意,我无法删除或创建由我所在的组拥有的文件。
我想我对组的工作原理并不完全理解。我以为如果你是某个组的一员,那么你会继承该组的权限。我是不是做错了什么?
谢谢。

看起来权限三元组是所有者-组-世界。您可以在上面看到目录的drwxr-sr-x。因此,该组的权限为r-s。看起来chmod -R没有递归地将权限设置为rwx。当我翻转文件夹组权限的w位时,它就可以工作了。 - Kias
5个回答

你最近是否在两次登录之间将该用户添加到该组中?那么“groups”会显示该组,但用户尚未具有该组的权限。

你可以使用以下命令显示你的有效组:

$ id

作为一个例子,如果我将我的用户ps添加到组fax中,然后输入
$ id

它没有显示群组传真,但是。
$ groups ps

显示传真
对自己的用户执行su命令将给您新的组关联。
$ su ps
$ id

现在的输出还包含传真

3这真的很有帮助。特别是 'sudo <用户名>' 部分。 - Kias
6登录/登出是如此明显,以至于我错过了重点,非常感谢伙计! - nicolallias
@peschü 我无法使sudo位起作用。 如果我只是输入sudo ubuntu,我会得到sudo: ubuntu: 命令未找到的错误提示。 - beldaz
@beldaz:sudo是一个需要安装的程序。 apt-get install sudo 然后你就可以了。 - peschü
1@peschü 我有 sudo 并且经常使用它。我向你展示的错误是在抱怨命令 ubuntu(即用户名)不是一个被识别的命令。我不认为你的建议在语法上是正确的 - 也许在你的情况下它能够工作,因为 ps 同时也是一个命令和一个用户名。 - beldaz
1@beldaz 哎呀!你说得对!从句法上来看,应该是 su <用户名>。我已经编辑了帖子。 - peschü
5该死的老日志,每次都要重新登录/退出工作。 - Steampunkery
1还是不行。"id" 告诉我我的组是 "groups=1000(username),27(sudo),33(www-data)",但是我仍然无法访问权限为 -rwxrw-r-- 的文件,而另一个用户却可以,他们和我属于同一组。 - NoBugs
su ps .......... 太搞笑了,但是太聪明了。谢谢!使用 su 对于那些固执地想保留旧登录而不愿打开新登录的事情来说非常完美! - Eliezer Berlin
就个人而言,无论我在Ubuntu 22中登出和登录多少次,id命令仍然没有显示新的用户组。我不得不重新启动机器。 - Jack M

你所使用的方法似乎是正确的。我刚刚试过复制它,结果很好。

我不确定是否有错别字,但是命令有一个小问题。没有必要在其中提到"mygroup"。以下命令可以正常工作

# chmod -R g+swrx /mount/abc

即使如此,您可以删除"s"位,只需执行"g+rwx"。在更改权限后,执行"ls -l"命令,应显示相关权限。

2我修正了组名的拼写错误。当你执行ls -l命令时,该目录具有wrx权限,并且它的所有者是nobody:mygroup。尽管myuser是mygroup的一部分,但myuser仍然无法创建/删除文件。希望这样说得清楚。 - Kias

你无法删除文件,因为组mygroup对文件test.png以及文件夹没有写入权限。要使写操作在文件上起作用,文件权限应该如下所示:
-rw-rwxr-- 1 otheruser   mygroup    159539 Apr 23 23:44 test.png*

如果你更仔细地观察权限格式
duuugggooo

第一个三个占位符uuu代表用户的r读,w写和ex执行权限。接下来的三个占位符ggg是给组使用的,ooo则是给其他人使用的。在OP发布的代码片段中,组缺少w写权限。

目录需要设置 x 位(对于目录,该位被视为搜索位)才能打开。因此,我使用树形结构,这样我就可以仅获取设置的文件夹并避免所有文件都设置为可执行文件的噩梦(树形结构的选项是 -d 仅列出目录。):
sudo tree -faid /mount/abc | xargs -L1 -I{} sudo chmod 755  "{}"

警告!!!你应该考虑以下事项:
- 在根目录(/)或系统目录上使用chmod或chown递归将会破坏你的操作系统(实际上,在根目录(/)或系统目录上进行任何递归操作都是危险的) - 这不是一个好的安全实践,批量设置权限如此。

2非常感谢!"目录需要设置x位"这句话解决了我的问题! 我执行了"sudo chmod g+x <父目录路径>",然后问题就解决了。 - kinORnirvana

补充一下已经接受的答案(因为我还不能评论):
如果你使用像BitVise这样的软件来创建SSH连接到你的服务器,简单地关闭和重新打开终端不会被视为登录和退出。它会执行一些操作,比如重新加载你的~/.bashrc文件,但是不会执行实际的组更新(如果你在“登录”会话中添加了该组)。 要使其生效,你需要完全注销并使用你的SSH密钥/凭据再次登录。