CentOS 7.2 に SuPHP をインストールするための詳細な手順

CentOS 7.2 に SuPHP をインストールするための詳細な手順

デフォルトでは、CentOS 7 上の PHP は apache または nobody として実行されます。この方法では、PHP を実行するために大きな権限が必要となり、セキュリティ上のリスクが生じる可能性があり、サーバーの他のユーザーによる影響を受ける可能性もあります。

SuPHP は、Apache ユーザーとは異なる Linux ユーザーで PHP を実行できるようにする Apache モジュールです。 これにより、各 Web サイトの PHP スクリプトを異なるユーザーで実行できるため、ホストされている Web サイトのセキュリティを強化できます。 CentOS 7.2 で利用できる SuPHP パッケージがないため、このチュートリアルではソースからインストールされた CentOS 7.2 上の SuPHP について説明します。

前提条件

CentOS 7.2 以降のサーバーがインストールされています。このチュートリアルをセットアップの基礎として使用します。 この最初の章では、Apache Web サーバーをインストールします。 Apache がすでにインストールされている場合は、第 2 章から始めてください。

私のサーバーは、ホスト名 server1.example.com と IP アドレス 192.168.1.100 を使用します。 次のチュートリアルのこれらの値を、サーバーのホスト名と IP アドレスに置き換えてください。

セキュリティ上の理由から、ファイアウォールをインストールすることをお勧めします。ファイアウォールをまだインストールしていない場合は、次のコマンドを使用してインストールできます。

yum -y でfirewalldをインストールします

ファイアウォールを起動し、起動時に起動するように有効にします。

systemctl は、firewalld.service を起動します。
systemctl で、firewalld.service を有効にする

次に、SSH ポートを開いて、SSH 経由でサーバーに接続できることを確認します。

ファイアウォールコマンド --permanent --zone=public --add-service=ssh
ファイアウォール-cmd --reload

1. Apache 2.4とPHP 5をインストールする

Apache と PHP は CentOS ベース リポジトリで利用できるので、yum を使用して両方のパッケージをインストールできます。

後の SuPHP コンパイルに必要なファイルが含まれる Apache および Aapache 開発パッケージをインストールします。

yum -y httpd をインストール httpd-devel

PHP のインストール (一般的な PHP モジュールをいくつか追加しました):

yum -y php php-mysql php-gd php-pear php-xml php-xmlrpc php-mbstring curl をインストールします。

起動時に Apache が起動し、サービスが開始されるようにする必要があります。

systemctl は httpd.service を開始します。
systemctl で httpd.service を有効にする

他のコンピュータから Web サーバーにアクセスできるようにするには、HTTP (80) ポートと HTTPS (443) ポートを開く必要があります。 ファイアウォールを構成するには、次のコマンドを実行します。

ファイアウォールコマンド --permanent --zone=public --add-service=http
ファイアウォールコマンド --permanent --zone=public --add-service=https
ファイアウォール-cmd --reload

2. SuPHPをインストールする

このステップでは、ソースから SuPHP をコンパイルします。 開発ツールをインストールして、必要なビルド チェーンを設定します。

yum -y groupinstall '開発ツール'

また、wget はソース ファイルと nano エディターをダウンロードできます。

yum -y インストール wget nano

SuPHP ソース tar.gz アーカイブをダウンロードして解凍します。

/usr/local/src をコピーします
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
パッチ -Np1 -d suphp-0.7.2 < suphp.patch
suphp-0.7.2をインストールします
自動再設定 -if

[root@server1 suphp-0.7.2]# 自動再設定 -if
libtoolize: 補助ファイルを AC_CONFIG_AUX_DIR の `config' に配置します。
libtoolize: ファイル `config/ltmain.sh' をコピーしています
libtoolize: configure.acに`AC_CONFIG_MACRO_DIR([m4])'を追加することを検討してください。
libtoolize: 正しい libtool マクロをツリー内に保持するために libtoolize を再実行します。
libtoolize: Makefile.am の ACLOCAL_AMFLAGS に `-I m4' を追加することを検討してください。
configure.ac:9: 警告: AM_INIT_AUTOMAKE: 2 つの引数と 3 つの引数の形式はサポートされていません。 詳細については、以下を参照してください。
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 コマンドは 1 行です。

./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 をコンパイルしてインストールします。

