今天在研究lnmp的安全问题,将nginx worker和php-fpm worker进程设为不同用户,网站目录和php可能操作到的目录设置文件夹的owner为php-fpm进程的用户,发现有时候网站页面会加载不全,特别是POST动作的时候。
查看error_log,发现了很多类似

2014/08/09 15:56:13 [crit] 17915#0: *4 open() "/var/cache/nginx/fastcgi_temp/1/00/0000000001" failed (13: Permission denied) while reading upstream, client:

这样的错误,查看/var/cache/nginx/fastcgi_temp/目录下的文件权限,发现:

1
2
3
4
5
drwx------ 4 nginx    nginx    4096  8月  9 15:54 5
drwx------ 3 nobody   nobody   4096  8月  8 15:32 6
drwx------ 3 nobody   nobody   4096  8月  8 15:32 7
drwx------ 3 nobody   nobody   4096  8月  8 15:32 8
drwx------ 3 nginx    nginx    4096  8月  9 15:43 9

通过搜索得知nginx为了安全默认将缓存目录设置为700权限,也就是说只有nginx worker进程的用户才有对缓存目录的读写权限,其他任何用户和组都无权限,联想到刚才我将nginx worker进程的用户由nobody改为nginx,之前nobody用户生成的缓存目录在换成nginx用户后就没权限读写了,所以会报错,将缓存目录的属主重新改成nginx即可解决问题,或者直接清空缓存目录,nginx自动重新生成的缓存目录文件权限就正确了。