未来を変える日記

システム自主開発とトライアスロン

Rootログイン、パスワードログインの禁止設定

 これまでインストールしたUbuntuに別PCからSSH接続し、さらにセキュリティ設定として、鍵認証によるログイン設定を行いました。今回もその続きのセキュリティ設定になります。

www.masa-nakajima.com

目次

認証設定の変更について

 前回記事で鍵認証でログインできるようになりました。しかし、このままですと従来のパスワード方式のログインも通ってしまいます。
 そこで、認証設定を変更し、、、

  1. rootログインを禁止しておきます。
  2. パスワードによるログインも禁止します。

f:id:corgi-eric:20201103100556p:plain

rootログイン?

 Linuxの管理者アカウントがrootユーザーになります。
 上に描いた概要図の一番上ですが、root@[IP Address] でログイン試行が可能だと、その後の関所はパスワードしかありませんので、総当たり攻撃(Brute Force Attach)に晒されるリスクが出てきます。従って、先ずは、root でのログインは不許可とします。root 権限が必要な操作は、鍵認証でのログイン後にLinux内のsudo コマンドでその都度、管理者権限のパスワードを確認するという方式に切り替えておくのです。

sudoコマンド利用イメージ

 下の絵は理解のためのイメージです。

f:id:corgi-eric:20201103102317p:plain

 先ず、鍵認証でログイン。「Welcome to Ubuntu」の表示でログインを確認できたら、管理者権限で更新プログラムの確認(apt update)を行っています。このようにコマンド(apt update)の前に sudo をつけると、パスワードが問われ、入力してやることで、rootでなくても管理者権限でLinuxを操作できます。
 Windowsでいうところの、これ(管理者として実行)ですね ( ´艸`)

f:id:corgi-eric:20201103102721p:plain

一般アカウントの作成

 rootログインを禁止する前に、今後利用する一般アカウントを作成しておく必要があります。当方がLenovo PCへ導入したDesktop版では、インストール作業時にアカウントも同時に作成する流れになりますが、その後に契約したVPS(Digital Ocean)には、当初、rootしかなく、自身で必要なアカウントを作成してやる必要がありました。

先ず今のアカウントを確認する

 今、自分がrootなのか?一般ユーザーなのか?どこから接続していることになっているのか?他にもログインしている人がいるのか?そう言った疑問は、下の3つのコマンドで解決できます。

$ who #今ログインしてるアカウント名を表示する(自分以外のログインユーザーも表示)
$ whoami #今ログインしてる自分のアカウント名を表示する
$ w #今ログインしてるアカウント名と接続元のIPアドレスを表示する

登録ユーザーの一覧を確認する

 既に登録済みのユーザーは次のコマンドで確認できます。所で、cat は、concatenate(繋げる)の略で、ファイルの接続に用いるコマンドですが、実際には表示する用途に使われることが多いそうです。

$ cat /etc/passwd

 表示される情報の読み方については、本記事では省略致しますが、当方が確認したのは以下の項目。

  1. 謎ユーザーは居ないか?
  2. パスワードがシャドウ化されているか?

 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ユーザーを無効にします。

設定変更作業

 さて、これまでの記事で以下の内容を記載しています。

  1. rootログイン、パスワードログインの禁止イメージを掴む。
  2. 管理権限の持つユーザーを追加し、追加ユーザーに切り替える

 ここから実際の設定変更作業に入ります。
 ・・・と、まだ覚えることがありました。

viエディタ

 設定変更作業に必須となるviエディタです。
 Windowsでいう所のメモ帳に相当するソフトで、主には設定ファイルを弄る用途に使います。

f:id:corgi-eric:20201103112939p:plain

起動してみる

 先ずは、viエディタを起動し、SSHの設定ファイルを開きます。

$ sudo vi /etc/ssh/sshd_config

f:id:corgi-eric:20201101204808p:plain

 viエディタは、メモ帳と違って、コマンドで動かします。とりあえず、上のスクショの通りで当方の環境では画面が凄く見ずらい。。。ので、

 :syntax off

 モノクロ表示にしてやります。デフォルト色設定を変更すれば、毎回上のコマンド打たなくても済みそうですが、今は気にしません。

f:id:corgi-eric:20201101205108p:plain

使い方

 コマンドモードでカーソルを動かして、入力モードで記述して、コマンドモードに戻って保存する流れです。他にも機能沢山ありますが、ここでは設定変更作業を急ぎます。

 コマンドモード
  カーソルキー カーソルを動かす
  Ctrl + u 半画面上げ
  Ctrl + d 半画面下げ
  x カーソルの文字を削除
  X カーソルの直前の文字を削除
  i カーソル位置から入力モード
  a カーソル右から入力モード
  :q 書き込み無しで保存
  :wq 書き込みして保存
 入力モード
  Esc コマンドモードに戻る

 

ようやく設定変更

 viエディタを使い、/etc/ssh/sshd_config を開き、次の4行について設定を見直します。設定の見直しとは、yes / noの修正、#(コメントアウト記号)の削除のことです。

PermitRootRogin no 
PubkeyAuthentication yes 
PasswordAuthentication no 
PermitEmptyPassword no

 それぞれの行の意味は上から順に・・・

  1. Rootログインの禁止
  2. 鍵認証方式の有効化
  3. パスワード認証の禁止
  4. 空パスワードの禁止

となります。
 設定変更後、SSHDを再起動します。

# sudo systemctl restart sshd

 

確認作業

 下のスクショは、Root@IP addressのログイン(上)と、Username@IP address(キー無し)で認証を試みた所です。
f:id:corgi-eric:20201103133031p:plain

 いずれも、サーバー側からの応答はPermission denied(publickey)。無事にrootログイン、パスワードログインを禁止することができました。