Ubuntu Lucid和Trusty之间的Unix域套接字权限

时间:2014-11-05 18:16:52

标签: linux sockets ubuntu-10.04 ubuntu-14.04 unix-socket

我有一个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/

但是,我没有看到父目录之外的任何祖先会如何影响这个?

1 个答案:

答案 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