Linuxでユーザーを作成する方法|useraddコマンドの使い方を解説

コマンドリファレンス

Linuxで新しいユーザーを作成するには、useradd コマンドを使うのが最も確実な方法です。CentOS・RHEL・Ubuntu・Debianなど、どのディストリビューションでも同じ手順でユーザーアカウントを追加できます。このページでは、最短の作成手順から adduser との違い、ホームディレクトリ作成、パスワード設定、sudo 権限付与、作成後の確認方法まで順を追って解説します。

  1. 結論:最短でユーザーを作成する手順
  2. useraddコマンドとは
  3. useradd と adduser の違い
  4. ディストリビューション別の既定値の違い
  5. 構文(Syntax)
  6. 主なオプション一覧
  7. 基本の使い方
    1. 基本のユーザー作成(-m でホームディレクトリも作成)
    2. シェルを指定してユーザーを作成(-s)
    3. プライマリグループを指定して作成(-g)
    4. 補助グループに追加して作成(-G)
  8. パスワードを設定する
  9. sudo権限を付与する
    1. ユーザー作成時に sudo グループへ追加
    2. 既存ユーザーに sudo 権限を後から付与
  10. 作成したユーザーを確認する
    1. id コマンドで確認
    2. getent passwd で確認
    3. /etc/passwd を直接確認
  11. ユーザー作成時のデフォルト設定
    1. /etc/default/useradd
    2. /etc/skel
  12. ユーザーを削除する
    1. ユーザーのみ削除(ホームディレクトリは残す)
    2. ホームディレクトリごと削除(-r)
  13. よくあるエラーと対処法
    1. Permission denied
    2. useradd: user ‘username’ already exists
    3. ホームディレクトリが作成されない
    4. ログインシェルが意図したものにならない
  14. よくある疑問
    1. useradd と adduser はどちらを使うべきか
    2. -m を付けないとどうなるか
    3. パスワードなしユーザーは作れるか
    4. sudo できるユーザーを作るにはどうするか
    5. システムユーザーと通常ユーザーの違い
  15. 実行例まとめ
    1. 通常ユーザーを作成してパスワードを設定する
    2. sudo 権限付きユーザーを作成する
    3. サービス用システムユーザーを作成する
  16. 関連コマンド
  17. 参考
  18. 関連記事

結論:最短でユーザーを作成する手順

とにかく今すぐユーザーを作成したい場合は、次の3行を順番に実行してください。

# 1. ユーザーを作成(ホームディレクトリも同時に作成)
sudo useradd -m -s /bin/bash username

# 2. パスワードを設定
sudo passwd username

# 3. sudo権限が必要な場合はグループに追加(Ubuntu/Debian系。RHEL/CentOS系はwheel)
sudo usermod -aG sudo username

username は作成したいユーザー名に置き換えてください。各行のオプションの意味やディストリビューションごとの違いは、以降で詳しく解説します。

useraddコマンドとは

useradd はLinuxの低レベルユーティリティで、/etc/passwd/etc/shadow/etc/group などのシステムファイルを直接操作してユーザーを作成します。オプションを明示的に指定する必要があるため、スクリプトや自動化に適しています。

useradd と adduser の違い

Linuxには useraddadduser の2つのユーザー作成コマンドがあります。

コマンド種類特徴
useradd低レベル(C言語製)オプション指定が必要。スクリプト・自動化向け。すべてのLinuxディストリビューションで利用可能。
adduser高レベル(Perlスクリプト)対話的に設定を入力できる。Debian・Ubuntu系のみ標準搭載。デフォルトでホームディレクトリを作成する。

UbuntuやDebianでは対話的に操作できる adduser が便利です。スクリプトや自動化には useradd を使うのが確実です。

注意が必要なのは、RHEL系にも adduser は存在するが、中身が useradd そのものだという点です。Rocky Linux 9 で確認すると、シンボリックリンクになっています。

# Rocky Linux 9 / RHEL 9 / AlmaLinux 9
$ ls -l /usr/sbin/adduser
lrwxrwxrwx 1 root root 7 Dec 29  2025 /usr/sbin/adduser -> useradd

# Debian 12 / Ubuntu
$ head -1 /usr/sbin/adduser
#! /usr/bin/perl

そのためUbuntuの感覚でRHEL系のサーバーに adduser alice と打つと、対話プロンプトは一切出ず、パスワード未設定のユーザーが黙って作られます。ディストリビューションをまたいで作業する場合は、常に useradd をオプション付きで明示するほうが事故がありません。

ディストリビューション別の既定値の違い

useradd は同じコマンド名でも、ディストリビューションによって既定の挙動が異なります。実際に各ディストリのコンテナで useradd alice(オプションなし)を実行して比較しました。

