マルチユーザーOSであるLinuxにおいて、利用者の権限を統制しセキュリティを担保する基盤が「ユーザー・グループ管理」です。LinuC 102試験の主題1.08.1「ユーザおよびグループアカウントと関連するシステムファイルの管理」は、重要度5という極めて高い比重を持ちます。本稿では、/etc/passwd(7項目)や/etc/shadow(9項目)の厳密なファイル構造、アカウントの追加・変更・削除(useradd, usermod, userdel)、副グループ追加の原則(-aG)、そしてパスワードエージング(chage)のタイムライン制御を、実機検証ログとともに論理的に解説します。
/etc/passwd、/etc/shadow、/etc/groupの全フィールドの定義と役割を説明できる状態を目指します/etc/skel、/etc/default/useradd、/etc/login.defsによる新規ユーザー初期化の仕組みを把握しますuseradd、usermod、userdelの主要オプション(特に副グループ追加の-aGやホーム一括削除の-r)を使いこなせるようにします- アカウントのロック機構(
passwd -lvsusermod -L)の内部動作(シャドウファイルへの!付与)を理解します chageコマンドを用いたパスワード有効期限・警告期間の設定と、次回ログイン時変更強制(-d 0)の手順を習得します
| 項目 | 仕様・設定値 |
|---|---|
| 検証機ホスト名 | linuc-node01 |
| ディストリビューション | AlmaLinux 9.8 (Olive Jaguar) |
| パスワード暗号化方式 | SHA-512(シャドウファイルのプレフィックス $6$) |
| 一般UID最小値(UID_MIN) | 1000(/etc/login.defs 規定値) |
| 対象試験 | LinuC レベル1 102試験(主題1.08.1 重要度5) |
目次
1. Linuxアカウント管理を司る主要システムファイル
Linuxにおけるユーザーやグループの情報は、データベースエンジンではなく、テキストファイル形式のフラットファイル群によって管理されています。

