EC2 amazon linux2 rootにスイッチする方法を検証してみた

# はじめに
EC2 AL2のデフォルト設定ではrootにスイッチできないということがありました。
そのため、記事にまとめました。

※amazon linux2のことをAL2と記載させて頂きます。

**rootにスイッチするには2パターンあります。**

rootのパスワードを入力してrootにスイッチする
AL2ではデフォルトでrootユーザーのパスワード設定をしていません。
```
$ su -
```

ログインユーザーのパスワードを入力してrootにスイッチする
※上記の場合はwheelグループに所属している必要があります。
```
$ sudo su -
```

# 検証した結果
## su -でrootにスイッチする場合
**AL2のrootユーザーはデフォルトではパスワード設定する必要があります**
そのため、su -でrootにスイッチする際は、rootユーザーのパスワードの入力が求められるため、
パスワード設定をする必要があります。

AL2のデフォルトのrootユーザーの設定を以下に貼りました。
※以下はec2-userでsudo su -してrootにスイッチして作業しました。
```
[root@ip-10-0-23-181 ~]#cat /etc/passwd | grep root
root:x:0:0:root:/root:/bin/bash

※パスワードが設定されていません。
[root@ip-10-0-23-181 sudoers.d]# cat /etc/shadow | grep root
root:*LOCK*:14600::::::
```
パスワードを設定しました
```
[root@ip-10-0-23-181 ~]# passwd root
Changing password for user root.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
```

rootへスイッチした際のコマンドは以下です。
```
[ec2-user@ip-10-0-23-181 ~]$ su -
Password:
Last login: Mon Apr 10 23:51:51 UTC 2023 on pts/0
[root@ip-10-0-23-181 ~]#　※rootにスイッチしました。
```

## sudo su -でrootにスイッチする場合

以下のサイトが参考になりました。
https://ex1.m-yabe.com/archives/5233

**wheelグループに所属しているため、ec2-userはデフォルトでsudo su -が可能です**
```
root@ip-10-0-23-181 ~]# id ec2-user
uid=1000(ec2-user) gid=1000(ec2-user) groups=1000(ec2-user),4(adm),10(wheel),190(systemd-journal)
```

testユーザーを新規で作成しました。
```
[root@ip-10-0-23-181 sudoers.d]# useradd test
[root@ip-10-0-23-181 sudoers.d]#
[root@ip-10-0-23-181 sudoers.d]# passwd test
Changing password for user test.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
```
testユーザーはwheelグループに所属していません。
```
[root@ip-10-0-23-181 ~]# id test
uid=1002(test) gid=1002(test) groups=1002(test)
```

sudoersの設定ファイルを確認したところ、wheelグループは許可されています。
```
[root@ip-10-0-23-181 sudoers.d]# cat /etc/sudoers | grep -v "^#" | grep -v "^$"
Defaults   !visiblepw
Defaults    always_set_home
Defaults    match_group_by_gid
Defaults    always_query_group_plugin
Defaults    env_reset
Defaults    env_keep =  "COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS"
Defaults    env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE"
Defaults    env_keep += "LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES"
Defaults    env_keep += "LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE"
Defaults    env_keep += "LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY"
Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin
root    ALL=(ALL)       ALL
%wheel  ALL=(ALL)       ALL
```


testユーザーでsudo してみたところ、以下のメッセージが出てsudo出来ませんでした。
```
[test@ip-10-0-23-181 ~]$ 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.

[sudo] password for test:
test is not in the sudoers file.  This incident will be reported.
```
testユーザーをwheelグループに所属させました。
```
[root@ip-10-0-23-181 ~]# usermod -aG wheel test
```
グループにwheelが入っていることを確認しました。
```
[root@ip-10-0-23-181 ~]# id test
uid=1002(test) gid=1002(test) groups=1002(test),10(wheel)
```
testユーザーからrootへsudo出来ました。
```
[test@ip-10-0-23-181 ~]$ sudo su -
[sudo] password for test:　※testユーザーのパスワード入力
Last login: Mon Apr 10 23:53:34 UTC 2023 on pts/0
```
# まとめ
AWS EC2でrootにスイッチする方法が2つあることが分かりました。
su -はrootユーザーのパスワード入力し、sudo su -はログインユーザーのパスワード入力することが分かりました。
私は普段sudo su -を使用しています。基本的なことのため、このあたりの知識はしっかりつけたいです。

ログインできない場合は、ログイン出来るユーザーでSSH接続して「/var/log/secure」のユーザー認証時に出力されるログをみると、
認証失敗のエラーが出ているため、確認が必要です。