Linux,为啥我有组权限却不能写?

Posted

技术标签:

【中文标题】Linux,为啥我有组权限却不能写?【英文标题】:Linux, Why can't I write even though I have group permissions?Linux,为什么我有组权限却不能写? 【发布时间】:2011-06-30 14:32:17 【问题描述】:

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

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

【问题讨论】:

你对 /usr/local/lib/R 中的站点库目录有写权限吗? 我发布的第一个命令不是显示该组有写权限吗? 是否已经存在site-library/tmp 文件/目录? 【参考方案1】:

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

sudo chmod -R 777 /yourDir/file.log

【讨论】:

将所有权限添加到文件不是解决方案,也不安全!【参考方案2】:

我遇到了同样的问题,检查文件夹是否有更多的 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
...

希望对您有所帮助。 ;)

【讨论】:

【参考方案3】:

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

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

这将设置目录的活动权限和在其中创建的任何内容的默认权限。

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

【讨论】:

【参考方案4】:

当用户即使拥有权限也无法访问/foo/bar/baz 目录时遇到问题,因为他无权访问bar 目录。

【讨论】:

【参考方案5】:

为什么 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 组,因此该任务以某种方式阻止了用户和组的正确执行。您不仅必须注销,还必须停止并重新启动任何使用您的组的服务。如果重新启动没有得到它,你就会遇到更大的问题。

【讨论】:

什么是“更大的问题”?【参考方案6】:

您是否在更改组后注销并重新登录?见:Super User answer involving touch permissions failure

【讨论】:

如果我打开一个新的终端窗口,那不应该被视为一个新进程吗?我很确定我试过了,但它没有强制我退出。 @Ben:启动一个新进程会从其父进程继承 uid/gids。你需要一个特权程序(如loginsu等)来实际设置uid/gids。 如果注销/重新登录不方便,如上所述,您可以在终端中执行此操作:su your-user-name。生成的 shell 将拥有您更新后的组权限。 谢谢!我花了大约 15 分钟的时间试图弄清楚为什么我在文件夹中没有组权限。 我需要在 Ubuntu 16.04 x64 上重新启动,而不仅仅是注销并再次登录

以上是关于Linux,为啥我有组权限却不能写?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我回答问题,上传图片成功,却出现权限不足,不能上传是怎么回事啊?我现在是四级。

为啥这个 c++ 代码在 Linux 中可以正常工作,但在 Windows 中却不能[关闭]

为啥 Python pyusb usb.core 访问由于权限而被拒绝,为啥 rules.d 不能修复它?

为啥Linux(Ubuntu系统)创建文件只能创建只读文件,还不能修改权限?

为啥 mysql CLI 可以连接,而 WordPress 却不能?

为啥我的 sql 和 Max 函数一起工作时,却不能和 Abs 函数一起工作?