RHEL9系からsshdのPermitRootLoginがYesでない経緯を辿る
RHEL9からsshd_configのPermitRootLogin
のデフォルト値が”prohibit-password”になりました。RHEL8までは”Yes”でした。
本記事は、そのあたりの経緯を調べた際のポイントをまとめたものです。
対象はRHELですが、CentOS Stream、AlmaLinux、Rocky Linuxも同様です。
本記事の目的
- RHEL9からsshd_configの
PermitRootLogin
のデフォルト値が”Yes”ではなくなった経緯と運用上のポイントを把握する。
基本
RHEL9からPermitRootLogin
のデフォルト値が"prohibit-password"
RHEL9をインストール時、sshd_configのPermitRootLogin
のデフォルト値は”prohibit-password”になりました。
これはRHEL単独の変更点でなく、アップストリームのFedora側の変更によるものです。
この設定は、ssh経由でrootによるパスワード認証によるログインが拒否される動作となります。ssh経由のログインを全て拒否する”No”とは異なりますが、個別に許可するよう設定しない限りはrootによるsshログインは不可です(後述)。
OSインストール時の指定がデフォルトのままであれば、この設定が採用されます。
RHEL9リリースノートからは少し読み取りづらいですが、RHEL9からデフォルト値が変更されたことに対し、OSインストール時のrootパスワード
画面のオプションとして、rootアカウントをロック
、パスワードによるroot SSHログインを許可
という設定項目が増えた点について説明されています。
画像はRocky Linux9のものですが、RHEL9と同等です。
厳密にrootログインを禁止するなら"prohibit-password"でなく"No"
“prohibit-password”は、通常のパスワード認証と、キーボードインタラクティブ認証を拒否しますが、公開鍵認証とホストベースのGSSAPI認証だけは許可されます。
公開鍵認証やGSSAPI認証を用いたrootによるsshログインは、個別に許可するよう設定しない限りは不可ですが、必要性が無ければOpenSSH側で明示的に無効化した方がより安全です。
/etc/ssh/sshd_config
を以下のように設定することで、PermitRootLogin
をデフォルトの”prohibit-password”から”No”に変更できます。
(変更前) #PermitRootLogin prohibit-password
(変更後) #PermitRootLogin prohibit-password PermitRootLogin No ←追加
OSインストール時のオプションの動作
OSインストール時のrootパスワード
画面のオプションに追加されたパスワードによるroot SSHログインを許可
はデフォルトでチェックオフです。特に理由が無ければオフのままの方が良いでしょう。
このチェックをオンにしてOSインストールした際の動作は少しややこしいので記載しておきます。
パスワードによるroot SSHログインを許可
をオンにしてOSインストールしても、sshd_configファイルのPermitRootLogin
は”prohibit-password”のままです。
しかし、この設定を上書きする形で、/etc/ssh/sshd_config.d/01-permitrootlogin.conf
というファイルが生成されており、そこに
PermitRootLogin Yes
が定義されています。
その結果、ssh経由でのrootログインが許可される動作となります。
sshd -T
を実行して現在有効なconfigを確認することで、採用されている設定値がPermitRootLogin Yes
となっていることを確認できます。
仮に、パスワードによるroot SSHログインを許可
をオンにしてOSインストールした後、その該当設定を見直す際には、この/etc/ssh/sshd_config.d/01-permitrootlogin.conf
というファイルを削除/変更する必要性があるという点に注意が必要です。
詳細
マニュアルの差分
従来、RHEL8のマニュアルでは、”root ログインなし”の箇所でPermitRootLogin
を”No”にすることを検討するよう案内がありました。
対して、RHEL9のマニュアルでは、”Root ログイン”の箇所で、PermitRootLogin
はデフォルトで prohibit-password
に設定されている旨の記載があります。
Fedora側の経緯
RHELの仕様変更の経緯を確認するため、そのアップストリームディストリビューションであるFedoraプロジェクトの情報を参照します。
経緯は、Changes/DisableRootPasswordLoginInSshdに記載されています。
本家のOpenSSH側では2015年時点でPermitRootLogin
のデフォルト値を”prohibit-password”に変更しました。その後しばらくして、Fedoraプロジェクト側は2019年にFedora 31でこの変更を反映しました。
RHELのベースとなるFedoraのバージョンは、RHEL9がFedora 34、RHEL8がFedora28ですので、RHEL9以降はこの変更点が反映されることになります。
OpenSSH側の経緯
OpenSSHのページ(2015年のリリース情報)に、変更点として以下のように記載があります。
* PermitRootLogin=without-password/prohibit-password now bans all interactive authentication methods, allowing only public-key, hostbased and GSSAPI authentication (previously it permitted keyboard-interactive and password-less authentication if those were enabled).
本家のOpenSSHのマニュアルとしては、SSHD_CONFIG(5)に、”The default is prohibit-password.”と記載があります。