CentOS 8へApacheをインストールしてウェブサーバーを最短で構築する

centos8-httpd-install-top

以前のCentOS 8環境構築の記事でCentOS 8のインストールと基本的な設定までが完了しました。

CentOS Linux 8.0 サポート終了のお知らせ

せっかく作成した環境です。利用しない手はありません。本記事では、以前の記事で構築したCentOS 8の環境を利用してオープンソースソフトウェアの代表的なウェブサーバー「Apache httpd」のインストールと設定を行い、最短でテスト用のウェブページが表示できるところまでの手順を紹介します。

CentOS 8ではApache httpdのバージョンが「2.4.37」になり、CentOS 7の「2.4.6」に比べてかなり新しくなっています。

参考 CentOS 8のインストール手順と基本的な設定を紹介した記事

CentOS
centos-linux8-install-top
サーバー構築の基本 CentOS Linux 8をインストールしてベース環境を構築する

こんにちは、ITインフラエンジニアのKomura(@system_kom)です。 Linuxのインストールはサーバー構築の基本です。インフラエンジニアを目指している場合やLinux初心者にはOSのインストールから始めることをオススメします。 ...

CentOS
centos8-first-settings-top
サーバー構築の基本 CentOS Linux 8のインストール後に設定する12の項目

こんにちは、ITインフラエンジニアのKomura(@system_kom)です。 前回の記事でCentOS Linux 8をインストールする手順を紹介しました。うまくインストールできましたでしょうか。インストールはサーバー構築の基本ですが、 ...

ウェブサーバー「Apache httpd」を導入する環境は、以前の記事で詳細に紹介していますが、基本的な前提条件は以下の通りになります。

Apacheを導入する環境のまとめ

  • LinuxディストリビューションはCentOSで最新のバージョン8
  • firewalldでファイアウォールが設定済み
  • サーバーにはグローバルIPアドレスが割り当て済み

この環境を前提に先へ進めて行きます。

CentOSの基本

CentOSの場合バージョンは以下のコマンドで確認できます。
$ cat /etc/redhat-release
CentOS Linux release 8.0.1905 (Core)

1. Apache用ユーザーの追加とパスワードの設定

本章ではApache httpdをインストールする前の事前準備として「Apache httpd」用のユーザーを作成します。
Apache httpdはインストール時に「apache」ユーザーとグループを作成しますが、このユーザーとグループは利用せずに新規で「www」というユーザーを追加します。「apache」ユーザーについてはコンテンツアップロード時の権限と、ユーザー名が推測されやすい点を考慮して本記事では利用しません。

ユーザー名として「www」を指定していますが、任意になりますので覚えやすい名前で問題ありません。

1-1. wwwユーザーの作成

CentOSでのユーザー追加は"useradd"コマンドで行います。"-s"オプションを付けることでユーザーが利用できるシェル(bashやcshなどのユーザー用プログラム)を指定しています。

本記事では一般ユーザーでの実行が可能なコマンドについてはプロンプトとして"$"、rootユーザーでの実行が必要なコマンドについては"#"を記載しています。

wwwユーザーはシェルを利用することがないので、「/sbin/nologin」を指定します。なるべくシステムへログインできるユーザーを制限することがセキュリティの基本です。

 command
# useradd -s /sbin/nologin www

コマンドを実行してエラーが出力されなければ、wwwユーザーは作成されています。

1-2. wwwユーザーのパスワード設定

続いて、作成したwwwユーザーに"passwd"コマンドでパスワードの設定を行います。ここで設定したパスワードはftpやsftpでコンテンツをサイトへアップロードするために利用します。

 command
# passwd www
ユーザー www のパスワードを変更。
新しいパスワード: パスワードを入力
新しいパスワードを再入力してください: パスワードを再入力
passwd: すべての認証トークンが正しく更新できました。

パスワードは任意になりますが、なるべく複雑なものを設定することをお勧めします。エラーの出力が無ければパスワードの設定は完了です。

1-3. 作成したユーザーの確認

