Linux-ユーザーとグループ

# ユーザーとグループの主要な設定ファイル

1. ユーザーとグループの主要な設定ファイル
   - `/etc/passwd`：ユーザーとその属性情報（名前、UID、主グループIDなど）
   - `/etc/shadow`：ユーザーのパスワードと関連する属性
   - `/etc/group`：グループとその属性情報
   - `/etc/gshadow`：グループのパスワードと関連する属性

2. passwdファイルの形式
   ```shell
   whatis passwd
   openssl-passwd (1ssl) - パスワードハッシュの計算
   passwd (1) - ユーザーの認証トークンの更新
   passwd (5) - パスワードファイル

   man 5 passwd # ヘルプマニュアルを参照
   ```

   ### ファイル形式
   ```
   # ログイン名:パスワード:UID:GID:GECOS:ディレクトリ:シェル
   ```
   - **説明：**
     -`ログイン名` # ログインユーザー名
     - `パスワード` # パスワード位置、`x`はプレースホルダーで、空にできます
     - `UID` # ユーザーID、0はスーパーアドミニストレーターを意味します
     - `GID` # 所属グループID
     - `GECOS` # ユーザーのフルネームまたはコメント、説明情報、空にできます
     - `ディレクトリ` # ユーザーのホームディレクトリ、ユーザー作成時にデフォルトで`/home`ディレクトリ下に作成されます
     - `シェル` # ユーザーのデフォルトシェル、`/sbin/nologin`はログイン不要のシェルを意味します。通常`chsh`コマンドで変更します（例：`chsh -s /bin/csh mage`）

   ### 例
   ```
   root:x:0:0:root:/root:/bin/bash
   ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
   moore:x:1002:1002::/home/mage:/bin/bash
   ```

   ### ユーザーシェルの変更
   ```shell
   [root@rocky8 ~]# getent passwd jose
   jose:x:1000:1000:jose:/home/jose:/bin/bash
   [root@rocky8 ~]# chsh -s /bin/sh jose
   Changing shell for jose.
   Shell changed.
   [root@rocky8 ~]# getent passwd jose
   jose:x:1000:1000:jose:/home/jose:/bin/sh
   ```

3. shadowファイルの形式
   このファイルにはユーザーパスワード情報が保存されており、すべてのユーザはアクセス権限を持っていません。
   ```shell
   [root@rocky8 ~]# ll /etc/shadow
   ----------. 1 root root 1426 Jun 25 11:35 /etc/shadow
   ```

   ```shell
   whatis shadow
   shadow (5) - シャドー化されたパスワードファイル
   shadow (3) - 暗号化パスワードファイルルーチン

   man 5 shadow
   ```

   ### ファイル形式
   ```
   # ログイン名:暗号化パスワード:最終パスワード変更日:最小パスワード期間:
   最大パスワード期間:パスワード警告期間:パスワード非活動期間:
   アカウント失効日:予約フィールド
   ```
   - **説明：**
     - `ログイン名` # ログインユーザー名
     - `暗号化パスワード` # 暗号化されたパスワード、通常は`sha512`で暗号化されます。空にできます。`!`はそのユーザーがシステムにログインできないことを意味し、アカウントがロックされています
     - `最終パスワード変更日` # 最後にパスワードを変更した日付は1970年からの通算日です。0は次回ログイン後にパスワードを変更する必要があることを意味します。空はパスワード有効期限機能が無効であることを意味します
     - `最小パスワード期間` # 現在のパスワードが最短何日間使用できるかを意味します。0はいつでも変更可能です
     - `最大パスワード期間` # 現在のパスワードが最長で何日間使用できるかを意味します。99999は常に使用可能です
     - `パスワード警告期間` # パスワードが失効する何日前からユーザーに警告するかです。デフォルトは7日です
     - `パスワード非活動期間` # パスワードが失効してからアカウントがロックされるまでの日数です。この期間中にもユーザーはログインできます。空はこの規則が使用されていないことを意味します
     - `アカウント失効日` # 1970年1月1日から失効するまでの日数です。空は永遠に失効しないことを意味します
     - `予約フィールド` # 保留フィールドで無意味です

   ### 例
   ```
   root:$6$lwdNTBEpfKFnUipo$Zm4JTG7vVVg6lJaMJ7sPTqmbc/I6GGMIjp7yO.rd6TsKb0lEeRHn4q7Z
   /LWJvV/FAWgTJVta9Gd78NPVNfld.1::0:99999:7:::
   ftp:*:18700:0:99999:7:::
   jose:$6$Cvfl7WE8khYDd/xb$4pNMm.C46MEOUElWyFbRvO2FcGFv/a.EdD9rtWa0jvZdoThq8spMGw4
   rPbcQzqsY99hW3aImVK4SPR/KJaoSh0:19168:0:99999:7:::
   ```

   > **注：** すべての擬似ユーザーのパスワードは "!!" または "*" で、パスワードが設定されておらずログインできないことを意味します。新規ユーザーがまだパスワードを設定していない場合は !!、アカウントを無効にするには、パスワードフィールドの前に `!` を直接追加します。

