当前位置:首页 » 网站优化 » 正文

PHP-FPM使用多进程池隔离来增强安全性

 人参与  2022年10月22日 10:08  分类 : 网站优化  点这评论

服务器被入侵挖矿后,服务器和应用的安全意识被提升到了一个新的高度。我经常帮助客户发现服务漏洞。最近我在客户端服务器发现了一个非常严重的远程执行漏洞。还好没有被利用。

拿到服务器getshell就意味着程序源代码和数据的泄露,这是非常严重的安全事故。有鉴于此,目前在线服务器实施的安全策略包括:

必须开启防火墙,严格限制流量进出;
不允许使用root权限运行应用程序;如果需要侦听特权端口,工作进程必须拥有setuid/setgid作为普通或低特权帐户;
如果服务器运行多个应用程序,资源和权限必须隔离;
并对数据文件进行远程备份。
简单来说就是:1。尽量保证不会有服务器被入侵;2.如果发生了,你就无法获得系统的控制权;3.不影响其他应用;4.可以尽快恢复系统。

资源权限隔离的一个好的实践是在容器中运行。而个人用户往往在一台机器上部署多个应用,对机器的配置要求不高。使用docker隔离cpu和内存利用率可能会直接飙升,多个容器共享的数据库实例配置稍微复杂一些。

本文简要介绍了在服务器上运行多个PHP应用程序时,如何使用多个进程池来隔离和增强安全性。

PHP-FPM使用多进程池隔离来增强安全性

在一台机器上部署多个PHP应用程序是很常见的场景,比如www、api和admin后台。默认情况下,使用www,PHP-FPM进程池。如果一个应用被入侵,可以访问其他应用的代码和数据,这是一个安全隐患。

幸运的是,FPM支持多个进程池,可以在不同的帐户权限下运行,从而实现了资源隔离,增强了安全性。

假设有两个应用,A和B,下面描述使用多个进程池进行隔离的操作步骤。

1.首先创建两个系统用户:

sudo useradd user1sudo useradd user2

2. 赋予用户对网站文件夹所有权:

# 假设A和B两个应用的存放位置是 /var/www/site1 和 /var/www/site2sudo chown -R user1:user1 /var/www/site1sudo chown -R user2:user2 /var/www/site2# 禁止user1用户访问B应用的文件和数据,反之亦然sudo chmod 770 /var/www/site1sudo chmod 770 /var/www/site2

设置好文件夹权限后,万一A或者B应用被入侵,上述设置一定程度上保护了另外一个应用的安全。

此外,我们还须放行Nginx对文件夹的访问权限(假设Nginx的运行用户为nginx):

sudo usermod -a -G site1 nginxsudo usermod -a -G site2 nginx

注:也可以将site1和site2的用户组设置为nginx,就无需更改Nginx的用户组了:

sudo chown -R user1:nginx /var/www/site1sudo chown -R user2:nginx /var/www/site2

3. 创建两个新的PHP-FPM进程池:

sudo cp /etc/<a target="_blank" href="http://www.ziti66.com/tag/php" title="View all posts in php">php</a>-fpm.d/www.conf /etc/<a target="_blank" href="http://www.ziti66.com/tag/php" title="View all posts in php">php</a>-fpm/site1.confsudo cp /etc/<a target="_blank" href="https://www.7ubk.cn/tag/php" title="View all posts in php">php</a>-fpm.d/site1.conf /etc/php-fpm/site2.conf

4. 配置进程池,分别使用user1和user2两个用户运行:

# 编辑配置文件sudo vim /etc/php-fpm.d/site1.conf# 修改进程池名称[www] => [site1]# 修改进程运行用户和组user = apache => user = user1group = apache => group => user1# 修改监听地址listen = /run/php-fpm/www.sock => listen = /run/php-fpm/site1.sock# site2配置类似

5. 修改Nginx的网站配置:

# site1的配置server {  server_name xxx.  location ~ \.php$ {    ...    fastcgi_pass unix:/run/php-fpm/site1.sock  }}# site2的配置类似

修改完成后,使用 nginx -t 测试有无语法错误。

6.  如果开启了Opcache,编辑 10-opcache.ini 文件,修改 opcache.validate_permission 和 opcache.validate_root 的值:

opcache.validate_permission=1opcache.validate_root=1

7. 重启Nginx和PHP-FPM:

sudo systemctl restart nginx php-fpm

使用 ps 命令查看PHP-FPM进程,应该能看到以不同用户在运行:

总结

在多租户,多应用的情况下,对资源进行隔离能有效的保障系统安全。本文简要介绍了PHP-FPM使用多个进程池隔离增强安全性的操作步骤,如果条件允许,更建议使用docker进行资源隔离。


本文由本站原创或投稿者首发,转载请注明来源!

本文链接:http://www.ziti66.com/net/html/85.html

本文标签:网站优化    

微信公众号:升级接入中

<< 上一篇下一篇 >>
为祖国加油
祖国加油,相信新的一年会更好...
为祖国加油
森林防火,人人有责。祖国加油...

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

搜索

网站分类

Tags列表

最新留言

++发现更多精彩++

    海内存知己,天涯若比邻。

黔ICP备2020011602号黔ICP备2020011602号-8
贵公安备52052602000222号

❤安全运行 Copyright © 2018-2025 66字体网 版权所有.

本站采用创作共用版权 CC BY-NC-SA 3.0 CN 许可协议,转载或复制请注明出处