用useradd创建不带家目录的系统账号,关键用-r参数(自动分配1–999 uid、不建家目录、shell设为/bin/false或/nologin);若非系统用户则加-m强制禁用家目录,并通过getent passwd和ls -ld验证。

在 Linux 中用 useradd 创建不带家目录的系统账号,关键在于跳过默认的家目录创建行为,并正确设置系统用户标识。
使用 -r 参数创建系统用户(自动不建家目录)
useradd -r username 是最常用且推荐的方式。加 -r 选项后:
- 自动分配 UID 范围(通常是 1–999,具体取决于发行版)
- 默认不创建家目录(即使
/etc/login.defs中设置了CREATE_HOME yes) - 不创建邮件池目录(
/var/spool/mail/username) - 默认登录 shell 设为
/bin/false或/usr/sbin/nologin(由SHELL配置项决定)
手动禁用家目录:配合 -M 参数
如果不想标记为系统用户(即不用 -r),但又明确不要家目录,可加 -M(uppercase M):
-
useradd -M username:强制不创建家目录,适用于普通用户或自定义 UID 场景 - 注意:-M 和 -r 可同时使用,但 -r 已隐含 -M,所以通常不重复写
- 若需指定 UID,可追加 -u,例如:
useradd -r -u 88 nginx
验证是否成功创建(无家目录)
创建后建议检查三项:
- 执行
getent passwd username,确认 home 字段为/或/nonexistent(如 Debian/Ubuntu)或空(如 RHEL/CentOS) - 运行
ls -ld /home/username,应提示No such file or directory - 查看
/etc/passwd对应行,第六字段(家目录路径)不应是/home/username
补充说明:避免常见误区
以下操作不会达到“不建家目录”的效果,需注意:
-
useradd -d /dev/null username:只是把家目录指向/dev/null,仍会尝试创建该路径(失败)或留下错误配置 - 删掉已建好的家目录(
rm -rf /home/username):账号已存在,但后续su - username等操作可能报错或行为异常 - 仅靠修改
/etc/login.defs的CREATE_HOME no:对已有命令无效,且 -r 和 -M 优先级更高











