我有一个Web应用程序,我正在从Ubuntu Lucid迁移到Trusty。该应用程序通过unix域套接字(使用000
的umask创建)与Nginx进行通信。在Lucid上,我对这个设置没有任何问题。但是,在Trusty上,使用相同的权限设置,Nginx给出了以下错误:
*51 connect() to unix:/opt/run/skyhook/skyhook.socket failed (13: Permission denied) while connecting to upstream, client
检查两台服务器的权限,我看到了:
关于清醒:
$ sudo ls -lh /opt/run/skyhook/skyhook.socket
srwxrwxrwx 1 skyhook skyhook 0 2014-08-21 17:09 /opt/run/skyhook/skyhook.socket
$ sudo sudo -u www-data ls -lh /opt/run/skyhook/skyhook.socket
srwxrwxrwx 1 skyhook skyhook 0 2014-08-21 17:09 /opt/run/skyhook/skyhook.socket
值得信赖:
$ sudo ls -lh /opt/run/skyhook/skyhook.socket
srwxrwxrwx 1 skyhook skyhook 0 Nov 4 15:36 /opt/run/skyhook/skyhook.socket
$ sudo sudo -u www-data ls -lh /opt/run/skyhook/skyhook.socket
ls: cannot access /opt/run/skyhook/skyhook.socket: Permission denied
两台服务器上的权限相同,结果不同。 Nginx在Ubuntu上作为www-data运行。使用777
权限,我希望www-data能够与套接字进行交互,但它不能。发生了什么事?
更新
/opt/run/skyhook
的权限在清晰和可靠方面都是相同的:
$ sudo ls -lhd /opt/run/skyhook
drwxrwx--- 2 skyhook skyhook 4.0K Nov 4 15:36 /opt/run/skyhook
对于/opt/run
,差异很小。清醒:
$ sudo ls -lhd /opt/run/
drwxrwxr-x 4 www-data www-data 4.0K 2014-01-27 18:11 /opt/run/
值得信赖:
$ sudo ls -lhd /opt/run/
drwxr-xr-x 4 root root 4.0K Nov 4 09:33 /opt/run/
对于/opt
,两者都是相同的:
$ sudo ls -lhd /opt/
drwxr-xr-x 7 root root 4.0K 2013-06-07 17:15 /opt/
但是,我没有看到父目录之外的任何祖先会如何影响这个?
答案 0 :(得分:0)
鉴于更新,似乎/opt/run/skyhook
目录仅向a)skyhook
用户授予权限,b)任何属于skyhook
组成员的用户。< / p>
在www-data
无法访问/opt/run/skyhook
目录中的文件的系统中,www-data
很可能不属于skyhook
组的成员,而它在其他系统上确实有这样的成员资格。
可以通过将www-data
添加到skyhook
组,或者通过/opt/run/skyhook
向世界提供读取/执行权限来解决此问题,以便它看起来类似于/opt/run
。