Linux,即使我具有组权限,为什么也不能写?


108

我想在我所属的工作人员小组拥有的目录中创建一个文件。为什么我不能这样做?

bmccann@bmccann-htpc:~$ ls -l /usr/local/lib/R/
total 4
drwxrwsr-x 2 root staff 4096 2010-07-31 16:21 site-library
bmccann@bmccann-htpc:~$ id -nG bmccann
bmccann adm dialout cdrom plugdev staff lpadmin admin sambashare
bmccann@bmccann-htpc:~$ touch /usr/local/lib/R/site-library/tmp
touch: cannot touch `/usr/local/lib/R/site-library/tmp': Permission denied

1
您对/ usr / local / lib / R中的site-library目录具有写许可权吗?
特德·霍普

1
我发布的第一条命令不是表明该组具有写权限吗?
本·麦肯

3
已经存在site-library/tmp文件/目录了吗?
Jeremiah Willcock

Answers:


200

更改组后您是否注销并重新登录?请参阅:
涉及触摸权限失败的超级用户答案


1
如果我打开一个新的终端窗口,那不应该视为一个新过程吗?我敢肯定,我尝试过了,但并没有迫使我退出。
本·麦肯

7
@Ben:启动新进程将从其父级继承uid / gids。你需要一个特权程序(如loginsu等)实际设置UID /导报。
短暂

4
如上面所暗示,如果不方便注销/重新登录,则可以在终端:中进行此操作su your-user-name。生成的外壳将具有您更新的组权限。
TJ Crowder 2014年

2
谢谢你!我花了大约15分钟的时间才弄清楚为什么我在文件夹中没有组权限。
杰里米·斯宾塞

2
它要求我在Ubuntu 16.04 x64上重新启动,而不仅仅是注销并再次登录
Kartikey Tanna

15

为什么Linux用户不能编辑他所属的组中的文件?

我使用的是Ubuntu 12.04,并且遇到相同的问题,即用户无法写入允许组访问的文件。例如:

whoami                                        //I am user el
  el                                            

touch /foobar/test_file                       //make a new file

sudo chown root:www-data /foobar/test_file    //User=root  group=www-data

sudo chmod 474 /foobar/test_file              //owner and others get only read, 
                                              //group gets rwx


sudo groupadd www-data                        //create group called www-data    

groups                                        //take a look at the groups and see
 www-data                                     //www-data exists.

groups el                                     //see that el is part of www-data
  el : www-data                               

立即重新启动终端,以确保用户和组已生效。以el登录。

vi /foobar/test_file                          //try to edit the file.

产生警告:

Warning: W10: Warning: Changing a readonly file"

什么?我做对了所有事情,为什么它不起作用?

回答:

完全重新启动计算机。停止终端不足以解决这些问题。

我认为发生的是apache2也使用www-data组,因此该任务以某种方式阻止了用户和组的正确执行。您不仅必须注销,而且还必须停止并重新启动使用该组的所有服务。如果重启失败,那么您将遇到更大的问题。


1
什么是“更大的问题”?
Ejaz

13

我遇到了同样的问题,请检查文件夹中是否还有其他ACL规则!

如果您在列出文件夹时看到+(加号),则表示它具有特殊的访问规则。例如:

[user_in_apache_group@web02 html]$ ls -l
total 16
drwxrwxr-x  16 apache apache 4096 Sep  4 13:46 ilias
drwxrwxr-x+ 15 apache apache 4096 Sep  4 13:46 ilias5

查看权限:

[user_in_apache_group@web02 html] getfacl ilias5
# file: ilias5
# owner: apache
# group: apache
user::rwx
user:user_in_apache_group:r-x
group::rwx
mask::rwx
other::r-x

因此,这意味着我的用户(user_in_apache_group)没有对该文件夹的写权限。

解决方案就是@techtonik所说的,为用户添加写权限:

[user_in_apache_group@web02 html]$ sudo setfacl -m u:user_in_apache_group:rwx ./ilias5

再次检查权限:

[user_in_apache_group@web02 html] getfacl ilias5
...
user:user_in_apache_group:rwx
...

希望能帮助到你。;)


8

使用Linux ACL(访问控制列表)-它是权限系统的更细粒度版本,

setfacl -R -m 'group:staff:rwx' -m 'd:group:staff:rwx' /usr/local/lib/R/

这既为目录设置了活动权限,也为其中创建的任何内容设置了默认权限。

如果您刚刚将自己添加到staff组中,则无法重新登录而无法工作,但是您可以仅为自己设置当前会话的权限。


5

我遇到一个问题,/foo/bar/baz即使用户具有权限也无法访问目录,因为他没有访问bar目录的权限。


-2

在将内容添加到该文件之前,请检查您的父目录是否具有权限

sudo chmod -R 777 /yourDir/file.log
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.