作る
インストールする

次に、新しい suphp.conf ファイルを追加して、suPHP モジュールを Apache 構成に追加します。

ナノ /etc/httpd/conf.d/suphp.conf

以下の内容となります。

ロードモジュール suphp_module モジュール/mod_suphp.so

...次のように /etc/suphp.conf ファイルを作成します。

ナノ /etc/suphp.conf

[グローバル]
;ログファイルへのパス
ログファイル=/var/log/httpd/suphp.log
;ログレベル
ログレベル=情報
;ユーザーApacheは次のように実行されています
webserver_user=apache
;すべてのスクリプトが保存されるパス
ドキュメントルート=/
;スクリプトを実行する前の chroot() へのパス
;chroot=/mychroot
; セキュリティオプション
ファイルグループの書き込みを許可する=true
allow_file_others_writeable=false
ディレクトリグループへの書き込みを許可する=true
allow_directory_others_writeable=false
;DOCUMENT_ROOT 内のスクリプトを確認します
check_vhost_docroot=true
;マイナーエラーメッセージをブラウザに送信する
ブラウザへのエラー=false
;PATH環境変数
env_path=/bin:/usr/bin
;設定するumaskを8進数で指定します
umask=0077
; 最小UID
最小UID=100
; 最小GID
最小_gid=100

[ハンドラー]
;php スクリプトのハンドラ
x-httpd-suphp="php:/usr/bin/php-cgi"
;CGI スクリプトのハンドラ
x-suphp-cgi="実行:!self"

最後に、Apache を再起動します。

systemctl で httpd.service を再起動します。

3. SuPHPを使用してApache Vhostを構成する

この章では、別のユーザーで PHP を実行している Apache に仮想ホストを追加する方法について説明します。 ウェブサイトにはドメイン www.example.com を使用し、PHP はユーザーとグループ "web1" として実行され、ウェブサイトのドキュメント ルートは /var/www/example.com になります。

まず、新しいユーザーとグループ「web1」を追加します。

ユーザー追加 web1

ウェブサイトのルート ディレクトリを追加します。

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

次に、apache conf.d ディレクトリに仮想ホスト構成ファイルを追加します。

ナノ /etc/httpd/conf.d/example.com.conf

このコンテンツについて:

<仮想ホスト *>
 ドキュメントルート /var/www/example.com
 サーバー名 example.com
 サーバー管理者 [email protected]
 
 <FilesMatch ".+\.ph(p[345]?|t|tml)$">
 SetHandler なし
 </ファイル一致>
 
 <IfModule mod_suphp.c>
 suPHP_Engine オン
 <FilesMatch "\.php[345]?$">
 SetHandler x-httpd-suphp
 </ファイル一致>
 suPHP_AddHandler x-httpd-suphp
 </モジュール>
</仮想ホスト>

ServerName 行と ServerAdmin 行のドメイン名を独自のドメインに置き換えます。

次に、Apache を再起動して設定の変更を適用します。

systemctl で httpd.service を再起動します。

4. SuPHP設定をテストする

この章では、この Web サイトで PHP をテストするいくつかの方法を紹介します。 まず、phpinfo() 関数を使用して、PHP が正しく動作しているかどうか、現在 CGI モードで実行されているかどうかを示すファイルを作成します。

nano を使用して info.php ファイルを作成します。

ナノ /var/www/example.com/info.php

新しいファイルに次の行を追加します。

<?php
phpinfo();

次に、ファイルの所有者を web1 ユーザーとグループに変更します。

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

Web ブラウザでファイル http://example.com/info.php の URL を開くと、次のページが表示されます。

重要なのは、CGI/FastCGI を示す ServerAPI 行です。 これは、PHP が mod_php ではなく SuPHP を介して実行されていることを示します。

ここで、PHP が正しいユーザー (web1) で実行されているかどうかをテストします。 SuPHP はどのユーザーを使用するかをどのように認識するのでしょうか? SuPHP は PHP を PHP スクリプトを所有するユーザーに切り替えるため、Web ルート フォルダー /var/www/example.com 内のすべての PHP ファイルが web1 ユーザーとグループによって所有されていることが非常に重要です。

では、PHP が正しいユーザーを使用しているかどうかをどのようにテストすればよいのでしょうか? 1 つの方法は、ユーザー名を返す「whoami」コマンドを実行することです。