4. groupファイルの形式
   ```shell
   man group
   ```

   ### ファイル形式
   ```
   # グループ名:パスワード:GID:ユーザーリスト
   ```
   - **説明：**
     - `グループ名` # グループ名
     - `パスワード` # グループパスワード、ユーザーがグループに加入するときにこのパスワードで認証が必要です
     - `GID` # グループID
     - `ユーザーリスト` # カンマで区切られたユーザーリスト、これらのユーザーはこのグループを補助グループとしています

   ### 例
   ```
   ftp:x:50:
   mage:x:1002:
   ```

5. gshadowファイルの形式
   ```shell
   man gshadow
   ```

   ### ファイル形式
   ```
   # グループ名:暗号化パスワード:アドミニストレータ:メンバー
   ```
   - **説明：**
     - `グループ名` # グループ名
     - `暗号化パスワード` # 暗号化されたグループパスワード。`!` はまだパスワードが設定されていないことを意味します
     - `アドミニストレータ` # グループの管理者
     - `メンバー` # カンマで区切られたユーザーリスト、これらのユーザーはこのグループを補助グループとしています

   ### 例
   ```
   ftp:::
   mage:!::
   ```

6. ファイル操作
   上記のファイルは直接エディタで変更することができますが、ユーザーと権限に関わるファイルなので、システムにはこれらを変更するための専用ツールが用意されています。

   - `vipw` および `vigr` は `/etc/passwd`、 `/etc/group`、 `/etc/shadow`、 `/etc/gshadow` の編集に使用されます。
   - `pwck` および `grpck` はユーザー設定ファイルおよびグループ設定ファイルの検証に使用されます。
   - `pwck` のオプション:
     - `-q|--quiet`: エラーのみを報告し、警告は無視します
     - `-r|--read-only`: エラーと警告を表示しますが、ファイルを変更しません
     - `-R|--root CHROOT_DIR`: CHROOT_DIRにchrootします
     - `-s|--sort`: UIDによって項目をソートします

   - `grpck` のオプション:
     - `-r|--read-only`: エラーと警告を表示しますが、ファイルを変更しません
     - `-R|--root CHROOT_DIR`: CHROOT_DIRにchrootします
     - `-s|--sort`: GIDによって項目をソートします

`vipw`と`vigr`ツールは、テキストエディタを使用して`/etc/passwd`や`/etc/group`などのファイルを安全に編集するためのものです。これらは変更を加える際にファイルの構文エラーがないことを保証し、一般的には直接編集するよりも安全性が高いとされています。

`pwck`と`grpck`ツールはシステムの一貫性と整合性を維持するために重要です。これらは`/etc/passwd`、`/etc/shadow`、`/etc/group`、`/etc/gshadow`ファイルに対して様々なチェックを行い、潜在的な問題を発見することができます。例えば、不正なユーザーIDやグループID、重複したエントリ、形式が不正な行などです。

ファイルの直接的な編集は、極力避けるべきアプローチであり、代わりにこれらのコマンドラインツールを使用して、安全かつ効果的に操作を行うことが推奨されます。このような操作を行う場合には、常にシステムのバックアップを取っておくことが重要です。もし問題が発生した場合には、バックアップから元に戻すことが可能になります。

最後に、これらの設定ファイルの変更はシステム全体に影響を及ぼすため、管理者権限（root権限）が必要です。不適切な変更はシステムのセキュリティや安定性を損なう可能性があるため、変更を行う際は慎重に行う必要があります。