「centos」と「ubuntu」は「RedHat系」と「Debian系」で派生元のディストリビューションが違うため同じLinuxの一種であっても、相違点は多いです。
特に、操作してみて「Apache」の動作コマンドや設定ファイルの場所やファイル構成もかなり違っています。
「ubuntu」のapache は「apache2」パッケージで提供されているようですが、名前の違いだけではなく、設定作法が「centos」はかなり違っています。
Apache2インストール
「RockyLinux9」へのインストールは、こちらで紹介しています ので参考にしてください。
「ubuntu」は「apt install apache2」でインストールします
$ sudo apt update
$ sudo apt upgrade
$ sudo apt install apache2
「ubuntu」は、「apt」でインストールすると、自動的に起動設定が終了しているようですね。
$ systemctl status apache2
● apache2.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/apache2.service; enabled; preset: enabled)
Active: active (running) since Sat 2024-06-20 11:03:54 JST; 9min ago
Docs: https://httpd.apache.org/docs/2.4/
Main PID: 73404 (apache2)
Tasks: 55 (limit: 9342)
Memory: 5.6M (peak: 6.8M)
CPU: 108ms
CGroup: /system.slice/apache2.service
├─73404 /usr/sbin/apache2 -k start
├─73406 /usr/sbin/apache2 -k start
└─73407 /usr/sbin/apache2 -k start
$ systemctl is-enabled apache2
enabled
firewalld に許可
前回、ファイヤーウォールは、「firewalld」に切り替えたので「apach2」にも、こちらを参考に、http と https を許可しておきます。
これで、Webブラウザのアドレスバーに、IPアドレスを打ち込むとデフォルトページが表示されるはずです。
apache2 設定作法
「ubuntu」では、「CentOS系」とは設定作法がかなり違うようです。
インストール直後の「apach2設定ディレクトリ」を確認してみると
/etc/apache2/
├── apache2.conf
├── conf-available
│ ├── charset.conf
│ ├── ・
├── conf-enabled
│ ├── charset.conf -> ../conf-available/charset.conf
│ ├── ・
├── envvars
├── magic
├── mods-available
│ ├── access_compat.load
│ ├── ・
├── mods-enabled
│ ├── access_compat.load -> ../mods-available/access_compat.load
│ ├── ・
├── ports.conf
├── sites-available
│ ├── 000-default.conf
│ └── default-ssl.conf
└── sites-enabled
└── 000-default.conf -> ../sites-available/000-default.conf
途中、省略していますが「/etc/apache2」直下には
「apache2.conf」「magic」「envvars」「ports.conf」のファイルがあり
さらに「conf-*」「mods-*」「sites-*」で、
それぞれ「available」「enabled」が付いた名前のディレクトリがあります。
- apache2.conf
- httpd.conf と同じで、Apacheサーバーのメイン設定ファイル
- 他の構成ファイルや「enabled」ディレクトリ内のファイルを組み込む
- ports.conf
- リスニングポートの設定ファイル。メイン設定ファイルに組み込まれる
- envvars
- 環境変数の設定ファイル
- magic
- MIME タイプ
- conf-*
- バーチャルホストに属さない、利用可能な設定ファイルが保存される。
- RedHat系の/etc/httpd/conf.d 内のファイルはここへ保存する。
- mods-*
- モジュール構成ファイルが保存される。
- sites-*
- バーチャルホストの設定ファイルが保存される
独特なのは、「*-available」と「*-enabled」のディレクトリです。
基本的には、「*-enabled」内のファイルだけが組み込まれますが、「*-enabled」内のファイルは、「*-available」内のファイルのシンボリックリンクになっています。
作法としては、「*-available」内に、設定ファイルを保存し、必要なファイルのみ「*-enabled」にシンボリックリンクを作成する方法です。
シンボリックリンク作成と削除は、専用コマンドが用意されています。
「conf-*」用は「a2enconf」で作成。「a2disconf」で削除
「mods-*」用は「a2enmod」で作成。「a2dismod」で削除
「sites-*」用は、「a2ensite」で作成。「a2dissite」で削除
apache2 のディレクトリ設定変更
筆者は、RockyLinux9 の設定と同様の設定にします。
まずは、「apache2.conf」の、<Directory>のデフォルト設定はコメントとし
Rockyと同様にしました。
・
・
<Directory />
AllowOverride none
Require all denied
</Directory>
<Directory "/home/www">
AllowOverride None
# Allow open access:
Require all granted
</Directory>
<Directory "/home/www/html">
Options FollowSymLinks
AllowOverride None
Require all granted
</Directory>
・
・
ホスト名関連は、「sites-enabled」内の「000-default.conf」で設定します。
上述したように、「*-enables」は「*-available」のシンボリックリンクが入っているのでどちらのファイルを編集しても同じです
ただし、バックアップを残す場合には「*-available」のファイルをバックアップします。
$ cd /etc/apache2/sites-available/
$ sudo cp -p 000-default.conf 000-default.conf.org
$ cd /etc/apache2/sites-available/
$ sudo vi ./000-default.conf
・
・
#ServerName www.example.com
↓
ServerName www.hogehoge.com
・
・
ServerAdmin webmaster@localhost
↓
ServerAdmin root@hogehoge.com
・
・
DocumentRoot /var/www/html
↓
DocumentRoot /home/www/html
・
apache2 が作業するユーザーとグループの変更
apache2が処理を要求する時のユーザーとグループを設定します
まずは、メインの設定ファイル、「/etc/apache2/apache2.conf」を覗いてみます。
$ vi /etc/apache2/apache2.conf
・
・
# These need to be set in /etc/apache2/envvars
User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}
・
・
設定ファイルにあるように、
${APACHE_RUN_USER}
${APACHE_RUN_GROUP}
この二つの環境変数で設定されていて、この環境変数は、変数上記のコメントにあるように「/etc/apache2/envvars」で設定されています。
「ubintu」はデフォルトでは「www-data」になっていますが、私は「centos」にあわせて「apache」に変更しようと思います。
バックアップを取り、変更します。
続けて、「apache」ユーザーを作成し、ホームディレクトリを「/home/www」とします。
# Since there is no sane way to get the parsed apache2 config in scripts, some
# settings are defined via environment variables and then used in apache2ctl,
# /etc/init.d/apache2, /etc/logrotate.d/apache2, etc.
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
↓
export APACHE_RUN_USER=apache
export APACHE_RUN_GROUP=apache
・
・
$ sudo useradd -d /home/www -s /sbin/nologin apache
ドキュメントルートディレクトリの作成
Webに公開するコンテンツ格納ディレクトリを設定変更したので、
実際にそのディレクトリを作成します。
# mkdir /home/www
# mkdir /home/www/html
# chown apache:apache /home/www/html/
# ls -la /home/www
# systemctl restart apache2
セキュリティ対策
ICONページ一覧が表示されないようにする
ICONページ一覧の設定は、/etc/apache2/mods-enabled/alias.confで行います。
設定ファイルを開いてみます。
$ vi /etc/apache2/mods-enabled/alias.conf
・
・
# We include the /icons/ alias for FancyIndexed directory listings. If
# you do not use FancyIndexing, you may comment this out.
Alias /icons/ "/usr/share/apache2/icons/"
<Directory "/usr/share/apache2/icons">
Options FollowSymlinks
AllowOverride None
Require all granted
</Directory>
「ubuntu」では、「/etc/apache2/conf-enabled」のファイルをメイン設定として読み込みます。
ただし「conf-enabled」内のファイルは、「conf-available」内のファイルのシンボリックリンクになっているので、ファイルのバックアップを取る場合には
「/etc/apache2/conf-available/」内のファイルをバックアップをとり編集します。
「icons」ディレクトリの設定では「Options Indexes」がないので、一覧が表示される事はないと思いますが、その下のファイルをWebブラウザで指定すると表示されます。
特に必要ないので全てコメントにしようと思います。
$ cd /etc/apache2/mods-available
$ sudo cp -p alias.conf alias.conf.org
$ sudo vi alias.conf
・
#Alias /icons/ "/usr/share/apache2/icons/"
#<Directory "/usr/share/apache2/icons">
# Options FollowSymlinks
# AllowOverride None
# Require all granted
#</Directory>
・
$ sudo systemctl restart apache2
Apacheバージョン情報を隠す
こちらと同様に、バージョン情報とOSの情報を隠します。
「telnet」で確認します。
$ telnet localhost 80
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
OPTIONS / HTTP/1.1 <-------入力
host:localhost <-------入力
<-------「Ebter」キー
HTTP/1.1 200 OK
Date: Sun, 23 Jun 2024 09:16:28 GMT
Server: Apache/2.4.58 (Ubuntu) <---- Apacheバージョン情報
Allow: GET,POST,OPTIONS,HEAD
Content-Length: 0
Content-Type: text/html
Connection closed by foreign host.
「/etc/apache2/conf-enabled」の「security.conf」で行いますが、上記と同様に
「/etc/apache2/conf-available/security.conf」のバックアップをとり編集します。
$ cd /etc/apache2/conf-available
$ sudo cp -p security.conf security.conf.org
$ sudo vi ./security.conf
#ServerTokens Minimal
ServerTokens OS
#ServerTokens Full
↓
#ServerTokens Minimal
#ServerTokens OS
#ServerTokens Full
ServerTokens ProductOnly
#ServerSignature Off
ServerSignature On
↓
ServerSignature Off
#ServerSignature On
$ sudo systemctl restart apache2
telnetで再確認
$ telnet localhost 80
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
OPTIONS / HTTP/1.1 <-------入力
host:localhost <-------入力
<-------「Ebter」キー
HTTP/1.1 200 OK
Date: Sun, 23 Jun 2024 09:18:18 GMT
Server: Apache <---- Apacheバージョン情報は消えた
Allow: GET,POST,OPTIONS,HEAD
Content-Length: 0
Content-Type: text/html
Connection closed by foreign host.
X-Frame-Optionsヘッダ設定
クリックジャッキングを防ぐための対策に有効だと言う事なので、
X-Frame-Optionsヘッダ設定をしておこうと思います。
「mod_headers」機能が有効になっているかの確認をします。
有効なモジュール構成は、「/etc/apache2/mods-enabled」に登録されているはずですが、なさそうです。
「*-enabled」はシンボリックが登録されているだけなので、「*-available」内を調べてみます。
「/etc/apache2/mods-available」に「headers.load」が保存されていたので、有効にすることで使用できるようになりますが、設定ファイルも必要です。
X-FRAME-OPTIONSオプションを追加する設定ファイル「headers.conf」を作成します。
次にこのファイルのシンボリックリンクを「*-enabled」に作成しますが、作成するには、「a2enmod」コマンドでおこないます。
リンクが作成できたら、「telnet」で確認してみます。
$ cd /etc/apache2/mods-available
$ sudo vi headers.conf
・
#--- 2024.06.23 hogehoge
Header append X-FRAME-OPTIONS "SAMEORIGIN"
・
$ sudo a2enmod headers
Enabling module headers.
To activate the new configuration, you need to run:
systemctl restart apache2
$ sudo systemctl restart apache2
$ telnet localhost 80 <---- telnetで確認
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
OPTIONS / HTTP/1.1 <-------入力
host:localhost <-------入力
<-------「Ebter」キー
HTTP/1.1 200 OK
Date: Sun, 23 Jun 2024 09:23:57 GMT
Server: Apache
Allow: GET,POST,OPTIONS,HEAD
X-FRAME-OPTIONS: SAMEORIGIN <---- 有効確認
Content-Length: 0
Content-Type: text/html
Connection closed by foreign host.
ドキュメントルートにindex.htmlを作成
デフォルトのトップページ「index.html」を作成しておきます。
保存後、ファイルの所有者を「Apache」のユーザー「apache」に変更し再起動しておきます。
$ cd /home/www/html/
# vi ./index.html
・
<html>
<body>
<h1>This website is currently under maintenance.</h1>
</body>
</html>
・
# chown -R apache:apache /home/www/html/
# systemctl restart apache2
CGIスクリプトを利用する
もし必要であえば、CGIスクリプトを利用できるようにしておきます
「a2enmod cgid」で、「cgid」モジュールを有効にし「serve-cgi-bin.conf」に動作させたいCGIスクリプトを登録するディレクトリの設定を行い、そのディレクトリがなければ作成します。
「AddHandler cgi-script .cgi」では、「.cgi」拡張子のみCGIスクリプトとして使用できます
$ sudo a2enmod cgid
Enabling module cgid.
To activate the new configuration, you need to run:
systemctl restart apache2
$ cd conf-available/
$ sudo cp -p serve-cgi-bin.conf serve-cgi-bin.conf.org
$ sudo vi ./serve-cgi-bin.conf
<IfModule mod_alias.c>
<IfModule mod_cgi.c>
Define ENABLE_USR_LIB_CGI_BIN
</IfModule>
<IfModule mod_cgid.c>
Define ENABLE_USR_LIB_CGI_BIN
</IfModule>
<IfDefine ENABLE_USR_LIB_CGI_BIN>
#AddHandler cgi-script .cgi
<Directory /home/www/html/script>
AllowOverride None
Options ExecCGI FollowSymLinks
Order allow,deny
Allow from all
AddHandler cgi-script .cgi
</Directory>
</IfDefine>
</IfModule>
$ sudo mkdir /home/www/html/script
$ sudo systemctl restart apache2
apache2設定終了
「apache」の設定は、「RHEL系」とはかなり違っていて、結構時間がかかりました。
Ubuntu24.04LTSでWordPressを構築する記事一覧
Apache2のインストールと設定
コメント