このセクションでは、Amazon Linux(EC2)のデフォルトユーザー(ec2-user)を未使用にすることについて紹介していきます。

Amazon Linux の OS で E2 インスタンスを立ち上げると、ec2-user というデフォルトユーザーが作成されています。デフォルトユーザーで EC2 インスタンスに接続して、sudo コマンドを実行するとパスワード無しで実行できてしまい、セキュリティ上好ましくありません。

su - コマンドでrootユーザーでログインしようとするとパスワードが要求されます
[ec2-user@ip-172-31-4-114 ~]$ su -
Password: 
Last login: Tue Aug 22 05:16:36 UTC 2023 on pts/0
[root@ip-172-31-4-114 ~]#

sudo コマンドでrootユーザーでログインしようとするとパスワードは要求されずログインできてしまいます
[ec2-user@ip-172-31-4-114 ~]$ sudo su -
Last login: Tue Aug 22 05:25:55 UTC 2023 on pts/1
[root@ip-172-31-4-114 ~]# 

ec2-userに変わるユーザーの作成

現在作成されているユーザー名とIDを確認しておきます。

[root@ip-172-31-4-114 ~]# cat /etc/passwd
ーー(省略)ーー
ec2-user:x:1000:1000:EC2 Default User:/home/ec2-user:/bin/bash
ssm-user:x:1001:1001::/home/ssm-user:/bin/bash
[root@ip-172-31-4-114 ~]# 

ここでは、ユーザーID 1002 、ruser で新規ユーザーを作成します。ユーザーは適宜変更してください。

[root@ip-172-31-4-114 ~]# useradd -u 1002 ruser
[root@ip-172-31-4-114 ~]#

wheel グループに登録されているユーザーを確認します。この時点では、新規作成されたユーザーは wheel グループには登録されていません。

[root@ip-172-31-4-114 ~]# getent group wheel
wheel:x:10:ec2-user
[root@ip-172-31-4-114 ~]# 

wheel グループ内ユーザーは、コマンド実行にパスワードが要求されるようになっていることを確認します(パスワード要求なしになっている場合には、修正する必要があります)。

[root@ip-172-31-4-114 ~]# cat /etc/sudoers
ーー(省略)ーー
## Allow root to run any commands anywhere 
root    ALL=(ALL)       ALL

ーー(省略)ーー
## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL     ← NOPASSWD: ALLの場合には、NOPASSWD: を削除してください

[root@ip-172-31-4-114 ~]# 

wheel グループに作成したユーザーを登録します。登録後、wheel グループに ruser がいることを確認します。

[root@ip-172-31-4-114 ~]# usermod -aG wheel ruser
[root@ip-172-31-4-114 ~]# 

[root@ip-172-31-4-114 ~]# getent group wheel
wheel:x:10:ec2-user,ruser
[root@ip-172-31-4-114 ~]# 

作成した ruser ユーザーで EC2 インスタンスに接続します。デフォルトは下記のユーザー名が ec2-user になっているので変更して接続してください。

ruser で接続後、sudo で root ユーザーで接続しようとした時にパスワードを要求されれば正常に動作しています。

[ruser@ip-172-31-4-114 ~]$ sudo su -

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

For security reasons, the password you type will not be visible.

[sudo] password for ruser: 
Last login: Tue Aug 22 05:36:10 UTC 2023 on pts/1
[root@ip-172-31-4-114 ~]# 

ec2-userによるSSH接続の禁止

禁止前は、ec2-user による SSH接続 ができる状態になっています。

[user@almalinux ~]$ sudo sudo ssh -i ~/.ssh/test-keypair.pem ec2-user@(ec2-パブリックIPv4 DNS)

A newer release of "Amazon Linux" is available.
  Version 2023.1.20230809:
Run "/usr/bin/dnf check-release-update" for full release and version update info
   ,     #_
   ~\_  ####_        Amazon Linux 2023
  ~~  \_#####\
  ~~     \###|
  ~~       \#/ ___   https://aws.amazon.com/linux/amazon-linux-2023
   ~~       V~' '->
    ~~~         /
      ~~._.   _/
         _/ _/
       _/m/'
Last login: Tue Aug 22 07:04:21 2023 from ***.***.***.***
[ec2-user@ip-172-31-4-114 ~]$ 

Amazon Linux の EC2 インスタンスで、sshd_config ファイルを編集します。
ファイルの最後尾に ruser の接続だけを許可する設定を一行追加します。

[ruser@ip-172-31-4-114 ~]$ sudo vi /etc/ssh/sshd_config
# Allow user 2023.8.23
AllowUsers ruser

sshd サービスを再起動し、設定を反映します。

[ruser@ip-172-31-4-114 ~]$ sudo systemctl restart sshd
[ruser@ip-172-31-4-114 ~]$ 
[ruser@ip-172-31-4-114 ~]$ sudo systemctl status sshd
● sshd.service - OpenSSH server daemon
     Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; preset: enabled)
     Active: active (running) since Tue 2023-08-22 07:00:06 UTC; 7s ago
       Docs: man:sshd(8)
             man:sshd_config(5)
   Main PID: 325332 (sshd)
      Tasks: 2 (limit: 1114)
     Memory: 2.5M
        CPU: 18ms
     CGroup: /system.slice/sshd.service
             ├─325332 "sshd: /usr/sbin/sshd -D [listener] 1 of 10-100 startups"
             └─325389 "sshd: [accepted]"

