【RHEL9】AWS EC2構築後に必ずやるべき初期設定まとめ(ホスト名固定・パスワードポリシー・日本語化)

AWS上でRed Hat Enterprise Linux 9(RHEL9)のEC2インスタンスを立ち上げた際、デフォルトのまま運用を始めると、再起動時にホスト名が変わってしまったり、セキュリティ要件(パスワードポリシー)を満たせなかったりするケースがあります。

本記事では、RHEL9の仕様(authselect など)に対応した、実務でそのまま使える初期構築手順を解説します。

安全な運用のために、設定変更前には必ずバックアップ(.org)を取得する手順にしています。インフラエンジニアや踏み台サーバーを構築する方は、ぜひ構成管理の参考にしてください。

1. AWS EC2でホスト名を恒久的に固定する

AWSのEC2(RHEL)は、デフォルトのままだとOS再起動時にDNS名から自動的にホスト名が再生成されてしまいます。ホスト名を恒久的に固定するには、cloud-init の設定変更と hostnamectl の両方を実行する必要があります。

1.1. cloud-init の設定変更

まずは、/etc/cloud/cloud.cfg を開き、ホスト名の自動変更を無効化(true に設定)します。

# 事前確認(デフォルトが false であること)

grep "preserve_hostname" /etc/cloud/cloud.cfg

#修正前

#バックアップ取得

sudo cp -p /etc/cloud/cloud.cfg /etc/cloud/cloud.cfg.org

# 設定変更(sedコマンドで一発置換)

sudo sed -i 's/preserve_hostname: false/preserve_hostname: true/' /etc/cloud/cloud.cfg

#修正後

grep "preserve_hostname" /etc/cloud/cloud.cfg

1.2. hostnamectl によるホスト名設定

今回は、ホスト名を rhel9-hostname に変更します。

# ホスト名を設定
sudo hostnamectl set-hostname rhel9-hostname

# 反映状況の確認
hostnamectl status
# 期待値: Static hostname: rhel9-hostname が表示されること

停止・起動して確認

2. Linuxセキュリティの基本!パスワードポリシーの設定

企業のセキュリティガイドラインに合わせ、パスワードの複雑さや有効期限、アカウントロックなどを設定します。RHEL9からは認証周りの挙動が一部変更になっているため注意が必要です。

2.1. パスワードの複雑さ設定(10桁以上、3種類混在、ユーザー名同一禁止)

/etc/security/pwquality.conf を書き換えて、強固なパスワードを強制します。

# 事前確認
grep -E "minlen|minclass|usercheck" /etc/security/pwquality.conf

# バックアップ取得
sudo cp -p /etc/security/pwquality.conf /etc/security/pwquality.conf.org

# コメントアウトを解除しつつ設定値を書き換え
sudo sed -i 's/^# \?minlen =.*/minlen = 10/' /etc/security/pwquality.conf
sudo sed -i 's/^# \?minclass =.*/minclass = 3/' /etc/security/pwquality.conf
sudo sed -i 's/^# \?usercheck =.*/usercheck = 1/' /etc/security/pwquality.conf

# 事後確認
grep -E "minlen|minclass|usercheck" /etc/security/pwquality.conf

【期待値】

minlen = 10
minclass = 3
usercheck = 1

2.2. パスワード有効期限の設定(90日、変更不可1日、警告7日)

/etc/login.defs を修正し、定期的なパスワード変更を促します。

# 事前確認
grep -E "^PASS_(MAX|MIN)_DAYS|^PASS_WARN_AGE" /etc/login.defs

# バックアップ取得
sudo cp -p /etc/login.defs /etc/login.defs.org

# 設定変更
sudo sed -i 's/^PASS_MAX_DAYS.*/PASS_MAX_DAYS   90/' /etc/login.defs
sudo sed -i 's/^PASS_MIN_DAYS.*/PASS_MIN_DAYS   1/' /etc/login.defs
sudo sed -i 's/^PASS_WARN_AGE.*/PASS_WARN_AGE   7/' /etc/login.defs

# 事後確認
grep -E "^PASS_(MAX|MIN)_DAYS|^PASS_WARN_AGE" /etc/login.defs

💡 補足: /etc/login.defs の設定は、設定後に新規作成されたユーザーにのみ適用されます。

2.3. 過去5世代のパスワード再利用を禁止する

RHEL9では、パスワード履歴を管理するために認証フレームワーク authselect の機能(feature)を明示的に有効化する必要があります。

# 1. 現在のプロファイルを確認
authselect current

# 2. pwhistory 機能を有効化
sudo authselect enable-feature with-pwhistory

# 3. 履歴世代数の設定(バックアップを取得してから変更)
grep "remember" /etc/security/pwhistory.conf
sudo cp -p /etc/security/pwhistory.conf /etc/security/pwhistory.conf.org
sudo sed -i 's/^# \?remember =.*/remember = 5/' /etc/security/pwhistory.conf

# 4. 事後確認
grep "remember" /etc/security/pwhistory.conf
# 期待値: remember = 5

2.4. アカウントロック設定(10回失敗で30分ロック、rootも対象)

ブルートフォース攻撃(総当たり攻撃)対策として、ログイン失敗時のロックを設定します。ここでは、多重追記を防ぐために sed を使って安全に設定を書き換えます。

# 事前確認
grep -E "^#\? \?(deny|unlock_time|even_deny_root)" /etc/security/faillock.conf

# バックアップ取得
sudo cp -p /etc/security/faillock.conf /etc/security/faillock.conf.org

# 設定変更
sudo sed -i 's/^# \?deny =.*/deny = 10/' /etc/security/faillock.conf
sudo sed -i 's/^# \?unlock_time =.*/unlock_time = 1800/' /etc/security/faillock.conf
sudo sed -i 's/^# \?even_deny_root/even_deny_root/' /etc/security/faillock.conf

# 事後確認
grep -E "^(deny|unlock_time|even_deny_root)" /etc/security/faillock.conf

【期待値】

deny = 10
unlock_time = 1800
even_deny_root