はじめに (対象読者・この記事でわかること)

本記事は、Linux のシステム管理に携わるエンジニアや、個人でサーバーを運用している方、そしてコマンドラインによるユーザー管理を学びたい初心者・中級者を対象としています。
この記事を読むことで、useradd コマンドの基本的な使い方だけでなく、グループ設定、ホームディレクトリの自動作成、シェル指定、UID/GID の手動割り当て、さらにはパスワード設定やロックアウトといった実務で頻出するシナリオに対応できるようになります。
実務で遭遇しやすいエラーやトラブルの原因と対策も併せて解説するため、設定ミスによる障害を未然に防げる知識が身に付くでしょう。

前提知識

この記事を読み進める上で、以下の知識があるとスムーズです。

  • Linux の基本的なファイルシステム構造(/etc/passwd, /etc/shadow など)
  • ターミナル操作と基本的なシェルコマンド(cat, grep, sudo 等)

useradd コマンドの概要と背景

Linux 系 OS では、システムに新しいユーザーを追加する際に useradd コマンドが標準で提供されています。useradd/etc/passwd にエントリを追加し、必要に応じて /etc/shadow へパスワード情報を格納、さらにホームディレクトリや初期設定ファイル(.bashrc, .profile など)を自動生成します。

このコマンドが重要視される背景には、以下のような点があります。

  1. 一貫性の確保
    手動で /etc/passwd を書き換えるとヒューマンエラーが起きやすいですが、useradd は内部で必要なチェックとデフォルト設定を自動的に行うため、ミスが減ります。

  2. スクリプト化と自動化
    大規模なサーバー群でユーザーを一括追加する場合、シェルスクリプトや構成管理ツール(Ansible, Chef 等)から useradd を呼び出すだけで統一的な設定が可能です。

  3. セキュリティポリシーの適用
    UID/GID の範囲やデフォルトシェル、ホームディレクトリのパーミッションといったポリシーを /etc/default/useradd/etc/login.defs に事前設定しておけば、useradd がそれらを自動継承します。

本節では、まず useradd の基本構文と代表的オプションを一覧表で示し、続いてそれぞれがどのようなシナリオで有効になるかを具体例とともに解説します。

オプション 説明 使用例
-m ホームディレクトリを自動作成 useradd -m alice
-d <dir> ホームディレクトリを指定 useradd -d /srv/www bob
-s <shell> ログインシェルを指定 useradd -s /bin/zsh carol
-u <uid> UID を明示的に設定 useradd -u 1500 dave
-g <gid> プライマリグループを指定 useradd -g developers eve
-G <group1,group2> 補助グループをカンマ区切りで指定 useradd -G wheel,staff frank
-c "<comment>" GECOS フィールド(コメント)に情報を入れる useradd -c "テストユーザー" grace
-e <date> アカウント有効期限(YYYY-MM-DD) useradd -e 2025-12-31 hank
-L アカウントロック(パスワード無効化) useradd -L iris
-f <days> パスワード失効後、ロックまでの猶予日数 useradd -f 30 jack

代表的なユースケース

  • 開発環境の自動セットアップ
    CI/CD パイプライン内で新規開発者用アカウントを自動作成し、SSH キーを配置する一連のスクリプトに useradd -m -s /bin/bash -G docker devuser を組み込む。

  • システムサービス用ユーザー
    Nginx、PostgreSQL 等のデーモンは専用ユーザーで最小権限で動作させるべきです。useradd -r -s /usr/sbin/nologin -M www-data のように -r(システムユーザー)と -M(ホームディレクトリ不要)を併用します。

  • 期限付きアカウント
    アルバイトや一時的な協力者向けに有効期限を設定し、期限が過ぎると自動でログイン不可にする。useradd -e 2025-03-31 -f 0 tempuser とすれば、期限を過ぎた瞬間にロックされます。

useradd の実践的な使い方とトラブルシューティング

この章では、実際にコマンドを実行しながら、典型的なシナリオ別に手順を追って解説します。サンプルコードやシェルスクリプトも交えて、読者がその場で試せるように構成しています。

