在CentOS 7.2上安装SuPHP的详细方法
centos 7上php默认是以apache或者nobody的身份运行的,这种方式下由于php运行需要的权限比较大,会有安全隐患,还可能会受到服务器其他用户影响。
suphp是一个apache模块,允许php在与apache用户不同的linux用户之下。 这可以提高托管网站的安全性,因为您可以在其他用户下运行每个网站的php脚本。 本教程介绍了从源代码安装的centos 7.2上的suphp,因为centos 7.2没有可用的suphp软件包。
先决条件
您将安装centos 7.2或更高版本的服务器,我将使用本教程作为我的设置的基础。 在第一章中,我将安装apache web服务器。 如果您已经安装了apache,请立即从第2章开始。
我的服务器将使用hostname server1.example.com和ip地址192.168.1.100。 在以下教程中将这些值替换为服务器的主机名和ip地址。
为安全起见,建议安装防火墙,如果您还没有安装防火墙,可以使用以下命令进行安装:
yum -y install firewalld
启动防火墙并使其在启动时启动。
systemctl start firewalld.service
systemctl enable firewalld.service
接下来,打开您的ssh端口,以确保您能够通过ssh连接到服务器。
firewall-cmd --permanent --zone=public --add-service=ssh
firewall-cmd --reload
1、安装apache 2.4和php 5
apache和php在centos基础存储库中可用,因此我们可以使用yum安装这两个软件包。
安装apache和aapache开发包,其中包含以后的suphp编译所需的文件。
yum -y install httpd httpd-devel
php安装(我添加了一些常用的php模块):
yum -y install php php-mysql php-gd php-pear php-xml php-xmlrpc php-mbstring curl
我们必须使apache能够在引导时启动并启动服务。
systemctl start httpd.service
systemctl enable httpd.service
我们必须打开http(80)和https(443)端口,使得web服务器可以从其他计算机访问。 执行以下命令配置防火墙。
firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --permanent --zone=public --add-service=https
firewall-cmd --reload
2、安装suphp
在此步骤中,我们将从源代码编译suphp。 安装开发工具来设置所需的构建链。
yum -y groupinstall 'development tools'
并且wget可以下载源文件和nano编辑器。
yum -y install wget nano
下载suphp源tar.gz存档并解压缩它。
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,所以我们必须补丁suphp,然后我们可以编译它aganst apache。 补丁应用如下:
wget -o suphp.patch https://lists.marsching.com/pipermail/suphp/attachments/20130520/74f3ac02/attachment.patch
patch -np1 -d suphp-0.7.2 < suphp.patch
cd suphp-0.7.2
autoreconf -if
[root @ server1 suphp-0.7.2]#autoreconf -if
libtoolize:将辅助文件放在ac_config_aux_dir,`config'中。
libtoolize:复制文件`config / ltmain.sh'
libtoolize:考虑将`ac_config_macro_dir([m4])'添加到configure.ac和
libtoolize:重新运行libtoolize,以保持正确的libtool宏in-tree。
libtoolize:考虑在makefile.am中的aclocal_amflags中添加`-i m4'。
configure.ac:9:warning:am_init_automake:不支持双参数和三参数形式。 有关更多信息,请参阅:
configure.ac:9:http://www.gnu.org/software/automake/manual/automake.html#modernize-am_005finit_005fautomake-invocation
configure.ac:24:安装'config / config.guess'
configure.ac:24:安装'config / config.sub'
configure.ac:9:安装'config / install-sh'
configure.ac:9:安装'config / missing'
src / makefile.am:安装'config / depcomp'
[root @ server1 suphp-0.7.2]#
autoreconf命令应用补丁,现在我们可以如下配置新的源。 注意: configure命令是一行!
./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
然后编译并安装suphp。
make
make install
然后通过添加一个新的suphp.conf文件将suphp模块添加到apache配置中。
nano /etc/httpd/conf.d/suphp.conf
具有以下内容。
loadmodule suphp_module modules/mod_suphp.so
...并创建文件/etc/suphp.conf如下:
nano /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
3、使用suphp配置apache vhost
在本章中,我将介绍如何在单独的用户下运行php的apache中添加虚拟主机。 我将使用域名www.example.com作为网站,php将作为用户和组“ web1 ”运行,网站的文档根目录是/var/www/example.com
首先,添加一个新的用户和组“web1”。
useradd web1
添加网站根目录。
mkdir /var/www/example.com
chown web1:web1 /var/www/example.com
现在在apache conf.d目录中添加虚拟主机配置文件。
nano /etc/httpd/conf.d/example.com.conf
为此内容:
<virtualhost *> documentroot /var/www/example.com servername 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>
在servername和serveradmin行中用自己的域替换域名。
然后重新启动apache来应用配置更改。
systemctl restart httpd.service
4、测试suphp设置
在本章中,我将向您展示在本网站测试php的几种方法。 首先,我将创建一个使用phpinfo()函数来显示php是否正常工作的文件,并且现在是否以cgi模式运行。
用nano创建一个info.php文件:
nano /var/www/example.com/info.php
并将以下行添加到新文件中:
<?php
phpinfo();
然后将文件的所有者更改为web1用户和组。
chown web1:web1 /var/www/example.com/info.php
在网络浏览器中打开文件http://example.com/info.php的url,它将显示以下页面。
重要的是显示cgi / fastcgi的serverapi行。 这表明php是通过suphp而不是mod_php运行的。
现在我将测试php是否运行在正确的用户(web1)下。 suphp如何知道使用哪个用户? suphp将php切换到拥有php脚本的用户,因此我们的web根文件夹/var/www/example.com中的所有php文件都由web1用户和组拥有非常重要。
那么,如何测试php是否使用正确的用户? 一种方法是执行返回用户名的“whoami”命令。
我将在网站root中创建一个新脚本testuser.php:
nano /var/www/example.com/testuser.php
与此内容:
<?php
system('whoami');
然后将文件的所有者更改为web1用户和组。
chown web1:web1 /var/www/example.com/testuser.php
在web浏览器中打开http://example.com/testuser.php,结果应该是: web1
suphp被配置并作为本网站的用户执行php文件。 从网站目录中删除测试文件,并开始添加您的网站脚本。
5、将此centos 7.2服务器下载为虚拟机
此设置可用于以ova / ovf格式(与vmware和virtualbox兼容)的虚拟机下载,以了解用户的身份。
vm的登录详细信息
root密码是:howtoing
“管理员”用户的密码是:howtoing
请在第一次登录时更改两个密码。
虚拟机的ip地址为192.168.1.100
6、链接
centos
apache web服务器