我正在研究BOINC项目。
我有两个用户:boincadm和www-data(用于apache)。 两者都属于集团boinc
www-data : boinc www-data boincadm
boincadm : boinc adm dialout fax cdrom floppy tape audio dip www-data video plugdev netdev bluetooth lpadmin fuse scanner sambashare subversion
我在/ home / boincadm / projects / myproject /中创建了一个boinc项目 所有文件和文件夹都归boincadm所有:boinc并拥有rwxrwx ---权限。
问题是www-data用户无法访问文件,导致多个错误,如:
警告:require_once(../ inc / db.inc):无法打开流:/home/boincadm/projects/myproject/html/user/index.php中的权限被拒绝
致命错误:require_once():在/ home / boincadm /中打开所需的'../inc/db.inc'(include_path ='。:/ usr / share / php:/ usr / share / pear')失败projects / myproject / html / user / index.php
或只是
无法访问XXX文件
在日志中..
如果我将grant rwx更改为“其他人”(777),则可以正常工作..
我的问题是,为什么群组权限不能像我期望的那样工作?有什么想法吗?
我不是linux的专家,所以我可能会错过一些东西。
答案 0 :(得分:2)
这是一种可能性:
www-data
有主要群组www-data
;其余的是supplementary groups。
服务器进程拥有合适的用户(按setresuid
或类似)和主要组(按setresgid
或类似),但缺少其他补充组(没有initgroups
或类似)
如果是这种情况,您有几个选择:将文件所有权更改为主要组,更改服务器运行的组,或修复服务器以包括所有补充组。
答案 1 :(得分:1)
以下是我解决它的方法:
首先我读到了这个:
link
在某些时候,本文提到文件/etc/group
存储有关组的信息。
我打开了这个文件,并提到尽管我以前的行动,但www-data
组中没有boinc
。组www-data
中没有boincadm
,反之亦然。那很奇怪!
很奇怪,因为我已经使用usermod
命令将这些用户添加到了boinc组,并确保该组对两者都是主要的。
此外,命令groups <username>
表明它们属于boinc
组。
现在的问题是:为什么会这样?
通过修改3行来解决问题:
boinc:x:1111:boincadm, www-data
boincadm:x:1112:boincadm, www-data
www-data:x:1113:www-data, boincadm
我需要所有3行才能使其正常工作。希望它对某人有帮助。我仍然想了解使用/etc/group
时未自动修改文件usermod
的原因。为什么grops会显示正确的结果呢。