1.1 /etc/passwd の全7フィールド完全解剖
/etc/passwd は、システムに登録されている全ユーザーのアカウント情報を保持する最重要ファイルです。誰でも閲覧可能(パーミッション: 644)である必要があります。1行に1ユーザーの情報がコロン(:)区切りで7つのフィールドとして記録されます。
user01:x:1000:1000:user01:/home/user01:/bin/bash
① ② ③ ④ ⑤ ⑥ ⑦
| 番号 | フィールド名 | 説明とAlmaLinux 9での実例 |
|---|---|---|
| ① | ユーザー名(Account Name) | ログイン時に使用する一意の識別名(user01)。 |
| ② | 暗号化パスワード | 歴史的には暗号化ハッシュが置かれていましたが、セキュリティ上の理由から現在は文字「x」のみが置かれ、実体は/etc/shadowを参照します。 |
| ③ | ユーザーID(UID) | ユーザーの数値識別子。rootは0、システムユーザーは1〜999、一般ユーザーは1000以降が割り当てられます。 |
| ④ | グループID(GID) | ユーザーの主グループ(プライマリグループ)の数値識別子。 |
| ⑤ | コメント(GECOSフィールド) | 氏名、内線番号、所属部署などの付加情報(useradd -cで設定)。 |
| ⑥ | ホームディレクトリ | ログイン時の初期作業ディレクトリの絶対パス(/home/user01)。 |
| ⑦ | ログインシェル | ログイン後に起動されるシェルの絶対パス(/bin/bash)。ログインを禁止するシステムユーザーには/sbin/nologinまたは/bin/falseが指定されます。 |
1.2 /etc/shadow の全9フィールドと暗号化ハッシュ方式
一般ユーザーによるパスワードハッシュの盗読(辞書攻撃・ブルートフォース攻撃)を防ぐため、root権限(パーミッション: 000 または 600)のみが読み取り可能な/etc/shadowにパスワード情報が分離されています。コロン区切りで9つのフィールドを持ちます。
user01:$6$avJy...:20702:0:99999:7:::
① ② ③ ④ ⑤ ⑥⑦⑧⑨
| 番号 | フィールド名 | 説明・対応するchageオプション |
|---|---|---|
| ① | ユーザー名 | アカウント名。 |
| ② | 暗号化パスワードハッシュ | ソルトを含むハッシュ値。先頭の記号で暗号化アルゴリズムを判別($1$: MD5, $5$: SHA-256, $6$: SHA-512, $y$: yescrypt)。 |
| ③ | 最終変更日 | 1970年1月1日(UNIXエポック)からの経過日数。 |
| ④ | 最小変更間隔(日数) | パスワードを再変更できるようになるまでの最低日数(chage -m)。0は即時変更可能。 |
| ⑤ | 最大有効期間(日数) | パスワードの有効期限が切れるまでの日数(chage -M)。99999は事実上の無期限。 |
| ⑥ | 期限前警告期間(日数) | パスワード有効期限が切れる前にユーザーへ更新警告を出す日数(chage -W)。デフォルト通常7。 |
| ⑦ | 非アクティブ猶予期間(日数) | 有効期限切れ後、パスワード変更によるログインを許可する猶予日数(chage -I)。この期間を過ぎるとアカウントがロックされる。 |
| ⑧ | アカウント失効日 | パスワードではなく、アカウントそのものが完全に停止・失効する日付(chage -E)。UNIXエポックからの日数。 |
| ⑨ | 予約フィールド | 将来の拡張用予約領域(空欄)。 |
1.3 /etc/group と /etc/gshadow の構造
グループ情報は/etc/groupで管理されます(4フィールド)。
wheel:x:10:user01,developer
① ② ③ ④
- ①グループ名、②グループパスワード(
x)、③グループID(GID)、④所属ユーザーのリスト(カンマ区切り)。なお、主グループとして所属しているユーザーはここには表示されず、副グループ(サブグループ)として所属しているユーザーのみが列挙されます。
1.4 アカウント作成のひな形(/etc/skel と /etc/default/useradd)
/etc/skel: ユーザーが新規作成された際、そのホームディレクトリに自動コピーされる初期テンプレートファイル群(.bashrc,.bash_profile,.bash_logout等)が格納されています。/etc/default/useradd:useraddコマンド実行時にオプションを省略した場合に適用されるデフォルト値(既定シェル/bin/bash、既定ホームの親パス/home等)を定義します。useradd -Dコマンドで確認・変更できます。
1.5 システム全体の制限設定(/etc/login.defs)
ユーザーアカウントのUID/GIDの割り当て範囲(UID_MIN=1000, UID_MAX=60000)や、デフォルトのパスワード有効期限(PASS_MAX_DAYS)など、システム全般のセキュリティポリシーを定義する設定ファイルです。
2. ユーザーアカウントのライフサイクル管理コマンド
アカウントの作成から属性変更、停止、削除に至るコマンド体系を整理します。
2.1 ユーザー作成(useradd / adduser)とオプション
Red Hat系において、useradd(および同等のadduser)コマンドでユーザーを作成します。
| オプション | 機能・用途 | 実行例 |
|---|---|---|
-u <UID> |
特定のUIDを明示的に指定 | useradd -u 2000 dev01 |
-g <group> |
主グループ(プライマリグループ)をGIDまたはグループ名で指定 | useradd -g developers dev01 |
-G <groups> |
副グループ(サブグループ)をカンマ区切りで指定 | useradd -G wheel,docker dev01 |
-d <dir> |
ホームディレクトリのパスを明示指定 | useradd -d /opt/apphome appuser |
-m(-M) |
-mはホームディレクトリを強制作成、-Mは作成しない |
useradd -m -d /home/test testuser |
-s <shell> |
ログインシェルを指定(ログイン拒否は/sbin/nologin) |
useradd -s /bin/zsh testuser |
-c <comment> |
GECOSコメント(説明文)を指定 | useradd -c "Database Admin" dba |
-e <date> |
アカウントの有効期限(YYYY-MM-DD)を指定 | useradd -e 2026-12-31 tempuser |
-D |
デフォルト設定値の表示(引数を付けると既定値を変更) | useradd -D |
2.2 ユーザー情報変更(usermod)と副グループ追加の鉄則(-aG)
既存ユーザーの属性を変更するコマンドがusermodです。LinuC試験で極めて多くの受験者が減点されるのが、副グループの追加です。
# 正しい副グループ追加(既存の所属グループを維持したまま追加)
[root@linuc-node01 ~]# usermod -aG wheel user01
# 誤った指定(既存の所属グループがすべて消去されwheelのみに上書きされる)
[root@linuc-node01 ~]# usermod -G wheel user01
-G 単体で実行すると、そのユーザーが元々所属していた副グループがすべて上書き消去されます。既存のグループ所属を維持したまま新規グループを追加する際は、必ず追記(append)を意味する -a を併用して -aG と指定します。
その他の主要オプション:
usermod -d <dir> -m <user>: ホームディレクトリのパスを変更し、既存のファイルを新しい場所へ移動(move)する。usermod -l <new_name> <old_name>: ユーザーアカウント名そのものを変更する(小文字のエル)。usermod -L <user>: アカウントを一時的にロックする(大文字のエル)。usermod -U <user>: ロックを解除(Unlock)する。
2.3 ユーザー削除(userdel)とホームディレクトリ一括消去(-r)
アカウントを削除するコマンドはuserdelです。
userdel <user>:/etc/passwdや/etc/shadowのエントリのみを削除し、ホームディレクトリやメールボックスはそのままディスクに残す。userdel -r <user>: ユーザーエントリとともに、ホームディレクトリおよびメールスプール(/var/spool/mail/user)も完全に再帰的削除(remove)する。
2.4 アカウントのロックと解除(passwd -l vs usermod -L)
アカウントを一時的に利用停止(ロック)する方法には、passwd -l と usermod -L の2系統があります。
両コマンドとも内部的には、/etc/shadow の第2フィールド(パスワードハッシュ)の先頭に感嘆符(!)を1つ付与します。これにより、入力されたパスワードの暗号化ハッシュと絶対に一致しなくなり、パスワード認証が失敗します。ロック解除(passwd -u または usermod -U)を行うと、先頭の!が除去されて元の認証状態へ復帰します。
3. パスワード管理とエージング設定(passwd, chage)
パスワードの変更および有効期限ポリシーの適用を制御します。

