Answers:
您的进程在登录时设置了其组列表,因此您需要再次登录才能使更改生效。
我还建议您添加www-data
为补充组,而不是主要组(该组仅设置为您所属的组。您应该可以使用以下命令执行此操作:
# Reset to your original primary group
sudo usermod -g myuser myuser
# Add an extra supplementary group
sudo usermod --append -G www-data group
如果希望创建的文件可供www-data
组的其他成员读取,请相应地调整umask:
umask 002
由于您的主要组成员身份是个人组,因此这不会影响您创建的文件的安全性。
还值得设置setgid
将在其中创建文件的目录的位:这将导致文件继承父目录的组所有权:
chmod g+s www/
对我而言,导致此错误的原因与众不同
我在本地用UID = 123配置了用户“ apache”,并在NIS目录中使用了相同的名称(“ apache”),但使用了不同的UID = 456。根据启动顺序和服务依赖性,可能会在NIS用户可用之前使用本地用户。这也意味着,当您显示用户名时,这将令人困惑,两者都将显示为“ apache”。仅当您查看数字UID时(例如,这样做ls -ln
您会看到区别。例如:
[root@mymachine]# ls -l
drwxr-x--- 4 apache ggg1 88 May 31 17:12 file1
drwxr-x--- 4 apache ppp2 88 May 31 17:12 file2
请参见file2的UID是不同的(456而不是123):
[root@mymachine]# ls -ln
drwxr-x--- 4 123 48 88 May 31 17:12 file1
drwxr-x--- 4 456 48 88 May 31 17:12 file2
用户不匹配并导致权限错误的另一个问题是,当我使用组“ httpd”限制对文件的访问时。这是用户“ apache”的主要组(使用id
或显示getent
)Apache以root身份启动,然后切换到配置的用户并放弃权限。切换到的用户/etc/httpd/conf/httpd.conf
由User
参数定义。但是,这是问题所在-进程将作为其运行的组(GID)不是该用户的主要组。该组通过Group
参数在同一配置文件中定义。
所以在我的情况下是(/etc/httpd/conf/httpd.conf):
User apache
Group apache
并且目录被授予如下访问权限:
drwxr-x--- 4 someuser httpd 88 May 31 17:12 mydir
因为httpd(GID = 444)是该用户的主要组,所以:
[root@somemachine]# id apache
uid=48(apache) gid=444(httpd) groups=444(httpd)
这导致花了一些时间进行调试,直到我意识到Group
配置文件中的文件是“ apache”而不是“ httpd”。
来自/ var / log / httpd / error_log的错误:
[Fri May 31 17:13:40.070343 2019] [authz_core:debug] [pid 2527] mod_authz_core.c(809): [client 11.22.32.21:53824] AH01626: authorization result of Require all granted: granted
[Fri May 31 17:13:40.070367 2019] [authz_core:debug] [pid 2527] mod_authz_core.c(809): [client 11.22.32.21:53824] AH01626: authorization result of <RequireAny>: granted
[Fri May 31 17:13:40.070396 2019] [core:error] [pid 2527] (13)Permission denied: [client 11.22.32.21:53824] AH00132: file permissions deny server access: /var/www/html/somedir/otherdir/css/file1.txt
我希望这有帮助。