SSHのrootログインを禁止する

2018-07-25

Linuxをインストールすると初期ユーザーは”root”のみだけど、これは外部からの不正アクセスを防ぐのと合わせて、自身が誤った操作でサーバーを壊さないようにするためにも、”root”でのログインは制限した方がいい。

まずは”root”以外のユーザを作成

すでに”root”以外のユーザが存在するなら不要です。”root”しかない場合はユーザ作っておかないとSSH経由でのログインができなくなっちゃうので、まずは”root”以外のユーザを作成する。

$ adduser ユーザID

Adding user `ユーザID' ...
Adding new group `ユーザID' (1001) ...
Adding new user `yukio' (1001) with group `ユーザID' ...
Creating home directory `/home/ユーザID' ...
Copying files from `/etc/skel' ...
Enter new UNIX password:              ← パスワードを入力
Retype new UNIX password:             ← パスワードを再入力
passwd: password updated successfully
Changing the user information for ユーザID
Enter the new value, or press ENTER for the default
Full Name []:               ← ここから下はあえて設定する必要はないので全てEnter
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n] y

これで入力したユーザIDのユーザが作成されている。ちゃんとユーザが作成されているか確認する場合は、”/etc/passwd”ファイルを確認する。

$ cat /etc/passwd

作ったばかりだから一番下に追加されていると思う。最終行の一番左側に自分が入力したユーザIDが表示されていればオッケー。

今後は”root”でのログインはせずに、追加したユーザでログインして作業するようにしたいんだけど、そうするとroot権限が必要な場面で困ってしまうので、今作ったユーザにsudoでroot権限の作業ができるようにします。

“/etc/sudoers”というファイルに権限グループを追加するんだけど、今は最新バージョンのOSであれば最初から権限グループがあると思うので、先に確認をしておく。

$ cat /etc/sudoers

# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL

“sudo” か “wheel”というグループがあればそれ。odroidのOSは”sudo”グループが既にあったのでそれを利用しました。

もし、該当するグループがなかった場合は自分で追加します。”sudoers”ファイルは通常のコマンドでは編集ができないようになっているので、編集する場合は以下のコマンドで行う。

$ visudo

※”visudo”コマンドの初期エディタがUbuntuだと”nano”みたいなんだけど、「全然使い慣れていなくてよく分からん!」みたいな場合は以下のコマンドでエディタを変更できます。設定できるエディタの一覧が出てくるので、番号を入力すればそのエディタで編集ができるようになる。

$ update-alternatives --config editor

There are 8 choices for the alternative editor (providing /usr/bin/editor).

  Selection    Path                Priority   Status
------------------------------------------------------------
* 0            /usr/bin/joe         70        auto mode
  1            /bin/nano            40        manual mode
  2            /usr/bin/jmacs       50        manual mode
  3            /usr/bin/joe         70        manual mode
  4            /usr/bin/jpico       50        manual mode
  5            /usr/bin/jstar       50        manual mode
  6            /usr/bin/rjoe        25        manual mode
  7            /usr/bin/vim.basic   30        manual mode
  8            /usr/bin/vim.tiny    15        manual mode

Press  to keep the current choice[*], or type selection number: 

sudoグループに作成したユーザを追加

”sudo”グループが存在する or 作成したら、権限グループに追加する。

$ usermod -G sudo 作成したユーザID

※”wheel”の場合は”sudo”部分を”wheel”に置き換える

設定ができたらちゃんと追加されているかを確認する。

$ su - 作成したユーザID
Password:
$ sudo cat /etc/sudoers ※コマンドはなんでもいいです

エラーにならずにパスワードの確認が出ればオッケー。

rootログインを禁止する

ここまで準備できれば、”root”でログイン出来なくなっても問題ないので、rootログインを禁止に設定する。

まずは、SSH設定ファイルのバックアップ。

$ cp /etc/ssh/sshd_config /etc/ssh/sshd_config.old

バックアップが取れたら”sshd_config”ファイルを編集して、rootログインを禁止に設定する。

$ vim /etc/ssh/sshd_config

~
#LoginGraceTime 2m
PermitRootLogin yes ← この部分を"no"に変更。コメントアウトは外す。
~

変更が終わったら、余計なところを変更していないかを検出するためにも、diffで確認する。変えたつもりなくても、いつの間にか変わっていることはたまにあるので、習慣はつけておいた方がいい。人間って不便。

$ diff /etc/ssh/sshd_config.old /etc/ssh/sshd_config

続いて構文のチェック。
※実行後に何も表示されなければOK

$ sshd -t

SSHの設定を反映するため再起動

$ service sshd restart

再起動後、”root”でアクセスしてエラーになればオッケー。また、新しく作ったユーザでアクセスしてログインできるかも確認する。

リモートの場合、接続していたコンソールから”exit”せずに新しくコンソールを立ち上げて接続するか、物理的にサーバの近くで試してください。

設定間違っていた時にリモートで入れなくなるので…結構やらかすw

新しいユーザで問題なくログインできればオッケーだよ!(。・ω・)ノ゙