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

A.J*_*sin 6 php apache fastcgi 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
Run Code Online (Sandbox Code Playgroud)

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


选项2:

加入www-data补充组username:

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

user = username
group = username
Run Code Online (Sandbox Code Playgroud)

-

usermod -aG username www-data
Run Code Online (Sandbox Code Playgroud)

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

我检查了以下指南:

但它们都是在发现并修复了#67060号错误之前编写的.

小智 1

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

PHP-FPM 运行多个池nobody:user1nobody:user2...

Nginx 运行为nginx:nginx

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

# usermod -a -G user5 nginx
Run Code Online (Sandbox Code Playgroud)

文件权限:

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)
Run Code Online (Sandbox Code Playgroud)

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

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

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

server {
    ....
    location ^~ /uploads/ { }
Run Code Online (Sandbox Code Playgroud)

但对于 Apache 你应该检查一下。

(4)如果我们希望以后能够通过 ftp 或 ssh(以 身份登录)编辑这些文件,则上传的文件还应该包含wfor 。PHP 代码也可以通过 ftp 进行编辑,因为它的.groupuser1user1:user1user1owner

Nginx 将有权read访问所有用户并write访问所有用户的上传,因为用户是每个, , ... 组nginx的成员。您不应该忘记将其添加到所有后续组中。您还可以修改脚本以自动执行此操作。user1user2useradd