Linux如何识别每个用户
Linux如何识别每个用户详细介绍
在 Linux 系统中,用户的识别主要通过 用户标识符(UID) 和 用户组标识符(GID) 实现,结合系统文件存储的用户信息和认证机制。以下是具体细节:
一、用户标识的核心要素
- 用户 ID(UID)
- 唯一标识:每个用户在系统中对应一个唯一的整数 ID(UID),是系统底层识别用户的核心依据(而非用户名)。
- 特殊 UID:
UID=0:超级用户(root),拥有最高权限。UID=1~999:系统用户(如daemon、nobody),用于运行服务,通常不允许登录。UID≥1000:普通用户(由管理员或useradd创建)。
- 用户组 ID(GID)
- 每个用户属于至少一个用户组,主组的 GID 记录在用户信息中,附加组通过组文件单独管理。
二、用户信息存储文件
/etc/passwd(明文,所有用户可读)- 存储用户基本信息,每行格式:plaintext
用户名:密码占位符:UID:GID:用户说明:家目录:登录Shell例如:root:x:0:0:root:/root:/bin/bash
- 字段含义:
- 密码占位符(
x):实际密码存储在/etc/shadow中。
- 密码占位符(
- 存储用户基本信息,每行格式:plaintext
/etc/shadow(仅 root 可读)- 存储用户密码及相关属性(如密码过期时间),每行格式:plaintext
用户名:加密密码:密码最后修改时间:最短修改间隔:最长修改间隔:警告期限:非活跃期:过期时间:保留
- 存储用户密码及相关属性(如密码过期时间),每行格式:plaintext
/etc/group(用户组信息)- 存储组名、GID 和组成员,每行格式:plaintext
组名:密码占位符:GID:组成员(逗号分隔,如用户属于附加组则记录在此)例如:admin:x:1000:user1,user2
- 存储组名、GID 和组成员,每行格式:plaintext
三、用户认证与登录
- 认证机制
- 通过 PAM(可插拔认证模块) 处理登录验证,支持密码、密钥、生物识别等方式。
- 登录时,系统根据
UID确定用户权限,如 root 用户可绕过部分权限检查。
- 会话上下文
- 用户登录后,进程会继承用户的 UID 和 GID,可通过
id命令查看:bashuser1 user1 user1,10wheel,20dialout
- 用户登录后,进程会继承用户的 UID 和 GID,可通过
四、权限控制与文件访问
- 文件权限
- 每个文件 / 目录关联 所有者 UID、所属组 GID,权限分为读(r)、写(w)、执行(x),通过
chown/chgrp命令修改。 - 示例:若文件所有者 UID 为 1000,则只有该用户或 root 可修改其内容。
- 每个文件 / 目录关联 所有者 UID、所属组 GID,权限分为读(r)、写(w)、执行(x),通过
- 附加组(Supplementary Groups)
- 用户可属于多个附加组(记录在
/etc/group),登录时加载所有附加组的 GID,扩展文件访问权限。
- 用户可属于多个附加组(记录在
五、分布式用户管理(扩展)
- NSS(名称服务切换):通过
/etc/nsswitch.conf配置用户信息来源,支持本地文件、LDAP、NIS 等分布式服务。 - LDAP/SSSD:企业环境中常用,将用户信息存储在集中式服务器,实现跨主机统一认证。
总结
Linux 通过 UID/GID 唯一标识用户,结合 /etc/passwd//etc/shadow//etc/group 存储基础信息,利用 PAM 实现认证,并通过权限系统(UGO 模型、ACL 等)控制资源访问。用户名是用户交互的 “别名”,底层逻辑始终依赖 UID/GID 进行识别和权限校验。