Rocky Linux 9.0 LAMPサーバインストールメモ【Apache2.4+MySQL8.0+PHP8.1】

Linux
Linux
スポンサーリンク

2022年7月14日 Rocky Linux 9.0 がリリース されました。アップストリームとなる RHEL 9.0 のリリースから約2ヶ月でのリリースです。Rocky Linux 9.0 では Linuxカーネル5.14が採用され、OpenSSL 3.0 や exFATファイルシステムがサポートされています。そこで今回は、Rocky Linux 9.0 で LAMP構成をインストールする手順をまとめてみました。

Rocky Linux 9.0 のリリースノート

Rocky Linux 9.0 の変更点

個人的に気になった Rocky Linux 9.0(すなわち RHEL 9.0)の変更点をまとめてみました。

参考資料:Key differences between RHEL 8 and RHEL 9

OpenSSL 3.0

OpenSSL の最新版バージョン 3.0 が採用されています。

openssl version
OpenSSL 3.0.1 14 Dec 2021 (Library: OpenSSL 3.0.1 14 Dec 2021)

SELINUX=disabled オプションの廃止

/etc/selinux/config の SELINUX=disabled オプションによる SELinux の無効化ができなくなりました。
SELinux を無効する場合は、以下のようにカーネルコマンドラインに selinux=0 を追加して再起動が必要です。

grubby --update-kernel ALL --args selinux=0
shutdown -r now

ただし、Rocky Linux 9.0 では SELinux のパフォーマンスが大幅に向上しています。SELinux の利用を検討してみましょう。

root の SSHパスワードログイン無効

root の SSHパスワードログインが標準で無効になっています。Rocky Linux 9.0 のインストール時に root の SSHパスワードログインを有効にすることもできますが、root へのブルートフォース攻撃対策としてこのような仕様になっていますので無効にしておくことをオススメします。

TLS 1.2 以下は非サポート

Rocky Linux 9.0 では、TLS 1.2 と TLS 1.3 のみがサポートされています。

TPM 1.2 は非サポート

Rocky Linux 9.0 では、TPM 1.2(Trusted Platform Module)は削除され TPM 2.0 以降がサポートされています。

exFATファイルシステムのサポート

一般的によく使われている exFATファイルシステムが Rocky Linux 9.0 ではサポートされています。これは嬉しいですね。

Rocky Linux 9.0 のダウンロード

Rocky Linux のダウンロードページ から、アーキテクチャ x86_64 の Minimal をダウンロードしてください。

マシン構成

VirtualBoxの仮想マシンにインストール

○仮想マシン構成
メモリ:2048MB
HDD:20GB
CPU:2コア

○ネットワークデバイス
アダプター1:NAT
アダプター2:ホストオンリーアダプター(固定IPアドレスを設定)

○ネットワーク構成(※ご自分の環境に書換えてください)
ホスト名: rocky9
IPアドレス:192.168.56.201/24
DNSサーバ: 1.1.1.1
DNSサーバ: 8.8.8.8

Rocky Linux 9.0 のインストール

[↑]キーで「Install Rocky Linux 9.0」を選択して、エンターを押します。

GUI画面が表示されたら「日本語 Japanese」「日本語( 日本)」を選択して「続行」をクリックします。

下のような表示になるまで少し待ってから「インストール先」をクリックします。

インストール先のハードディスクを選択して、「完了」をクリックします。

ソフトウェアの選択が「最小限のインストール」になっていることを確認してください。(もし違うようでしたら「最小限のインストール」に変更してください)

下にスクロールして「ユーザーの作成」をクリックします。Rocky Linux 9.0 では、セキュリティ対策のため root アカウントは無効になっていますので、root アカウントの代わりとなる管理者ユーザーを作成しておきましょう。

以下のように入力/選択して「完了」をクリックします。(必ず「このユーザーを管理者にする」にチェックを入れてください)下で入力しているユーザー名はあくまで例です、オリジナルのユーザー名を設定しましょう。

