6

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

选项1:

将组设置为www-data

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

user = username
group = www-data

虽然此工程由 PHP 创建的文件将所有权设置为username:www-data而通过 SCP 上传的文件将具有username:username


选项 2:

添加www-data到补充组username

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

user = username
group = username

-

usermod -aG username www-data

这些选项中哪些是安全的?你也可以分享一个更好的方法。

我检查了以下指南:

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

4

1 回答 1

1

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

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

Nginx 运行为nginx:nginx

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

# 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,因此运行 as 的 php-fpm 池nobody:user2将无权访问,/home/user1反之亦然。

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

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

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

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

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

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

于 2017-10-08T10:58:59.290 回答