作成したウェブサーバー用のユーザ「www」についての情報を確認します。
「/etc/passwd」ファイルに作成したwwwユーザーの情報が追加されていることを確認します。確認は以下のコマンドで行います。

 command
$ cat /etc/passwd | grep www
www:x:1003:1003::/home/www:/sbin/nologin

続いて"id"コマンドで作成したwwwユーザーのuidとグループのgidが表示されることを確認します。

 command
$ id www
uid=1003(www) gid=1003(www) groups=1003(www)

wwwユーザーに関する情報が表示されればユーザーの確認は完了です。

2. Apache httpdパッケージの確認

「Apache httpd」は「httpd」という名前でパッケージ化されています。CentOSでは前の記事でも紹介していますが、"dnf"というコマンドでパッケージのインストールや管理を行います。本章ではhttpdパッケージの詳細についての確認方法を紹介します。

2-1. パッケージの確認

CentOS 8に含まれる「httpd」と名前の付くパッケージの一覧を表示します。パッケージリストの確認は"dnf list"コマンドで実行します。そのまま実行すると、全てのパッケージリストが表示されますので、抽出用コマンドの"grep"で「httpd」文字列が含まれるものだけを抜き出します。

 command
$ dnf list | grep httpd
centos-logos-httpd.noarch 80.5-2.el8 AppStream
httpd.x86_64 2.4.37-12.module_el8.0.0+185+5908b0db AppStream
httpd-devel.x86_64 2.4.37-12.module_el8.0.0+185+5908b0db AppStream
httpd-filesystem.noarch 2.4.37-12.module_el8.0.0+185+5908b0db AppStream
httpd-manual.noarch 2.4.37-12.module_el8.0.0+185+5908b0db AppStream
httpd-tools.x86_64 2.4.37-12.module_el8.0.0+185+5908b0db AppStream
keycloak-httpd-client-install.noarch 0.8-7.el8 AppStream
libmicrohttpd.i686 1:0.9.59-2.el8 BaseOS
libmicrohttpd.x86_64 1:0.9.59-2.el8 BaseOS

上記の出力結果からわかるように、httpdの名前の付くパッケージは複数あります。
この中でウェブサーバーの導入に関連するパッケージと機能は以下の4パッケージになります。

他にも必要なパッケージはありますが、この4つのパッケージをインストールすると、依存関係として自動的にインストールされます。

  • httpd.x86_64 httpdウェブサーバー本体
  • httpd-devel.x86_64 httpd開発ツール、モジュールなど
  • httpd-manual.noarch httpdのマニュアル
  • httpd-tools.x86_64 httpdに関連するツール群

この4パッケージをサーバーへインストールします。

3. Apache httpdパッケージのインストール

本章では、前章である「項目2.」で紹介した「Apache httpd」に関連するパッケージを、サーバーにインストールする手順を紹介します。
パッケージのインストールには"dnf install"コマンドを利用します。"dnf"コマンドはパッケージを管理するために、よく利用されるコマンドになりますので、使い方を覚えておくことをオススメします。

3-1. dnfコマンドによるApache httpdのインストール

httpdパッケージは"dnf install"コマンドでインストールすることができます。項目2-1. でインストールに必要な4つパッケージ名が確認できましたので、以下のコマンドでインストールします。

 command
# dnf -y install httpd httpd-tools httpd-devel httpd-manual

上記では"dnf install"コマンドに"-y"オプションを付けることでインストール時の確認応答を省いています。

複数パッケージをインストールする場合は「スペース」を入れてパッケージ名を列記します。コマンドを実行すると、インストールが開始されます。

 log
