Ubuntuのユーザー設定

# はじめに
VPS導入後、Ubuntu24.04のデフォルト状態ではSSH接続ができずに躓きかけたので、基本的な設定のメモ。
また、UTMが存在するLANから接続する場合、ファイアウォール設定(SSL)でフィルタリングされてしまうので注意

# 環境  
Ubuntu24.04

# rootユーザー  
SSH接続時にrootユーザーは原則NGと考えてください。  
Ubuntu24.04のデフォルト設定ではrootユーザーでパスワード認証できないようになっています  
```diff_shell:VPS
root@xXXX-XX-XX-XXX:~# vim /etc/ssh/sshd_config  

# 36行目：コメント解除して[no]に変更するとrootログイン一切禁止します  
# [prohibit-password]はパスワード認証を禁止します
PermitRootLogin prohibit-password

# 変更後はsshを再起動  
root@xXXX-XX-XX-XXX:~# systemctl restart ssh  
```

# 一般ユーザー  
SSH接続するために、一般ユーザーを追加します。また、各種コマンド実行のため、sudoの権限設定を行います。

### ユーザー追加
```diff_shell:VPS
# ユーザー追加
# adduserとuseraddコマンドの間違いに注意。  
# useraddの場合、-mオプションでユーザーのホームディレクトリが存在しない場合、作成する。  
root@xXXX-XX-XX-XXX:~# useradd -m 新しいユーザー名 

# パスワード設定  
root@xXXX-XX-XX-XXX:~# passwd 新しいユーザー名  
ユーザー 新しいユーザー名 のパスワードを変更。  
新しいパスワード:  
新しいパスワードを再入力してください:  
passwd: すべての認証トークンが正しく更新できました。  
```

### ユーザー一覧  
```diff_shell:VPS
root@xXXX-XX-XX-XXX:~# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
～～～～～
（省略）
～～～～～
NEWUSERNAME:x:USERID:GROUPID::/home/NEWUSERNAME:/bin/bash
```
```/etc/passwd```は```:```区切りで下記情報を保持しています

| | 項目 | 作成された情報 |
| ---- | ---- | ---- |
| 1 | ユーザー名 | NEWUSERNAME |
| 2 | ダミーパスワード | x |
| 3 | ユーザーID | USERID |
| 4 | グループID | GROUPID |
| 5 | コメント | (空) |
| 6 | ホームディレクトリ | /home/NEWUSERNAME |
| 7 | ログインシェル | /bin/bash |

### パスワード一覧  
```diff_shell:VPS
root@xXXX-XX-XX-XXX:~# cat /etc/shadow  
root:$6$n.LBF.Pi$pGDNeMrJNjOgXlcjQdguA/tZTryDlrDR2LCYgCrlT3KDpAu55nGmoh.4.OHlVL0zDw/YQlpV4HM6zzKCd2hQH.:18307:0:99999:7:::
～～～～～
（省略）
～～～～～
NEWUSERNAME:$6$rwTX74Ir$YhhyryrTsbKdlAIWMKJqRQoQsK1TgelnQmHSpGmCDoXiGWQeQLTDtD73FEGur6tw5wZ50SbBo2QNVKEQUDcpV0:1830:0:99999:7:::
```
```/etc/shadow```は```:```区切りで下記情報を保持しています

| | 項目 | 作成された情報 |
| ---- | ---- | ---- |
| 1 | ユーザー名 | NEWUSERNAME |
| 2 | パスワード | (ハッシュ値) |
| 3 | 最終パスワード変更日 | 1830(UNIXエポックタイムから経過日数) |
| 4 | パスワード変更可能日数 | 0 |
| 5 | パスワード有効期限 | 99999 |
| 6 | パスワード変更期間警告通知日 | 7 |
| 7 | アカウント無効日数 | (空) |
| 8 | アカウント有効期限 | (空) |
| 9 | 予約フィールド | (空) |

### グループ一覧  
```diff_shell:VPS
root@xXXX-XX-XX-XXX:~# cat /etc/group
root:x:0:
～～～～～
（省略）
～～～～～
NEWUSERNAME:x:1002:
```
```/etc/shadow```は```:```区切りで下記情報を保持しています

| | 項目 | 作成された情報 |
| ---- | ---- | ---- |
| 1 | ユーザー名 | NEWUSERNAME |
| 2 | ダミーパスワード | x |
| 3 | グループID | GROUPID |
| 4 | サブグループとして所属しているユーザー<br>(複数の場合はカンマ区切り) | (空)