Aug 22 07:00:06 ip-172-31-4-114.ap-northeast-1.compute.internal systemd[1]: sshd.service: Deactivated successfully.
Aug 22 07:00:06 ip-172-31-4-114.ap-northeast-1.compute.internal systemd[1]: Stopped sshd.service - OpenSSH server daemon.
Aug 22 07:00:06 ip-172-31-4-114.ap-northeast-1.compute.internal systemd[1]: sshd.service: Consumed 48.968s CPU time.
Aug 22 07:00:06 ip-172-31-4-114.ap-northeast-1.compute.internal systemd[1]: Starting sshd.service - OpenSSH server daemon...
Aug 22 07:00:06 ip-172-31-4-114.ap-northeast-1.compute.internal sshd[325332]: Server listening on 0.0.0.0 port 22.
Aug 22 07:00:06 ip-172-31-4-114.ap-northeast-1.compute.internal sshd[325332]: Server listening on :: port 22.
Aug 22 07:00:06 ip-172-31-4-114.ap-northeast-1.compute.internal systemd[1]: Started sshd.service - OpenSSH server daemon.
[ruser@ip-172-31-4-114 ~]$ 

正常であれば、ec2-user での接続ができなくなります。

[user@almalinux ~]$ sudo sudo ssh -i ~/.ssh/test-keypair.pem ec2-user@ec2-52-199-246-141.ap-northeast-1.compute.amazonaws.com
[sudo] password for yuji: 
ec2-user@ec2-52-199-246-141.ap-northeast-1.compute.amazonaws.com: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
[user@almalinux ~]$ 

新規ユーザーによるSSH接続

新規ユーザー(ruser)でSSH接続できる環境を準備していきます。
新規ユーザーのホームディレクトリに .ssh フォルダがあるかどうか確認します。

[ruser@ip-172-31-4-114 ~]$ ls -la 
total 16
drwx------. 2 ruser ruser  83 Aug 22 05:34 .
drwxr-xr-x. 5 root  root   51 Aug 22 05:31 ..
-rw-------. 1 ruser ruser 914 Aug 22 08:11 .bash_history
-rw-r--r--. 1 ruser ruser  18 Jan 28  2023 .bash_logout
-rw-r--r--. 1 ruser ruser 141 Jan 28  2023 .bash_profile
-rw-r--r--. 1 ruser ruser 492 Jan 28  2023 .bashrc
[ruser@ip-172-31-4-114 ~]$ 

.ssh フォルダが無ければ、作成します。

[ruser@ip-172-31-4-114 ~]$ mkdir .ssh
[ruser@ip-172-31-4-114 ~]$ 

[ruser@ip-172-31-4-114 ~]$ chmod 700 .ssh/
[ruser@ip-172-31-4-114 ~]$ 

[ruser@ip-172-31-4-114 ~]$ ls -la 
total 16
drwx------. 3 ruser ruser  95 Aug 22 08:36 .
drwxr-xr-x. 5 root  root   51 Aug 22 05:31 ..
-rw-------. 1 ruser ruser 914 Aug 22 08:11 .bash_history
-rw-r--r--. 1 ruser ruser  18 Jan 28  2023 .bash_logout
-rw-r--r--. 1 ruser ruser 141 Jan 28  2023 .bash_profile
-rw-r--r--. 1 ruser ruser 492 Jan 28  2023 .bashrc
drwx------. 2 ruser ruser   6 Aug 22 08:36 .ssh
[ruser@ip-172-31-4-114 ~]$ 

ec2-user の環境から SSH接続で使用していた公開鍵を、新規ユーザーの環境へコピーします。
今回は、既存のキーペアを使用する前提です。新しいキーペアを使いたい場合には、新規でキーペアを作成してSSHサーバーに公開鍵、SSHクライアントに秘密鍵を配置してください。

[ruser@ip-172-31-4-114 ~]$ sudo cp -rp /home/ec2-user/.ssh/authorized_keys /home/ruser/.ssh/
[ruser@ip-172-31-4-114 ~]$ 

[ruser@ip-172-31-4-114 ~]$ sudo chown -R ruser:ruser /home/ruser/.ssh/authorized_keys 
[ruser@ip-172-31-4-114 ~]$ 

[ruser@ip-172-31-4-114 ~]$ sudo ls -la /home/ruser/.ssh
total 4
drwx------. 2 ruser ruser 29 Aug 22 08:40 .
drwx------. 3 ruser ruser 95 Aug 22 08:36 ..
-rw-------. 1 ruser ruser 94 Aug  9 12:29 authorized_keys
[ruser@ip-172-31-4-114 ~]$ 

新規ユーザー(ruser)でSSH接続できるかどうか確認します。正常であれば、この時点でSSH接続できるようになります。

[user@almalinux ~]$ sudo sudo ssh -i ~/.ssh/test-keypair.pem ruser@(ec2-パブリックIPv4 DNS)

A newer release of "Amazon Linux" is available.
  Version 2023.1.20230809:
Run "/usr/bin/dnf check-release-update" for full release and version update info
   ,     #_
   ~\_  ####_        Amazon Linux 2023
  ~~  \_#####\
  ~~     \###|
  ~~       \#/ ___   https://aws.amazon.com/linux/amazon-linux-2023
   ~~       V~' '->
    ~~~         /
      ~~._.   _/
         _/ _/
       _/m/'
Last login: Tue Aug 22 08:12:24 2023 from ***.***.***.***
[ruser@ip-172-31-4-114 ~]$ 

ec2-user の削除

完全に不要であれば、ec2-user ユーザー自体を削除します。

[ruser@ip-172-31-4-114 ~]$ sudo userdel -r ec2-user
[ruser@ip-172-31-4-114 ~]$