做运维这些年,我越来越有个体会:Linux 服务器上最能体现管理功底的,不是搭集群、搞架构,反而是“新增一个用户”这种不起眼的小事。原因很简单,一个新用户从创建到能用,牵扯到账号权限、Shell 环境、文件归属、安全基线、运维规范,任何一个环节偷懒,都会在后面变成半夜三更的报警消息。
很多刚接触 Linux 的朋友觉得,创建用户嘛,无非是 useradd 加个密码就完事。但真正从“建号”到“能干活”,中间还有一整套初始化工作。这篇文章我就从实际运维的角度,把 Linux 新用户创建及初始化这件事拆开揉碎,从需求规划、命令细节、环境配置、安全加固,到常见故障排查,一次讲透。不管是刚入行的运维新人、偶尔需要管服务器的后端开发,还是准备 Linux 面试的求职者,这都是一份可以直接照着操作的参考。
1. 先想明白:新建用户前要定哪些事
1.1 用户类型与命名规范
动手敲命令之前,先搞清楚你要建的是什么类型的账号。 Linux 里的用户大体分三类:
- 超级用户:UID 为 0,就是 root,拥有系统一切权限。
- 系统用户:也叫伪用户,UID 通常在 1-999(不同发行版有差异),一般给服务进程用,比如 nginx、mysql、sshd 都有自己的系统账号。它们通常不能登录,也没有家目录或家目录在 /var/lib 下。
- 普通用户:UID 从 1000 开始分配,就是给人用的,有独立家目录、可以登录 Shell、适合日常操作。
命名规范这件事,小团队可能无所谓,但稍微正规点的公司都有约定。我建议规则越简单越好,比如用姓名拼音全称或首字母+工号:zhangsan、lisi、wangwu01。千万别用 admin、test 这种一看就随便起的名字,也别用中文、特殊字符,否则后面写脚本、配 sudo、做审计都会很痛苦。
另外要提前定好 UID 分配策略。如果你的服务器要跟 NFS、备份系统、日志采集系统对接,账号 UID 不一致会带来权限错乱。我见过一个真实事故:两台机器上同一个运维账号 UID 不同,导致 NFS 共享目录里的文件一会属于这个用户一会属于另一个用户,排查了很久才发现是 UID 不一致。所以,有条件的话尽量规划一个固定的 UID 段,例如开发人员 UID 从 10000 开始,运维账号 UID 从 20000 开始,好记又不跟系统默认冲突。
1.2 登录方式与权限边界规划
创建用户前还要定一件事:这个账号到底怎么登录、能登录到哪一步。有三种典型情况:
- 需要 SSH 登录服务器,进入命令行操作:分配 /bin/bash 或 /bin/zsh 作为登录 Shell。
- 只需要能访问文件服务或者跑应用,不需要进入 Shell:登录 Shell 设为 /sbin/nologin 或 /bin/false。
- 服务进程专用的账号:不仅不能登录,最好连家目录都不要,或者用一个独立目录只放应用数据。
这个决定要提前做,因为默认 Shell 一旦定错,用户登录体验会非常诡异——比如你能通过 SSH 连上但立马被断开,大多数情况就是登录 Shell 设成了 nologin 而你自己不知道。
权限边界也要提前规划好:这个用户需要 sudo 吗?需要加入哪些附加组?比如想让用户能读取日志,可能得加入 adm 组;想让用户能用 docker 命令,得加入 docker 组;想让用户管理 Web 服务,得考虑将他加入 www-data 组。这些组关系在创建用户时顺手加好,比用户登录后再单独改要干净得多。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 动手创建:adduser 与 useradd 的实战差异
2.1 useradd 参数逐项拆解
Linux 创建用户的核心命令是 useradd(或 adduser,但不同发行版有区别,后面细说)。很多人在这一步就开始踩坑,因为 useradd 的参数实在太多了。我这里把最常用的几个拆开讲。
bash复制sudo useradd -m -d /home/zhangsan -s /bin/bash -G adm,docker -c "Zhang San" -u 10001 zhangsan
逐个解释:
- -m:创建家目录。不加这个参数,系统不会自动建 /home/zhangsan,很多新手漏了这一项,结果用户一登录就提示“No directory, logging in with HOME=/”。
- -d:指定家目录路径。默认是 /home/用户名,除非有特殊需求,一般用默认就行,没必要特意写。
- -s:指定登录 Shell。建议写成 /bin/bash,如果你系统里装了 zsh 也可以写 /usr/bin/zsh。比较稳妥的做法是先执行
which bash或cat /etc/shells查看可用的 Shell 路径,别凭感觉写。 - -G:指定附加组。注意是大写 G,小写 -g 是指定主组。我用 -G 把用户加入 adm 和 docker 组,方便后续管理。多个组用逗号分隔,中间不要有空格。
- -c:用户备注信息。一般写用户真实姓名或岗位,方便后期维护时知道这个账号是谁。
- -u:手动指定 UID。如果你有前面说的 UID 规划,就用这个参数。
创建完用户后,立刻检查一下:
bash复制id zhangsan
ls -ld /hom
