在Apache mod_fastcgi上创建每用户php5-fpm池时,以下哪种方法是向PHP池授予Web服务器权限的最安全方式和有效方式?
将论坛设为www-data
:
listen.owner = username
listen.group = www-data
listen.mode = 0660
user = username
group = www-data
虽然由PHP创建的工作文件将所有权设置为用户名:www-data ,而通过SCP上传的文件将具有用户名:用户名。
将www-data
添加到补充组username
:
listen.owner = username
listen.group = username
listen.mode = 0660
user = username
group = username
-
usermod -aG username www-data
以下哪些选项是安全的?您也可以分享更好的方法。
我检查了以下指南:
但他们都是在发现并修复了bug #67060之前编写的。
答案 0 :(得分:0)
我在LEMP(Nginx + PHP-FPM)上使用以下设置。对于Apache,这也应该适用。
PHP-FPM以nobody:user1
,nobody: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
权限,因此运行为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:user1
是user1
。
由于用户owner
是每个read
的成员,因此Nginx将write
{}访问所有用户并nginx
访问所有用户的上传内容,{{ 1}},...组。
您不应忘记将其添加到所有后续组中。您还可以修改user1
脚本以自动执行此操作。