在Linux系统中,添加新用户主要依赖两个命令:useradd和adduser。前者是所有发行版都自带的底层工具,后者多见于Debian系,是一个perl编写的交互式封装脚本。理解它们的工作方式,是服务器账号管理的基础。

一、useradd命令的基本用法
useradd是最标准的创建用户命令,它在绝大多数Linux发行版中都能直接使用。默认情况下,如果不加任何参数,useradd只会在/etc/passwd中登记一条记录,而不会自动创建家目录,也不会设置密码。这种“裸创建”方式常让新手困惑:为什么新用户登录后找不到个人目录。
为了创建一个功能完整的用户,我们通常要显式指定参数。例如使用-m参数强制生成家目录,-s参数设定登录shell,-G参数将其加入附加组。下面这段命令创建了一个名为dev01的账号,生成/home/dev01目录,并使用bash作为默认shell:
# 创建用户并指定家目录和shell sudo useradd -m -s /bin/bash -G sudo dev01 # 为用户设置初始密码 sudo passwd dev01 # 验证用户与所属组 id dev01
上面的代码中,-m代表make home directory,若系统未配置CREATE_HOME策略则必须手动加。-G sudo把用户放进sudo组,使其具备管理员提权能力。执行passwd后,系统会提示输入两次密码,该密码经哈希后写入/etc/shadow。最后用id命令可确认uid、gid及附属组是否如预期。
useradd还有一个重要特性:它支持-D参数查看或修改默认配置。比如默认shell、默认组范围都定义在/etc/default/useradd里。当你需要在批量部署时统一规则,直接改这个文件比每条命令都写全参数更省事。
二、adduser命令的交互优势
在Ubuntu、Debian等系统中,adduser是一条更友好的路径。它本质上是个脚本,在后台调用useradd,但会自动询问密码、全名、电话等信息,并默认建好家目录。对于不常敲命令的运维人员,这种引导式创建能显著降低出错率。
执行sudo adduser test02后,终端会依次提示输入密码、确认密码、用户全名等字段,回车跳过非必填项即可。整个过程无需记忆参数,脚本会按/etc/adduser.conf中的模板复制骨架文件到新家目录,比如.bashrc、.profile等,让登录环境开箱即用。
# Debian系交互式添加用户 sudo adduser test02 # 输出示例(交互部分省略) # Adding user `test02' ... # Adding new group `test02' (1001) ... # Adding new user `test02' (1001) with group `test02' ...
adduser的缺点是并非所有发行版都预装,CentOS等Red Hat系默认只有useradd。此外它在非交互脚本中调用时,需要借助--disabled-login或环境变量来绕过提问,不如useradd那样适合写进自动化playbook。
从权限管控角度看,adduser创建的用户同样受/etc/login.defs约束,比如密码最长有效期、uid最小值等。因此无论用哪种命令,底层安全策略是一致的,区别仅在于前台封装程度。
三、创建后的校验与常见问题
用户建完后,第一件事应是确认账号确实可用。除了前面提到的id命令,还可以直接尝试切换身份:su - dev01进入其环境,看家目录是否正确、命令提示符是否正常。若提示“无法分配终端”或“主目录不存在”,多半是忘了加-m或父目录权限不对。
另一个易错点是用户组冲突。当你用useradd -G指定多个组时,组名必须已存在,否则命令报错。下面用表格列出两条命令在关键行为上的差异,方便按场景选用:
| 对比项 | useradd | adduser |
|---|---|---|
| 家目录默认创建 | 否,需-m | 是 |
| 交互式提问 | 否 | 是 |
| 适用发行版 | 全平台 | Debian系为主 |
| 批量脚本友好度 | 高 | 低 |
如果误建了用户,可用userdel -r dev01连同家目录一起删除,避免残留文件占用磁盘。对于需要限定登录权限的账号,还可将shell设为/sbin/nologin,使其仅能用于ftp或程序运行,无法交互登入。
提示:生产环境建议统一用useradd配合配置管理工具下发,既保证一致性,也方便审计每条账号的创建参数。
四、结合配置文件做标准化
当机器数量变多,手动敲命令难免疏漏。此时可以修改/etc/default/useradd,把SHELL设为/bin/bash,HOME设为/home,GROUP设为100,这样以后跑useradd zhangsan就会自动套用规则。类似地,/etc/skel目录里的文件会作为家目录模板被复制,你可以把公司通用的vim配置、ssh授权模板放进去。
下面示例展示如何查看并调整默认配置,让后续添加用户更省心:
# 查看当前useradd默认值 sudo useradd -D # 修改默认shell为bash sudo useradd -D -s /bin/bash # 修改默认家目录基路径 sudo useradd -D -b /home
经过这番设置,团队新成员上机时,你只需一条useradd -m lisi便能交付一个环境完备的账号。结合passwd与visudo分配sudo权限,整套账号生命周期管理就清晰可控了。
最后强调一点:无论用哪种方式添加用户,都要遵循最小权限原则。不要默认把所有人塞进sudo组,按角色建组再授权,后期排查问题会轻松很多。
useraddadduserlinux_user_management修改时间:2026-08-03 03:36:29