ステップ1:基本的なユーザー追加

Bash
# root 権限で実行 sudo useradd -m -s /bin/bash -c "山田太郎" taro # パスワード設定 sudo passwd taro
  • -m によって /home/taro が作成され、デフォルトシェルは /bin/bash に設定されます。
  • -c で GECOS フィールドに「山田太郎」というフルネームを保存できます。

確認方法

Bash
getent passwd taro # 出力例: taro:x:1001:1001:山田太郎:/home/taro:/bin/bash

ステップ2:グループと補助グループの設定

Bash
# まず、プライマリグループを作成(必要なら) sudo groupadd devteam # ユーザーにプライマリグループ devteam と補助グループ sudo, docker を付与 sudo useradd -m -g devteam -G sudo,docker -s /bin/zsh hanako sudo passwd hanako
  • -g でプライマリグループ、-G で補助グループを一度に設定できます。
  • 補助グループはカンマで区切り、スペースは入れない点に注意してください。

ハマった点やエラー解決

エラー例 1:useradd: cannot lock /etc/passwd; try again later.

原因
/etc/passwd/etc/shadow がロックされている(別プロセスが編集中)か、ファイルシステムが読み取り専用になっている。

解決策

Bash
# ロックファイルの確認と削除 sudo rm -f /etc/passwd.lock /etc/shadow.lock # 再度コマンド実行 sudo useradd -m testuser

エラー例 2:useradd: UID '1000' already exists

原因
指定した UID が既に使用中で衝突している。

解決策

  • 明示的に別の UID を指定する
    bash sudo useradd -u 2001 newuser
  • もしくは -U オプションで自動的に利用可能な UID を割り当てさせる

エラー例 3:useradd: cannot create directory /home/guest: Permission denied

原因
/home ディレクトリのパーミッションが root でなく一般ユーザーになっている、もしくは SELinux の制約。

解決策

Bash
# /home の所有者と権限を修正 sudo chown root:root /home sudo chmod 755 /home # 再実行 sudo useradd -m guest

高度な設定例:パスワード期限とアカウントロック

Bash
# パスワード有効期限を 90 日、警告期間を 7 日に設定 sudo useradd -m -e $(date -d "+90 days" +%Y-%m-%d) -f 7 -c "期限付きユーザー" tempuser # 初期パスワードはロックしておく sudo passwd -l tempuser
  • -e で有効期限日付(YYYY-MM-DD)を設定。date コマンドで 90 日後の日付を動的に取得しています。
  • -f 7 は期限切れから 7 日後に自動ロックさせる設定です。
  • passwd -l でパスワードをロックし、管理者が手動で有効化できるようにしています。

カスタムスクリプト例:CSV から一括ユーザー作成

Bash
#!/bin/bash # users.csv の形式: username,full_name,primary_group,home_dir,shell while IFS=, read -r user full group home shell; do sudo useradd -m -c "$full" -g "$group" -d "$home" -s "$shell" "$user" echo "Created user: $user" done < users.csv
  • CSV ファイルを用意すれば、数百人単位のユーザーを自動で追加可能です。
  • スクリプト実行前に users.csv の内容と権限を必ず確認してください。

まとめ

本記事では、Linux の useradd コマンドの基本から高度なオプション活用、実務で役立つスクリプト例、そしてよく遭遇するエラーとその対処法までを網羅的に解説しました。

  • 基本的なユーザー追加-m, -s, -c)と グループ管理-g, -G
  • セキュリティ設定(UID/GID 指定、パスワード期限、アカウントロック)
  • トラブルシューティング(ロックファイル、UID 重複、ディレクトリ権限)

この記事を通じて、読者は useradd を自在に操り、システムのユーザー管理を安全かつ効率的に行えるようになるはずです。次回は、usermoduserdel に焦点を当て、既存ユーザーの変更や削除、さらに LDAP 連携のベストプラクティスについて扱う予定です。

参考資料