メタデータの期限切れの最終確認: 0:18:54 時間前の 2019年10月15日 17時15分39秒 に実施しました。
依存関係が解決しました。
=====================================================================================================
パッケージ アーキテクチャー
バージョン リポジトリ サイズ
=====================================================================================================
Installing:
httpd x86_64 2.4.37-12.module_el8.0.0+185+5908b0db AppStream 1.7 M
httpd-devel x86_64 2.4.37-12.module_el8.0.0+185+5908b0db AppStream 216 k
httpd-manual noarch 2.4.37-12.module_el8.0.0+185+5908b0db AppStream 2.4 M
httpd-tools x86_64 2.4.37-12.module_el8.0.0+185+5908b0db AppStream 102 k
依存関係をインストール中:
apr x86_64 1.6.3-9.el8 AppStream 125 k
apr-devel x86_64 1.6.3-9.el8 AppStream 246 k
apr-util x86_64 1.6.1-6.el8 AppStream 105 k
apr-util-devel x86_64 1.6.1-6.el8 AppStream 86 k
centos-logos-httpd noarch 80.5-2.el8 AppStream 24 k
httpd-filesystem noarch 2.4.37-12.module_el8.0.0+185+5908b0db AppStream 35 k
libdb-devel x86_64 5.3.28-36.el8 AppStream 46 k
mod_http2 x86_64 1.11.3-3.module_el8.0.0+185+5908b0db AppStream 158 k
cyrus-sasl x86_64 2.1.27-0.3rc7.el8 BaseOS 96 k
cyrus-sasl-devel x86_64 2.1.27-0.3rc7.el8 BaseOS 127 k
expat-devel x86_64 2.2.5-3.el8 BaseOS 55 k
openldap-devel x86_64 2.4.46-9.el8 BaseOS 810 k
弱い依存関係をインストール中:
apr-util-bdb x86_64 1.6.1-6.el8 AppStream 25 k
apr-util-openssl x86_64 1.6.1-6.el8 AppStream 27 k
Enabling module streams:
httpd 2.4
トランザクションの概要
=====================================================================================================
インストール 18 パッケージ
ダウンロードサイズの合計: 6.3 M
インストール済みのサイズ: 20 M
【略】
インストール済み:
httpd-2.4.37-12.module_el8.0.0+185+5908b0db.x86_64
httpd-devel-2.4.37-12.module_el8.0.0+185+5908b0db.x86_64
httpd-manual-2.4.37-12.module_el8.0.0+185+5908b0db.noarch
httpd-tools-2.4.37-12.module_el8.0.0+185+5908b0db.x86_64
apr-util-bdb-1.6.1-6.el8.x86_64
apr-util-openssl-1.6.1-6.el8.x86_64
apr-1.6.3-9.el8.x86_64
apr-devel-1.6.3-9.el8.x86_64
apr-util-1.6.1-6.el8.x86_64
apr-util-devel-1.6.1-6.el8.x86_64
centos-logos-httpd-80.5-2.el8.noarch
httpd-filesystem-2.4.37-12.module_el8.0.0+185+5908b0db.noarch
libdb-devel-5.3.28-36.el8.x86_64
mod_http2-1.11.3-3.module_el8.0.0+185+5908b0db.x86_64
cyrus-sasl-2.1.27-0.3rc7.el8.x86_64
cyrus-sasl-devel-2.1.27-0.3rc7.el8.x86_64
expat-devel-2.2.5-3.el8.x86_64
openldap-devel-2.4.46-9.el8.x86_64
完了しました!

これでhttpdに関連する4パッケージのインストールが完了しました。

3-2. Apache httpdインストール後の確認

Apache httpdがインストールされたことを確認します。インストールされているパッケージは"dnf list"コマンドで確認できます。以下のように"dnf"を実行することで、httpdパッケージがインストールされていることを確認します。

 command
$ dnf list installed | grep httpd
centos-logos-httpd.noarch 80.5-2.el8 @AppStream
httpd.x86_64 2.4.37-12.module_el8.0.0+185+5908b0db @AppStream
httpd-devel.x86_64 2.4.37-12.module_el8.0.0+185+5908b0db @AppStream
httpd-filesystem.noarch 2.4.37-12.module_el8.0.0+185+5908b0db @AppStream
httpd-manual.noarch 2.4.37-12.module_el8.0.0+185+5908b0db @AppStream
httpd-tools.x86_64 2.4.37-12.module_el8.0.0+185+5908b0db @AppStream