項目Ubuntu / DebianRHEL / Rocky / AlmaLinux
ホームディレクトリ作られない-m が必須)自動で作られる
既定のログインシェル/bin/sh/bin/bash
管理者グループ名sudowheel
adduser対話式のPerlスクリプト(別物)useradd へのシンボリックリンク
# Ubuntu 24.04:-m を付けないとホームが無い
$ useradd alice
$ ls -d /home/alice
ls: cannot access '/home/alice': No such file or directory
$ getent passwd alice
alice:x:1001:1001::/home/alice:/bin/sh

# Rocky Linux 9:同じコマンドでホームもシェルも用意される
$ useradd alice
$ ls -d /home/alice
/home/alice
$ getent passwd alice
alice:x:1000:1000::/home/alice:/bin/bash

Ubuntuの getent の出力では、ホームディレクトリのパス(/home/alice)は記録されているのに実体が存在しません。ログインするとホームに移動できずエラーになります。この違いは /etc/default/useradd に書かれています。

# Ubuntu 24.04
$ grep -E '^(SHELL|HOME)' /etc/default/useradd
SHELL=/bin/sh

# Rocky Linux 9
$ grep -E '^(SHELL|HOME)' /etc/default/useradd
HOME=/home
SHELL=/bin/bash

どのディストリビューションでも同じ結果にしたいなら、既定値に頼らず明示的に指定してください。次の1行はUbuntu・Debian・RHEL系のいずれでも同じユーザーを作ります。

sudo useradd -m -s /bin/bash alice

構文(Syntax)

useradd [オプション] USERNAME

主なオプション一覧

オプション説明使用例
-mホームディレクトリを作成sudo useradd -m alice
-d DIRホームディレクトリのパスを指定sudo useradd -m -d /home/alice alice
-s SHELLログインシェルを指定sudo useradd -m -s /bin/bash alice
-g GROUPプライマリグループを指定sudo useradd -m -g developers alice
-G GROUPS補助グループを指定(カンマ区切り)sudo useradd -m -G sudo,staff alice
-c COMMENTコメント(GECOS フィールド)を設定sudo useradd -m -c "Alice Dev Account" alice
-u UIDユーザーIDを指定sudo useradd -m -u 1500 alice
-e DATEアカウントの有効期限を設定(YYYY-MM-DD)sudo useradd -m -e 2025-12-31 alice
-rシステムユーザーとして作成(サービス用)sudo useradd -r nginx

基本の使い方

基本のユーザー作成(-m でホームディレクトリも作成)

sudo useradd -m username

-m オプションを付けると /home/username が自動的に作成されます。-m を省略するとホームディレクトリが作成されないため、通常のログインユーザーを作成する際は必ず付けてください。

シェルを指定してユーザーを作成(-s)

sudo useradd -m -s /bin/bash username

-s オプションでログインシェルを指定します。指定しない場合はシステムのデフォルトシェル(/bin/sh など)が設定されます。/bin/bash/bin/zsh など、利用可能なシェルは /etc/shells で確認できます。

プライマリグループを指定して作成(-g)

sudo useradd -m -g groupname username

-g オプションでプライマリグループを指定します。指定したグループはあらかじめ存在している必要があります。省略した場合はユーザー名と同名のグループが自動作成されます。

補助グループに追加して作成(-G)

sudo useradd -m -G sudo username

-G オプションで補助グループ(サブグループ)を指定します。複数指定する場合はカンマ区切りで -G sudo,docker のように書きます。

パスワードを設定する

useradd コマンドだけではパスワードが設定されず、ユーザーはパスワード認証でログインできません。ユーザー作成後に必ず passwd コマンドでパスワードを設定してください。

sudo passwd username

実行すると新しいパスワードの入力を2回求められます。

New password:
Retype new password:
passwd: password updated successfully

sudo権限を付与する

作成したユーザーに管理者権限(sudo)を付与するには、sudo グループ(Debian/Ubuntu系)または wheel グループ(RHEL/CentOS系)に追加します。sudo 自体の構文やオプションはsudo コマンドの使い方で詳しく解説しています。

ユーザー作成時に sudo グループへ追加

# Ubuntu/Debian系
sudo useradd -m -s /bin/bash -G sudo username

# RHEL/CentOS系
sudo useradd -m -s /bin/bash -G wheel username

既存ユーザーに sudo 権限を後から付与

すでに作成したユーザーに後から sudo 権限を付与するには usermod を使います。

# Ubuntu/Debian系
sudo usermod -aG sudo username

# RHEL/CentOS系
sudo usermod -aG wheel username

作成したユーザーを確認する

id コマンドで確認

id username

出力例:

uid=1001(username) gid=1001(username) groups=1001(username),27(sudo)

UID・GID・所属グループをまとめて確認できます。

getent passwd で確認

getent passwd username

出力例:

username:x:1001:1001::/home/username:/bin/bash

コロン区切りで「ユーザー名:パスワード(x):UID:GID:コメント:ホームディレクトリ:シェル」が確認できます。

/etc/passwd を直接確認

grep username /etc/passwd

/etc/passwd にユーザー情報が追記されているかを確認できます。作成済みユーザーを一覧でまとめて確認したい場合はLinuxユーザー一覧の確認方法で解説しています。