「インストールの開始」をクリックします。パーティションの作成とインストールが開始します。

インストールが完了するまでしばらく待ちます。

インストールが完了したら「システムの再起動」をクリックします。

Rocky Linux 9.0 が起動したら作成した管理者ユーザーでログインします。

rootユーザーの利用について

この記事では rootユーザーで設定を行うことを前提にしています。これ以降の手順は、管理者ユーザーでログインしたら次のコマンドで rootユーザーになってから実施してください。

sudo -s

※通常の運用時は sudo <コマンド> を利用することをオススメします。

ネットワーク関連設定

NICの設定

・ネットワークデバイス名の確認
nmcli dev s

DEVICE    TYPE      STATE         CONNECTION
enp0s3    ethernet  connected     enp0s3
enp0s8    ethernet  disconnected  --

アダプター1(NAT)は「enp0s3」、アダプター2(ホストオンリーアダプター)は「enp0s8」がネットワークデバイス名です。 ネットワークデバイス名は、環境によって異なりますので、ご自分の環境にあわせて設定してください。

Rocky Linux 8.x では 初期状態で NIC は無効にされていましたが、Rocky Linux 9.0 では初期状態で NIC が有効になっています。そのため VirtualBox の仮想マシンの場合 enp0s3(NATアダプター)は DHCP により自動でIPアドレスが設定されますので、なにも設定しなくても有効(connected)なります。

アダプター2(ホストオンリーアダプター)には、固定でIPアドレスを設定します。

nmcli con mod enp0s8 ipv4.addresses 192.168.56.201/24
nmcli con mod enp0s8 ipv4.method manual

設定が反映されるまで1分程度待ちます。

・再度ネットワークデバイスを確認して STATE が「connected」になっていれば設定完了です。
nmcli dev s

DEVICE    TYPE      STATE         CONNECTION
enp0s3    ethernet  connected     enp0s3
enp0s8    ethernet  connected     enp0s8

以上で ssh ログインができるようになります。※DNSサーバの設定前のため、ログインに時間がかかることがあります

ssh rocky9@192.168.56.201

DNSサーバの設定

手動で設定するため、DHCPでのDNSサーバ設定を無効にします。

nmcli con mod enp0s3 ipv4.ignore-auto-dns yes

DNSサーバを設定し、NetworkManager を再起動します。

nmcli con mod enp0s3 ipv4.dns '1.1.1.1 8.8.8.8'
systemctl restart NetworkManager

DNSサーバが設定されていることを確認します。

cat /etc/resolv.conf
-----(以下の表示があればOK)-----
# Generated by NetworkManager
nameserver 1.1.1.1
nameserver 8.8.8.8

ホスト名の設定

ホスト名「rocky9」を設定し、hostnamed を再起動します(一度ログアウトしログインすると設定したホスト名が反映されていることを確認できます)

nmcli general hostname rocky9
systemctl restart systemd-hostnamed

基本パッケージのインストール

開発ツールなど、基本的なパッケージをインストールしておきます。

dnf -y groupinstall base
dnf -y groupinstall development

パッケージのアップデート

インストール済みのパッケージを、最新版にアップデートします。

dnf -y update

不要サービスの停止

下記のコマンドを実行

systemctl disable atd
systemctl disable kdump
systemctl disable mdmonitor

OSを再起動します

shutdown -r now

cockpit の削除

cockpit がインストールさてれいると SSHログイン時に、以下のようなメッセージが表示されます。

Activate the web console with: systemctl enable --now cockpit.socket

必要がなければ cockpit をアンインストールしてください。上のメッセージが表示されなくなります。

dnf remove -y cockpit

firewalld設定

・現在の設定の確認
firewall-cmd --list-all

public (active)
target: default
icmp-block-inversion: no
interfaces: enp0s3 enp0s8
sources:
services: cockpit dhcpv6-client ssh
ports:

(略)

初期設定では publicゾーンの cockpit、dhcpv6-client、ssh サービスが許可されています。

cockpit と dhcpv6-client を使わない場合は、削除しておきましょう。

