319 lines
6.1 KiB
Markdown
319 lines
6.1 KiB
Markdown
## 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 和附加组
|