ユーザー作成時のデフォルト設定

/etc/default/useradd

useradd のデフォルト動作(ホームディレクトリの親パス、デフォルトシェル、アカウント有効期限など)は /etc/default/useradd で管理されています。

cat /etc/default/useradd

出力例:

GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/sh
SKEL=/etc/skel
CREATE_MAIL_SPOOL=no

デフォルトのシェルを変更したい場合はこのファイルの SHELL= を編集します。

/etc/skel

-m でホームディレクトリを作成する際、/etc/skel/ の内容がそのままコピーされます。新規ユーザー全員に共通の設定ファイル(.bashrc.profile など)を配置しておく場所です。

ls -a /etc/skel

ユーザーを削除する

ユーザーを削除するには userdel コマンドを使います。

ユーザーのみ削除(ホームディレクトリは残す)

sudo userdel username

ホームディレクトリごと削除(-r)

sudo userdel -r username

-r を付けるとホームディレクトリとメールスプールも一緒に削除されます。削除前に重要なファイルをバックアップしてください。

よくあるエラーと対処法

Permission denied

useradd: Permission denied.
useradd: cannot lock /etc/passwd; try again later.

原因: useraddsudo なしで実行しています。
対処: sudo useradd ...sudo を付けて実行してください。

useradd: user ‘username’ already exists

useradd: user 'alice' already exists

原因: 同名のユーザーがすでに存在しています。
対処: id alice で確認し、既存ユーザーを使うか別名で作成してください。

ホームディレクトリが作成されない

原因: -m オプションを付けずに実行しています。
対処: sudo useradd -m username-m を付けてください。すでに作成済みの場合は sudo mkhomedir_helper username または手動で sudo mkdir /home/username && sudo chown username:username /home/username で作成できます。

ログインシェルが意図したものにならない

原因: -s オプションを省略したか、/etc/default/useradd のデフォルトシェルが別のシェルに設定されています。
対処: sudo useradd -m -s /bin/bash username と明示的に指定するか、作成後に sudo usermod -s /bin/bash username で変更できます。

よくある疑問

useradd と adduser はどちらを使うべきか

Ubuntu/Debian環境で手動操作する場合は adduser が手軽です。スクリプトや自動化、またはCentOS/RHELなどすべてのLinux環境で動作させたい場合は useradd を使います。

-m を付けないとどうなるか

/home/username が作成されません。ユーザーはログインできますが、ホームディレクトリがない状態になります。通常のログインユーザーには -m を付けることを推奨します。

パスワードなしユーザーは作れるか

作れます。useradd 直後はパスワードが未設定(ロック状態)です。パスワードなしでSSH公開鍵認証のみを使う場合などはそのままで問題ありません。パスワード認証が必要な場合は sudo passwd username で設定してください。

sudo できるユーザーを作るにはどうするか

ユーザー作成時に -G sudo(Ubuntu/Debian)または -G wheel(RHEL/CentOS)を付けます。

sudo useradd -m -s /bin/bash -G sudo username

システムユーザーと通常ユーザーの違い

システムユーザーは -r オプションで作成し、UID が 1000 未満(システムによって異なる)になります。nginxやpostfixなどのサービス実行用アカウントで、ホームディレクトリやログインシェルを持たないのが一般的です。通常ユーザーは UID 1000 以上で、ログインして操作する人間のアカウントです。

実行例まとめ

通常ユーザーを作成してパスワードを設定する

sudo useradd -m -s /bin/bash alice
sudo passwd alice

sudo 権限付きユーザーを作成する

sudo useradd -m -s /bin/bash -G sudo alice
sudo passwd alice

サービス用システムユーザーを作成する

sudo useradd -r -s /usr/sbin/nologin myservice

関連コマンド

  • usermod : 既存ユーザーの属性を変更
  • userdel : ユーザーを削除
  • passwd : ユーザーのパスワードを設定または変更
  • groupadd : グループを作成
  • groups : ユーザーが所属するグループを確認

参考

Bash玄

はじめまして!Bash玄です。

エンジニアとしてシステム運用に携わる中で、手作業の多さに限界を感じ、Bashスクリプトを活用して業務を効率化したのがきっかけで、この道に入りました。「手作業は負け」「スクリプトはシンプルに」をモットーに、誰でも実践できるBashスクリプトの書き方を発信しています。

このサイトでは、Bashの基礎から実践的なスクリプト作成まで、初心者でもわかりやすく解説しています。少しでも「Bashって便利だな」と思ってもらえたら嬉しいです!

# 好きなこと
- シンプルなコードを書くこと
- コマンドラインを快適にカスタマイズすること
- 自動化で時間を生み出すこと

# このサイトを読んでほしい人
- Bashに興味があるけど、何から始めればいいかわからない人
- 定型業務を自動化したい人
- 効率よくターミナルを使いこなしたい人

Bashの世界に一歩踏み出して、一緒に「Bash道」を極めていきましょう!

Bash玄をフォローする

コメント