続いてhttpdがインストールされた場所を確認します。インストールされた場所(パス)を確認するためには"which"コマンドを利用します。以下のように実行することでサービス本体のパスを確認できます。
httpdのパスである「/usr/sbin/httpd」が表示されることを確認します。

 command
$ which httpd
/usr/sbin/httpd

これで「httpd」パッケージのインストールが正常に終了したことが確認できました。

3-3. httpd起動の確認

ここまでの手順で「httpd」パッケージのインストールと確認が完了しましたので、続いてインストールしたhttpdが起動することを確認します。CentOSでは7系から"systemctl"コマンドでサービスの起動と停止を行います。httpdは以下のように実行することで起動できます。

 command
# systemctl start httpd

コマンドを実行してエラーが出力されなければ、httpdは起動しています。
"systemctl status"コマンドを実行することで、起動したサービスの状態について詳細な情報を取得することができます。
以下が実行例です。

 command
$ systemctl status httpd
 httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disab>
Active: active (running) since Tue 2019-10-15 17:40:04 JST; 8s ago
Docs: man:httpd.service(8)
Main PID: 100567 (httpd)
Status: "Started, listening on: port 80"
Tasks: 213 (limit: 11374)
Memory: 25.4M
CGroup: /system.slice/httpd.service
tq100567 /usr/sbin/httpd -DFOREGROUND
tq100568 /usr/sbin/httpd -DFOREGROUND
tq100569 /usr/sbin/httpd -DFOREGROUND
tq100570 /usr/sbin/httpd -DFOREGROUND
mq100571 /usr/sbin/httpd -DFOREGROUND

上記では分かり難いかもしれませんが、丸()の部分が正常な起動状態の場合、緑色で表示されます。システムで稼働しているプロセスを表示する"ps"コマンドでもhttpdサービスが起動していることを確認できます。
以下のように実行します。

 command
$ ps -aux | grep httpd
root 100567 0.0 0.5 280212 10980 ? Ss 17:40 0:00 /usr/sbin/httpd -DFOREGROUND
apache 100568 0.0 0.4 292428 8388 ? S 17:40 0:00 /usr/sbin/httpd -DFOREGROUND
apache 100569 0.0 0.6 1350204 11852 ? Sl 17:40 0:00 /usr/sbin/httpd -DFOREGROUND
apache 100570 0.0 0.6 1350204 11852 ? Sl 17:40 0:00 /usr/sbin/httpd -DFOREGROUND
apache 100571 0.0 0.7 1481332 13900 ? Sl 17:40 0:00 /usr/sbin/httpd -DFOREGROUND

ここまでの作業で「httpd」サービスが正常に起動することが確認できました。

3-4. httpd自動起動の設定

サーバーの再起動や停止の復旧時に、httpdが自動的に起動するように設定します。サービスの自動起動を設定するにも"systemctl"コマンドを利用します。自動起動は"systemctl enable"コマンドを実行します。

 command
# systemctl enable httpd
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.

コマンドを実行してエラーが出力されなければ、自動起動の設定は完了しています。
続いて自動起動が設定されたことを確認します。こちらも"systemctl"コマンドから確認できます。

 command
$ systemctl is-enabled httpd
enabled

実行結果として「enabled」と表示されれば自動起動の設定は完了です。

4. firewallの許可設定

本記事は、ウェブサーバーの導入環境として、CentOS 8の基本的な設定を紹介した以下の記事「項目6.」で記載したfirewall設定を行っていることを前提としています。

CentOS
centos8-first-settings-top
サーバー構築の基本 CentOS Linux 8のインストール後に設定する12の項目

こんにちは、ITインフラエンジニアのKomura(@system_kom)です。 前回の記事でCentOS Linux 8をインストールする手順を紹介しました。うまくインストールできましたでしょうか。インストールはサーバー構築の基本ですが、 ...

このfirewall設定の場合、httpプロトコルの接続ポートであるTCPの80番をオープンしていないため、ブラウザでアクセスしてもテスト用のページを表示できません。そのため"firewall-cmd"コマンドを利用してのルールを追加し、TCP80番ポートへアクセスできるようにする必要があります。

