これまでインストールしたUbuntuに別PCからSSH接続し、さらにセキュリティ設定として、鍵認証によるログイン設定を行いました。今回もその続きのセキュリティ設定になります。
認証設定の変更について
前回記事で鍵認証でログインできるようになりました。しかし、このままですと従来のパスワード方式のログインも通ってしまいます。
そこで、認証設定を変更し、、、
- rootログインを禁止しておきます。
- パスワードによるログインも禁止します。
rootログイン?
Linuxの管理者アカウントがrootユーザーになります。
上に描いた概要図の一番上ですが、root@[IP Address] でログイン試行が可能だと、その後の関所はパスワードしかありませんので、総当たり攻撃(Brute Force Attach)に晒されるリスクが出てきます。従って、先ずは、root でのログインは不許可とします。root 権限が必要な操作は、鍵認証でのログイン後にLinux内のsudo コマンドでその都度、管理者権限のパスワードを確認するという方式に切り替えておくのです。
sudoコマンド利用イメージ
下の絵は理解のためのイメージです。
先ず、鍵認証でログイン。「Welcome to Ubuntu」の表示でログインを確認できたら、管理者権限で更新プログラムの確認(apt update)を行っています。このようにコマンド(apt update)の前に sudo をつけると、パスワードが問われ、入力してやることで、rootでなくても管理者権限でLinuxを操作できます。
Windowsでいうところの、これ(管理者として実行)ですね ( ´艸`)
一般アカウントの作成
rootログインを禁止する前に、今後利用する一般アカウントを作成しておく必要があります。当方がLenovo PCへ導入したDesktop版では、インストール作業時にアカウントも同時に作成する流れになりますが、その後に契約したVPS(Digital Ocean)には、当初、rootしかなく、自身で必要なアカウントを作成してやる必要がありました。
先ず今のアカウントを確認する
今、自分がrootなのか?一般ユーザーなのか?どこから接続していることになっているのか?他にもログインしている人がいるのか?そう言った疑問は、下の3つのコマンドで解決できます。
$ who #今ログインしてるアカウント名を表示する(自分以外のログインユーザーも表示) $ whoami #今ログインしてる自分のアカウント名を表示する $ w #今ログインしてるアカウント名と接続元のIPアドレスを表示する
登録ユーザーの一覧を確認する
既に登録済みのユーザーは次のコマンドで確認できます。所で、cat は、concatenate(繋げる)の略で、ファイルの接続に用いるコマンドですが、実際には表示する用途に使われることが多いそうです。
$ cat /etc/passwd
表示される情報の読み方については、本記事では省略致しますが、当方が確認したのは以下の項目。
- 謎ユーザーは居ないか?
- パスワードがシャドウ化されているか?
2番目のパスワードシャドウ化については、セキュリティ対策の一つです。一般ユーザーログイン後にパスワードファイルが解析されないように、データーを見られないようにする設定です。ですが、今回導入したUbuntu 20.04 LTSでは初期からシャドウ化されていたため、設定作業は不要でした(参考記事)。
アカウントの追加
一通りの確認作業を終えたら必要なアカウントを追加します。
$ sudo adduser USERNAME sudo $ id USERNAME $ su USERNAME $ sudo passwd -dl root
一行目がアカウント追加。USERNAMEは作成するアカウント名に置き換えます。最後のsudoでsudoグループに追加され、前述した管理者権限でのコマンド実行ができるようになります。
二行目で追加したアカウントの所属グループを確認します。uid=1000, 27(sudo) とあれば、管理者権限を付与されたアカウントとして追加されてます。suコマンドで追加アカウントに切り替え、最後のコマンドでrootユーザーを無効にします。
設定変更作業
さて、これまでの記事で以下の内容を記載しています。
- rootログイン、パスワードログインの禁止イメージを掴む。
- 管理権限の持つユーザーを追加し、追加ユーザーに切り替える
ここから実際の設定変更作業に入ります。
・・・と、まだ覚えることがありました。
viエディタ
設定変更作業に必須となるviエディタです。
Windowsでいう所のメモ帳に相当するソフトで、主には設定ファイルを弄る用途に使います。
起動してみる
先ずは、viエディタを起動し、SSHの設定ファイルを開きます。
$ sudo vi /etc/ssh/sshd_config
viエディタは、メモ帳と違って、コマンドで動かします。とりあえず、上のスクショの通りで当方の環境では画面が凄く見ずらい。。。ので、
:syntax off
モノクロ表示にしてやります。デフォルト色設定を変更すれば、毎回上のコマンド打たなくても済みそうですが、今は気にしません。
使い方
コマンドモードでカーソルを動かして、入力モードで記述して、コマンドモードに戻って保存する流れです。他にも機能沢山ありますが、ここでは設定変更作業を急ぎます。
コマンドモード カーソルキー カーソルを動かす Ctrl + u 半画面上げ Ctrl + d 半画面下げ x カーソルの文字を削除 X カーソルの直前の文字を削除 i カーソル位置から入力モード a カーソル右から入力モード :q 書き込み無しで保存 :wq 書き込みして保存 入力モード Esc コマンドモードに戻る
ようやく設定変更
viエディタを使い、/etc/ssh/sshd_config を開き、次の4行について設定を見直します。設定の見直しとは、yes / noの修正、#(コメントアウト記号)の削除のことです。
PermitRootLogin no PubkeyAuthentication yes PasswordAuthentication no PermitEmptyPasswords no
それぞれの行の意味は上から順に・・・
- Rootログインの禁止
- 鍵認証方式の有効化
- パスワード認証の禁止
- 空パスワードの禁止
となります。
設定変更後、SSHDを再起動します。
# sudo systemctl restart sshd
確認作業
下のスクショは、Root@IP addressのログイン(上)と、Username@IP address(キー無し)で認証を試みた所です。
いずれも、サーバー側からの応答はPermission denied(publickey)。無事にrootログイン、パスワードログインを禁止することができました。