### sudo権限設定  
```/etc/sudoers```を編集してsudo権限を設定します。  
sudoersファイルを安全に編集するために```visudo```コマンドを利用します。  
visudoは同時編集が発生しないようにsudoersファイルをロックします。```visudo```を実行している間はロックファイルとして```/etc/sudoers.tmp```が作成されています
```diff_shell:VPS
root@xXXX-XX-XX-XXX:~# visudo
# sudoers file.
#
# This file MUST be edited with the 'visudo' command as root.
#
# See the sudoers man page for the details on how to write a sudoers file.
#

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root    ALL=(ALL) ALL
+ ユーザー名    ALL=(ALL) ALL
```

# SSH接続  
windowsコマンドプロンプト または Teraterm などを利用してSSH接続が可能です。  
パスワード認証を一時的に有効化し、公開鍵を```~/.ssh/authorized_keys```に配置して公開鍵認証を有効化したらパスワード認証は再度無効化してください

### 認証鍵作成
Ubuntu22以降Open SSHが8.8となり、RSAが初期で無効化され、通常ではRSAの鍵は使用できなくなりました。```-t```オプションを付けてアルゴリズムを指定します。
```diff_shell:Client
C:\Users\username> ssh-keygen -t ed25519
Generating public/private ed25519 key pair.
# 保存ファイルフルパスを入力します
Enter file in which to save the key (C:\Users\GVDKUGR/.ssh/id_ed25519):
# パスフレーズを設定しない場合は何も入力せずにEnterキー
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
```

### パスワード認証有効化(一時的)  
公開鍵配置のため、一時的にパスワード認証を有効化します
```diff_shell:VPS
# パスワード認証有効化
root@xXXX-XX-XX-XXX:~# vim /etc/ssh/sshd_config
- #PasswordAuthentication yes
+ PasswordAuthentication yes

# ssh再起動
root@xXXX-XX-XX-XXX:~# systemctl restart ssh
```

### 公開鍵設定
```diff_shell:Client
# ssh接続(パスワード認証)
C:\Users\username> ssh ユーザー名@IPアドレスまたはホスト名
ユーザー名@IPまたはホスト名 password:
Welcome to Ubuntu 24.04 LTS (GNU/Linux 6.8.0-49-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro
~~~
(省略)
~~~
This key is not known by any other names.
# 初回起動時は接続の確認があるので[yes]と入力してください
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes 
~~~
(省略)
~~~
Last login: Fri Dec  6 22:34:29 2024 from 61.24.84.42

# ディレクトリ作成・パーミッション設定
username@xXXX-XXX-XXX-XXX:~$ cd ~/.ssh
username@xXXX-XXX-XXX-XXX:~$ chmod 700 .ssh
```

```diff_shell:Client
# 公開鍵転送
C:\Users\username> scp 公開鍵のファイルパス ユーザー名@IPまたはホスト名:~/.ssh/authorized_keys(転送先ファイルパス)
```
```diff_shell:VPS
# 公開鍵のパーミッション設定
username@xXXX-XXX-XXX-XXX:~$ chmod 600 ~/.ssh/authorized_keys
```
※他の公開鍵が設定済みの場合、上書きされてしまうので他の方法での公開鍵転送を検討してください。

### パスワード認証無効化/公開鍵認証有効化
```diff_shell:VPS
# パスワード認証無効化
root@xXXX-XX-XX-XXX:~# vim /etc/ssh/sshd_config
- #PubkeyAuthentication yes
- #AuthorizedKeysFile      .ssh/authorized_keys .ssh/authorized_keys2
+ PubkeyAuthentication yes
+ AuthorizedKeysFile      .ssh/authorized_keys .ssh/authorized_keys2
- PasswordAuthentication yes
+ PasswordAuthentication no

# ssh再起動
root@xXXX-XX-XX-XXX:~# systemctl restart ssh
```

### ssh接続
```diff_shell:Client
# ssh接続(公開鍵認証)
C:\Users\username> ssh -i .\.ssh\公開鍵 ユーザー名@IPアドレスまたはホスト名
```

# 参考文献  
### rootユーザー
>参考：[Ubuntu 23.04 _ OpenSSH _ パスワード認証 _ Server World](https://www.server-world.info/query?os=Ubuntu_23.04&p=ssh&f=1)
### 一般ユーザー
>参考：[Ubuntuでユーザーの確認・追加・削除・sudoに追加](https://qiita.com/RYOSKATE/items/81b564b2ab281ec7f27d)
### 一般ユーザー/sudo権限設定
>参考：[visudoコマンドでsudoersファイルを編集する](https://qiita.com/buntafujikawa/items/0083b8aa1bd0e97748aa)  
>参考：[root用コマンドを特定ユーザーが実行できるようにするには](https://atmarkit.itmedia.co.jp/flinux/rensai/linuxtips/221rootcomuse.html)
### SSH接続
>参考：[Ubuntu 24.xでSSHの認証鍵を設定する方法 _ 株式会社大塚ビジネスサービス](https://www.otsuka-bs.co.jp/web-creation/blog/archive/20240909-02.html)