Linux 使用用户和组身份来标记进程、拥有文件系统对象并做出访问控制决策。人类可读的名称方便管理员使用,而内核主要处理数值标识符和进程凭据。
用户管理 · 第 1 课
用户和组
学习 Linux 如何标识用户和组,以及进程凭据如何影响访问决策。
使用 UID 标识用户
每个账户都有一个数值用户 ID,即 UID。用户名通过系统账户数据库映射到 UID。文件存储的是数值所有权,而工具通常会将其显示为对应名称。
运行 id 检查当前进程的身份信息:
$ id
uid=1000(alice) gid=1000(alice) groups=1000(alice),27(sudo)
具体值因系统而异。人类登录账户通常有 /home/alice 等主目录,但账户也可以使用其他路径,甚至没有普通主目录。服务账户往往用于以受限身份运行软件,而不是支持交互式登录。
内核主要使用哪个标识符表示用户身份?
使用组组织访问权限
组有一个数值组 ID,即 GID。账户通常有一个主组,还可以属于多个附加组。组成员身份让管理员能够一次为一组用户授予访问权限,而无需逐个账户设置权限。
使用以下命令检查成员身份:
$ id alice
$ groups alice
这些命令会报告已配置或解析的身份信息。目录服务和缓存也可能参与,因此直接读取 /etc/group 不一定能显示完整的有效成员关系。
一个 Linux 账户通常可以如何加入组?
理解进程凭据
进程拥有实际和有效 UID、GID 以及附加组等凭据。有效凭据是许多权限检查的核心。用户启动的进程通常从父进程继承凭据,但受控机制可以改变它们。
这比“进程始终只以启动它的用户身份运行”更准确。set-user-ID 可执行文件、服务管理器、容器、命名空间和改变权限的系统调用,都可能影响特定上下文中可见或有效的身份。
内核根据文件权限检查进程时,通常会考虑哪些信息?
认识 root 身份
传统上名为 root 的账户拥有 UID 0。许多 Linux 权限机制会特殊对待 UID 0,使其拥有广泛的管理能力。现代 Linux 也可以通过 capabilities、命名空间、强制访问控制和服务隔离来划分权限,因此“在任何上下文中都拥有无限权力”是一种过度简化。
日常工作应使用非特权账户。管理权限会放大路径错误、不受信任命令和受攻陷软件造成的影响。
哪个数值 UID 传统上标识 root 账户?
在策略控制下使用 sudo
sudo 会询问其配置的策略:调用用户是否可以目标用户身份运行某个命令。默认目标通常是 root,但策略或 -u USER 可以选择其他账户。认证提示和日志记录也取决于配置。
列出当前账户获准运行的命令:
$ sudo -l
只有任务确实需要且你理解其影响时,才使用获准的管理命令。不要只为消除权限错误而使用 sudo,也不要把 /etc/shadow 等密码哈希数据库作为随意练习内容显示出来。
sudo 在运行请求的命令前会做什么?
要在受控环境中练习账户和组管理,可以尝试以下动手实验:
- 使用 useradd、usermod 和 userdel 管理 Linux 用户账户 - 练习用户管理的完整生命周期,从创建和保护新账户到修改和删除账户。
- 使用 groupadd、usermod 和 groupdel 管理 Linux 组 - 练习组管理的核心命令行工具,包括创建新组、修改用户成员身份和删除组。
- 在 Linux 中配置用户账户和 Sudo 权限 - 学习管理用户账户和
sudo权限的重要技术,包括授予管理权限,以增强 Linux 系统安全性。
课程已完成
你已完成 用户和组
现在,你可以说明 Linux 如何表示身份并委派管理命令。
使用 UID 标识账户,使用 GID 标识组。
区分主组和附加组成员身份。
把进程凭据与访问检查联系起来。
认识 UID 0 这一传统 root 身份。
把
sudo视为受策略控制的委派工具。