user・group 管理の実践 — マルチユーザー環境の構築

user・group 管理の実践 — マルチユーザー環境の構築

この記事のポイント

  • useradd / adduser の違いと、実務で安全なユーザー追加の型
  • usermod -aG でグループにユーザーを追加する方法と -a を忘れた場合の事故
  • /etc/passwd / /etc/shadow / /etc/group の読み方と権限管理の実態
  • マルチユーザー環境の構築手順をゼロから一本道で

結論(実務の型)

  • ユーザー追加: useradd -m -s /bin/bash usernamepasswd username
  • グループ追加: usermod -aG groupname username-a 必須)
  • 確認: id username / groups username
  • /etc/passwd の編集は usermod 経由のみ(直接編集禁止)

前提(対象環境)

  • OS: Ubuntu / Debian 系(adduser コマンドも使用可)
  • 操作は sudo またはルートで実施

useradd と adduser はどう違うのか?

useradd は低レベルなバイナリ、adduser は Perl/Python 製の高レベルラッパー。Ubuntu では adduser が対話的にホームディレクトリ・パスワード設定まで行うため初心者向けだが、スクリプト内では useradd を使うほうが移植性が高い。

useradd adduser
種類 バイナリ スクリプトラッパー
対話 なし あり
ホーム作成 -m が必要 デフォルトで作成
移植性 全ディストリビューション Debian 系のみ

実務ではスクリプトに useradd、手作業に adduser を使い分けるのが一般的。

どうやってユーザーを追加するのか?

useradd -m -s /bin/bash username でホームディレクトリ付きのユーザーを作成し、その後 passwd でパスワードを設定するのが標準手順。

# ユーザー作成(ホームディレクトリ付き)
sudo useradd -m -s /bin/bash alice

# パスワード設定
sudo passwd alice
New password:
Retype new password:
passwd: password updated successfully

主なオプション:

オプション 説明
-m ホームディレクトリを作成
-s /bin/bash デフォルトシェル指定
-d /path ホームディレクトリのパスを指定
-u 1500 UID を明示的に指定
-g groupname プライマリグループ指定
-G grp1,grp2 補助グループ指定(複数可)

作成後の確認:

id alice
uid=1001(alice) gid=1001(alice) groups=1001(alice)

adduser を使う場合は sudo adduser alice だけで対話的に全設定が完了する。スクリプト外での手動作業ならこちらが速い。

グループをどう作成・管理するのか?

groupadd groupname でグループを作成する。グループは /etc/group に記録され、ファイルの共有アクセス制御の基本単位になる。

# グループ作成
sudo groupadd developers

# グループ確認
getent group developers
developers:x:1002:

グループの変更・削除:

# グループ名変更
sudo groupmod -n dev developers

# グループ削除
sudo groupdel dev

グループを削除しても、そのグループを参照している /etc/group の補助グループエントリは残る。groupdel 後に grep ':dev:' /etc/group で残骸がないか確認すること。

ユーザーをグループに追加するにはどうするのか?

usermod -aG groupname username-a(append)が最重要。-a なしで -G だけ使うと、既存の補助グループがすべて上書きされ削除される。

# グループに追加(-a 必須)
sudo usermod -aG developers alice

# 複数グループに同時追加
sudo usermod -aG developers,sudo alice

# 確認
groups alice
alice : alice developers sudo

グループ変更はログイン中のセッションには即時反映されない。newgrp developers または再ログインで有効になる。

# セッションを再起動せずにグループを有効化
newgrp developers

/etc/passwd と /etc/shadow の読み方は?

/etc/passwd はユーザー情報のデータベース、/etc/shadow は暗号化パスワードを格納する。パスワードが /etc/passwd に直接書かれていた時代は全ユーザーが平文ハッシュを閲覧可能だったが、現代では /etc/shadow(root のみ読取可)に分離されている。

/etc/passwd の構造(コロン区切り 7 フィールド):

alice:x:1001:1001:Alice Smith:/home/alice:/bin/bash
 ^    ^ ^    ^    ^            ^            ^
 |    | |    |    |            |            デフォルトシェル
 |    | |    |    |            ホームディレクトリ
 |    | |    |    GECOS(フルネーム等)
 |    | |    GID(プライマリグループ)
 |    | UID
 |    パスワード('x' = /etc/shadow に格納)
 ユーザー名

/etc/shadow の構造(コロン区切り 9 フィールド):

sudo cat /etc/shadow | grep alice
alice:$6$salt$hashedpassword...:19500:0:99999:7:::
       ^                        ^     ^ ^     ^
       |                        |     | |     警告日数
       |                        |     | 最大有効日数
       |                        |     最小変更間隔
       |                        最終変更日(epoch 日数)
       ハッシュ($6$ = SHA-512)

/etc/passwd の直接編集は禁止。usermodchsh を経由すること。直接編集でフォーマットを壊すとログイン不能になる。

ユーザー情報の変更・削除はどうするのか?

usermod でほぼすべての属性を変更できる。削除には userdel を使い、ホームディレクトリも削除する場合は -r を付ける。

# ログインシェル変更
sudo usermod -s /bin/zsh alice

# ホームディレクトリ移動(既存ディレクトリを移動しながら変更)
sudo usermod -d /home/alice2 -m alice

# ロック(ログイン無効化)
sudo usermod -L alice

# ロック解除
sudo usermod -U alice

# ユーザー削除(ホームディレクトリは残す)
sudo userdel alice

# ユーザー削除(ホームディレクトリも削除)
sudo userdel -r alice

userdel -r は復元できない。削除前にホームの内容を確認すること。

ls -la /home/alice

マルチユーザー環境の構築手順

開発チームが共有サーバーを使う典型的な構成を一本道で示す。

# 1. 共有グループ作成
sudo groupadd developers

# 2. ユーザー作成
sudo useradd -m -s /bin/bash -G developers alice
sudo useradd -m -s /bin/bash -G developers bob

# 3. パスワード設定
sudo passwd alice
sudo passwd bob

# 4. 共有ディレクトリ作成
sudo mkdir /srv/project
sudo chown root:developers /srv/project
sudo chmod 2775 /srv/project   # setgid: 新規ファイルのグループを自動継承

chmod 27752 は setgid ビット。このディレクトリ下で作成されたファイルのグループが自動的に developers になり、グループメンバー全員が読み書きできる。

# 設定確認
ls -ld /srv/project
drwxrwsr-x 2 root developers 4096 Jun  2 00:00 /srv/project
             ^
             's' = setgid ビット
# メンバー全員の確認
getent group developers
developers:x:1002:alice,bob

sudo 権限の付与

特定ユーザーに管理権限を与える場合は sudo グループへ追加(Ubuntu の場合):

sudo usermod -aG sudo alice

または visudo でより細かい権限制御も可能。

ログイン中ユーザーと接続状況を確認するには?

who / w コマンドで現在ログインしているユーザーと作業状況を確認できる。

who
alice    pts/0        2026-06-02 09:00 (192.168.1.10)
bob      pts/1        2026-06-02 09:05 (192.168.1.11)
w
 09:10:00 up 2 days, 3:00,  2 users,  load average: 0.10, 0.08, 0.05
USER     TTY      FROM             LOGIN@   IDLE JCPU   PCPU WHAT
alice    pts/0    192.168.1.10     09:00    2:00  0.05s  0.01s bash
bob      pts/1    192.168.1.11     09:05    0.00s 0.10s  0.02s top

last コマンドでログイン履歴も確認できる:

last -n 10

次に読む