ユーザーとグループの基本構造
Linuxシステムでは、すべてのアクセス操作はユーザー単位で制御されます。特にrootユーザー(UID=0)は特権アカウントであり、システム全体に対する完全な制御権を持ちます。ユーザーおよびグループに関する主な設定ファイルは以下の通りです。
/etc/passwd:ユーザー情報の定義/etc/shadow:暗号化されたパスワードと有効期限情報/etc/group:グループ情報の定義/etc/gshadow:グループパスワードと管理者情報
ユーザー種別
| タイプ | 説明 |
|---|---|
| スーパーユーザー (root) | UIDが0の特別なアカウント。システムの全機能を操作可能。 |
| システムユーザー | サービスやデーモン用の仮想アカウント(例: nobody, sshd)。通常ログイン不可。UID範囲は1~999。 |
| 一般ユーザー | 管理者が作成する日常利用者向けアカウント。UIDは1000以上。自身のホームディレクトリ内でのみ自由に操作可。 |
/etc/passwd ファイルの構造
このファイルは全ユーザーから読み取り可能です。各行は7つのフィールドで構成され、コロン(:)で区切られます。
exampleuser:x:1005:1005:Example User:/home/exampleuser:/bin/bash
| フィールド | 意味 |
|---|---|
| ユーザー名 | ログイン時に使用する名前。一意である必要がある。 |
| パスワードプレースホルダー | 実際のパスワードは/etc/shadowに格納されているため、ここにはxが表示される。 |
| UID | ユーザー識別番号。0はroot、1000以降が一般ユーザー。 |
| GID | プライマリグループの識別番号。 |
| コメント(GECOS) | ユーザーのフルネームや連絡先など。任意項目。 |
| ホームディレクトリ | ログイン後に初期遷移するディレクトリ。 |
| ログインシェル | ユーザーが使用するコマンドインタープリタ。一般的には/bin/bash。 |
/etc/shadow のセキュリティ管理
このファイルはrootのみが読めるようになっており、パスワードの安全性を確保しています。各エントリは9つのフィールドからなります。
testuser:$6$salt$encryptedhash:19145:0:99999:7:::
| フィールド | 詳細 |
|---|---|
| ユーザー名 | /etc/passwdとの対応を保つ。 |
| 暗号化パスワード | SHA-512などのハッシュ値。空または!!/*はパスワード未設定を示す。 |
| 最終変更日 | 1970年1月1日からの経過日数。 |
| 変更最小期間(日) | 次回変更までの最低待機日数。0なら即時変更可。 |
| 変更最大期間(日) | パスワードの有効期限。超過すると強制変更が必要。 |
| 警告期間(日) | 有効期限切れ前に何日前から警告するか。 |
| 非アクティブ期間 | パスワード失効後、アカウントがロックされるまでの猶予日数。 |
| アカウント無効化日 | アカウント全体の無効化日(経過日数指定)。 |
| 予約フィールド | 将来拡張用。現時点では未使用。 |
ユーザー管理コマンド
ユーザー作成: useradd
新しいユーザーを追加する際に使用します。
useradd [オプション] ユーザー名
| オプション | 機能 |
|---|---|
-u UID |
特定のUIDを割り当てる。 |
-g GID |
プライマリグループを指定。 |
-G group1,group2 |
所属するサブグループを追加。 |
-d /path/to/home |
カスタムホームディレクトリを設定。 |
-s /bin/zsh |
ログインシェルを変更。 |
-m |
ホームディレクトリが存在しない場合に自動生成。 |
-r |
システムユーザーとして作成(ホームディレクトリなし)。 |
例:ユーザーtaroを作成し、UID 1050、グループdevelopersに属させる。
# groupadd developers
# useradd -u 1050 -g developers -G wheel -m -s /bin/bash taro
# passwd taro
ユーザー属性変更: usermod
既存ユーザーの設定を更新するために使用。
usermod -d /new/home/dir -m username
usermod -s /bin/ksh username
usermod -e 2030-12-31 username
-mと組み合わせた-dは、古いホームディレクトリを新しい場所へ移動します。
ユーザー削除: userdel
不要になったユーザーを削除。
userdel username # アカウントのみ削除
userdel -r username # アカウントとホームディレクトリ両方を削除
グループ管理
グループ種別
- プライベートグループ:ユーザー作成時に自動生成される同名グループ。
- 標準グループ:複数ユーザーが共有するグループ(例:
developers,admins)。 - プライマリグループ:ユーザーがログイン時に所属するメイングループ(一つだけ)。
- セカンダリグループ:追加で所属可能な補助グループ(複数可)。
グループ操作コマンド
| コマンド | 用途 |
|---|---|
groupadd |
新規グループ作成。例:groupadd -g 1200 analysts |
groupmod |
グループ名またはGID変更。例:groupmod -n newname oldname |
groupdel |
グループ削除。メンバーがいる場合でも削除可能(ただし注意が必要)。 |
補助ツール
- gpasswd: グループパスワードやメンバー管理に使用。
gpasswd -a alice developers # aliceをdevelopersに追加 gpasswd -d bob developers # bobをdevelopersから削除 gpasswd -A manager developers # managerを管理者に設定 - newgrp: 現在のセッションでグループを切り替える。
newgrp developers - id: ユーザーのUID/GID情報を表示。
id alice # 出力例: uid=1001(alice) gid=1001(alice) groups=1001(alice),1200(developers) - groups: 特定ユーザーが所属するグループ一覧を表示。
groups alice # 出力例: alice : alice developers
高度な操作例
パスワードポリシーの確認:
cat /etc/login.defs | grep -E "(UID_MAX|GID_MIN)"
# UID_MAX 60000
# GID_MIN 1000
アカウント状態の監査:
passwd -S username # パスワードの有効期限やロック状態を確認
一時的な権限昇格:
su - username # 別ユーザーとしてログイン(環境も変更)
su -c "ls /root" root # 一時的にrootでコマンド実行