4-1. firewall-cmdコマンドによる80番ポートのオープン

firewall-cmdコマンドでウェブサーバーの待ち受けポートである80番に外部から接続できるように設定を追加します。コマンドは以下のように実行します。

 command
# firewall-cmd --add-service=http --permanent
success

このコマンドはデフォルトのゾーンである「public」に「http」のサービスを追加します。publicゾーンはインターフェイスに対して割り当てられていますので、この場合はどのIPアドレスからもhttpへ接続可能になります。
続いて、設定を反映するために再読み込みを実行します。

 command
# firewall-cmd --reload
success

成功するとsuccessと表示されます。設定の確認は以下のコマンドで行います。

 command
# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens33
sources:
services: cockpit dhcpv6-client http ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:

表示された結果の「services」項目に「http」が追加されていれば、設定の確認は完了です。

5. ウェルカムページの表示確認

ここまでの手順でhttpdパッケージに用意されたデフォルトのウェブページを表示することが出来ます。ご自分の環境で利用されているウェブブラウザから、テスト用のページが表示できることを確認します。httpdパッケージをインストールしたサーバーのIPアドレスが111.8.21.167の場合

http://111.8.21.167

をブラウザへ入力すると、以下のようなテスト用のウェルカムページが表示されます。

弊社で確認した限り、デフォルトではウェルカムページが表示されない状態になっていました。ウェルカムページが表示されない場合には403でエラーになりますが、先へ進めて下さい。

centos-httpd-inst-5

これでテスト用のウェルカムページが表示されることまで、確認が出来ました。
続いてhttpdの設定を行います。

6. httpdの設定

前章の手順までで「httpd」パッケージの導入までが完了しました。このままでの運用でも問題ありませんが、本記事では運用するにあたって最低限、必要になる設定を行います。設定の前提は以下の通りです。

Apache httpd設定の前提条件

  • 動作ユーザーとグループは「www」に変更
  • バーチャルドメインは利用せず、ドキュメントルート以下にコンテンツを配置
  • ドキュメントルートは「/home/www/html」に変更
  • cgi用フォルダは「/home/www/cgi-bin」に変更

この条件に合わせて設定を行っていきます。

6-1. httpd.confの変更

httpdの設定は「/etc/httpd/conf」以下にある「httpd.conf」で行います。
httpd.confの編集前に、既存のファイルを別名でバックアップしておきます。以下の手順で元ファイルのコピーを行います。

 command
# cd /etc/httpd/conf
# cp -p httpd.conf httpd.conf.org

バックアップの完了後にエディタで設定ファイルを開いて変更を行います。本環境ではOSの標準的なエディタである、viエディタを利用しています。

 command
# vi httpd.conf

6-1-1. 動作ユーザー・グループの変更

69~70行目にあるUserとGroupの設定を変更します。動作ユーザーの設定になります。

 code
#
# If you wish httpd to run as a different user or group, you must run
# httpd as root initially and it will switch.
#
# User/Group: The name (or #number) of the user/group to run httpd as.
# It is usually good practice to create a dedicated user and group for
# running httpd, as with most system services.
#
User apache
Group apache

赤字部分のUserGroupパラメータを「apache」から「www」に変更します。
変更後は以下のようになります。

 code
#
# If you wish httpd to run as a different user or group, you must run
# httpd as root initially and it will switch.
#
# User/Group: The name (or #number) of the user/group to run httpd as.
# It is usually good practice to create a dedicated user and group for
# running httpd, as with most system services.
#
User www
Group www

6-1-2. サーバー管理者のメールアドレス変更

89行目にあるServerAdminの設定を変更します。エラーページに表示されます。

 code
#
# ServerAdmin: Your address, where problems with the server should be
# e-mailed. This address appears on some server-generated pages, such
# as error documents. e.g. admin@your-domain.com
#
ServerAdmin root@localhost

上記の「ServerAdmin root@localhost」の「root@localhost」を任意のメールアドレスに変更します。
本記事では

