以安全的方式创建每用户php5-fpm池

时间:2014-11-11 14:04:08

标签: apache fastcgi php mod-fastcgi

在Apache mod_fastcgi上创建每用户php5-fpm池时,以下哪种方法是向PHP池授予Web服务器权限的最安全方式和有效方式?

选项1:

将论坛设为www-data

listen.owner = username
listen.group = www-data
listen.mode = 0660

user = username
group = www-data

虽然由PHP创建的工作文件将所有权设置为用户名:www-data ,而通过SCP上传的文件将具有用户名:用户名


选项2:

www-data添加到补充组username

listen.owner = username
listen.group = username
listen.mode = 0660

user = username
group = username

-

usermod -aG username www-data

以下哪些选项是安全的?您也可以分享更好的方法。

我检查了以下指南:

但他们都是在发现并修复了bug #67060之前编写的。

1 个答案:

答案 0 :(得分:0)

我在LEMP(Nginx + PHP-FPM)上使用以下设置。对于Apache,这也应该适用。

PHP-FPM以nobody:user1nobody:user2 ...

运行多个池

Nginx以nginx:nginx

运行

用户nginx是每个user1user2 ..群组的成员:

# usermod -a -G user5 nginx

文件权限:

root:root    drwx--x--x   /home
user1:user1  drwx--x---   /home/user1                       (1)
user1:user1   rwxr-x---   /home/user1/site.com/config.php   (2)
user1:user1  drwxrwx---   /home/user1/site.com/uploads      (3)
nobody:user1  rw-rw----   /home/user1/site.com/uploads/avatar.gif   (4)

(1)用户的主目录对x没有other权限,因此运行为nobody:user2的php-fpm池将无法访问/home/user1反之亦然。

(2)php脚本没有w group,因此无法在htdocs中创建文件。

(3)在uploads目录上,我们应该手动启用组user1的写访问权限,以启用php脚本将文件放在那里。不要忘记禁用uploads的php处理程序,在nginx中这是由

server {
    ....
    location ^~ /uploads/ { }

但是对于Apache你应该检查。

(4)如果我们希望w稍后可以通过ftp或ssh编辑这些文件,则group上传的文件也应该user1(以{{1}登录})。 Php代码也可以通过ftp编辑,因为user1:user1user1

由于用户owner是每个read的成员,因此Nginx将write {}访问所有用户并nginx访问所有用户的上传内容,{{ 1}},...组。 您不应忘记将其添加到所有后续组中。您还可以修改user1脚本以自动执行此操作。