wiki/运维/Linux/笔记/6.用户管理.md
2026-04-08 19:40:00 +08:00

319 lines
6.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## 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 中每个用户都由 **UIDUser ID** 唯一标识。
常见范围大致如下:
- `0`:超级管理员 `root`
- `1-999`:系统用户,通常供服务或守护进程使用
- `1000+`:普通登录用户(不同发行版可能略有差异)
### 3.2 用户组 `Group`
用户组通过 **GIDGroup 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 和附加组