Posted at

ご存じですか? sshd_config の PermintRootLogin の各種パラメータについて

More than 3 years have passed since last update.

構築中に色々と知見があったので、まとめます。


PermitRootLogin

LinuxサーバでSSHを起動させた時に、 /etc/ssh/sshd_config でこのパラメータをイジらない方はいないのではないでしょうか。

デフォルトでは次のようになっています。


/etc/ssh/sshd_config

#PermitRootLogin yes


これは、 rootユーザでのログインを許可 している状態です。

そのため、大抵の場合(かどうかは知りませんが)、手っ取り早く以下のような状態にしてしまうことが多いかと思います。


/etc/ssh/sshd_config

PermitRootLogin no


コメントアウトを解除し、パラメータをnoに設定しています。

これでrootユーザのログインは全て拒否したことになりますね。

しかしこの PermitRootLogin

yes/no 以外にも設定できるパラメータがあるのはご存知でしょうか。


without-password

「rootでログインしたいけど、パスワードのみの認証だと不安・・・。」

そういった場合に利用できるのが、without-password です。

読んで字の如くですが、このパラメータを指定すると rootユーザのみパスワード認証を拒否することができます。

ではどうやって認証するのかというと、公開鍵認証を使うわけですね。

rootのパスワード認証を取りやめるだけでも不正アクセスをされるリスクがグンと下がると思います。

さて、これ以外にももう一つ、パラメータが存在します。


forced-commands-only

「rootユーザでログインはしないけどroot権限でサーバにアクセスするコマンドは使いたい」といった場合には、 without-password より forced-commands-only がオススメです。

これは パスワード認証不可で、rootユーザでの直接ログインもできませんが、root権限を利用したコマンドのみ受け付ける というものになります。

「rootユーザでは一切ログインしないけど、root権限でコマンドを使いたい。」

そういった場合に利用できます。

具体的には、


  • rootユーザでしかアクセスできないファイルをscpでサーバにコピーしたい

  • rsyncを使ってサーバ間で同期を取りたい

といった時でしょうか。

特に同期を取る場合ですが、root権限でないと参照できないファイルもあります。

/etc 配下の設定ファイルを全部同期したい!」

といった場合はroot権限が確実に必要となると思います。

勿論 without-password だけでも全然OKです。

しかし、rootユーザで直接ログインする必要が一切ないのであれば、 forced-commands-only にしておいた方が安全でしょう。


PermitRootLogin のまとめ

パラメータ
説明

yes
rootユーザのログインを許可

no
rootユーザのログインを拒否

without-password
パスワードを使用したrootユーザのログインを拒否

forced-commands-only
rootユーザの直接ログインを拒否するが、root権限を使うコマンドのアクセスは許可





本当は authorized_keys についても一緒にまとめたかったのですが、既にまとめてる方がいたので今回はこれだけにしました。

以上です。