firewall-cmd --remove-service=cockpit --permanent
firewall-cmd --remove-service=dhcpv6-client --permanent

追加で HTTP(80/tcp) と HTTPS(443/tcp) を許可しておきます

firewall-cmd --add-port=80/tcp --permanent
firewall-cmd --add-port=443/tcp --permanent

設定を読込みます

firewall-cmd --reload

・設定を確認します
firewall-cmd --list-all
-----(以下の表示であればOK)-----

public (active)
target: default
icmp-block-inversion: no
interfaces: enp0s3 enp0s8
sources:
services: ssh
ports: 80/tcp 443/tcp

(略)

Chrony設定(NTP)

タイムゾーンを日本に変更

timedatectl set-timezone Asia/Tokyo

・参照先のNTPサーバーを変更します。
vi /etc/chrony.conf

pool 2.cloudlinux.pool.ntp.org iburst
 ↓
pool ntp.nict.jp iburst

chronyd を再起動

systemctl restart chronyd

自動起動設定

systemctl enable chronyd

・10分ほど経過したら動作を確認します。
chronyc sources -v
-----(以下のような表示があればOK)-----

^+ ntp-a3.nict.go.jp 1 6 77 59 +972us[ +972us] +/- 5667us
^- ntp-b2.nict.go.jp 1 6 77 61 +1423us[+1423us] +/- 3830us
^* ntp-a2.nict.go.jp 1 6 77 62 +269us[ +547us] +/- 4458us

時刻があまりにもズレている場合は、dateコマンドで手動で時刻を合わせてください。

date -s 'YYYY/MM/DD hh:mm:ss'

メール送信設定(Gmail経由)

サーバーから Gmail 経由でメールを送信できるように設定します。(必要がなければこの設定は不要です)

Postfix をインストールします。

dnf -y install postfix

Googleアカウントの設定、および Postfix の設定手順は以下の記事をご参照ください。

PostfixからGmail経由でメールを送信するための設定メモ

メールが送信できることが確認できたら以下を設定します。

自動起動設定

systemctl enable postfix

・root宛メールの送信先を変更します
vi /etc/aliases
-----(下記を最終行に追加)-----

root: <自分のメールアドレス>

メールエイリアスのDBファイルを更新します

newaliases

root宛のメールが、自分のメールアドレス宛に届くことを確認します

echo test | sendmail root

サードパーティリポジトリの追加

EPEL

dnf config-manager --set-enabled crb
dnf -y install epel-release
dnf -y update

Remi

dnf -y install https://rpms.remirepo.net/enterprise/remi-release-9.rpm
dnf -y config-manager --set-enabled remi

Remi リポジトリから PHP8.1 がインストールされるように php:remi-8.1 モジュールをインストールします。

dnf -y module reset php
dnf -y module install php:remi-8.1

【補足】
Remi リポジトリからは PHP8.1 以外に PHP7.4、PHP8.0、PHP8.2(2022年11月にリリース予定)のモジュールをインストールすることができます。

dnf -y module list php

Remi's Modular repository for Enterprise Linux 9 - x86_64
Name              Stream                   Profiles                                   Summary                           
php               remi-7.4                 common [d], devel, minimal                 PHP scripting language            
php               remi-8.0                 common [d], devel, minimal                 PHP scripting language            
php               remi-8.1 [e]             common [d] [i], devel, minimal             PHP scripting language            
php               remi-8.2                 common [d], devel, minimal                 PHP scripting language   

Apache・PHP・MySQL のインストール

※バージョンは2022年9月9日時点のものです。

Apache httpd(2.4.51-7)

dnf -y install httpd-devel
dnf -y install mod_ssl

PHP(8.1.10-1)

dnf -y install php
dnf -y install php-devel
dnf -y install php-pdo
dnf -y install php-mysqlnd
dnf -y install php-mbstring
dnf -y install php-gd
dnf -y install php-pear
dnf -y install composer
dnf -y install php-pecl-apc-devel

