## 1、用户管理概览 Linux 是多用户操作系统,因此用户和用户组管理是日常运维的基础能力。通常会涉及以下内容: - 查看当前登录用户和会话信息 - 理解 UID、GID 的含义 - 管理用户和用户组 - 管理密码、锁定状态、过期时间 - 切换身份执行命令 这些内容和权限控制、文件归属、服务运行身份都有直接关系。 ## 2、查看当前登录信息 ### 2.1 `whoami` ```shell [root@tencentos ~]# whoami root ``` - `whoami` 用于查看**当前有效用户名** - 常用于快速确认自己正以哪个用户身份执行命令 ### 2.2 `who` ```shell [root@tencentos ~]# who root pts/0 2023-11-25 19:37 (111.201.149.21) ``` - `who` 用于查看当前有哪些用户登录了系统 - 能看到登录终端、登录时间、来源地址等信息 ### 2.3 `w` ```shell [root@tencentos ~]# w 00:25:21 up 17:30, 1 user, load average: 0.00, 0.00, 0.00 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root pts/0 111.201.149.21 19:37 0.00s 0.20s 0.00s w ``` - `w` 会显示当前登录用户及其正在执行的命令 - 排查“谁在登录系统、谁在跑什么”时很常用 ## 3、用户与用户组基础概念 ### 3.1 用户 `User` Linux 中每个用户都由 **UID(User ID)** 唯一标识。 常见范围大致如下: - `0`:超级管理员 `root` - `1-999`:系统用户,通常供服务或守护进程使用 - `1000+`:普通登录用户(不同发行版可能略有差异) ### 3.2 用户组 `Group` 用户组通过 **GID(Group ID)** 唯一标识。 Linux 中一个用户通常会涉及两类组: - **主组**:用户创建时默认所属的组 - **附加组**:额外加入的组,用于补充权限 ### 3.3 查看用户身份信息 ```shell id ``` 常见输出会包含: - 用户名 - UID - 主组 GID - 所属附加组列表 `id` 是查看用户身份信息最直接的命令之一。 ## 4、用户与用户组配置文件 Linux 中用户和组的核心配置文件主要有以下几个: - `/etc/passwd`:用户基本属性信息 - `/etc/shadow`:用户密码及密码策略信息 - `/etc/group`:用户组信息 - `/etc/gshadow`:用户组密码及组安全信息 ### 4.1 `/etc/passwd` 这个文件主要记录用户的基本属性,例如: - 用户名 - 密码占位符(通常为 `x`) - UID - GID - 注释信息(GECOS) - 家目录 - 默认 shell ### 4.2 `/etc/shadow` 这个文件主要记录密码及密码过期策略,例如: - 登录名 - 加密后的密码 - 上次修改密码时间 - 最短修改间隔 - 最长有效期 - 到期前提醒天数 - 密码过期后锁定天数 ### 4.3 `/etc/group` 这个文件主要记录: - 组名 - 组密码占位符 - GID - 附加组成员列表 ## 5、用户管理命令 ### 5.1 创建用户 `useradd` ```shell useradd [options] LOGIN ``` 常见选项: - `-u`:指定 UID - `-g`:指定主组 GID 或组名 - `-c`:添加注释 - `-d`:指定家目录 - `-s`:指定默认 shell - `-G`:指定附加组 - `-r`:创建系统用户 - `-M`:不创建家目录 示例: ```shell useradd -u 2001 -g developers -G wheel -c "dev user" -s /bin/bash lzc ``` ### 5.2 修改用户 `usermod` ```shell usermod [options] LOGIN ``` 常见选项: - `-u`:修改 UID - `-g`:修改主组 - `-G`:修改附加组 - `-s`:修改 shell - `-c`:修改注释 - `-d`:修改家目录 - `-l`:修改用户名 - `-L`:锁定用户 - `-U`:解锁用户 - `-e`:设置账户过期日期,格式如 `YYYY-MM-DD` - `-f`:设置密码过期后的宽限期 示例: ```shell usermod -G wheel,devops -s /bin/bash lzc ``` ### 5.3 删除用户 `userdel` ```shell userdel [options] LOGIN ``` 常见选项: - `-f`:强制删除 - `-r`:删除用户时同时删除家目录和邮件目录 示例: ```shell userdel -r lzc ``` ## 6、切换用户身份 `su` ```shell su [options] [-] USER ``` ### 6.1 `su user` 与 `su - user` 的区别 ```shell su ubuntu ``` - 非登录式切换 - 通常不会完整加载目标用户登录环境 - 当前工作目录通常保持不变 ```shell su - ubuntu ``` - 登录式切换 - 会读取目标用户的登录配置 - 通常会切换到目标用户家目录 - 更接近“真正以该用户重新登录一次” ### 6.2 切换后执行命令 ```shell su - root -c 'cat /etc/passwd' ``` 这个用法表示切换到 `root` 后执行指定命令。 ## 7、设置用户密码 `passwd` `passwd` 用于设置或管理用户密码。 常见选项: - `-d`:删除指定用户密码 - `-l`:锁定密码 - `-u`:解锁密码 - `-e`:强制用户下次登录时修改密码 - `-f`:强制执行操作 示例: ```shell passwd lzc ``` ## 8、用户组管理命令 ### 8.1 创建用户组 `groupadd` 常见选项: - `-g`:指定 GID 示例: ```shell groupadd -g 3001 devops ``` ### 8.2 修改用户组 `groupmod` 常见选项: - `-n`:修改组名 - `-g`:修改 GID 示例: ```shell groupmod -n ops devops ``` ### 8.3 删除用户组 `groupdel` 用于删除指定组。 ### 8.4 管理附加组成员 `groupmems` 常见选项: - `-a`:把用户加入组 - `-d`:把用户从组中删除 - `-p`:清空组成员 - `-l`:显示组成员列表 ## 9、常见运维场景 ### 9.1 新建一个可登录用户 通常需要做这些事: - 创建用户 - 指定 shell - 设置密码 - 加入合适的附加组 ### 9.2 禁止某个账户继续登录 常见做法: - 锁定密码:`passwd -l USER` - 锁定账户:`usermod -L USER` - 把 shell 改成 `/sbin/nologin` ### 9.3 删除离职用户 常见做法: - 确认是否有进程仍在运行 - 备份家目录或重要数据 - 使用 `userdel -r USER` 删除账户和家目录 ## 10、小结 - `UID` 标识用户,`GID` 标识用户组 - `/etc/passwd`、`/etc/shadow`、`/etc/group` 是最核心的账户文件 - `useradd`、`usermod`、`userdel` 用于管理用户 - `groupadd`、`groupmod`、`groupdel` 用于管理用户组 - `su - USER` 比单独 `su USER` 更接近完整登录环境 - 管理用户时要特别注意密码、过期时间、登录 shell 和附加组