「useraddで追加したはずなのに、ログインできない」
サーバー管理の基本であるユーザー管理は、手順を間違えるとセキュリティ事故に直結します。特に、ユーザーを追加した直後にパスワードを設定し忘れたり、不要な権限を与えてしまったりするトラブルは、現場で非常に多く見かけます。
この記事では、Linuxでユーザーを追加する
useradd コマンド の実践的な使い方を解説します。基本的なユーザー追加から、ホームディレクトリやシェルの指定、グループの設定、sudo権限の付与、そしてサービス専用ユーザーの作り方まで、実務で必要なノウハウをすべて網羅しました。
※
useradd コマンドは root ユーザー、または sudo を付けた状態で実行する必要があります。一般ユーザーで実行すると「Permission denied」エラーになります。useraddコマンドの基本構文
useradd は、Linuxシステムに新しいユーザーアカウントを追加するコマンドです。# 基本書式 # useradd [オプション] ユーザー名
・1. useradd でユーザーを作成する
・2. passwd でパスワードを設定する
・3. 必要に応じてグループや権限を設定する
この流れを押さえたうえで、各ステップの詳細を見ていきましょう。
ユーザーを追加してパスワードを設定する(基本手順)
1. useraddでユーザーを作成する
もっとも基本的な使い方は、ユーザー名だけを指定する方法です。# ユーザー tanaka を追加する # useradd tanaka
2. passwdでパスワードを設定する
ユーザーを追加したら、必ずpasswd コマンドでパスワードを設定してください。これを忘れると、そのユーザーでログインすることができません。# tanaka ユーザーのパスワードを設定する # passwd tanaka Changing password for user tanaka. New password: (パスワードを入力) Retype new password: (再入力) passwd: all authentication tokens updated successfully.
3. ユーザーが正しく作成されたか確認する
ユーザーの情報は/etc/passwd ファイルに記録されます。grep コマンドで確認しましょう。# /etc/passwd でユーザー情報を確認する # grep tanaka /etc/passwd tanaka:x:1001:1001::/home/tanaka:/bin/bash
・tanaka:ユーザー名
・x:パスワード(暗号化パスワードは /etc/shadow に格納)
・1001:UID(ユーザーID)
・1001:GID(プライマリグループID)
・(空欄):コメント(GECOS フィールド)
・/home/tanaka:ホームディレクトリ
・/bin/bash:ログインシェル
パスワードの暗号化情報は
/etc/shadow に保存されています。確認するには root 権限が必要です。# /etc/shadow でパスワードハッシュを確認する # grep tanaka /etc/shadow tanaka:$6$xxxxxxxx...:19789:0:99999:7:::
!! や ! と表示される場合は、パスワードが未設定またはロックされている状態です。主要オプションの解説
1. -m(ホームディレクトリを作成する)
useradd でユーザーを追加した際、ホームディレクトリが自動で作成されるかどうかは、ディストリビューション(Linuxの種類)によって異なります。・RHEL / CentOS / AlmaLinux / Rocky Linux:デフォルトでホームディレクトリが作成される(/etc/login.defs の CREATE_HOME が yes)
・Ubuntu / Debian:
-m オプションを付けないとホームディレクトリが作成されない確実にホームディレクトリを作成したい場合は、
-m オプションを明示的に指定するのが安全です。# ホームディレクトリを明示的に作成する # useradd -m tanaka
2. -d(ホームディレクトリのパスを指定する)
デフォルトでは/home/ユーザー名 にホームディレクトリが作られますが、-d オプションで任意のパスを指定できます。# ホームディレクトリを /opt/users/tanaka に指定する # useradd -m -d /opt/users/tanaka tanaka
3. -s(ログインシェルを指定する)
ログイン時に使用するシェルを指定します。指定しない場合は、/etc/default/useradd に定義されたデフォルトシェル(通常は /bin/bash)が適用されます。# ログインシェルを /bin/bash に指定する # useradd -s /bin/bash tanaka # サービス専用ユーザー(ログイン不可)の場合 # useradd -s /sbin/nologin appuser
/sbin/nologin の活用については、後述の「サービス専用ユーザー」セクションで詳しく説明します。4. -g(プライマリグループを指定する)
ユーザーのプライマリグループ(メイングループ)を指定します。指定しない場合は、ユーザー名と同じ名前のグループが自動で作られます。# プライマリグループを "developers" に指定する # useradd -g developers tanaka
groupadd コマンドで作成しておく必要があります。5. -G(セカンダリグループを指定する)
プライマリグループとは別に、追加のグループ(セカンダリグループ)に所属させる場合は-G オプションを使います。複数のグループを指定する場合はカンマ(,)で区切ります。# セカンダリグループに "wheel" と "developers" を指定する # useradd -G wheel,developers tanaka
6. -c(コメントを指定する)
-c オプションで、ユーザーのフルネームや説明を設定できます。この情報は /etc/passwd の5番目のフィールド(GECOSフィールド)に保存されます。# コメント(フルネーム)を設定する # useradd -c "Tanaka Taro" tanaka
7. -e(アカウントの有効期限を設定する)
-e オプションで、アカウントが無効になる日付を YYYY-MM-DD 形式で指定できます。期間限定の外部委託スタッフのアカウントを作る際に便利です。# アカウントの有効期限を 2026-12-31 に設定する # useradd -e 2026-12-31 tanaka
/etc/skel の役割
useradd でホームディレクトリが作成される際、/etc/skel(スケルトンディレクトリ)の中身がそのまま新しいユーザーのホームディレクトリにコピーされます。# /etc/skel の中身を確認する # ls -la /etc/skel/ total 24 drwxr-xr-x 2 root root 4096 Jan 1 00:00 . drwxr-xr-x 76 root root 4096 Jan 1 00:00 .. -rw-r--r-- 1 root root 18 Jan 1 00:00 .bash_logout -rw-r--r-- 1 root root 141 Jan 1 00:00 .bash_profile -rw-r--r-- 1 root root 312 Jan 1 00:00 .bashrc
.vimrc やプロキシ設定)を配布したい場合は、あらかじめ /etc/skel に配置しておくと、新規ユーザー作成時に自動でコピーされるため便利です。sudo権限の付与(wheelグループへの追加)
一般ユーザーにsudo コマンドの実行権限を与えるには、そのユーザーを wheel グループに追加します。RHEL系(CentOS / AlmaLinux / Rocky Linux)のデフォルト設定では、wheel グループに所属するユーザーが sudo を使用できるようになっています。ユーザー作成時に
-G wheel を指定するのが最も簡単です。# ユーザー作成時に wheel グループへ追加する # useradd -G wheel tanaka # passwd tanaka
usermod コマンドの -aG オプションを使います。# 既存ユーザーを wheel グループに追加する(-a を忘れないこと) # usermod -aG wheel tanaka
-a(append)を付けずに usermod -G wheel tanaka と実行すると、tanaka ユーザーのセカンダリグループが wheel だけに「上書き」されてしまいます。既存のグループ所属がすべて消えるため、-a は必ず付けてください。sudo が正しく使えるか確認するには、以下のように実行します。
# tanaka ユーザーに切り替えて sudo を確認する # su - tanaka $ sudo whoami root
root と表示されれば、sudo 権限は正常に付与されています。※Ubuntu / Debian では
wheel ではなく sudo グループを使用します。usermod -aG sudo tanaka と指定してください。usermodでユーザー情報を変更する
既に作成済みのユーザーの情報を変更するには、usermod コマンドを使います。オプションの指定方法は useradd とほぼ同じです。# ログインシェルを変更する # usermod -s /bin/zsh tanaka # コメント(フルネーム)を変更する # usermod -c "Tanaka Jiro" tanaka # ホームディレクトリを変更する(-m で中身も移動) # usermod -d /home/tanaka_new -m tanaka # セカンダリグループを追加する(-a 必須) # usermod -aG docker tanaka
userdelでユーザーを削除する
不要になったユーザーアカウントは、userdel コマンドで削除します。# ユーザーだけを削除する(ホームディレクトリは残る) # userdel tanaka # ユーザーとホームディレクトリを一緒に削除する # userdel -r tanaka
-r オプションを付けると、ホームディレクトリとメールスプール(/var/spool/mail/ユーザー名)も同時に削除されます。削除前に、そのユーザーのホームディレクトリに重要なデータがないか必ず確認してください。-r を付けずに削除した場合、ホームディレクトリは残ったままになります。所有者のいないファイル(UIDだけが表示される状態)がサーバー上に残り続けるため、不要であれば手動で削除してください。【重要】/sbin/nologin でサービス専用ユーザーを作るセキュリティTips
Webサーバー(Apache / Nginx)やデータベース(MySQL / PostgreSQL)などのサービスは、専用のユーザーで実行するのがセキュリティ上の鉄則です。このようなサービス専用ユーザーは、人間がログインする必要がないため、ログインシェルに/sbin/nologin を指定してログインを禁止します。# サービス専用ユーザーを作成する(ログイン禁止) # useradd -s /sbin/nologin -M appuser
-M オプションは、ホームディレクトリを作成しないという指定です。サービス専用ユーザーにはホームディレクトリが不要なケースがほとんどです。/sbin/nologin が設定されたユーザーでログインしようとすると、以下のようにはじかれます。# nologin ユーザーでログインを試みた場合 # su - appuser This account is currently not available.
トラブルシュート:よくあるエラーと対処法
1. 「useradd: user 'xxx' already exists」エラー
既に同じ名前のユーザーが存在する場合に表示されます。# useradd tanaka useradd: user 'tanaka' already exists
・ユーザーの存在を確認する:
id tanaka または grep tanaka /etc/passwd で確認する・別名にする:用途が異なる場合は、別のユーザー名で作成する
・削除して再作成する:不要なユーザーであれば
userdel tanaka で削除してから再度 useradd を実行する2. ホームディレクトリが作成されない場合
useradd を実行したのにホームディレクトリが存在しない場合は、以下を確認してください。・
-m オプションを付けたか:Ubuntu / Debian では -m を省略するとホームディレクトリが作成されない・
/etc/login.defs の設定を確認する:CREATE_HOME が yes に設定されているか確認する# CREATE_HOME の設定を確認する # grep CREATE_HOME /etc/login.defs CREATE_HOME yes
yes 以外の値になっている場合は、-m オプションを明示的に付けるか、この設定を yes に変更してください。既にユーザーは作成済みだがホームディレクトリだけがない場合は、手動で作成して権限を設定します。
# ホームディレクトリを手動で作成する # mkdir /home/tanaka # cp -a /etc/skel/. /home/tanaka/ # chown -R tanaka:tanaka /home/tanaka # chmod 700 /home/tanaka
本記事のまとめ(useraddオプション早見表)
| やりたいこと | コマンド |
|---|---|
| ユーザーを追加する | useradd ユーザー名 |
| パスワードを設定する | passwd ユーザー名 |
| ホームディレクトリ付きで追加する | useradd -m ユーザー名 |
| ホームディレクトリのパスを指定する | useradd -m -d /パス ユーザー名 |
| ログインシェルを指定する | useradd -s /bin/bash ユーザー名 |
| プライマリグループを指定する | useradd -g グループ名 ユーザー名 |
| セカンダリグループを指定する | useradd -G グループ名 ユーザー名 |
| コメント(フルネーム)を指定する | useradd -c "コメント" ユーザー名 |
| 有効期限を設定する | useradd -e YYYY-MM-DD ユーザー名 |
| ログイン不可ユーザーを作成する | useradd -s /sbin/nologin ユーザー名 |
| sudo権限を付与する(RHEL系) | useradd -G wheel ユーザー名 |
| 既存ユーザーにグループを追加する | usermod -aG グループ名 ユーザー名 |
| ユーザーを削除する(ホームも削除) | userdel -r ユーザー名 |
| ユーザー情報を確認する | grep ユーザー名 /etc/passwd |
ユーザー管理を含むLinuxサーバー構築を体系的に学びたいと思いませんか?
useraddによるユーザー追加は、サーバー構築の入り口にすぎません。権限設定、ネットワーク、セキュリティまで含めた全体像を理解することで、初めて現場で通用するスキルになります。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。
「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。
登録10秒/自動返信でDL/合わなければ解除3秒
<<関連記事>>
・pstree
・chsh
・finger
・du
・uname
