2、Linux用户与组管理基础:用户概念、组概念、UID/GID、/etc/passwd与/etc/shadow文件解析
好,咱们正式开始聊Linux多用户环境。说实话,很多新手刚接触Linux时,最懵的就是这个“多用户”到底是个啥意思。你想想看,一台服务器,就一个屏幕一个键盘,怎么就能同时让好几个人用呢?
其实核心就一句话:Linux天生就是为多人协作设计的。每个登录的人,系统都会给他分配一个身份,这个身份决定了你能干什么、不能干什么。我当年刚入行时,就因为没搞懂用户权限,直接把生产环境的配置文件给改了——嗯,那场面,至今难忘。
2.1 用户概念:你是谁?
在Linux里,用户就是一个登录账号。每个用户都有自己的家目录(/home/用户名),有自己的配置文件,还有自己的一亩三分地。
用户分三种:
- 超级用户(root):权限最大,想删啥删啥。我个人习惯,平时绝对不用root干活,太危险。
- 系统用户:比如
daemon、bin、nobody。这些不是给人用的,是给系统服务用的。比如你装了个MySQL,它自己会创建一个mysql用户来跑进程。 - 普通用户:就是我们平时登录用的账号。权限受限,只能动自己的东西。
2.2 组概念:一群人一起干活
组,说白了就是把多个用户打包成一个集合。比如你们项目组有5个人,都想读写/project这个目录。你总不能一个一个去设权限吧?太累了。
正确做法:创建一个project_team组,把5个人都加进去,然后给这个组设置目录权限。一劳永逸。
组也分两种:
- 基本组(主组):每个用户必须属于一个主组。创建用户时,系统会自动创建一个和用户名同名的组。
- 附加组(附属组):用户可以加入多个附加组,获得额外的权限。
我记得有一次,同事说“我明明在组里,怎么还是没权限?”我一看,他把用户加到了附加组,但没重新登录。记住:组变更后,必须重新登录才能生效。
2.3 UID与GID:数字才是硬道理
系统其实不认用户名,它只认数字。用户ID叫UID,组ID叫GID。就像身份证号一样,每个用户和组都有一个唯一的数字标识。
| UID范围 | 用户类型 | 说明 |
|---|---|---|
| 0 | 超级用户 | 就是root,UID固定为0 |
| 1-999 | 系统用户 | 给服务用的,不能登录 |
| 1000+ | 普通用户 | 我们平时创建的账号 |
2.4 /etc/passwd:用户账户数据库
这个文件,可以说是Linux用户管理的核心。每行代表一个用户,用冒号分隔成7个字段。咱们直接看个例子:
root:x:0:0:root:/root:/bin/bash
zhangsan:x:1000:1000:张三:/home/zhangsan:/bin/bash
7个字段分别是:
- 用户名:登录时用的名字
- 密码占位符:以前这里存密码,现在用
x代替,密码挪到/etc/shadow了 - UID:用户ID
- GID:主组ID
- 描述信息:比如全名、电话等,可填可不填
- 家目录:用户登录后默认进入的目录
- 登录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 知识体系结构图
下面这张图,帮你理清用户和组管理的核心逻辑:
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