MySQL(8.0.28-1)

dnf -y install mysql
dnf -y install mysql-server

PHPの設定

・PHPの設定
vi /etc/php.ini

expose_php = On
 ↓
expose_php = Off
 
;date.timezone =
 ↓
date.timezone = 'Asia/Tokyo'
 
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
 ↓
error_reporting = E_ALL & ~E_NOTICE

php-fpm を自動起動を設定し起動します。

systemctl enable --now php-fpm

Apache httpd の設定

不要なコンフィグを読込まないようにしておきます。

mv -i /etc/httpd/conf.d/autoindex.conf /etc/httpd/conf.d/autoindex.conf.org
mv -i /etc/httpd/conf.d/userdir.conf /etc/httpd/conf.d/userdir.conf.org
mv -i /etc/httpd/conf.d/welcome.conf /etc/httpd/conf.d/welcome.conf.org

オリジナルのコンフィグをバックアップ

mv -i /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.org

・コンフィグを作成します。
vi /etc/httpd/conf/httpd.conf

Apache httpd の自動起動を設定し起動ます。

systemctl enable --now httpd

自己署名のサーバー証明書の作成(HTTPS用)

正規の認証局が発行した、サーバー証明書を無料で取得できるようになりました。よければご参照ください → Let's Encrypt サーバー証明書の取得と自動更新設定メモ

秘密鍵の作成

openssl ecparam -name prime256v1 -genkey -out server.key

・CSR(証明書署名要求)の作成(入力するのは2箇所だけです)
openssl req -new -key server.key > server.csr