ServerAdmin webmaster@testdom.com

に変更しています。変更後の設定部分は以下のようになります。

 code
#
# ServerAdmin: Your address, where problems with the server should be
# e-mailed. This address appears on some server-generated pages, such
# as error documents. e.g. admin@your-domain.com
#
ServerAdmin webmaster@testdom.com

6-1-3. サーバーのホスト名変更

98行目にある「ServerName」パラメータを変更します。ServerNameパラメータはサーバーを認識するために利用されます。

 code
#
# ServerName gives the name and port that the server uses to identify itself.
# This can often be determined automatically, but we recommend you specify
# it explicitly to prevent problems during startup.
#
# If your host doesn't have a registered DNS name, enter its IP address here.
#
#ServerName www.example.com:80

上記の「#ServerName www.example.com:80」からコメントを外して「www.example.com」の部分を、公開用のホスト名に変更します。

FQDNはドメイン名にホスト部分を追加したものになります。(例:www.rem-system.com)

ここでは以下のパラメータを設定しました。

ServerName web.rem-system.com:80

変更後の設定ファイルは以下のようになります。

 code
#
# ServerName gives the name and port that the server uses to identify itself.
# This can often be determined automatically, but we recommend you specify
# it explicitly to prevent problems during startup.
#
# If your host doesn't have a registered DNS name, enter its IP address here.
#
ServerName web.rem-system.com:80

6-1-4. ドキュメントルートの変更

122行目にある「DocumentRoot」パラメータを変更します。DocumentRootパラメータはコンテンツの配置場所(パス)を指定します。

 code
#
# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
#
DocumentRoot "/var/www/html"

上記のDocumentRootパラメータ「/var/www/html」を 「/home/www/html」に変更します。変更後は以下のようになります。

 code
#
# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
#
DocumentRoot "/home/www/html"

6-1-5. ディレクトリの変更 1

127行目にある「Directory」パラメータを変更します。ディレクトリの設定に関する内容です。
ドキュメントルートに合わせて変更します。

 code
<Directory "/var/www">
AllowOverride None
# Allow open access:
Require all granted

上記の <Directory "/var/www"> を <Directory "/home/www"> へ変更します。

 code
<Directory "/home/www">
AllowOverride None
# Allow open access:
Require all granted

6-1-6. ディレクトリの変更 2

134行目にある

 code
<Directory "/var/www/html">

を変更したディレクトリに合わせて変更します。ディレクトリは「/home/www/html」になりますので、以下のようになります。

 code
<Directory "/home/www/html">

「Options」パラメータを変更します。デフォルトでは

 code
Options Indexes FollowSymLinks

となっているオプション設定から"Indexes"を削除して

 code
Options FollowSymLinks

に変更します。

6-1-7. スクリプトエイリアスの変更

250行目にあるスクリプトエイリアスの設定を変更します。CGIを配置する場所を指定します。CGIを利用しない場合には必須ではありませんが、ここでは利用する前提で設定を行います。

CGIとはCommon Gateway Interfaceの略でWebサーバーでPerlなどのプログラムを実行するために使用します。

 code
#
# ScriptAlias: This controls which directories contain server scripts.
# ScriptAliases are essentially the same as Aliases, except that
# documents in the target directory are treated as applications and
# run by the server when requested rather than as documents sent to the
# client. The same rules about trailing "/" apply to ScriptAlias
# directives as to Alias.
#
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"

上記の設定パラメータにあるScriptaAliasのパスを変更した「Directory」パラメータに合わせて設定します。

 code
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"

以下のように設定パラメータを変更します。

 code
ScriptAlias /cgi-bin/ "/home/www/cgi-bin/"

6-1-8. CGI用ディレクトリの変更

258行目にある <Directory "/var/www/cgi-bin">を変更します。CGIディレクトリの権限設定です。

 code
#
# "/var/www/cgi-bin" should be changed to whatever your ScriptAliased
# CGI directory exists, if you have that configured.
#
<Directory "/var/www/cgi-bin">
AllowOverride None
Options None
Require all granted

