红联Linux门户
Linux帮助

CentOS 7.x安装配置SuPHP

发布时间:2016-06-26 11:06:17来源:topspeedsnail.com作者:斗大的熊猫

SuPHP是apache的一个模块,它允许PHP在不同的Linux用户下运行。

SuPHP是一个很不错的开源工具。它可以让你的PHP代码以一种安全的方式进行运行。你可以为每个虚拟主机或者站点指定一个特定的用户来运行PHP代码。而不是像PHP和Apache默认的那样运行于nobody、www-data、apache或者root(这样是相当危险的)这些账户下。试想,一个不成熟的PHP代码运行于root帐户下,将带来多么大的安全隐患。另外,一般而言,为了外界能正常使用网站,很多目录(比如附件目录、缓存目录等)都要设置为777才能够正常写入。这样其实也是不安全的。

而SuPHP正好可以解决这个问题。首先,SuPHP可以指定PHP代码以哪个帐户运行。这样您就可以把一些不安全的未经测试的PHP代限制在一些并没有实际权限的用户下进行运行。另外,通过SuPHP,要求写入的目录可以只设置为755,文件等设置为644就可以让外界用户正常使用网站的每一个功能了。所以,SuPHP是一个增强型的安全工具。尤其对于那些空间提供商来说。

SuPHP运行的原理是把PHP代码将由SuPHP进行解释,然后SuPHP将通过您设置好的那个帐户运行PHP解释器。

本帖纪录怎么在CentOS 7.X上安装SuPHP,由于目前还没有现成的模块,我们需要从源码编译安装。

我使用的CentOS是最小化安装的;并且本文使用centos.example.com,192.168.1.100作为CentOS的域名和IP地址,注意替换为你实际的域名和IP地址。


#1 安装防火墙(可选)

如果你没有安装防火墙,强烈建议你安装防火墙。

# yum install firewalld

启动防火墙服务:

# systemctl start firewalld.service
# systemctl enable firewalld.service

首先,打开SSH端口确保可以使用ssh连接:

# firewall-cmd --permanent --zone=public --add-service=ssh
# firewall-cmd --reload


#2 安装Apache和PHP

安装Apache和Aapache开发包:

# yum install httpd httpd-devel

安装PHP和一些常用模块:

# yum install php php-mysql php-gd php-pear php-xml php-xmlrpc php-mbstring curl

启动Apache服务:

# systemctl start httpd.service
# systemctl enable httpd.service

配置防火墙允许80和443端口的连接:

# firewall-cmd --permanent --zone=public --add-service=http
# firewall-cmd --permanent --zone=public --add-service=https
# firewall-cmd --reload


#3 安装 SuPHP

由于我们要从源码编译安装,所以我们还需要安装开发编译工具(gcc、make…):

# yum groupinstall 'Development Tools'

安装wget和vim编辑器:

# yum install wget vim

下载SuPHP源码并解压:

# cd /usr/local/src
# wget http://suphp.org/download/suphp-0.7.2.tar.gz
# tar zxvf suphp-0.7.2.tar.gz

CentOS 7使用Apache 2.4,在编译之前先打一个补丁:

# wget -O suphp.patch https://lists.marsching.com/pipermail/suphp/attachments/20130520/74f3ac02/attachment.patch
# patch -Np1 -d suphp-0.7.2 < suphp.patch

CentOS 7.x安装配置SuPHP

编译安装:

# cd suphp-0.7.2
# autoreconf -if
# ./configure --prefix=/usr/ --sysconfdir=/etc/ --with-apr=/usr/bin/apr-1-config --with-apache-user=apache --with-setid-mode=owner --with-logfile=/var/log/httpd/suphp_log
# make
# make install

配置Apache使用suPHP模块:

# vim /etc/httpd/conf.d/suphp.conf

添加一行:

LoadModule suphp_module modules/mod_suphp.so

创建suPHP配置文件 /etc/suphp.conf:

# vim /etc/suphp.conf

内容如下:

[global]
;Path to logfile
logfile=/var/log/httpd/suphp.log
;Loglevel
loglevel=info
;User Apache is running as
webserver_user=apache
;Path all scripts have to be in
docroot=/
;Path to chroot() to before executing script
;chroot=/mychroot
; Security options
allow_file_group_writeable=true
allow_file_others_writeable=false
allow_directory_group_writeable=true
allow_directory_others_writeable=false
;Check wheter script is within DOCUMENT_ROOT
check_vhost_docroot=true
;Send minor error messages to browser
errors_to_browser=false
;PATH environment variable
env_path=/bin:/usr/bin
;Umask to set, specify in octal notation
umask=0077
; Minimum UID
min_uid=100
; Minimum GID
min_gid=100

[handlers]
;Handler for php-scripts
x-httpd-suphp="php:/usr/bin/php-cgi"
;Handler for CGI-scripts
x-suphp-cgi="execute:!self"

重启Apache:

# systemctl restart httpd.service


#4 配置Apache虚拟主机配置文件

我使用的域名 centos.example.com,网站文档目录 /var/www/centos.example.com,使用的用户web1。

添加一个用户:

# useradd web1

创建网站存放目录:

# mkdir /var/www/centos.example.com
# chown web1:web1 /var/www/centos.example.com

添加虚拟主机配置文件 centos.example.com.conf:

# vim /etc/httpd/conf.d/centos.example.com.conf

写入内容:
<VirtualHost *>
DocumentRoot /var/www/centos.example.com
ServerName centos.example.com
ServerAdmin webmaster@example.com
<FilesMatch ".+\.ph(p[345]?|t|tml)$">
SetHandler None
</FilesMatch>
<IfModule mod_suphp.c>
suPHP_Engine on
<FilesMatch "\.php[345]?$">
SetHandler x-httpd-suphp
</FilesMatch>
suPHP_AddHandler x-httpd-suphp
</IfModule>
</VirtualHost>

重启Apache:

# systemctl restart httpd.service


#5 测试

创建info.php测试文件:

# vim /var/www/centos.example.com/info.php

写入内容:

<?php
phpinfo();

更改文件权限:

# chown web1:web1 /var/www/centos.example.com/info.php

使用浏览器访问 http://centos.example.com/info.php

CentOS 7.x安装配置SuPHP

Server API显示CGI/FastCGI代表PHP的运行模式是SuPHP,而不是mod_php。

查看PHP在哪个用户下运行:

<?php
system('whoami');


本文永久更新地址:http://www.linuxdiyf.com/linux/21854.html