权限问题:为什么用户在我的第二个php-fpm池中不需要?

我使用php-fpm自定义编译的Apache 2.4.17运行FreeBSD 10.2。 默认池( [www] ,几乎是一个股票php-fpm设置)在用户/组nobody / nobody 。 Apache在用户/组daemon / daemon 。 它可以很好地连接到一个插槽,有几个不同的站点都运行在库存池中。 他们是低优先级的网站使用PHP的东西,如显示时间。

从长远来看,我想制定一些更好的特权分离。 我在用户rcuser ,group rcuser (基本上是一个普通的FreeBSD shell帐户)拥有的单独的虚拟主机上创build了一个roundcube安装池。 根据习惯,我将networking虚拟主机放在/usr/vhosts/ ,所以这个网站会通过/usr/vhosts/webmail/htdocs/存储到/usr/vhosts/webmail/htdocs/ 。 整个webmail树属于用户和组rcuser。 这个树中的目录都有750个,文件有640个权限。 游泳池看起来像这样:

 [rcuser] user = rcuser group = rcuser listen = /var/run/php5-fpm-rcuser.sock listen.owner = rcuser listen.group = rcuser listen.mode = 0666 pm = dynamic pm.max_children = 5 pm.min_spare_servers = 1 pm.start_servers = 2 pm.max_spare_servers = 3 

为了使Apache可以访问它,我在每个文件和目录上创build了一个ACL,为daemon等价地访问/usr/vhosts/webmail/及其子目录。 基本上,这意味着find /usr/vhosts/webmail/ -type d -exec setfacl -m user:daemon:rwx {} \; find webmail/ -type f -exec setfacl -m user:daemon:rw {} \; 想到这将工作,但它没有工作,给我一个文件没有find错误,当我试图加载Roundcube。

接下来我尝试的是让other权限读取文件和rx访问目录。 这工作。 Roundcube运行良好,但这显然意味着其他用户可以读取其中的文件并查找敏感信息,如MySQL密码。 不是真的想要我想要的。

所以,我做的下一件事是find /usr/vhosts/webmail/ -exec chmod o-rwx {} \; 删除宽松的权限,但保持原始的rcuser权限和daemon ACL完好无损。 为其他用户,并尝试找出问题所在。 我记得我创build的第一个池以用户nobody身份运行,并find /usr/vhosts/webmail/ -exec -exec setfacl -m user:nobody:rx {} \; 。 这工作。 出于某种原因,php-fpm希望用户nobody在第二个池的目录中读取和执行访问。

所以, ps -maux显示php-fpm正在正确的用户rcuser下运行这个池。 这对我来说并不是世界上最大的问题,但是我不确定当我开始在客户端站点上部署这个php-fpm设置时可能会产生什么样的安全隐患。 另外,一个额外的和看似无关的ACL担心是一个烦恼。

有什么我可以做,使用户nobody不需要此ACL?

噢,好吧,我很高兴把这一切都写出来,因为我觉得这是一个答案。 使用TCP的默认池,我想我的新的使用UNIX域套接字。 所以,我有一个小的语法问题。 我不小心在Apache的代理设置行中包含了一些额外的垃圾。

 ProxyPassMatch "^/(.*\.php(/.*)?)$" "unix:/var/run/php5-fpm-rcuser.sock|fcgi://localhost:9000/usr/vhosts/webmail/htdocs/$1" 

本来应该

 ProxyPassMatch "^/(.*\.php(/.*)?)$" "unix:/var/run/php5-fpm-rcuser.sock|fcgi://localhost/usr/vhosts/webmail/htdocs/" 

它连接到第一个池,即使第二个池正常运行。 那就是:9000港口的名字和行尾的$1部分必须去。

所以,我修复了Apache并运行:

find webmail/ -exec setfacl -b {} \; 清除ACL权限,然后运行find webmail/ -type d -exec setfacl -m user:daemon:rwx {} \;; find webmail/ -type f -exec setfacl -m user:daemon:rw {} \; find webmail/ -type d -exec setfacl -m user:daemon:rwx {} \;; find webmail/ -type f -exec setfacl -m user:daemon:rw {} \; 让他们一直以来都是我想要的。

安装程序似乎可以很好,所以希望这有助于有人摔跤Apache vhost的权限有一天。

我的长期目标是不再需要运行FTPS服务器或使用php_admin_value open_basedir