Country Name (2 letter code) [XX]: JP
State or Province Name (full name) []:<空エンター>
Locality Name (eg, city) [Default City]:<空エンター>
Organization Name (eg, company) [Default Company Ltd]:<空エンター>
Organizational Unit Name (eg, section) []:<空エンター>
Common Name (eg, your name or your server's hostname) []: www.example.com
Email Address []:<空エンター>
 
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:<空エンター>
An optional company name []:<空エンター>

SAN(Subject Alternative Name)フィールド設定用のファイルを作成します。Common Name に入力したドメイン名を設定してください。

echo 'subjectAltName=DNS:www.example.com' > san.txt

(補足)
2022年6月に発行された RFC9110 で、クライアント(Webブラウザなど)が Common Name(CN-ID)を参照することが禁止(MUST NOT)されました。そのため、クライアントが参照する SAN(Subject Alternative Name)フィールドにドメイン名を正しく設定する必要があります。

SSLサーバー証明書の作成(有効期限30年)

openssl x509 -days 10950 -req -signkey server.key < server.csr > server.crt -extfile san.txt

秘密鍵とSSLサーバー証明書を移動

sudo mv -i server.key /etc/pki/tls/private/
sudo mv -i server.crt /etc/pki/tls/certs/

パーミッションを変更

sudo chmod 600 /etc/pki/tls/private/server.key
sudo chmod 600 /etc/pki/tls/certs/server.crt

SELinux を有効にしている場合は、秘密鍵とSSLサーバー証明書に正しいセキュリティコンテキストをつけておきましょう。(Apache httpd 起動時にエラーが発生することがあります)

restorecon /etc/pki/tls/private/server.key
restorecon /etc/pki/tls/certs/server.crt

CSRとSANフィールド設定用のファイルを削除

rm server.csr san.txt

Apache HTTPS(SSL/TLS)の設定

SSL設定ファイルのオリジナルをバックアッップします

mv -i /etc/httpd/conf.d/ssl.conf /etc/httpd/conf.d/ssl.conf.org

SSL設定ファイルを作成します。
vi /etc/httpd/conf.d/ssl.conf

関連記事:安全な SSL/TLS 設定にするための10のポイント(Apache httpd 2.4)
 

Apache httpd を再起動します。

systemctl restart httpd

WEBブラウザで HTTPSで接続できることを確認します。

【補足】
自己署名のサーバー証明書の場合は警告が表示され、接続できない場合があります。FireFox で「危険性を承知で続行」ボタンを押して接続するか、Google Chrome の場合は「thisisunsafe」とタイプすると接続できます。

MySQL 8.0 の設定

・MySQLの設定ファイルに以下を追加します。
vi /etc/my.cnf.d/mysql-server.cnf

slow_query_log=ON
slow_query_log_file=/var/log/mysql/slow_query.log
long_query_time=1.0
 
log_timestamps=SYSTEM
skip-character-set-client-handshake

MySQL の自動起動を設定し起動します。

systemctl enable --now mysqld

mysql_secure_installation の実行

初期状態では、rootユーザーがパスワードなしで MySQLに接続できるようになっていますのでパスワードを設定しておきます。

mysql_secure_installation コマンドを実行すると、root ユーザーのパスワードを変更し、不要なユーザーやDBも削除してくれます。パスワードは、8文字以上で英数大文字小文字と記号が含まれていないとポリシー違反で弾かれてしまいますので注意です。パスワードポリシーを変更したい場合は「--use-default」オプションなしで実行してください。

mysql_secure_installation --use-default
 
(略)
Please set the password for root here.
 
New password: <新しいパスワード>
 
Re-enter new password: <新しいパスワード>
(略)
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y ←入力してエンター
(不要なユーザーやDBを削除)
All done!

ログローテーション設定

設定ファイルのバックアップ用ディレクトリを作成しておきます。

mkdir /etc/logrotate.off

Apacheログのローテーション設定

オリジナルの設定ファイルをバックアップします

mv -i /etc/logrotate.d/httpd /etc/logrotate.off/

・設定ファイルを作成します
vi /etc/logrotate.d/httpd

/var/log/httpd/*log { 
    daily 
    missingok 
    dateext 
    rotate 60 
    create 644 apache apache 
    sharedscripts 
    postrotate 
        /bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true
    endscript 
}

・確認します
logrotate -v /etc/logrotate.d/httpd
-----(下記のような表示があればOKです)-----

(略)
rotating pattern: /var/log/httpd/*log after 1 days (60 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/httpd/access_log
(略)

MySQLログのローテーション設定

オリジナルの設定ファイルをバックアップします

mv -i /etc/logrotate.d/mysqld /etc/logrotate.off/

・設定ファイルを作成します
vi /etc/logrotate.d/mysqld

/var/log/mysql/*log {
    daily
    missingok
    dateext
    rotate 60
    sharedscripts
    postrotate
    if test -x /usr/bin/mysqladmin && \
        /usr/bin/mysqladmin --defaults-extra-file=/root/.my.cnf ping &>/dev/null
    then
        /usr/bin/mysqladmin --defaults-extra-file=/root/.my.cnf flush-logs
    fi
    endscript
}

・MySQL の root ユーザのパスワードファイルを作成
vi /root/.my.cnf

[mysqladmin]
user=root
password="<パスワード>"

パスワードを書いているのでパーミッションを変更

chown root:root /root/.my.cnf
chmod 600 /root/.my.cnf

・確認します
logrotate -v /etc/logrotate.d/mysqld
-----(下記のような表示があればOKです)-----

(略)
rotating pattern: /var/log/mysql/*log after 1 days (60 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/mysql/mysqld.log
(略)

自動起動の設定確認

systemctl list-unit-files | grep -e httpd.service -e php-fpm.service -e mysqld.service -e chronyd.service -e 'UNIT FILE '
-----(STATE列がすべて「enabled」であればOKです)-----

UNIT FILE                                  STATE           VENDOR PRESET
chronyd.service                            enabled         enabled
httpd.service                              enabled         disabled
mysqld.service                             enabled         disabled
php-fpm.service                            enabled         disabled

一度OSを再起動して、各種サービスが起動している事を確認しましょう。

shutdown -r now
(再起動後に以下を実行)
ps aux | grep -e httpd -e php-fpm -e mysqld -e chronyd

以上です。設定お疲れ様でした!

コメント

タイトルとURLをコピーしました