Red Hat Enterprise Linux(以降 RHEL)を導入する際に、設計上rootでのSSHログインを無効としているものの、構築作業の都合上有効にすることがあります。
設計時のパラメータに戻すため再度rootのSSHログインを無効に設定しようとしたものの、無効にできないことがありました。
その原因と対処について記載します。
事象
RHELではrootのSSHログインを有効/無効に設定するパラメータとして、「/etc/ssh/sshd_config」の以下を編集します。
PermitRootLogin
RHEL8まではこのパラメータ値を「no」に変更することでrootのSSHログインを無効にできました。
しかし、RHEL9以降では上記パラメータを「no」にしただけでは無効にできないケースがあります。
原因
Includeディレクティブ
原因の前に簡単にIncludeディレクティブについて説明します。
Includeディレクティブは「/etc/ssh/sshd_config」にある設定値で、記載されたパス(デフォルトは/etc/ssh/sshd_config.d)の中に設定ファイルを作成することで設定を分割することができます。
[root@localhost ~]# cat /etc/ssh/sshd_config ~~~中略~~~ # To modify the system-wide sshd configuration, create a *.conf file under # /etc/ssh/sshd_config.d/ which will be automatically included below Include /etc/ssh/sshd_config.d/*.conf ~~~中略~~~ [root@localhost ~]#
OSインストール時の設定
RHEL9以降では下図のように、OSインストール時にrootのパスワードを設定するウィザードにて「パスワードによるroot SSHログインを許可」のチェックボックスが追加されました。
ここで有効にした場合に「/etc/ssh/sshd_config.d/01-permitrootlogin.conf」というファイルが作成されます。
ファイルの中身を見てみます。
[root@localhost ~]# cat /etc/ssh/sshd_config.d/01-permitrootlogin.conf # This file has been generated by the Anaconda Installer. # Allow root to log in using ssh. Remove this file to opt-out. PermitRootLogin yes [root@localhost ~]#
作成されたファイルには「PermitRootLogin yes」の設定が記載されています。
これが「/etc/ssh/sshd_config」の設定を上書きしているため、「/etc/ssh/sshd_config」ファイルでrootのSSHログインを無効にしても実際には有効のままになります。
解決策
本事象の解決策として以下が考えられますが、個人的にはファイル削除の方が設定箇所が煩雑にならないのでよいかと思います。
- 「01-permitrootlogin.conf」を削除
- 「01-permitrootlogin.conf」の「PermitRootLogin yes」を「PermitRootLogin no」に修正
最後に
構築作業時など、一時的にrootのSSHログインを有効にするケースは少なくないと思います。
本事象に該当する方の役に立てば幸いです。