ウェブサイトのルートに新しいスクリプト testuser.php を作成します。

ナノ /var/www/example.com/testuser.php

このコンテンツ:

<?php
システム('whoami');

次に、ファイルの所有者を web1 ユーザーとグループに変更します。

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

ウェブブラウザで http://example.com/testuser.php を開きます。結果は次のようになります: web1

SuPHP は、この Web サイトのユーザーとして PHP ファイルを実行するように構成されています。 ウェブサイト ディレクトリからテスト ファイルを削除し、ウェブサイト スクリプトの追加を開始します。

5. CentOS 7.2サーバーを仮想マシンとしてダウンロードする

この設定を使用すると、ユーザーの ID を認識した上で、ova/ovf 形式 (VMWare および Virtualbox と互換性あり) で仮想マシンをダウンロードできます。

VMのログイン詳細

ルートパスワードは: howtoforge
「admin」ユーザーのパスワードは tecmint です。
初めてログインするときは、両方のパスワードを変更してください。

仮想マシンのIPアドレスは192.168.1.100です

6. リンク

セントOS

Apache ウェブサーバー

スPHP

以下もご興味があるかもしれません:
  • CentOS 7 に PHP5 用の suPHP をインストールする方法 (Peng Ge)

<<:  MySQL 8.0.11 Mac 用インストール ガイド

>>:  js で 0ms 遅延タイマーを実装するいくつかの方法

推薦する

JavaScript の基本演算子

目次1. オペレーター要約する1. オペレーター演算子は、代入、比較、算術演算などの機能を実装するた...

Nginx Rewrite の使用シナリオと設定方法の分析

Nginx Rewriteの使用シナリオ1. URL アドレスジャンプ。たとえば、ユーザーが pm....

MySQLデスクトップツールSQLyogのリソースとアクティベーション方法は、白黒のコマンドラインに別れを告げます

では、早速リソースについて見ていきましょう。 123WORDPRESS.COM ダウンロードSQLy...

SSMプロジェクトは、ホットデプロイメント構成を実装するためにTomcatとMavenを使用してWARパッケージとしてデプロイされることが多い。

背景ご存知のとおり、JavaEE プロジェクトを開発した後は、そのプロジェクトをサーバーの Tomc...

mysql5.7 ユーザー権限の作成、ユーザーの削除、権限の取り消し

1. ユーザーを作成します。注文: 'password' によって識別される ...

Linux ユーザーとグループのコマンド例分析 [切り替え、ユーザーの追加、権限制御など]

この記事では、Linux のユーザーおよびグループのコマンドについて例を挙げて説明します。ご参考まで...

MySQLテーブルの内容の変更を監視し、MySQL binlogを有効にする

序文binlog は、MySQL のすべての追加、削除、および変更ステートメントを記録するバイナリ ...

Dockerモードで起動したTomcatのホームページにアクセスすると404エラーが発生する

シナリオ: docker で tomcat を起動すると (Alibaba Cloud からダウンロ...

RHEL7.5 mysql 8.0.11 インストールチュートリアル

この記事はRHEL7.5でのMySQL 8.0.11のインストールチュートリアルを記録しています。具...

小さな画像をクリックしたときに更新せずに大きな画像コードが表示されるようにLightboxを実現するためにCSSを使用する

小さな画像をクリックしたときに更新せずに大きな画像コードが表示されるようにLightboxを実現する...

Vueはツリー構造の追加、削除、変更、チェックのサンプルコードを実装します

実は多くの会社がユーザー権限ツリーに似た機能を持っています。最近、追加、削除、修正のツリー構造を書き...

Ubuntu 18.04 で SSH サービスをインストールして設定する方法

sshツールをインストールする1. ターミナルを開き、次のコマンドを入力します。 apt-getアッ...

Docker の 4 つのネットワーク タイプの主な例

4 つのネットワーク タイプ:なし: コンテナのネットワーク機能を一切設定しません。--net=no...

Vue ターンテーブル抽選の簡単な実装

この記事では、ホイール抽選を簡単に実装するためのVueの具体的なコードを参考までに共有します。具体的...

ノードスクリプトで自動サインインと抽選機能を実現

目次1. はじめに2. 準備3. スクリプトプロジェクトの構築4. コードの作成と実行5. まとめと...