为什么我的unix套接字使用不同的ACL掩码创build到其他文件?

我正在部署一个Nodejs Express应用程序。 它将在与Nginx服务器相同的框中运行,该服务器将通过unix套接字向其请求代理。 但是,这个问题并不是针对Nodejs的。

快速应用程序以用户nodejs运行,而nginx以nginx运行。

我的计划是创build一个由nodejs for Express拥有的/sockets目录来插入套接字,并通过目录上的默认ACL授予对这些套接字的nginx访问权限。 随意告诉我这是否是一个愚蠢的想法,但请记住,这不是我的核心问题。

我通过以root用户身份运行目录来创buildACL,

 setfacl -Rd --mask -m nginx:rw /sockets setfacl -R --mask -m nginx:rwX /sockets 

然后该目录具有以下ACL:(由我在表格中清晰可见)

 # file: /sockets # owner: nodejs # group: root user: : rwx user: nginx: rwx group: : rx mask: : rwx other: : rx default: user: :rwx default: user:nginx:rw- default:group: :rx default: mask: :rwx default:other: :rx 

如果作为nodejs运行,我写入一个文件,它被适当地创build:

 sudo -su nodejs touch /sockets/testFile getfacl /sockets/testFile # file: /sockets/testFile # owner: nodejs # group: nodejs user: :rw- user:nginx:rw- group: :rx #effective:r-- mask: :rw- other: :r-- 

大!

但是,如果Node通过在这个目录的path上调用listen()来创build一个套接字,那么它会创build一个ACL mask来防止nginx访问它。

 const e = require('express')() e.listen('/sockets/testSocket', (e) => console.error(e)) getfacl /sockets/testSocket # file: /sockets/testSocket # owner: nodejs # group: nodejs user: :rwx user:nginx:rw- #effective:r-- group: :rx mask: :rx other: :rx 

如果我在/sockets创build一个带有Nodejs的普通文件(例如通过fs.writeFile ),它会创build与上面运行touch /sockets/testFile时相同的权限,所以我不认为这是Node的umask问题。

同样,如果我运行等效代码绑定到python的套接字,结果是相同的,所以我不认为这是一个与节点本身的问题。

显然,这阻止了Nginx与我的Express应用程序交谈。 任何人都可以解决为什么? :/服务器正在运行CentOS 7。