RHEL9のインストーラでrootのパスワードによるsshログインを許可したあとで拒否する話

問題

  1. RHEL 9のインストーラで、rootのパスワードを使ったsshログインを許可してインストールをおこなう。
  2. そのあと /etc/sshd/sshd_config 末尾に PermitRootLogin no のように書いても無視される。

なんでですかね?

インストーラのやること

RHEL 9のインストーラで、rootのパスワードを使ったsshログインを許可すると、 /etc/ssh/sshd_config.d/01-permitrootlogin.conf が作られて PermitRootLogin yes が記述される。

rootパスワードの設定画面。「パスワードによるroot SSHログインを許可」というチェックがある

作成される /etc/ssh/sshd_config.d/01-permitrootlogin.conf はこんなかんじ。

# cd /etc/ssh/sshd_config.d/
# ls
01-permitrootlogin.conf  50-redhat.conf
# cat 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

sshdがやること

このファイルは /etc/ssh/sshd_config から Includeにより読み込まれている。

# 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
(略)

sshd_configは同じディレクティブを複数回指定すると最初だけ有効になり、2回目以降の指定は無視される。そのためたとえば /etc/sshd/sshd_config 末尾に PermitRootLogin no のように書いても無視されるようになる。

なおsshdの設定内容がどう評価されたを確認するには sshd -T コマンドをつかう。

# sshd -T|grep -i root
permitrootlogin yes
chrootdirectory none

対策

Includeより手前なら同じ理屈で sshd_config に書いた方が有効だが、2回同じ設定がでてると人間が混乱する。変更するときはファイル 01-permitrootlogin.conf を消すのがおすすめ。

背景

  • 昔ながらのやりかただとインストーラでの指定と管理者の意図は一貫しているが、クラウドプロバイダーが用意したイメージをデプロイする場合などではそうとは限らない。そこでインストーラでの指定と反対の指定をあとで行うようなシーンが登場する。
  • パッケージ管理やAnsible、OpenSCAPなどを利用した自動的な設定との相性のよさから、 /etc/〜〜.d/*.conf のような分離されたファイルを配置するだけで設定を行えるような変更が徐々に広がっている。一方で設定作業を行うときには特定の1ファイルしか目に入っていないことがあるのでハマりどころになりがち。
  • sshdが2回目の設定を無視するときには特に警告などの表示はない。