2021年12月3日 CentOS Stream 9 のリリースが正式にアナウンス されました。CentOS Stream 9 は、そのダウンストリームとなる Red Hat Enterprise Linux(RHEL)9 のマイナーリリースに先がげて新機能やバグ修正が反映されるのが特徴です。そこで今回は、CentOS Stream 9 の変更点とサードパーティリポジトリの対応状況、CentOS Stream 9 で LAMP構成をインストールする手順をまとめてみました。
- CentOS Stream 9 のリリースノート
- CentOS Stream 9 の変更点
- CentOS Stream 9 へのサードパーティリポジトリの対応状況
- CentOS Stream 9 のダウンロード
- マシン構成
- CentOS Stream 9 のインストール
- rootユーザーの利用について
- ネットワーク関連設定
- 基本パッケージのインストール
- パッケージのアップデート
- 不要サービスの停止
- cockpit の削除
- サブスクリプションマネージャの無効化
- firewalld設定
- Chrony設定(NTP)
- メール送信設定(Gmail経由)
- Apache・PHP・MySQL のインストール
- PHPの設定
- Apache httpd の設定
- 自己署名のサーバー証明書の作成(HTTPS用)
- Apache HTTPS(SSL/TLS)の設定
- MySQL 8.0 の設定
- ログローテーション設定
- 自動起動の設定確認
CentOS Stream 9 のリリースノート
CentOS Stream 9 の公式ページ
CentOS Stream 9 は RHEL 9 のフルサポートフェーズが終了する2027年頃までのサポートが予定されています。
Expected EOL: End of RHEL9 “full support” phase (Estimated 2027)
CentOS Stream 9 の詳細については、ダウンストリームの RHEL 9 のリリースノートが参考になります。
Release Notes for Red Hat Enterprise Linux 9.0
CentOS Stream 9 の変更点
個人的に気になった CentOS Stream 9 の変更点をまとめてみました。
参考資料:Considerations in adopting RHEL 9 Red Hat Enterprise Linux 9-beta
OpenSSL 3.0.0
OpenSSL の最新版バージョン 3.0.0 が採用されています。
openssl version OpenSSL 3.0.0 7 sep 2021 (Library: OpenSSL 3.0.0 7 sep 2021)
SELINUX=disabled オプションの廃止
/etc/selinux/config の SELINUX=disabled オプションによる SELinux の無効化ができなくなりました。
SELinux を無効する場合は、以下のようにカーネルコマンドラインに selinux=0 を追加して再起動が必要です。
grubby --update-kernel ALL --args selinux=0 shutdown -r now
ただし、CentOS Stream 9 では SELinux のパフォーマンスが大幅に向上しています。SELinux の利用を検討してみましょう。
root の SSHパスワードログイン無効
root の SSHパスワードログインが標準で無効になっています。CentOS Stream 9 のインストール時に root の SSHパスワードログインを有効にすることもできますが、root へのブルートフォース攻撃対策としてこのような仕様になっていますので無効にしておくことをオススメします。
TLS 1.2 以下は非サポート
CentOS Stream 9 では、TLS 1.2 と TLS 1.3 のみがサポートされています。
TPM 1.2 は非サポート
CentOS Stream 9 では、TPM 1.2(Trusted Platform Module)は削除され TPM 2.0 以降がサポートされています。
exFATファイルシステムのサポート
一般的によく使われている exFATファイルシステムが CentOS Stream 9 ではサポートされています。これは嬉しいですね。
CentOS Stream 9 へのサードパーティリポジトリの対応状況
EPEL
EPEL リポジトリは以下の手順で CentOS Stream 9 に追加することができます。
dnf config-manager --set-enabled crb dnf install epel-release epel-next-release
参考資料:Extra Packages for Enterprise Linux (EPEL) :: Fedora Docs
Remi
最新の PHP が利用できる Remi も CentOS Stream 9 に対応しています。標準リポジトリからは提供されていない PHP7系をインストールすることもできます。
dnf install https://rpms.remirepo.net/enterprise/remi-release-9.rpm dnf config-manager --set-enabled remi
参考資料:Enterprise Linux 9 Repository - Remi's RPM repository - Blog
CentOS Stream 9 のダウンロード
CentOS Stream のダウンロードページ で「9」タブを選択 → ISO の「x86_64」をクリックして「CentOS-Stream-9-latest-x86_64-dvd1.iso」をダウンロードしてください。
マシン構成
○仮想マシン構成
メモリ:2048MB
HDD:20GB
CPU:2コア
○ネットワークデバイス
アダプター1:NAT
アダプター2:ホストオンリーアダプター(固定IPアドレスを設定)
○ネットワーク構成(※ご自分の環境に書換えてください)
ホスト名: centos9
IPアドレス:192.168.56.201/24
DNSサーバ: 1.1.1.1
DNSサーバ: 8.8.8.8
CentOS Stream 9 のインストール
[↑]キーで「Install CentOS Stream 9」を選択して、エンターを押します。
GUI画面が表示されたら「日本語 Japanese」「日本語( 日本)」を選択して「続行」をクリックします。
下のような表示になるまで少し待ってから「インストール先」をクリックします。
インストール先のハードディスクを選択して、「完了」をクリックします。
続いて「ソフトウェアの選択」をクリックします。
「Minimal Install」を選択して、「完了」をクリックします。
下にスクロールして「root パスワード」をクリックします
root ユーザーに設定するパスワードを入力して「完了」をクリックします。(パスワードを入力しなければ root ユーザーは無効になります)
ユーザーの作成をクリックします。CentOS Stream 9 では root ユーザーで SSHパスワードログインができなくなっていますので、root ユーザーの代わりとなる管理者ユーザーを作成しておきましょう。
以下のように入力/選択して「完了」をクリックします。(必ず「このユーザーを管理者にする」にチェックを入れてください)下で入力しているユーザー名はあくまで例です、オリジナルのユーザー名を設定しましょう。
「インストールの開始」をクリックします。パーティションの作成とインストールが開始します。
インストールが完了するまでしばらく待ちます。
インストールが完了したら「システムの再起動」をクリックします。
CentOS Stream 9 が起動したら作成した管理者ユーザーでログインします。
rootユーザーの利用について
この記事では rootユーザーで設定を行うことを前提にしています。これ以降の手順は、管理者ユーザーでログインしたら次のコマンドで rootユーザーになって実施してください。
su -
※通常の運用時は sudo を利用することをオススメします。
ネットワーク関連設定
NICの設定
・ネットワークデバイス名の確認
nmcli dev s
DEVICE TYPE STATE CONNECTION enp0s3 ethernet connected enp0s3 enp0s8 ethernet disconnected --
アダプター1(NAT)は「enp0s3」、アダプター2(ホストオンリーアダプター)は「enp0s8」がネットワークデバイス名です。 ネットワークデバイス名は、環境によって異なりますので、ご自分の環境にあわせて設定してください。
CentOS 7 および 8 では 初期状態で NIC は無効にされていましたが、CentOS Stream 9 では初期状態で NIC が有効になっています。そのため VirtualBox の仮想マシンの場合 enp0s3(NATアダプター)は DHCP により自動でIPアドレスが設定されますので、なにも設定しなくても有効(connected)なります。
アダプター2(ホストオンリーアダプター)には、固定でIPアドレスを設定します。
nmcli con mod enp0s8 ipv4.method manual
設定が反映されるまで少し待ちます。
・再度ネットワークデバイスを確認して 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
ホスト名の設定
ホスト名「centos9」を設定し、hostnamed を再起動します(一度ログアウトしログインすると設定したホスト名が反映されていることを確認できます)
systemctl restart systemd-hostnamed
基本パッケージのインストール
開発ツールなど、基本的なパッケージをインストールしておきます。
dnf -y groupinstall development
パッケージのアップデート
インストール済みのパッケージを、最新版にアップデートします。
不要サービスの停止
下記のコマンドを実行
systemctl disable kdump
systemctl disable mdmonitor
OSを再起動します
cockpit の削除
cockpit がインストールさてれいると SSHログイン時に、以下のようなメッセージが表示されます。
必要がなければ cockpit をアンインストールしてください。上のメッセージが表示されなくなります。
サブスクリプションマネージャの無効化
dnfコマンドを実行すると、RHELのサブスクリプションの登録を求めるメッセージが表示されます。
dnf update サブスクリプション管理リポジトリーを更新しています。 コンシューマー識別子を読み込めません このシステムは、エンタイトルメントサーバーに登録されていません。subscription-manager で登録できます。
CentOS Stream 9 ではサブスクリプションの登録は必要ありませんので、以下のファイルを編集してサブスクリプションマネージャを無効にしておきましょう。
vi /etc/yum/pluginconf.d/subscription-manager.conf
[main] enabled=1 ↓ enabled=0
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宛のメールが、自分のメールアドレス宛に届くことを確認します
Apache・PHP・MySQL のインストール
※バージョンは2021年12月5日時点のものです。
Apache httpd(2.4.51-2)
dnf -y install mod_ssl
PHP(8.0.12-1)
dnf -y install php-devel
dnf -y install php-mysqlnd
dnf -y install php-gd
dnf -y install php-pear
dnf -y install php-pecl-apc-devel
dnf -y install php-pecl-zip
MySQL(8.0.22-7)
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 []:<空エンター>
自己署名のサーバー証明書の作成(有効期限30年)
秘密鍵とサーバー証明書を適切な場所に移動
mv -i server.crt /etc/pki/tls/certs/
パーミッションを変更
chmod 600 /etc/pki/tls/certs/server.crt
SELinux を有効にしている場合は、秘密鍵とSSL証明書に正しいセキュリティコンテキストをつけておきましょう。(Apache httpd 起動時にエラーが発生することがあります)
restorecon /etc/pki/tls/certs/server.crt
CSRを削除
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
【補足】
CentOS 8では「/etc/my.cnf.d/mysql-default-authentication-plugin.cnf」設定ファイルにより、デフォルトの認証プラグインが「mysql_native_password」に設定されていましたが、CentOS Stream 9 で採用されている PHP 8.0 は、MySQL 8.0 のデフォルトの認証プラグイン「caching_sha2_password」に対応していますので、この設定は不要になりました。
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
以上です。設定お疲れ様でした!
コメント