はじめに
Linuxはマルチユーザーシステムとして設計されており、複数のユーザーが同時にシステムにアクセスできます。サーバー運用では、開発者やシステム管理者など役割ごとにアカウントを作成し、適切な権限を付与することがセキュリティの基本となります。
本記事では、Linuxのユーザー管理とグループ管理の仕組みを体系的に解説します。/etc/passwdや/etc/shadowといったシステムファイルの構造から、useradd、usermod、userdelによるユーザー操作、groupaddやgpasswdによるグループ管理、そしてsudoの設定方法まで網羅しています。
この記事を読み終える頃には、マルチユーザー環境でのアカウント管理ができるようになり、適切なアクセス制御を実現できるようになります。
動作確認環境
本記事のコマンドは以下の環境で動作確認しています。
| 項目 | 内容 |
|---|---|
| OS | Ubuntu 24.04 LTS |
| シェル | bash 5.3 |
| カーネル | Linux 6.8 |
| shadow-utils | 4.18 |
WSL2やVirtualBox上のLinux環境、AlmaLinux 9、Debian 12等の主要ディストリビューションでも同様に動作します。
ユーザーアカウントの仕組み
/etc/passwdファイルの構造
/etc/passwdはユーザーアカウント情報を格納するテキストファイルです。すべてのユーザーが読み取り可能ですが、書き込みはrootのみ許可されています。
|
|
実行結果の例:
|
|
各行は7つのフィールドで構成され、コロン(:)で区切られています。
graph LR
subgraph "/etc/passwdの構造"
A["ユーザー名"] --> B["パスワード<br/>(x=shadow)"]
B --> C["UID"]
C --> D["GID"]
D --> E["GECOS<br/>(コメント)"]
E --> F["ホームディレクトリ"]
F --> G["ログインシェル"]
end| フィールド | 説明 | 例 |
|---|---|---|
| ユーザー名 | ログインに使用する名前 | developer |
| パスワード | xはshadowファイル使用を示す | x |
| UID | ユーザーID(0=root) | 1001 |
| GID | プライマリグループID | 1001 |
| GECOS | ユーザーの説明(フルネーム等) | Developer User |
| ホームディレクトリ | ログイン時の作業ディレクトリ | /home/developer |
| ログインシェル | ログイン時に起動するシェル | /bin/bash |
/etc/shadowファイルの構造
/etc/shadowは暗号化されたパスワードとパスワードエージング情報を格納します。rootのみが読み取り可能で、セキュリティを高めています。
|
|
実行結果の例:
|
|
各行は9つのフィールドで構成されています。
| フィールド | 説明 |
|---|---|
| ユーザー名 | /etc/passwdと対応 |
| 暗号化パスワード | ハッシュ化されたパスワード(!や*はロック状態) |
| 最終変更日 | パスワードを最後に変更した日(1970/1/1からの日数) |
| 最小日数 | パスワード変更可能になるまでの日数 |
| 最大日数 | パスワードの有効期限(日数) |
| 警告日数 | 期限切れ前に警告を表示する日数 |
| 猶予日数 | 期限切れ後もログイン可能な日数 |
| 有効期限 | アカウントが無効になる日(1970/1/1からの日数) |
| 予約フィールド | 将来の使用のために予約 |
/etc/groupファイルの構造
/etc/groupはグループ情報を格納します。
|
|
実行結果の例:
|
|
| フィールド | 説明 | 例 |
|---|---|---|
| グループ名 | グループの名前 | developers |
| パスワード | xはgshadow使用を示す | x |
| GID | グループID | 1002 |
| メンバーリスト | 所属ユーザーのカンマ区切りリスト | user1,user2 |
ユーザー管理コマンド
useraddでユーザーを作成する
useraddコマンドは新規ユーザーアカウントを作成します。
基本的な使用方法:
|
|
このコマンドだけでは、ホームディレクトリは作成されず、パスワードも設定されません。実用的なユーザー作成には、オプションを指定します。
ホームディレクトリ付きでユーザーを作成:
|
|
| オプション | 説明 |
|---|---|
| -m | ホームディレクトリを作成 |
| -s | ログインシェルを指定 |
| -c | コメント(GECOS)を設定 |
| -d | ホームディレクトリのパスを指定 |
| -g | プライマリグループを指定 |
| -G | 追加グループを指定(カンマ区切り) |
| -u | UIDを指定 |
| -e | アカウントの有効期限を設定(YYYY-MM-DD形式) |
実践的な例:
|
|
passwdコマンドでパスワードを対話的に設定します。
|
|
usermodでユーザー情報を変更する
usermodコマンドは既存ユーザーの情報を変更します。
ログインシェルを変更:
|
|
コメント(フルネーム)を変更:
|
|
追加グループに参加(既存のグループを維持):
|
|
重要: -a(append)オプションを忘れると、指定したグループのみになり、既存のグループから削除されます。
| オプション | 説明 |
|---|---|
| -l | ユーザー名を変更 |
| -d | ホームディレクトリを変更 |
| -m | -dと併用でホームディレクトリの内容を移動 |
| -g | プライマリグループを変更 |
| -G | 所属グループを設定(既存を置換) |
| -aG | 追加グループに追加(既存を維持) |
| -L | アカウントをロック |
| -U | アカウントのロックを解除 |
| -e | アカウントの有効期限を設定 |
アカウントをロックする:
|
|
ロックされたアカウントは/etc/shadowのパスワードフィールドの先頭に!が付加されます。
userdelでユーザーを削除する
userdelコマンドはユーザーアカウントを削除します。
ユーザーのみ削除(ホームディレクトリは残す):
|
|
ホームディレクトリとメールスプールも削除:
|
|
| オプション | 説明 |
|---|---|
| -r | ホームディレクトリとメールスプールを削除 |
| -f | ログイン中でも強制削除 |
注意: -fオプションの使用は慎重に。ユーザーがログイン中の場合、予期しない問題が発生する可能性があります。
ユーザー情報を確認する
現在のユーザー情報を確認するコマンド:
|
|
実行結果の例:
|
|
グループ管理コマンド
groupaddでグループを作成する
groupaddコマンドは新規グループを作成します。
|
|
特定のGIDを指定して作成:
|
|
| オプション | 説明 |
|---|---|
| -g | GIDを指定 |
| -r | システムグループとして作成(GID 100〜999) |
| -f | グループが存在する場合もエラーにしない |
groupmodでグループを変更する
groupmodコマンドはグループ情報を変更します。
グループ名を変更:
|
|
GIDを変更:
|
|
groupdelでグループを削除する
groupdelコマンドはグループを削除します。
|
|
注意: ユーザーのプライマリグループは削除できません。先にユーザーのプライマリグループを変更するか、ユーザーを削除する必要があります。
gpasswdでグループメンバーを管理する
gpasswdコマンドはグループのメンバー管理を行います。usermod -aGよりも直感的にメンバー操作ができます。
ユーザーをグループに追加:
|
|
ユーザーをグループから削除:
|
|
グループ管理者を設定:
|
|
グループ管理者に指定されたユーザーは、rootでなくてもそのグループにメンバーを追加・削除できます。
| オプション | 説明 |
|---|---|
| -a | ユーザーをグループに追加 |
| -d | ユーザーをグループから削除 |
| -A | グループ管理者を設定 |
| -M | グループメンバーを一括設定(既存を置換) |
sudoの設定と使い方
sudoとは
sudo(SuperUser DO)は、一般ユーザーが一時的にroot権限でコマンドを実行するための仕組みです。直接rootでログインするよりも安全で、誰が何を実行したかの監査ログも残ります。
graph TD
A[一般ユーザー] -->|sudo コマンド| B{sudoers設定}
B -->|許可| C[パスワード認証]
C -->|成功| D[root権限で実行]
C -->|失敗| E[アクセス拒否]
B -->|拒否| E
D --> F[監査ログ記録]sudoグループへの追加
多くのディストリビューションでは、sudoグループ(CentOS/RHELではwheelグループ)のメンバーがsudoを使用できます。
Ubuntu/Debian系:
|
|
CentOS/RHEL/AlmaLinux系:
|
|
グループ変更を反映するには、ユーザーが一度ログアウトして再ログインする必要があります。
sudoersファイルの構造
sudoの権限設定は/etc/sudoersファイルで管理されます。このファイルは必ずvisudoコマンドで編集します。直接編集すると構文エラーでsudoが使えなくなる危険があります。
|
|
sudoersファイルの基本的な書式:
|
|
具体的な設定例:
|
|
| 要素 | 説明 |
|---|---|
| ユーザー | 権限を付与するユーザー(%で始まるとグループ) |
| ホスト | この設定が有効なホスト(ALLはすべて) |
| 実行ユーザー | コマンドを実行するユーザー |
| 実行グループ | コマンドを実行するグループ |
| コマンド | 実行を許可するコマンド(フルパス指定) |
sudoers.dディレクトリの活用
/etc/sudoersを直接編集する代わりに、/etc/sudoers.d/ディレクトリに個別のファイルを作成する方法が推奨されます。
|
|
ファイル内容の例:
|
|
ファイル名の注意点:
- チルダ(~)で終わるファイルは無視される
- ドット(.)を含むファイルは無視される
- ファイル名は英数字とアンダースコアのみ推奨
sudoの基本的な使い方
単一コマンドをroot権限で実行:
|
|
別のユーザーとしてコマンドを実行:
|
|
root権限のシェルを起動:
|
|
現在の権限を確認:
|
|
実行結果の例:
|
|
実践的なユースケース
Webアプリケーション開発チームの設定
開発チーム用のグループとユーザーを作成し、必要な権限を付与する例です。
|
|
sgid(2775の2)を設定することで、ディレクトリ内に作成されたファイルは自動的にwebdevグループの所有になります。
システム管理者アカウントの設定
システム管理者用の設定例です。
|
|
サービスアカウントの作成
アプリケーション実行用のシステムアカウントを作成する例です。
|
|
-rオプションでシステムユーザー(UID 100〜999)として作成され、/usr/sbin/nologinを指定することで対話的ログインを禁止しています。
トラブルシューティング
ユーザーがsudoを使えない場合
症状:
|
|
対処法:
|
|
または、/etc/sudoers.d/に設定ファイルを作成します。
グループ変更が反映されない場合
グループの変更はログアウト・再ログイン後に反映されます。すぐに反映したい場合:
|
|
または、完全に反映するにはログアウトして再ログインします。
パスワードの有効期限を確認・変更
chageコマンドでパスワードエージングを管理できます。
現在の設定を確認:
|
|
パスワードの有効期限を90日に設定:
|
|
次回ログイン時にパスワード変更を強制:
|
|
セキュリティベストプラクティス
ユーザーとグループ管理におけるセキュリティのベストプラクティスをまとめます。
- 最小権限の原則: 必要最小限の権限のみを付与する
- 直接rootログインを避ける: sudoを使用して監査証跡を残す
- 強力なパスワードポリシー: パスワードの複雑さと有効期限を設定
- 不要なアカウントを削除: 退職者や不要なサービスアカウントは速やかに削除
- 定期的な権限レビュー: 誰がどの権限を持っているか定期的に確認
- sudoersの慎重な管理: NOPASSWDは本当に必要な場合のみ使用
まとめ
本記事では、Linuxのユーザーとグループ管理について解説しました。
/etc/passwd、/etc/shadow、/etc/groupの構造と役割useradd、usermod、userdelによるユーザー管理groupadd、groupmod、groupdel、gpasswdによるグループ管理sudoとsudoersによる権限昇格の設定
これらの知識を活用することで、マルチユーザー環境で安全かつ効率的なアカウント管理が実現できます。次のステップとして、SSH鍵認証やPAM(Pluggable Authentication Modules)について学ぶと、より高度なセキュリティ設定が可能になります。