Linuxユーザーとグループ管理コマンド - グループ管理

# グループの作成

`groupadd` コマンドは新しいグループを作成するために使われます。

**書式**

```shell
groupadd [オプション] グループ名
```

**よく使われるオプション**
- `-f`, `--force`                     # グループが既に存在している場合でも成功として終了
- `-g`, `--gid GID`                   # 新規グループIDを指定。指定値は[GID_MIN、GID_MAX]の範囲内にしてください
- `-K`, `--key KEY=VALUE`             # /etc/login.defsのデフォルト値を使わず、指定する。例: `-K GID_MIN=100`
- `-o`, `--non-unique`                # GIDが重複するグループの作成を許可する
- `-p`, `--password PASSWORD`         # この暗号化されたパスワードを新グループに使用。/etc/gshadow内では暗号化されていない平文ではなく、暗号化後のパスワードを使用する
- `-r`, `--system`                    # システムグループを作成。CentOS 6以前: ID<500, CentOS 7以降: ID<1000

**例:**

```shell
[root@rocky8 ~]# groupadd -g 48 -r apache
[root@rocky8 ~]# getent group apache
apache:x:48:
```

```shell
# -fをつけない場合、すでにグループが存在するというメッセージが表示される
[root@rocky8 ~]# groupadd apache
groupadd: group 'apache' already exists
```

```shell
# -fをつけると直ちに処理が終了する
[root@rocky8 ~]# groupadd -f apache
```

# **グループの修正**
`groupmod` コマンドはグループ属性を変更するために使われます。

**書式**

```shell
groupmod [オプション] グループ名
```

**よく使われるオプション**
- `-g`, `--gid GID`                   # グループIDをGIDに変更
- `-n`, `--new-name NEW_GROUP`        # グループ名をNEW_GROUPに改める
- `-o`, `--non-unique`                # 重複するGIDを使用許可する
- `-p`, `--password PASSWORD`         # パスワードを(暗号化された) PASSWORDに変更

**例:**

```shell
[root@rocky8 ~]# getent group apache
apache:x:48:

[root@rocky8 ~]# groupmod -g 123 apache

[root@rocky8 ~]# getent group apache
apache:x:123:

[root@rocky8 ~]# groupmod -n apache2 apache

[root@rocky8 ~]# getent group apache2
apache2:x:123:
```

# **グループの削除**
`groupdel` コマンドはグループを削除するために使います。

**書式**

```shell
groupdel [オプション] グループ名
```

**よく使われるオプション**
- `-f`, `--force`            # ユーザーのプライマリグループであっても、グループを強制的に削除します。ただし、グループがないユーザーはログインできなくなる可能性があります。

**例:**

```shell
[root@rocky8 ~]# groupdel apache2
[root@rocky8 ~]# getent group apache2
[root@rocky8 ~]# groupdel jose
groupdel: cannot remove the primary group of user 'jose'
```

```shell
# -f を使ってユーザーがいるグループを強制削除
# 強制削除後、そのグループ名を表示する場所では、グループIDのみが表示されます。この時点で新しい同じグループIDのグループを作成すると、削除されたグループのデータが新グループに関連付けられます。
groupdel -f jose
```

# **グループメンバーとパスワードの変更**

`gpasswd` コマンドを使用して、グループのパスワードを変更したり、補助グループのメンバー関係を変更することができます。グループにパスワードが設定されていない場合、メンバーの追加はrootのみが操作できます。

**書式**

```shell
gpasswd [オプション] グループ名
```

**よく使われるオプション**
- `-a`, `--add USER`           # ユーザーをグループに追加する
- `-d`, `--delete USER`        # ユーザーをグループから削除する
- `-r`, `--delete-password`    # グループパスワードを削除する
- `-R`, `--restrict`           # グループメンバーにグループへのアクセス制限を加える
- `-M`, `--members USER,...`   # ユーザーを一括でグループに追加する
- `-A`, `--administrators ADMIN,...` # 管理者を一括で設定する

**例:**

```shell
[root@rocky8 ~]# groupadd group1
[root@rocky8 ~]# getent gshadow group1
group1:!::
```

```shell
[root@rocky8 ~]# groups jose
jose : jose
```

```shell
[root@rocky8 ~]# id jose
uid=1000(jose) gid=1000(jose) groups=1000(jose)
```

```shell
# グループに追加
[root@rocky8 ~]# gpasswd -a jose group1
Adding user jose to group group1
```

```shell
[root@rocky8 ~]# getent gshadow group1
group1:!::jose
```

```shell
[root@rocky8 ~]# groups jose
jose : jose group1
```

```shell
[root@rocky8 ~]# id jose
uid=1000(jose) gid=1000(jose) groups=1000(jose),1004(group1)
```

**例: グループパスワードの設定**

```shell
[root@rocky8 ~]# gpasswd group1
Changing the password for group group1
New Password:
Re-enter new password:
```

```shell
[root@rocky8 ~]# getent gshadow group1
group1:$6$rzTQ3ausQlnwJ7$keMsE9m3u.GeBfrOoEsFUty6hRxJbzOC4s88aE/5MTGjpvyjtYljM8tf59AvrKdbNKLL.bdcU.i/KAhXN8CbZ.::jose
```

# **グループパスワードの削除**

グループのパスワードを削除するときは、`gpasswd` コマンドを使用して `-r` オプションを指定します。

**例:**

```shell
[root@rocky8 ~]# gpasswd -r group1
Removing password for group group1.
passwd: Success
```

```shell
[root@rocky8 ~]# getent gshadow group1
group1:::jose
```

# **グループからユーザーを削除する**

ユーザーをグループから削除したいときは、`gpasswd` コマンドと `-d` オプションを利用します。

**例:**

```shell
[root@rocky8 ~]# gpasswd -d jose group1
Removing user jose from group group1
```

```shell
[root@rocky8 ~]# id jose
uid=1000(jose) gid=1000(jose) groups=1000(jose)
```

# **グループ管理者の追加と削除**

特定のユーザーをグループの管理者として設定したり削除したりできるようにするために、`gpasswd` コマンドと `-A` オプションを使用します。管理者はパスワード無しで、グループへのユーザーの追加や削除を行うことができます。

**例:**

```shell
# グループ管理者として user1 を追加
[root@rocky8 ~]# gpasswd -A user1 group1

# グループ管理者を確認
[root@rocky8 ~]# getent gshadow group1
group1::user1:jose
```

```shell
# グループ管理者から user1 を削除
[root@rocky8 ~]# gpasswd -A "" group1

[root@rocky8 ~]# getent gshadow group1
group1:::jose
```

**まとめ**

Linuxシステムでは、`groupadd`、`groupmod`、`groupdel` および `gpasswd` コマンドを使用して、グループの管理と操作を行います。これらのコマンドには様々なオプションがあり、詳細なグループ管理が可能です。