Ngnix + PHP-FPM chroot

on June 5th, 2011 by 小桥 | 2 Comments »

Nginx+PHP-FPM是目前用得比较多的组合,如果在一台服务器上面跑多个站点,当一个安全性比较差的站点被入侵之后,其他网站也就无安全性可言了。PHP-FPM支持chroot功能,能够解决前面提到的安全问题,只是这功能默认没启用,配置也稍有点麻烦。
PHP-FPM的chroot配置可以参考以下方式:

1、修改php-fpm配置文件,如A网站的配置文件为/etc/php-fpm.d/a.conf,在a.conf中增加
chroot = /var/www/a

2、修改nginx的虚拟主机配置
fastcgi_param SCRIPT_FILENAME /var/www/a/$fastcgi_script_name;
要改为
fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;

3、建立必要的目录,复制文件。

mkdir tmp etc lib64 bin
cp /etc/hosts /etc/resolv.conf /etc/nsswitch ykdhttb.conf /etc/localtime etc
cp /lib64/libnss_dns.so.2 lib64  #域名解析需要,32位的系统就复制/lib/libnss_dns.so.2
chmod 1777 tmp
mkdir -p var/lib/php/session  #php.ini的session.save_path设置
chown root:apache var/lib/php/session
chmod 770 var/lib/php/session
mkdir -p usr/share/zoneinfo/Asia
cp /usr/share/zoneinfo/Asia/Shanghai usr/share/zoneinfo/Asia #跟php.ini配置的时区一致

4、修改php应用配置,使用TCP连接MySQL数据库

5、使php mail()函数可用
下载femail源代码,编译成静态链接的二进制文件,复制到usr/sbin/sendmail。
建立etc/femail.conf文件,内容如下:
smtphost = 127.0.0.1
myname = aa.me
找一个静态链接的ash.static文件,复制到bin/sh,测试发送邮件。

echo 'Subject: test'|chroot /var/www/a /usr/sbin/sendmail -v  xx@aa.me

{Leave a response }

  1. spooking says:

    4、修改php应用配置,使用TCP连接MySQL数据库

    请问下这一步如何修改呢?

  2. 小桥 says:

    比如原来是用“localhost”的,改为“127.0.0.1”。

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA * Time limit is exhausted. Please reload the CAPTCHA.