2、Linux用户与组管理基础:用户概念、组概念、UID/GID、/etc/passwd与/etc/shadow文件解析

好,咱们正式开始聊Linux多用户环境。说实话,很多新手刚接触Linux时,最懵的就是这个“多用户”到底是个啥意思。你想想看,一台服务器,就一个屏幕一个键盘,怎么就能同时让好几个人用呢?

其实核心就一句话:Linux天生就是为多人协作设计的。每个登录的人,系统都会给他分配一个身份,这个身份决定了你能干什么、不能干什么。我当年刚入行时,就因为没搞懂用户权限,直接把生产环境的配置文件给改了——嗯,那场面,至今难忘。

2.1 用户概念:你是谁?

在Linux里,用户就是一个登录账号。每个用户都有自己的家目录(/home/用户名),有自己的配置文件,还有自己的一亩三分地。

用户分三种:

  • 超级用户(root):权限最大,想删啥删啥。我个人习惯,平时绝对不用root干活,太危险。
  • 系统用户:比如daemonbinnobody。这些不是给人用的,是给系统服务用的。比如你装了个MySQL,它自己会创建一个mysql用户来跑进程。
  • 普通用户:就是我们平时登录用的账号。权限受限,只能动自己的东西。
我的经验: 很多新手喜欢用root装软件,结果装完发现普通用户用不了。为啥?因为环境变量、文件权限都没配。我建议:装软件用root,日常操作切回普通用户。

2.2 组概念:一群人一起干活

组,说白了就是把多个用户打包成一个集合。比如你们项目组有5个人,都想读写/project这个目录。你总不能一个一个去设权限吧?太累了。

正确做法:创建一个project_team组,把5个人都加进去,然后给这个组设置目录权限。一劳永逸。

组也分两种:

  • 基本组(主组):每个用户必须属于一个主组。创建用户时,系统会自动创建一个和用户名同名的组。
  • 附加组(附属组):用户可以加入多个附加组,获得额外的权限。

我记得有一次,同事说“我明明在组里,怎么还是没权限?”我一看,他把用户加到了附加组,但没重新登录。记住:组变更后,必须重新登录才能生效

2.3 UID与GID:数字才是硬道理

系统其实不认用户名,它只认数字。用户ID叫UID,组ID叫GID。就像身份证号一样,每个用户和组都有一个唯一的数字标识。

UID范围 用户类型 说明
0 超级用户 就是root,UID固定为0
1-999 系统用户 给服务用的,不能登录
1000+ 普通用户 我们平时创建的账号
避坑指南: 我曾经手贱,把两个用户的UID改成一样的。结果呢?两个用户的家目录、文件权限全乱套了。系统以为他们是同一个人。千万别这么干!

2.4 /etc/passwd:用户账户数据库

这个文件,可以说是Linux用户管理的核心。每行代表一个用户,用冒号分隔成7个字段。咱们直接看个例子:

root:x:0:0:root:/root:/bin/bash
zhangsan:x:1000:1000:张三:/home/zhangsan:/bin/bash

7个字段分别是:

  1. 用户名:登录时用的名字
  2. 密码占位符:以前这里存密码,现在用x代替,密码挪到/etc/shadow
  3. UID:用户ID
  4. GID:主组ID
  5. 描述信息:比如全名、电话等,可填可不填
  6. 家目录:用户登录后默认进入的目录
  7. 登录Shell:用户使用的命令行解释器,一般是/bin/bash

你想想看,如果我把zhangsan的Shell改成/sbin/nologin,那他就没法登录系统了。这个技巧常用于创建服务账号。

2.5 /etc/shadow:密码的保险柜

这个文件比/etc/passwd敏感得多。只有root能读。它存的是加密后的密码和密码策略信息。

zhangsan:$6$xyz123$加密字符串:18900:0:99999:7:::

9个字段,咱们挑重点说:

  • 加密密码$6$表示SHA-512加密算法。如果是$y$,那是yescrypt,更安全。
  • 上次修改时间:从1970年1月1日到上次改密码的天数
  • 最小修改间隔:多少天内不能改密码,0表示无限制
  • 最大有效期:密码多少天后过期,99999表示几乎永不过期
  • 警告天数:密码过期前多少天开始提醒
核心要点: 密码字段如果是!!*,表示账号被锁定,无法登录。我常用这个方法来临时禁用离职员工的账号。

2.6 知识体系结构图

下面这张图,帮你理清用户和组管理的核心逻辑:

Linux用户与组管理知识体系 用户管理 • 超级用户 (root, UID=0) • 系统用户 (UID 1-999) • 普通用户 (UID 1000+) • 每个用户有唯一UID 组管理 • 基本组(主组,默认创建) • 附加组(附属组,手动加入) • 每个组有唯一GID • 一个用户可属于多个组 核心文件 • /etc/passwd:用户账户信息 用户名:密码:UID:GID:描述:家目录:Shell • /etc/shadow:加密密码与策略 用户名:加密密码:修改时间:有效期... 权限控制 • 文件所有者(User) • 文件所属组(Group) • 其他用户(Others) • 读(r) 写(w) 执行(x) 权限

2.7 实战小技巧

最后,分享几个我常用的命令,你直接拿去用:

# 查看当前用户
whoami

# 查看用户所属组
groups zhangsan

# 查看所有用户(从passwd文件)
cat /etc/passwd | cut -d: -f1

# 查看用户UID和GID
id zhangsan

# 创建用户并指定家目录
useradd -m -d /home/zhangsan zhangsan

# 修改用户密码
passwd zhangsan

# 将用户加入附加组
usermod -aG docker zhangsan
我的习惯: 每次创建新用户后,第一件事就是passwd 用户名设置密码。别指望系统默认密码,那玩意儿根本不存在。不设密码,账号就是废的。

嗯,用户和组管理这块,说白了就是搞清楚“谁是谁”、“谁能干什么”。你只要把/etc/passwd/etc/shadow这两个文件吃透了,Linux权限管理就入门了八成。剩下的,就是多动手、多踩坑。


公众号:蓝海资料掘金营,微信deep3321