用戶管理是 Linux 運維基礎操作,但「No directory, logging in with HOME=/」「userdel: user is currently logged in」等報錯讓新手抓狂。本文總結高頻坑點與標準化解決方案。
su - newuser
No directory, logging in with HOME=/
useradd newuser 默認不創建家目錄,也不複製骨架文件(/etc/skel)。用戶登錄時無家目錄可進入,Shell 退回根目錄 /。
# 一次性完成:創建用戶、家目錄、指定 Shell、指定主組、設置密碼
useradd -m -s /bin/bash -g users newuser
passwd newuser
-m / --create-home:創建家目錄(/home/newuser)並複製 /etc/skel 內容。-s /bin/bash:指定登錄 Shell(默認 /bin/sh,體驗差)。-g users:指定主組(默認創建同名組)。mkdir /home/newuser
cp -r /etc/skel/. /home/newuser/
chown -R newuser:newuser /home/newuser
chmod 700 /home/newuser
userdel newuser
userdel: user newuser is currently logged in
# 或
userdel: user newuser is currently used by process 1234
/var/run/utmp、/var/log/wtmp)。
ps -u newuser
# 或
pgrep -u newuser
kill -9 $(pgrep -u newuser)
# utmp 記錄當前登錄會話,wtmp 記錄歷史
# 直接刪除 utmp 會導致 who、w 命令異常,建議重啟或用 utmpdump 修復
# 簡單暴力:重啟系統(最乾淨)
reboot
userdel -r -f newuser
# -r 刪除家目錄和郵件池
# -f 強制刪除即使用戶有進程或殘留文件
# 可能報警告:cannot remove /var/mail/newuser: No such file 或 home directory not found,但用戶實際已從 /etc/passwd、/etc/shadow、/etc/group 移除
$ 而非 user@host:~$)默認 /bin/sh(通常指向 dash 或精簡 bash)不支持命令補全、歷史記錄、彩色提示符等交互特性。始終顯式指定 -s /bin/bash。
# 修改主組(-g)會清除附加組(-G),需同時指定
usermod -g newgroup -G group1,group2 user
# 僅添加附加組(保留原有)
usermod -aG docker user # -a 關鍵:append
userdel -r 會刪除家目錄、郵件池,但不會刪除其他位置屬於該 UID 的文件(如 /tmp、/var/www、數據目錄)。find / -uid 1001 -ls 掃描全盤殘留文件,遷移或刪除;生產環境禁用 UID 復用,分配新 UID。| 操作 | 推薦命令 | 關鍵點 |
|---|---|---|
| 創建用戶 | useradd -m -s /bin/bash -g group user | 家目錄、Bash、主組一次到位 |
| 設置密碼 | passwd user | 交互式輸入兩次 |
| 添加附加組 | usermod -aG group user | -a 追加不覆蓋 |
| 修改 Shell | chsh -s /bin/bash user | 或 usermod -s |
| 鎖定/解鎖 | usermod -L/-U user | 在 /etc/shadow 密碼前加 ! |
| 刪除用戶 | userdel -r user | 先 kill -9 $(pgrep -u user) |
| 查看用戶信息 | id user、groups user、finger user | UID、GID、組列表、家目錄、Shell |
原文參考: Linux中添加用戶、刪除用戶時新手可能遇到的問題