【Linux】ユーザ・グループ管理

Linux上でユーザ・グループの登録・削除・編集のコマンドをまとめてた。
それぞれのコマンドの説明を作るより、実際にケースに応じたコマンド操作の流れを記載した。
ユーザ5人にそれぞれグループを紐づけ登録しながら必要なコマンド・動きを確認していく。

## コマンド操作以外で理解したいこと

* コマンドはなるべく正規表現を使いシンプルに見やすく
* 設定ファイルの動きの理解（/etc/skel/配下の.bashrcのコピー）
* 設定ファイルの環境変数（デフォルトファイル/etc/default/useradd 設定ファイル）の確認
* /usr/bin/passwdのSUIDの理解(小豆本P.182)

## ユーザ・グループを作成する

【条件】
1. ユーザ名は5人（Japanese, Chinese, Korean, American, Australian）
2. 5人全員のプライマリーグループは"World"
3. Japanese, Chinese, Koreanのセカンダリグループは"Asia"
4. Americanのセカンダリグループは”North America” 
5. Australianのセカンダリグループは”Oceania, Asia"
6. Japaneseのhome dir は "/home/tokyo"とログインシェルは/bin/bash (※↓)

※Rocky Linuxデフォルトのままだとデフォルトでログインシェルは、/bin/bashだがコマンド練習のため。
環境変種・設定ファイルも以下で確認する。

### グループを先に作成

ユーザ登録する前にグループを先に作ります（World,Asia,North America, Oceania）
`groupadd`コマンドの前に、まず現状確認。

```:グループアカウントの現状確認
# grep -E ^"World|Asia|North America|Oceania" /etc/group
# 
```
（World,Asia,North America, Oceania）グループが存在しないことを確認。

`groupadd`コマンドでグループを作成する。

```:グループ作成
[root@localhost ~]# groupadd World
[root@localhost ~]# groupadd Asia
[root@localhost ~]# groupadd North America
使い方: groupadd [オプション] GROUP

オプション:
  -f, --force                   グループがすでに存在していたら正常終了します。
                                また GID が既に用いられていたら -g をキャンセル
                                します
  -g, --gid GID                 この新規グループに GID を用います
  -h, --help                    このヘルプを表示して終了する
  -K, --key KEY=VALUE           /etc/login.defs のデフォルトより優先される
  -o, --non-unique              同じ GID を持つ複数のグループの作成を
                                許可します
  -p, --password PASSWORD       新規グループにこの暗号化済パスワードを用いる
  -r, --system                  システムアカウントを作成します
  -R, --root CHROOT_DIR         chroot するディレクトリ
  -P, --prefix PREFIX_DIR       directory prefix

[root@localhost ~]# groupadd NorthAmerica
[root@localhost ~]# groupadd Oceania

```
※上記の「North Amrica」の様にグループ名内のスペースは弾かれます。

### ユーザアカウント作成
`useradd`コマンドの前に、まず現状確認。

```:ユーザアカウントの現状確認
[root@localhost ~]# grep -E ^"Japanese|Chinese|Korean|American|Australian" /etc/passwd
[root@localhost ~]# 
```
同じユーザ名がないことを確認。
それぞれのユーザのプライマリーグループ・セカンダリグループ/ホームディレクトリの指定などオプションを
使ってアカウント作成していく。

※長いので今回はJapaneseの一個だけアカウント作ります。

```:ユーザアカウント作成
[root@localhost ~]# useradd -g World -G Asia -s /bin/bash -d /home/tokyo Japanese
[root@localhost ~]# passwd Japanese 
ユーザー Japanese のパスワードを変更。
新しいパスワード:
よくないパスワード: このパスワードには一部に何らかの形でユーザー名が含まれています。
新しいパスワードを再入力してください:
passwd: すべての認証トークンが正しく更新できました。
[root@localhost ~]# 
```
Japaneseという名前のユーザアカウントを条件に従って作成。
同アカウントのホームディレクトリ配下は以下の様になっている。

```:/etc/home配下
[root@localhost ~]# ls -la /home/tokyo/
合計 12
drwx------.  3 Japanese World  78 10月 23 19:24 .
drwxr-xr-x. 19 root     root  232 10月 23 19:24 ..
-rw-r--r--.  1 Japanese World  18  8月  2 16:41 .bash_logout
-rw-r--r--.  1 Japanese World 141  8月  2 16:41 .bash_profile
-rw-r--r--.  1 Japanese World 376  8月  2 16:41 .bashrc
drwxr-xr-x.  4 Japanese World  39  9月 26 08:21 .mozilla
```

これらの隠しファイルは、新規ユーザーアカウントが作成されると、その都度/etc/skel以下のファイルが
自動的に新規ユーザのホームdir内に作成される仕組みになってる.
ログインシェルであろうが、対話型シェルであろうが`.bashrc`ファイルは、ユーザ作成した際に
必ず読み込まれるのでここで環境変数やエイリアスを定義しておくと非常に便利。

### ユーザーアカウント確認
作成したユーザのユーザアカウント・グループ・パスワードが格納されているファイルを
正規表現で`{passwd,group,shadow}`で見やすく書く。

```:/etc/group/shadow
# tail -n 1 /etc/{passwd,group,shadow}
==> /etc/passwd <==
Japanese:x:1017:1015::/home/tokyo:/bin/bash

==> /etc/group <==
Oceania:x:1018:

==> /etc/shadow <==
Japanese:$6$0XWdvS6TYlGykoh/$blom2WMksAjqMH8RqLKglAjuKfdkih7KAEDEknSWVI6aomQ8t55Qx0ZBl1sMWg4ud8HYaafdRlHAwS8biQev0.:19288:0:99999:7:::

```

### /etc/default/useradd 設定ファイルに関して

`useradd`コマンドは都度以下の設定ファイルからデフォルト値を参照している。

```:/etc/default/useradd
# cat -n /etc/default/useradd
     1	# useradd defaults file
     2	GROUP=100
     3	HOME=/home
     4	INACTIVE=-1
     5	EXPIRE=
     6	SHELL=/bin/bash
     7	SKEL=/etc/skel
     8	CREATE_MAIL_SPOOL=yes
     9	
```
この設定ファイルの環境変数で`SHELL=/bin/bash`と定義されているため
`useradd -s`オプションでデフォルトシェル指定する必要がない。

プライマリー・セカンダリーグループの紐づけは必要な時に都度追加編集予定