問題
- RHEL 9のインストーラで、rootのパスワードを使ったsshログインを許可してインストールをおこなう。
- そのあと
/etc/sshd/sshd_config
末尾にPermitRootLogin no
のように書いても無視される。
なんでですかね?
インストーラのやること
RHEL 9のインストーラで、rootのパスワードを使ったsshログインを許可すると、 /etc/ssh/sshd_config.d/01-permitrootlogin.conf
が作られて PermitRootLogin yes
が記述される。
作成される /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回目の設定を無視するときには特に警告などの表示はない。