0

我有一个Web应用程序,我正在从Ubuntu Lucid迁移到Trusty。该应用程序通过unix域套接字(带有000的umask创建)与w/Nginx通信。在Lucid上,我对这个设置没有任何问题。然而,在忠实的,使用相同的权限设置,Nginx的给了我以下错误:Ubuntu Lucid和Trusty之间的Unix域套接字权限

*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数据运行。使用777权限,我希望www-data能够与套接字进行交互,但不能。到底是怎么回事?

UPDATE:

/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/ 

不过,我看不出如何超越父目录的任何祖先会影响这个?

+1

'/ opt/run/skyhook /'上的权限是什么? 'www-data'是否有执行权限? – Kevin 2014-11-05 18:32:45

+0

同样,在'/ opt/run'和'/ opt'本身。 – twalberg 2014-11-05 18:38:53

+0

我已更新问题以反映父目录权限。 – 2014-11-05 18:58:50

回答

0

考虑到更新,看起来/opt/run/skyhook目录仅授予a)skyhook用户的权限,以及b)作为skyhook组成员的任何用户。

在系统中www-data不能在/opt/run/skyhook目录访问文件时,它是最有可能的情况是www-data不是skyhook组的成员,而它确实有其他的系统中,例如会员。

这可以通过增加www-dataskyhook组,或者通过给读/执行权限对世界/opt/run/skyhook,以便它类似于上/opt/run的权限来解决。

+0

最后一个愚蠢的错误。我正在从一个大部分手工组装的服务器转移到一个托管配置服务器,因此,这样的模糊而又重要的细节将被编入某处! – 2014-11-05 20:41:52