前提

  • Amazon EC2 Ubuntu 22.04 で実行しています。
  • example ユーザーをパスワードなしで作成します。
  • パスワードを使った SSH ログインを禁止します。
  • example ユーザーは sudo をパスワードなしで使用できるようにします。

フロー

  1. ユーザーを作成
  2. sudo を設定
  3. SSH を設定
  4. 動作確認

ユーザーを作成

example ユーザーを作成します。

$ sudo useradd -m -s /bin/bash example
  • -m:ホームディレクトリを作成します。
  • -s:ログインシェルを指定します1

作成されたことを確認します。

$ id example
uid=1001(example) gid=1001(example) groups=1001(example)

/etc/passwd にユーザーが追加されていることも確認できます。

root:x:0:0:root:/root:/bin/bash
# ...

ubuntu:x:1000:1000:Ubuntu:/home/ubuntu:/bin/bash

# ...

+ example:x:1001:1001::/home/example:/bin/bash

各項目の意味は以下のとおりです。

項目 意味
example ユーザー名
1001 UID
1001 GID
/home/example ホームディレクトリ
/bin/bash ログインシェル

sudo を設定

example ユーザーに sudo 権限を付与し、パスワードなしで実行できるようにします。

sudo グループへ追加

sudo グループへ追加します。

$ sudo usermod -aG sudo example

追加されたことを確認します。

$ id example
uid=1001(example) gid=1001(example) groups=1001(example),27(sudo)

-aG を使用することで、既存の補助グループを保持したまま sudo グループへ追加できます。

パスワードなしで sudo を許可

Ubuntu では /etc/sudoers を直接編集するのではなく、/etc/sudoers.d/ に設定を追加する方法が推奨されています。

設定ファイルを作成します。

$ sudo visudo -f /etc/sudoers.d/example

以下を記載します。

example ALL=(ALL) NOPASSWD:ALL

Ubuntu の EC2 インスタンスでは、初期ユーザー ubuntu も同様に /etc/sudoers.d/90-cloud-init-users で設定されています。

$ sudo less /etc/sudoers.d/90-cloud-init-users
# Created by cloud-init ...

ubuntu ALL=(ALL) NOPASSWD:ALL

SSH を設定

公開鍵認証で SSH ログインできるように設定します。

前提として、ローカル環境に公開鍵・秘密鍵を作成済みとします。

example ユーザーへ切り替えます。

$ sudo -iu example

.ssh ディレクトリを作成します。

$ mkdir -m 700 ~/.ssh
$ touch ~/.ssh/authorized_keys
$ chmod 600 ~/.ssh/authorized_keys
  • 700:所有者のみディレクトリへアクセス可能
  • 600:所有者のみ authorized_keys を読み書き可能

authorized_keys に公開鍵を記載します。

所有者も確認します。

$ chown -R example:example ~/.ssh

パスワード認証を無効化

SSH のパスワード認証を無効化します。

Ubuntu 22.04 では sshd_config.d 配下に設定を追加する方法が管理しやすく推奨されています。

$ sudoedit /etc/ssh/sshd_config.d/99-local.conf

以下を記載します。

PasswordAuthentication no
PubkeyAuthentication yes
PermitRootLogin no

設定を反映します。

$ sudo systemctl reload ssh

注意

example ユーザーで秘密鍵によるログインを確認してから、既存の ubuntu ユーザーを使わない運用へ切り替えることをおすすめします。


動作確認

SSH ログイン

ローカルから接続します。

$ ssh example@<EC2のIPアドレス>

sudo の確認

$ sudo whoami

期待する結果

root

パスワード認証の確認

秘密鍵を使用せず接続した場合に、以下のようになればパスワード認証は無効になっています。

Permission denied (publickey).

以上で、example ユーザーによる公開鍵認証での SSH ログインと、パスワードなしの sudo 設定が完了です。

  1. ログインシェルはあとから usermod -s で変更できます(例:sudo usermod -s /bin/bash example)。