上記のディレクトリパラメータを、設定したディレクトリに合わせて変更します。

 code
<Directory "/var/www/cgi-bin">

以下のように変更します。

 code
<Directory "/home/www/cgi-bin">

ここまでの8点で設定ファイルの変更は完了です。変更したファイルを確認して間違いがなければ保存してください。
本記事では最短でテスト用ページが表示できることを目標にしています。実際の運用にあたってはもう少しセキュリティを強化するための設定を行うことをお勧めします。
参考 Apache httpdのお勧めセキュリティ設定は以下の記事で紹介しています。本記事と併せて参考にして下さい。

Open Source
httpd-10point-setting-sam
攻撃を受ける前に見直すApacheの基本的なセキュリティ10のポイント

こんにちは、ITエンジニアのKomuraです。 ウェブサーバーにApache HTTPDを採用している環境、まだまだ多いですよね。このApache HTTPDですが、インストールはRPM等のパッケージからコマンド一発で完了しますので、導入の ...

6-2. httpd.confの確認とドキュメントルート用フォルダの作成

項目6-1.で設定ファイルの変更を完了しました。変更したファイルに間違いが無いかを確認します。設定ファイルの確認は"httpd"コマンドに"-t"オプションを付けて実行します。

 command
# httpd -t

このコマンドを実行すると、以下のようなエラーが出力されると思います。

 log
AH00526: Syntax error on line 122 of /etc/httpd/conf/httpd.conf:
DocumentRoot '/home/www/html' is not a directory, or is not readable

これはドキュメントルートとして設定した「/home/www/html」ディレクトリが無いことが原因です。
設定ファイルのドキュメントルートを「/home/www/html」に変更したので、ディレクトリの作成が必要になります。以下の手順で「/home/www」以下に「html」「cgi-bin」ディレクトリを作成します。

 command
# cd /home/www
# mkdir html
# mkdir cgi-bin

続いて作成したwwwとcgi-binディレクトリにwwwユーザーとグループのアクセス権を設定します。アクセス権の設定には"chown"コマンドを利用します。

 command
# chown www:www html
# chown www:www cgi-bin

ディレクトリの作成とアクセス権設定後に"ll"コマンドでアクセス権の確認を行います。以下のようにユーザーとグループが「www」になっていることを確認します。

 command
# ll
合計 0
drwxr-xr-x 2 www www 6 10月 15 20:30 cgi-bin
drwxr-xr-x 2 www www 6 10月 15 20:30 html

ディレクトリが作成できましたので、再度「httpd.conf」ファイルを確認するコマンドを実行します。

 command
# httpd -t
Syntax OK

今度は「Syntax OK」と表示され、設定ファイルの正常性が確認できました。これで設定ファイルの確認は完了です。

6-3. 不要な設定ファイルの移動

httpdはインストール時に、運用には不要な設定ファイルが自動的に作成されています。
「/etc/httpd/conf.d/」以下に含まれる 「autoindex.conf」と「welcome.conf」はセキュリティに問題があるためリネーム(ファイル名の変更)か削除することをオススメします。ここでは上記の2つのファイル名を変更して、設定ファイルを無効化します。

 command
# cd /etc/httpd/conf.d
# ls
README autoindex.conf manual.conf userdir.conf welcome.conf

ディレクトリの移動後に"mv"コマンドでファイル名の変更を行います。

 command
# mv autoindex.conf autoindex.conf.org
# mv welcome.conf welcome.conf.org

不要な設定ファイルの名前が変更されました。

6-4. 設定ファイル 変更点の反映

設定ファイルの変更が完了しましたので、変更した設定を反映するためにhttpdを再起動します。systemctlコマンドを以下のように実行します。

 command
# systemctl restart httpd

再起動後にhttpdのステータスを確認します。

 command
$ systemctl status httpd
 httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2019-10-15 20:35:20 JST; 5s ago
