如何在 CentOS 7.2 上安装 SuPHP如何在 CentOS 7.2 上安装 SuPHP如何在 CentOS 7.2 上安装 SuPHP如何在 CentOS 7.2 上安装 SuPHP
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

如何在 CentOS 7.2 上安装 SuPHP

在此页

  1. 先决条件
  2. 1 安装 Apache 2.4 和 PHP 5
  3. 2 安装 SuPHP
  4. 3 使用 SuPHP 配置 Apache Vhost
  5. 4 测试 SuPHP 设置
  6. 5 下载此 CentOS 7.2 服务器作为虚拟机
  7. 6 个链接

SuPHP 是一个 apache 模块,它允许 PHP 在与 apache 用户不同的 Linux 用户下运行。这提高了托管网站的安全性,因为您可以在不同用户下运行每个网站的 PHP 脚本。本教程描述了从源代码在 centOS 7.2 上安装 SuPHP,因为没有适用于 CentOS 7.2 的 SuPHP 包。

先决条件

你应该有一台安装了 CentOS 7.2 或更高版本的服务器,我将使用本教程作为我设置的基础。在第一章中,我将安装 Apache Web 服务器。如果您已经安装了 Apache,那么请立即从第 2 章开始。

我的服务器将使用主机名 server1.example.com 和 IP 地址 192.168.1.100。将这些值替换为您服务器的主机名和 IP,无论它们在以下教程中出现在哪里。

出于安全原因,我建议安装防火墙,如果您还没有安装 firewalld,那么您可以使用以下命令安装它:

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开发包,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 打补丁,然后才能针对 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

autoreconf 命令应用了补丁,现在我们可以按如下方式配置新源。注意:配置命令是一行!

./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

在本章中,我将展示如何在 apache 中添加虚拟主机,以在单独的用户下运行 PHP。我将为该网站使用域名 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

<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”命令。

我将在网站根目录中创建一个新脚本 testuser.php:

nano /var/www/example.com/testuser.php

内容如下:

<?php
system('whoami');

然后将文件的所有者更改为 web1 用户和组。

chown web1:web1 /var/www/example.com/testuser.php

在网络浏览器中打开 http://example.com/testuser.php,结果应为:web1

SuPHP 作为本网站的用户配置并执行 PHP 文件。从网站目录中删除测试文件并开始添加您的网站脚本。

5 下载这个CentOS 7.2服务器作为虚拟机

此设置可作为 ova/ovf 格式的虚拟机下载(与 VMWare 和 Virtualbox 兼容)供 howtoforge 订阅者使用。

VM 的登录详细信息

  • 根密码是:howtoforge
  • “管理员”用户的密码是:howtoforge

请在首次登录时更改这两个密码。

  • 虚拟机的 IP 地址是 192.168.1.100

6个链接

  • 中央操作系统
  • Apache 网络服务器
  • 超级PHP

©2015-2025 艾丽卡 support@alaica.com