rootはsshログインできないことが多い
Linuxサーバを運用する場合、直接コンソールからログインして作業をするというのはあまりないことだと思う。大抵は最初にセットアップを済ませたら、あとはsshでログインして利用するのではないだろうか。
ssh経由のログインにおいては、公開鍵認証を使ったログインが推奨されている。パスワード認証は無効にしておいて、鍵が設置されているホストからのみの公開鍵認証を使ったログインを許可することが多い。
さらに、最近のサーバではそもそもrootではssh経由でログインできない設定になっているものが多い。rootでログインできない代わりに、一般ユーザーでログインできるようにしておいて、ユーザーごとにsudo経由で特定処理を許可するというのがよく使われるやり方だ。
しかし、である。楽なほうに流れるのは人の常というもの。公開鍵認証のセットアップを済ませてしまえば以降は楽なのだが、ログインをする人数分その設定をするのは面倒という現場のロジックが頭をもたげてくる。一度緩い設定をしてrootで直接sshログインできるようになると、よくないとは思いつつ使ってしまうものだ。作業する相手にパスワードを伝えるだけでよいので楽なのだ。設定の変更もそれほど難しくないので、楽なほう楽なほうへと向かってしまうというわけだ。
rootでのログインを許可
sshdの設定ファイルは/etc/ssh/sshd_configにデプロイされていることが多い。次の設定を使うと、rootアカウントでssh経由でのログインが可能になる。
PermitRootLogin yes
/etc/ssh/sshd_configを書き換えたら、使っているLinuxディストリビューションの方法でsshdを再起動してほしい。多くの環境では次のようにserviceコマンドを実行することでsshdの再起動が可能だと思う(指定する名前はsshdではないかもしれない。それは環境に依存する)。
service sshd stop
service sshd start
先程ログインが拒否されていた環境が、次のようにログイン可能になることを確認できる。
rootでログインできるようになると、今度はパスワードの入力すら省略できないかという考えが芽生えてくる。閉じた環境で知った開発メンバーしかログインしない期間ならよいじゃないか、というわけだ。これも設定は可能なので、低きに流れてしまうわけである。
rootでのパスワードなしログインを許可
ssh経由で直接rootユーザーとしてログインすることができ、かつ、パスワードも必要ない状態にするには、まずrootのパスワードを空にする必要がある。この方法については前回に説明したので、こちらを参考にしてほしい。vipwやvipw -sでパスワードフィールドを削除すれば完了だ。
次に/etc/ssh/sshd_configで次の設定を有効にする。
PermitRootLogin yes
UsePAM no
PermitEmptyPasswords yes
sshdを再起動してssh経由でのログインを試みると、次のようにパスワードなしでrootでのログインが可能になる。
設定は簡単だし、運用も簡単だ。ログインしたいユーザーはIPアドレスだけ知っていればrootでログインできるので、やりたい放題である。信頼できるメンバーだけがログインできるクローズドな環境ならこれでもよいのだろう。
問題は忘れた頃にやってくる
問題は、こうした運用を開始すると使い勝手がよいものだから、そのまま使い続けることになって、忘れた頃に不具合が発覚するということだ。例えば、問題が発生した頃には、設定を行ったメンバーは全員転職しているとか、連絡がつかないとか、そういうことはよくある。問題が起こった時には、事情を知る人は誰もおらず、問題の解決策もわからないということだ。
また、開発環境がそのまま本番環境になってしまうこともある。rootで誰でもログインできるサーバが外部からアクセス可能なネットワークに設置されるというのは、接続された時点でアウトだ。サーバを運用している方ならsshポートに不正ログインを試みるアクセスが頻繁に行われていることを知っているだろう。そんなネットワークにこんな設定のサーバを接続したらどうなるかは想像に難くない。
そんなわけで、面倒だと思うが一般的によく言われているように、ログインするユーザーやホストごとに公開鍵認証によるログインのみを許可する設定を行うこと、公開鍵の管理をきちんと行うことがサーバを運用していくうえで大切なのだ。