Docs: man:httpd.service(8)
Main PID: 7275 (httpd)
Status: "Started, listening on: port 80"
Tasks: 213 (limit: 11374)
Memory: 24.4M
CGroup: /system.slice/httpd.service
tq7275 /usr/sbin/httpd -DFOREGROUND
tq7277 /usr/sbin/httpd -DFOREGROUND
tq7278 /usr/sbin/httpd -DFOREGROUND
tq7279 /usr/sbin/httpd -DFOREGROUND
mq7280 /usr/sbin/httpd -DFOREGROUND

正常に起動していることがコマンドの結果から確認できました。ここまでの手順で、Apache httpdについて最低限の設定が完了しました。

7. テスト用ページの作成と確認

ここまででApache httpdの基本的な設定と外部からアクセスするためのファイアウォール設定が完了しました。
しかし、このままではブラウザでウェブページを開いても、以下のエラーで表示されません。

centos-httpd-inst-7

これはwelcome.confというデフォルトページを表示するための設定ファイルをリネームしたことが理由です。代わりに動作確認用としてテストページを表示させるための簡単なHTMLファイルを作成します。

7-1. ドキュメントルートへの移動

テスト用のページはドキュメントルートに配置します。ドキュメントルートは「項目6-1-4.」で「/home/www/html」に変更しました。ドキュメントルートへ"cd"コマンドで移動します。

 command
# cd /home/www/html

7-2. テスト用のページの作成

続いてHTMLファイルを作成します。viコマンドで「index.html」という名前のファイルを開きます。

 command
# vi index.html

記載する内容は任意ですが、ここではテストページということで以下の内容にしました。

 code
test page

任意の内容を記載した後にファイルを保存します。
作成したindex.htmlファイルのアクセス権を「www」ユーザーとグループに変更します。

 command
# chown www:www index.html

これでテストページ用のHTMLファイル作成は完了です。ブラウザで再度テストページの表示を確認します。

http://111.8.21.167

以下のように作成したテスト用ページが表示できればApache httpdの導入と動作確認は完了です。

centos-httpd-inst-7-2

8. まとめ

ここまで7項目に渡ってCentOSへ最短でウェブサーバーを設定する手順を紹介しました。
実際に導入を行ってみると、どのようにウェブサーバーが稼働するか、運用管理をどのように行ったら良いかが理解できます。
本手順は最短でウェブサイトを公開するというところにポイントを置いていますので、SSL化やバーチャルホストの設定は含まれていません。出来れば最低限の設定としてSSL化は行っておくことをお勧めます。SSLは以下の記事で設定方法を紹介しています。

Open Source
centos-apache-ssl-sam
CentOS 7とApacheをインストールした環境にLet's EncryptでHTTPSを設定

こんにちは、レムシステム株式会社 ITインフラ担当の小村(@system_kom)です。 2018年7月からGoogleのウェブブラウザ「Chrome」の仕様変更により、HTTPS化されていないウェブサイトには「保護されていません」と表示さ ...

次に参照する記事としてはこの記事をお勧めします。

また、ここ最近ではApache単体ではあまり利用することはなく、PHPやJavaなどのアプリケーションサーバーと連携して動作するようなものが殆どです。Apacheとphpで動作する代表的なアプリケーションであるWordPressなどもその中に含まれます。PHPの導入方法や設定については、以下の記事で詳しく紹介しています。

Open Source
centos-httpd-php73-top
CentOS 7にPHP 7.3をインストールしてApache HTTP Serverと連携させる方法

こんにちは、ITエンジニアの小村(@system_kom)です。 以前のブログ記事でCentOS上にSSL対応したApache httpdの環境を作成してPHP7.2をインストールする手順を紹介しました。 2018年5月当時に書かれた、前回 ...

是非、ApacheだけでなくPHPも導入してアプリケーションサーバーとしての環境を作成してみて下さい。PHPのプログラム言語を学ぶPHP入門環境にも適しています。本記事とあわせて参考にしてみて下さい。

[st_af id="9037"]

  • この記事を書いた人
rem-profile-photo

レムシステム

レムシステムはPC・サーバー・ネットワークでの業務効率化を主な業務としている会社です。全国に対応しています。

-Apache, CentOS
-