朝から昼寝

ITや身近な小ネタをちょこちょこ整理

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ログインを許可という設定項目が増えた点について説明されています。

OSインストール時の"rootパスワード"画面 (画像はRocky Linux 9)
OSインストール時の"rootパスワード"画面 (画像はRocky Linux 9)

画像は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."と記載があります。

参考URL

RHELとFedoraの違いについての説明