3.1 passwdコマンドによるパスワード変更とステータス確認
passwd: 自身のパスワードを対話的に変更。passwd <user>: (rootのみ)特定ユーザーのパスワードを強制変更。passwd -S <user>: パスワードの状態(PS: 利用可能, LK: ロック中, NP: パスワード未設定)を表示。passwd -e <user>: パスワードを即座に期限切れ(expire)にし、次回ログイン時に変更を強制。passwd -d <user>: パスワードを削除し、パスワードなしでログインできるようにする(通常は危険なため避ける)。
3.2 パスワードエージングの仕組み
パスワードを一定期間ごとに変更させたり、長期間変更されていない古いアカウントを自動失効させるセキュリティ機構を「パスワードエージング」と呼びます。
3.3 chageコマンドによるエージング詳細設定
パスワードエージングの管理には、専門コマンドである chage(Change Age)を用います。
| コマンド書式 | 設定されるエージング項目 | 対応する /etc/shadow フィールド |
|---|---|---|
chage -l <user> |
現在のエージング情報一覧を表示(List) | 各フィールドの内容を解読して表示 |
chage -m <days> |
パスワードを変更できるようになるまでの最小日数(Min) | 第4フィールド |
chage -M <days> |
パスワードの最大有効日数(Max) | 第5フィールド |
chage -W <days> |
有効期限切れ前の警告日数(Warning) | 第6フィールド |
chage -I <days> |
期限切れ後の非アクティブ猶予日数(Inactive) | 第7フィールド |
chage -E <date> |
アカウントそのものの失効日(Expire: YYYY-MM-DD) | 第8フィールド |
chage -d 0 <user> |
最終変更日を0(エポック日)にし、次回ログイン時に変更を強制 | 第3フィールドを 0 に更新(頻出) |
4. グループアカウント管理コマンド(groupadd, groupmod, groupdel)
複数ユーザーに対する権限一括付与を行うグループの管理コマンドです。
4.1 グループの新規作成(groupadd)とGID指定(-g)
[root@linuc-node01 ~]# groupadd -g 1050 project_a
-g で明示的にGIDを指定できます。省略した場合は /etc/login.defs の GID_MIN に基づいて連番が自動採番されます。
4.2 グループの属性変更(groupmod: -g, -n)
groupmod -g <new_gid> <group>: 既存グループのGIDを変更。groupmod -n <new_name> <old_name>: グループ名を変更(Name)。
4.3 グループの削除(groupdel)と制約
不要になったグループを削除するには groupdel <group> を実行します。ただし、いずれかの既存ユーザーの「主グループ(プライマリグループ)」として設定されているグループは、安全のため削除できません。事前に該当ユーザーの主グループを変更する必要があります。
4.4 所属グループとユーザー識別子の確認(id, groups, whoami)
id: カレントユーザーのUID、主GID、所属する全副グループ名とGIDを表示。groups <user>: 指定ユーザーが所属しているグループ名のみを一覧表示。whoami: 現在の有効な実効ユーザー名を表示。
5. 実機ハンズオン演習:AlmaLinux 9でユーザー作成とエージング制御を体験
実機linuc-node01において、アカウントの作成、グループ追加、エージング設定の挙動を追体験します。
5.1 実機検証環境の確認
現在のログインユーザーと所属グループを確認します。
[user01@linuc-node01 ~]$ id
uid=1000(user01) gid=1000(user01) groups=1000(user01),10(wheel)
5.2 演習1:useraddによる属性指定ユーザー作成と/etc/passwd照合
UID 1500、コメント「Test Engineer」、シェル「/bin/bash」を指定して検証用ユーザーを作成します。
# 1. ユーザー作成(要sudo)
[user01@linuc-node01 ~]$ sudo useradd -u 1500 -c "Test Engineer" -s /bin/bash labuser01
# 2. /etc/passwd を確認
[user01@linuc-node01 ~]$ grep 'labuser01' /etc/passwd
labuser01:x:1500:1500:Test Engineer:/home/labuser01:/bin/bash
# 3. /etc/shadow のエントリを確認(パスワード未設定のため !!)
[user01@linuc-node01 ~]$ sudo grep 'labuser01' /etc/shadow
labuser01:!!:20704:0:99999:7:::
5.3 演習2:usermod -aGによる副グループ追加と所属検証
検証用グループを作成し、labuser01を副グループとして追加します。
# 1. グループ作成
[user01@linuc-node01 ~]$ sudo groupadd -g 2000 devteam
# 2. 副グループに安全に追加(-aG)
[user01@linuc-node01 ~]$ sudo usermod -aG devteam labuser01
# 3. 所属を確認
[user01@linuc-node01 ~]$ id labuser01
uid=1500(labuser01) gid=1500(labuser01) groups=1500(labuser01),2000(devteam)
5.4 演習3:chageコマンドを用いたパスワード有効期限と強制変更(-d 0)の検証
エージング情報を設定し、次回ログイン時に変更を強制する設定を施します。
# 1. パスワード有効期限を90日、警告を14日前に設定
[user01@linuc-node01 ~]$ sudo chage -M 90 -W 14 labuser01
# 2. 次回ログイン時のパスワード変更を強制(-d 0)
[user01@linuc-node01 ~]$ sudo chage -d 0 labuser01
# 3. エージング詳細を確認
[user01@linuc-node01 ~]$ sudo chage -l labuser01
最終パスワード変更日 : パスワードの変更が必要です
パスワードの期限切れ : パスワードの変更が必要です
パスワードが無効になるまでの日数 : パスワードの変更が必要です
最短でパスワードを変更できるまでの日数 : 0
最長でパスワードを維持できる日数 : 90
警告を受けるまでの日数 : 14
# 4. 検証ユーザーとグループの削除
[user01@linuc-node01 ~]$ sudo userdel -r labuser01
[user01@linuc-node01 ~]$ sudo groupdel devteam
6. LinuC 102試験対策まとめとコマ問頻出チェック
主題1.08.1(重要度5)における得点直結ポイントを総点検します。
6.1 設定ファイルフィールド完全対応表
| ファイル名 | 項目数 | 区切り文字 | パーミッション | 最重要フィールド |
|---|---|---|---|---|
/etc/passwd |
7 | コロン(:) |
644(全読取可) | 第3: UID, 第4: 主GID, 第6: ホーム, 第7: シェル |
/etc/shadow |
9 | コロン(:) |
000 / 600(root専用) | 第2: ハッシュ, 第3: 最終変更日, 第4: 最小, 第5: 最大, 第6: 警告 |
/etc/group |
4 | コロン(:) |
644(全読取可) | 第3: GID, 第4: 所属副ユーザーリスト |
6.2 コマ問(記述式)頻出キーワード一覧表
以下の設問に対するコマンド名、オプション、またはファイルパスを想起してください。
- 問題1: ユーザー情報を記録する
/etc/passwdの各行は、何文字の区切り記号でフィールドが分割されているか? - 問題2: ユーザー作成時、ホームディレクトリに展開される初期ファイルの雛形が置かれているディレクトリはどこか?
- 問題3: 既存ユーザーの所属副グループを維持したまま新しいグループを追加するusermodのオプションは何か?
- 問題4: ユーザーをホームディレクトリごと完全に削除するuserdelのオプションは何か?
- 問題5: ユーザーに対して次回ログイン時のパスワード変更を強制するchageコマンドのオプション指定は何か?
- 問題6: アカウントを一時的にロックするために、シャドウファイルのパスワードハッシュ先頭に付与される記号は何か?
- 問題7: ユーザーIDの最小値・最大値やパスワード暗号化のデフォルト仕様を定義している設定ファイルはどこか?
解答と解説を見る
| 設問 | 正解(記述内容) | 補足・別解 |
|---|---|---|
| 問題1 | :(コロン) |
全7フィールド |
| 問題2 | /etc/skel |
スケルトンディレクトリ |
| 問題3 | -aG(または -a -G) |
-a(append)が必須 |
| 問題4 | -r(または --remove) |
メールスプールも同時削除 |
| 問題5 | -d 0(または --lastday 0) |
最終変更日を0にリセット |
| 問題6 | !(感嘆符 / エクスクラメーションマーク) |
passwd -l 等で付与 |
| 問題7 | /etc/login.defs |
UID_MIN等を規定 |
6.3 Ping-t演習へのブリッジ(対象分野と推奨学習順)
LinuC 102試験における「ユーザおよびグループアカウントの管理」(重要度5)は、記述式問題の出題率が極めて高い領域です。
- 主題1.08:管理業務
- 「ユーザおよびグループアカウントと関連するシステムファイルの管理」分野(重要度5):
/etc/passwdの7フィールドと/etc/shadowの9フィールドの順番を完全に諳んじられるようにします。また、usermod -aG、userdel -r、chage -d 0のコマ問入力を徹底演習してください。
- 「ユーザおよびグループアカウントと関連するシステムファイルの管理」分野(重要度5):
7. まとめと次回予告
- ユーザー情報は
/etc/passwd(7項目)、暗号化パスワードとエージングは/etc/shadow(9項目)で管理されます - 新規ユーザー作成時には
/etc/skelのテンプレートがホームディレクトリにコピーされます - 副グループ追加は既存所属を消去しないよう
usermod -aG <group> <user>を厳守します - ホームディレクトリを併せて削除するには
userdel -rを指定します - パスワードエージングは
chageコマンドを用い、chage -d 0で次回ログイン時の強制変更を発動させます
次回は同じく主題1.08より、定常ジョブの定期自動実行を司る「cron / crontab と atコマンド」、およびシステムの多言語対応と時刻表示を規定する「システムロケール(locale)とタイムゾーン管理」を詳しく解説します。
LinuC Level 1 学習シリーズナビゲーション
