こんにちは!
普段、AlmaLinuxやCentOSなどのRedHat系Linuxを使っている人が、久しぶりにUbuntuやDebianを触ったときに「ほぼ全員が一度は引っかかる落とし穴」があります。
それが、「新規ユーザーを作ったのに、/home/ユーザー名(ホームディレクトリ)が存在しない!」というトラブルです。
今回は、なぜこの現象が起きるのかという理由と、正しい対処法・作成時のコマンドをサクッと解説します!
😱 何が起きるのか?(現象)
RedHat系(RHEL/CentOS等)の感覚で、Ubuntu上で以下のようにユーザーを作成したとします。
sudo useradd hito
sudo passwd hito
これでユーザー「hito」が作成できたので、ログインしたり su - hito で切り替えようとすると……
No directory, logging in with HOME=/
上記のようなエラーが表示され、ルートディレクトリ(/)に放り出されてしまいます。 /home の中を確認しても、hito ディレクトリは影も形もありません。
🔍 原因:UbuntuとRedHat系で useradd の初期値が違う!
実は、useradd というコマンド自体はLinux共通の低レベルなコマンドですが、「オプションなしで実行したときのデフォルト動作(初期設定)」がOSによって異なります。
-
RedHat系(RHEL, CentOS, AlmaLinuxなど)
-
デフォルトで
-m(ホームディレクトリを作成する)オプションが有効になっている。
-
-
Debian / Ubuntu系
-
デフォルトでは
-mオプションが無効(作成しない) になっている。
-
つまり、Ubuntuで useradd をそのまま打つと、「ホームディレクトリ無しのシステムユーザー的なアカウント」が作られてしまうのが原因です。
🛠️ 対処法1:【すでに作ってしまった場合】後からホームディレクトリを作る
「もう useradd でユーザーを作っちゃったよ!」という場合は、後からホームディレクトリを作成して紐付けることができます。
1. ホームディレクトリを作成&初期ファイルをコピー
# -m オプションで既存ユーザーにホームディレクトリを作成
sudo mkhomedir_helper hito
※ もし mkhomedir_helper が使えない場合は、手動で作って所有権を変更します。
# 手動で作成する場合の例
sudo mkdir -p /home/hito
sudo cp -r /etc/skel/. /home/hito/
sudo chown -R hito:hito /home/hito
2. ユーザーのホームディレクトリパスとシェルを設定
useradd だけだとデフォルトシェルが /bin/sh(機能が乏しいシェル)になっていることも多いため、/bin/bash に変更しておきます。
sudo usermod -d /home/hito -s /bin/bash hito
💡 対処法2:【これから作成する場合】Ubuntuでの正しいユーザー作成コマンド
今後Ubuntuでユーザーを作成する際は、以下のいずれかの方法を使いましょう。
パターンA:adduser コマンドを使う(✨最もおすすめ)
Ubuntu/Debian系には、useradd の上位互換(対話型スクリプト)である adduser コマンドが用意されています。
sudo adduser hito
実行すると対話形式でパスワードの設定やホームディレクトリの作成(/etc/skel からの環境ファイルコピー)、デフォルトシェルの設定(/bin/bash)まですべて自動で完璧にセットアップしてくれます。
パターンB:useradd に -m オプションをつける
どうしても useradd コマンドで作成したい場合は、明示的に -m オプション(ホーム作成)と -s オプション(シェル指定)を付与します。
sudo useradd -m -s /bin/bash hito
📝 まとめ
-
RedHat系:
useraddだけで勝手にホームディレクトリが作られる -
Ubuntu系:
useraddだけだとホームディレクトリが作られない
Ubuntuでユーザーを追加するときは、「とりあえず sudo adduser ユーザー名 を使う!」と覚えておくのが一番安全で手軽です。
他OSからUbuntuに引っ越してきた方や、サーバー構築でスクリプトを組む方はぜひ注意してくださいね!
