记得我刚接触Linux那会儿,觉得用户管理不就是useradd加个用户、passwd设个密码吗?直到后来在真实的服务器上吃了几次亏——同事离职后账号没禁用、有人拿着root密码到处登录、一个usermod把人家从附加组里踢出去导致服务起不来——才意识到用户与组管理是整个Linux运维体系的地基。地基没打好,上面跑再花哨的服务都是危房。这篇东西不打算按手册给你罗列命令,而是从“为什么要这么管”的角度,把用户、组、权限、sudo授权这些事一次聊透。适合刚接手服务器的新手,也适合那些 command 背得熟但没形成体系的运维同学对照查漏。
1. 用户不是用户名:先搞清楚Linux账号体系的底层逻辑
很多人用了很久Linux,依然搞不清用户、UID、用户组之间的关系。这不怪你,因为日常操作中你很少直接跟UID打交道,但一旦涉及用户删除、文件归属排查、权限异常,看不懂底层逻辑就会一脸懵。
1.1 UID才是用户的真正身份
Linux内核不认用户名,它只认UID(User ID,用户ID)。用户名是给人看的,UID是给内核用的。你在终端敲ls -l看到的所有者叫root,本质上内核记录的是UID 0,只是通过/etc/passwd把这个数字翻译成了root。
打个比方:UID就像身份证号,用户名像是名字。你可以改名,但身份证号不会变。如果两个用户不小心用了同一个UID,在系统看来他们就是同一个人,彼此的家目录、文件权限完全互通。这在生产环境是严重事故级别的配置错误。
查看一个用户的UID很简单:
bash复制id zhangsan
uid=1001(zhangsan) gid=1001(zhangsan) groups=1001(zhangsan)
也可以用getent直接查passwd数据库:
bash复制getent passwd zhangsan
zhangsan:x:1001:1001::/home/zhangsan:/bin/bash
每一段用冒号分隔,含义依次是:用户名、密码占位符、UID、主组GID、备注信息、家目录、登录Shell。
1.2 四个配置文件决定了你能怎么登录
用户管理绕不开四个文件,它们共同构成了本地账号体系的“数据库”:
/etc/passwd:存储用户基本信息,包括用户名、UID、GID、家目录、Shell。注意,这里的密码字段永远是x,真正的密码在shadow里。/etc/shadow:存储加密后的密码哈希、密码最后修改时间、有效期、失效时间等安全策略信息。只有root或shadow组可读。/etc/group:存储组信息,包括组名、GID、组成员列表。/etc/gshadow:存储组密码及组管理员信息,日常用得少,但组密码机制存在。
这四个文件必须保持一致。很多新手图省事直接vim /etc/passwd改文件,一旦语法写错,轻则用户无法登录,重则系统都进不去。所以我一直强调:能用命令就别手改文件,命令底层会帮你做一致性校验。
看shadow文件了解密码策略时,重点看这几个字段:
bash复制zhangsan:$6$rounds=656000$...:18923:0:99999:7:::
从前往后依次是:登录名、密码哈希、最近修改时间(从1970-01-01起算的天数)、密码最少使用天数、密码最长使用天数、过期前警告天数。一个账号如果被人为锁定,通常哈希字段前面会出现!或*前缀。
1.3 用户的默认值从哪来
useradd创建用户时,UID、家目录路径、Shell、密码过期策略等默认值并不是写死在代码里的,而是从配置文件中读取:
/etc/default/useradd:定义默认的家目录基路径、默认Shell、默认的SKEL目录(用户家目录的模板来源)等。/etc/login.defs:定义UID/GID范围、密码过期天数、创建家目录时的默认umask等。
我自己习惯在装机后先看一眼/etc/login.defs里的几个关键项:
bash复制grep -E "^(UID_MIN|UID_MAX|SYS_UID_MIN|SYS_UID_MAX|CREATE_HOME|UMASK|PASS_MAX_DAYS|PASS_MIN_DAYS)" /etc/login.defs
比如CREATE_HOME如果被设成no,你执行useradd zhangsan就不会自动创建家目录,到时候用户登进去发现自己连home都没有,容易当场懵掉。
还有一个隐藏的模板目录:/etc/skel。你新建用户后,家目录里默认出现的.bashrc、.profile、.bash_logout等文件,全部是从这个目录复制过去的。想给所有新用户统一加一个自定义环境变量,直接往/etc/skel/.bashrc里写就行,省得一个一个用户去配置。这一点对批量交付服务器账号特别有用。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 用useradd建一个用户很简单,但“建好”是另一回事
我见过太多新手建用户的方式:useradd zhangsan,然后passwd zhangsan设个密码,就认为完事了。实际上这样建出来的用户只能说是“能用”,距离“好用”和“安全”还差好几步。
2.1 useradd和adduser不是一回事
这个问题在Ubuntu系和CentOS系的表现还不一样。简单说:
useradd是Linux原生的底层命令,所有发行版都有,参数丰富但不会帮你生成密码、不会帮你创建家目录(取决于配置),也不会问你任何问题。adduser在Debian/Ubuntu系是一个Perl脚本,封装了useradd,会以交互式问答的方式引导你完成创
