下面是在CentOS7.2上安装SuPHP的详细方法。
环境准备
- 操作系统:CentOS 7.2
- Web 服务器:Apache 2.4
- PHP 版本:PHP 7.0.33
安装必备软件
在安装SuPHP之前需要安装一些必备软件,包括GCC、make、httpd-devel、php-cli、php-devel、rpm-build、httpd。
可以使用以下命令安装:
yum install -y gcc make httpd-devel php-cli php-devel rpm-build httpd
下载SuPHP源码
可以从SuPHP的官网下载最新版本的源码。
wget http://suphp.org/download/suphp-0.7.2.tar.gz
解压并安装SuPHP
tar zxvf suphp-0.7.2.tar.gz
cd suphp-0.7.2
./configure --prefix=/usr --sysconfdir=/etc --with-apxs=/usr/bin/apxs --with-setid-mode=owner
make
make install
在上述的安装过程中,--prefix
参数指定了安装路径,--sysconfdir
指定了配置文件路径,--with-apxs
指定了Apache编译时生成的apxs二进制文件的路径,--with-setid-mode=owner
指定了SuPHP启动时的权限模式。
配置SuPHP
配置suphp.conf文件
vim /etc/httpd/conf.d/suphp.conf
在打开的文件中添加以下内容:
LoadModule suphp_module modules/mod_suphp.so
AddType application/x-httpd-php .php
suPHP_AddHandler application/x-httpd-php
<Directory "/var/www/html">
suPHP_Engine on
suPHP_UserGroup apache apache
</Directory>
在其中,LoadModule suphp_module
指定了加载模块,AddType
与 suPHP_AddHandler
指定了后缀为.php的文件交由SuPHP处理,<Directory>
块内的指令则指定了SuPHP的处理引擎,及处理用户和组信息。
配置virtual host文件
vim /etc/httpd/conf.d/virtualhost.conf
在打开的文件中添加以下内容:
<VirtualHost *:80>
ServerName example.com
DocumentRoot /var/www/html
<Directory "/var/www/html">
AllowOverride All
Order Allow,Deny
Allow from all
Options FollowSymLinks
Require all granted
</Directory>
</VirtualHost>
这份配置文件是一个虚拟主机配置示例,其中 ServerName
为服务器名称,DocumentRoot
为网站文件的根目录,<Directory>
指定了这个虚拟主机的目录权限控制。
启动Apache
启动Apache服务,尝试执行phpinfo.php文件测试是否已成功安装SuPHP。
systemctl start httpd
echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php
在浏览器中打开 http://example.com/phpinfo.php
可以看到PHP信息页面,其中的“Loaded Modules”一栏会显示已安装的SuPHP模块。
示例1:使用SuPHP管理网站文件
用户Bob的web根目录使用SuPHP管理:
useradd bob
mkdir /home/bob/public_html
echo "<?php phpinfo(); ?>" > /home/bob/public_html/phpinfo.php
chown -R bob:apache /home/bob/public_html
chmod -R 755 /home/bob/public_html
Apache虚拟主机:
<VirtualHost *:80>
ServerName bob.example.com
DocumentRoot /home/bob/public_html
<Directory "/home/bob/public_html">
AllowOverride All
Order Allow,Deny
Allow from all
Options FollowSymLinks
Require all granted
suPHP_Engine on
suPHP_UserGroup bob bob
</Directory>
</VirtualHost>
上述配置指定了用户Bob所在的web根目录和管理这个目录的用户和组,用于启用SuPHP的引擎。
示例2:使用SuPHP限制FTP用户文件权限
假设FTP用户的根目录为 /home/ftpuser
,使用SuPHP限制他仅能访问该目录下的文件。FTP用户为WWW并且获得作为PHP文件运行的权限。
-
将WWW用户加入到Apache组中
bash
usermod -a -G apache www -
启动ftp服务,并在配置文件中增加如下内容。该内容指定使用SuPHP对FTP用户进行限制。
DefaultRoot /home/ftpuser
<Directory /home/ftpuser/*>
supervisor ftpuser www
<Limit ALL>
DenyAll
</Limit>
</Directory> -
访问FTP用户根目录,并新建
phpinfo.php
文件,输入如下内容:php
<?php phpinfo();?> -
修改该文件用户组,从
ftpuser
更改为apache
bash
chgrp apache /home/ftpuser/phpinfo.php -
在浏览器中打开
http://example.com/phpinfo.php
可以看到PHP信息页面,其中的“Loaded Modules”一栏会显示已安装的SuPHP模块。
经过以上配置后,若FTP用户越权访问作用域范围以外的目录或者其它用户的文件,SuPHP将会进行拦截并报错。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:在CentOS 7.2上安装SuPHP的详细方法 - Python技术站