タイトル: ユーザー作成
SEOタイトル: Linux ユーザー作成 (useradd/adduser) 完全ガイド|UID/グループ/sudo/shadow
| この記事の要点 |
- Linux のユーザー作成:
useradd (低レベル) / adduser (Debian の対話ラッパー) - 主要オプション:
-m ホーム作成 / -s /bin/bash シェル / -G 副グループ / -u UID - パスワード設定:
passwd username - 関連ファイル:
/etc/passwd / /etc/shadow / /etc/group / /etc/gshadow - 管理者権限: sudo グループ (Ubuntu) / wheel (RHEL) に追加 +
visudo で sudoers 編集
|
useradd と adduser の違い
| コマンド | 主な特徴 | 提供環境 |
useradd | 低レベルコマンド、すべて引数指定、すべての主要ディストリ | RHEL / CentOS / Rocky / Alma / Ubuntu 全て |
adduser | Debian/Ubuntu では対話的ラッパー、useradd を内部で呼ぶ | Debian / Ubuntu |
adduser (RHEL) | useradd への単なるシンボリックリンク | RHEL 系 |
本記事では useradd を中心に解説します (全ディストリで挙動が共通)。
基本: ユーザー作成
# 最低限 (RHEL 系では -m が既定で有効、Debian 系では -m 必須)
sudo useradd -m alice
# シェルとホームディレクトリを明示
sudo useradd -m -s /bin/bash -d /home/alice alice
# パスワード設定 (ログイン可能化)
sudo passwd alice
# New password: ********
# Retype new password: ********
# Debian/Ubuntu の対話ラッパー
sudo adduser alice
# → ホーム、シェル、パスワード、フルネーム等を順に聞かれる
主要オプション
| オプション | 意味 |
-m | ホームディレクトリ作成 (/etc/skel をコピー) |
-M | ホームを作らない (システムユーザー) |
-s SHELL | ログインシェル (例: /bin/bash, /usr/sbin/nologin) |
-d DIR | ホームディレクトリパス |
-u UID | UID 指定 |
-g GROUP | 主グループ (デフォルトは同名グループ) |
-G G1,G2 | 副グループ (カンマ区切り) |
-c "COMMENT" | GECOS (フルネーム等) |
-e YYYY-MM-DD | アカウント失効日 |
-r | システムユーザー (UID < 1000、ホーム作らない) |
-N | 同名グループを作らない |
典型例
# 開発者用 (bash, sudo 権限, 副グループに docker)
sudo useradd -m -s /bin/bash -G sudo,docker -c "Alice Tanaka" alice
sudo passwd alice
# UID 固定 (LDAP 統合等)
sudo useradd -m -u 1500 -s /bin/bash bob
# サービス用 (ログイン不可、ホーム無し)
sudo useradd -r -s /usr/sbin/nologin -M -d /var/lib/myapp myapp
# 一時アカウント (失効日付き)
sudo useradd -m -e 2026-12-31 contractor1
関連ファイル
| ファイル | 内容 |
/etc/passwd | ユーザー一覧 (UID, GID, GECOS, ホーム, シェル) |
/etc/shadow | パスワードハッシュ + 有効期限 (root のみ読取) |
/etc/group | グループ一覧 (GID, メンバー) |
/etc/gshadow | グループパスワード |
/etc/login.defs | UID/GID 範囲、パスワードポリシーのデフォルト |
/etc/skel | ホーム作成時にコピーされるテンプレート |
/etc/default/useradd | useradd の既定値 |
/etc/passwd の書式
alice:x:1001:1001:Alice Tanaka:/home/alice:/bin/bash
│ │ │ │ │ │ │
│ │ │ │ │ │ └─ ログインシェル
│ │ │ │ │ └─ ホームディレクトリ
│ │ │ │ └─ GECOS (コメント)
│ │ │ └─ 主 GID
│ │ └─ UID
│ └─ パスワード (x = /etc/shadow 参照)
└─ ユーザー名
ユーザー変更 (usermod)
# シェル変更
sudo usermod -s /bin/zsh alice
# 副グループに追加 (-aG で append、-G だけだと既存を上書きする!)
sudo usermod -aG docker alice
sudo usermod -aG sudo,wheel alice
# ホーム移動
sudo usermod -d /var/home/alice -m alice
# ユーザー名変更 (ホームは別途)
sudo usermod -l alice2 alice
# アカウントロック / 解除
sudo usermod -L alice # ロック (パスワード無効化)
sudo usermod -U alice # 解除
sudo passwd -l alice # 同等
sudo passwd -u alice
ユーザー削除 (userdel)
# ユーザーのみ削除 (ホーム残す)
sudo userdel alice
# ホームとメールスプールも削除
sudo userdel -r alice
# ログイン中でも強制削除 (危険)
sudo userdel -rf alice
# 残ファイル確認
sudo find / -uid 1001 2>/dev/null
パスワード管理 (passwd / chage)
# パスワード設定
sudo passwd alice
# 次回ログイン時に変更強制
sudo passwd -e alice
sudo chage -d 0 alice
# 90 日有効・最低 7 日変更不可
sudo chage -M 90 -m 7 alice
# 失効日を確認
sudo chage -l alice
# Last password change : ...
# Password expires : ...
# パスワードハッシュをスクリプトで一括設定
echo "alice:NewPass123" | sudo chpasswd
グループ操作
# グループ作成
sudo groupadd developers
# GID 指定
sudo groupadd -g 2000 webops
# メンバー追加 / 削除
sudo gpasswd -a alice developers
sudo gpasswd -d alice developers
# グループ削除
sudo groupdel developers
# 所属グループ確認
groups alice
id alice
# uid=1001(alice) gid=1001(alice) groups=1001(alice),27(sudo),999(docker)
sudo 権限の付与
| ディストリ | sudo グループ |
| Ubuntu / Debian | sudo |
| RHEL / CentOS / Rocky / Alma | wheel |
# Ubuntu / Debian
sudo usermod -aG sudo alice
# RHEL 系
sudo usermod -aG wheel alice
# sudoers を直接編集 (絶対 visudo を使う、構文ミスは visudo が検出)
sudo visudo
# alice ALL=(ALL:ALL) ALL # 全コマンド sudo 可
# alice ALL=(ALL) NOPASSWD: /usr/bin/systemctl # パスワードなしで systemctl のみ
# /etc/sudoers.d/ にファイル単位で配置 (推奨)
echo 'alice ALL=(ALL) NOPASSWD: /usr/bin/apt' | \
sudo tee /etc/sudoers.d/alice
sudo chmod 0440 /etc/sudoers.d/alice
sudo visudo -c # 構文チェック
SSH 鍵の配置
# ユーザー作成後、SSH 鍵を配置するのが定石
sudo -u alice mkdir -p /home/alice/.ssh
sudo -u alice chmod 700 /home/alice/.ssh
sudo cp /tmp/alice_pubkey /home/alice/.ssh/authorized_keys
sudo chown alice:alice /home/alice/.ssh/authorized_keys
sudo chmod 600 /home/alice/.ssh/authorized_keys
# ssh-copy-id (簡単)
ssh-copy-id alice@server
一括作成スクリプト
#!/bin/bash
# users.txt: alice bob carol dave
while read name; do
sudo useradd -m -s /bin/bash -G developers "$name"
pass=$(openssl rand -base64 12)
echo "$name:$pass" | sudo chpasswd
sudo chage -d 0 "$name" # 次回変更必須
echo "$name $pass" >> /tmp/initpass.txt
done < users.txt
FAQ
Q: useradd でホームが作られない
A: Debian / Ubuntu では -m 必須。/etc/default/useradd の CREATE_HOME=yes で既定を変更可。
Q: 既存ユーザーの UID を変えたら所有ファイルが orphan に
A: find / -uid 旧UID -exec chown 新UID {} + で所有者を一括変更してください。
Q: コンテナでルートレスにしたい
A: Dockerfile で RUN useradd -m -u 1001 app + USER app。本番ではほぼ必須のセキュリティプラクティス。