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 のダウンロード
- マシン構成
- Rocky Linux 9.0 のインストール
- rootユーザーの利用について
- ネットワーク関連設定
- 基本パッケージのインストール
- パッケージのアップデート
- 不要サービスの停止
- cockpit の削除
- firewalld設定
- Chrony設定(NTP)
- メール送信設定(Gmail経由)
- サードパーティリポジトリの追加
- Apache・PHP・MySQL のインストール
- PHPの設定
- Apache httpd の設定
- 自己署名のサーバー証明書の作成(HTTPS用)
- Apache HTTPS(SSL/TLS)の設定
- MySQL 8.0 の設定
- ログローテーション設定
- 自動起動の設定確認
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 をダウンロードしてください。
マシン構成
○仮想マシン構成
メモリ: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.method manual
設定が反映されるまで1分程度待ちます。
・再度ネットワークデバイスを確認して STATE が「connected」になっていれば設定完了です。
nmcli dev s
DEVICE TYPE STATE CONNECTION enp0s3 ethernet connected enp0s3 enp0s8 ethernet connected enp0s8
以上で ssh ログインができるようになります。※DNSサーバの設定前のため、ログインに時間がかかることがあります
DNSサーバの設定
手動で設定するため、DHCPでのDNSサーバ設定を無効にします。
DNSサーバを設定し、NetworkManager を再起動します。
systemctl restart NetworkManager
DNSサーバが設定されていることを確認します。
-----(以下の表示があればOK)-----
# Generated by NetworkManager
nameserver 1.1.1.1
nameserver 8.8.8.8
ホスト名の設定
ホスト名「rocky9」を設定し、hostnamed を再起動します(一度ログアウトしログインすると設定したホスト名が反映されていることを確認できます)
systemctl restart systemd-hostnamed
基本パッケージのインストール
開発ツールなど、基本的なパッケージをインストールしておきます。
dnf -y groupinstall development
パッケージのアップデート
インストール済みのパッケージを、最新版にアップデートします。
不要サービスの停止
下記のコマンドを実行
systemctl disable kdump
systemctl disable mdmonitor
OSを再起動します
cockpit の削除
cockpit がインストールさてれいると SSHログイン時に、以下のようなメッセージが表示されます。
必要がなければ cockpit をアンインストールしてください。上のメッセージが表示されなくなります。
firewalld設定
・現在の設定の確認
firewall-cmd --list-all
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=dhcpv6-client --permanent
追加で HTTP(80/tcp) と HTTPS(443/tcp) を許可しておきます
firewall-cmd --add-port=443/tcp --permanent
設定を読込みます
・設定を確認します
firewall-cmd --list-all
-----(以下の表示であればOK)-----
target: default
icmp-block-inversion: no
interfaces: enp0s3 enp0s8
sources:
services: ssh
ports: 80/tcp 443/tcp
(略)
Chrony設定(NTP)
タイムゾーンを日本に変更
・参照先のNTPサーバーを変更します。
vi /etc/chrony.conf
↓
pool ntp.nict.jp iburst
chronyd を再起動
自動起動設定
・10分ほど経過したら動作を確認します。
chronyc sources -v
-----(以下のような表示があればOK)-----
^- 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コマンドで手動で時刻を合わせてください。
メール送信設定(Gmail経由)
サーバーから Gmail 経由でメールを送信できるように設定します。(必要がなければこの設定は不要です)
Postfix をインストールします。
Googleアカウントの設定、および Postfix の設定手順は以下の記事をご参照ください。
PostfixからGmail経由でメールを送信するための設定メモ
メールが送信できることが確認できたら以下を設定します。
自動起動設定
・root宛メールの送信先を変更します
vi /etc/aliases
-----(下記を最終行に追加)-----
メールエイリアスのDBファイルを更新します
root宛のメールが、自分のメールアドレス宛に届くことを確認します
サードパーティリポジトリの追加
EPEL
dnf -y install epel-release
dnf -y update
Remi
dnf -y config-manager --set-enabled remi
Remi リポジトリから PHP8.1 がインストールされるように php:remi-8.1 モジュールをインストールします。
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 mod_ssl
PHP(8.1.10-1)
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-server
PHPの設定
・PHPの設定
vi /etc/php.ini
↓
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 を自動起動を設定し起動します。
Apache httpd の設定
不要なコンフィグを読込まないようにしておきます。
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
オリジナルのコンフィグをバックアップ
・コンフィグを作成します。
vi /etc/httpd/conf/httpd.conf
Apache httpd の自動起動を設定し起動ます。
自己署名のサーバー証明書の作成(HTTPS用)
秘密鍵の作成
・CSR(証明書署名要求)の作成(入力するのは2箇所だけです)
openssl req -new -key server.key > server.csr
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 に入力したドメイン名を設定してください。
(補足)
2022年6月に発行された RFC9110 で、クライアント(Webブラウザなど)が Common Name(CN-ID)を参照することが禁止(MUST NOT)されました。そのため、クライアントが参照する SAN(Subject Alternative Name)フィールドにドメイン名を正しく設定する必要があります。
SSLサーバー証明書の作成(有効期限30年)
秘密鍵とSSLサーバー証明書を移動
sudo mv -i server.crt /etc/pki/tls/certs/
パーミッションを変更
sudo chmod 600 /etc/pki/tls/certs/server.crt
SELinux を有効にしている場合は、秘密鍵とSSLサーバー証明書に正しいセキュリティコンテキストをつけておきましょう。(Apache httpd 起動時にエラーが発生することがあります)
restorecon /etc/pki/tls/certs/server.crt
CSRとSANフィールド設定用のファイルを削除
Apache HTTPS(SSL/TLS)の設定
SSL設定ファイルのオリジナルをバックアッップします
SSL設定ファイルを作成します。
vi /etc/httpd/conf.d/ssl.conf
関連記事:安全な SSL/TLS 設定にするための10のポイント(Apache httpd 2.4)
Apache httpd を再起動します。
WEBブラウザで HTTPSで接続できることを確認します。
【補足】
自己署名のサーバー証明書の場合は警告が表示され、接続できない場合があります。FireFox で「危険性を承知で続行」ボタンを押して接続するか、Google Chrome の場合は「thisisunsafe」とタイプすると接続できます。
MySQL 8.0 の設定
・MySQLの設定ファイルに以下を追加します。
vi /etc/my.cnf.d/mysql-server.cnf
slow_query_log_file=/var/log/mysql/slow_query.log
long_query_time=1.0
log_timestamps=SYSTEM
skip-character-set-client-handshake
MySQL の自動起動を設定し起動します。
mysql_secure_installation の実行
初期状態では、rootユーザーがパスワードなしで MySQLに接続できるようになっていますのでパスワードを設定しておきます。
mysql_secure_installation コマンドを実行すると、root ユーザーのパスワードを変更し、不要なユーザーやDBも削除してくれます。パスワードは、8文字以上で英数大文字小文字と記号が含まれていないとポリシー違反で弾かれてしまいますので注意です。パスワードポリシーを変更したい場合は「--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!
ログローテーション設定
設定ファイルのバックアップ用ディレクトリを作成しておきます。
Apacheログのローテーション設定
オリジナルの設定ファイルをバックアップします
・設定ファイルを作成します
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ログのローテーション設定
オリジナルの設定ファイルをバックアップします
・設定ファイルを作成します
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
user=root
password="<パスワード>"
パスワードを書いているのでパーミッションを変更
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を再起動して、各種サービスが起動している事を確認しましょう。
(再起動後に以下を実行)
ps aux | grep -e httpd -e php-fpm -e mysqld -e chronyd
以上です。設定お疲れ様でした!
コメント