即使WWW数据用户具有组写入权限,Nginx的权限也被拒绝

即使用户有写入组访问权限,Nginx也无法写入日志文件。 这里有一些细节:

www-data用户在ubuntu组中:

$ id www-data uid=33(www-data) gid=33(www-data) groups=33(www-data),1000(ubuntu) 

/ opt / logs /是组可写的:

 $ ls -ld /opt/logs/ drwxrwxr-x 2 ubuntu ubuntu 4096 2012-07-27 02:47 /opt/logs/ 

www-data用户可以按照预期创build/ opt / logs / 1:

 $ su www-data $ touch /opt/logs/1 $ ls -l /opt/logs/1 -rw-rw-r-- 1 www-data www-data 0 2012-07-27 02:47 /opt/logs/1 

Nginx的用户:groups:

 var_dump(system('whoami'), system('groups')); // string 'www-data' (length=8) // string 'www-data ubuntu' (length=15) 

但是Nginx不能写:

 Warning: file_put_contents(/opt/logs/Error.log) function.file-put-contents failed to open stream: Permission denied 

/opt/logs/Error.log不存在

那么为什么coudn't它写入文件?

一个可能的原因:当您将www-data用户添加到ubuntu组时,它只会影响稍后启动的会话。

su - www-data -s /bin/bash创build一个新的会话,所以它工作正常。 但是Nginx仍然以www-data用户的身份运行,所以我怀疑这是上述错误的原因。

(如果你切换到www-data用户之前做一个usermod -a -G ubuntu www-data ,我敢肯定,你只会看到uid=33(www-data) gid=33(www-data) groups=33(www-data)键入id

无论是重新启动Nginx或切换到www-data用户使其立即生效后做一个新的newgrp ubuntu