103 lines
2.1 KiB
Markdown
103 lines
2.1 KiB
Markdown
## 1、`sudo` 概览
|
||
|
||
`sudo` 是 Linux 中常见的权限委派机制,允许管理员授权普通用户以更高权限执行指定命令,而不必直接告诉对方 `root` 密码。
|
||
|
||
它的核心价值在于:
|
||
|
||
- 最小权限授权
|
||
- 便于审计操作记录
|
||
- 避免多人共用 root 密码
|
||
|
||
## 2、基本概念
|
||
|
||
`sudo` 配置的核心通常写在:
|
||
|
||
```shell
|
||
/etc/sudoers
|
||
```
|
||
|
||
也可以拆分到:
|
||
|
||
```shell
|
||
/etc/sudoers.d/
|
||
```
|
||
|
||
实际修改时,**强烈建议使用**:
|
||
|
||
```shell
|
||
visudo
|
||
```
|
||
|
||
这样可以在保存前做语法检查,避免配置写坏导致 sudo 不可用。
|
||
|
||
## 3、sudoers 规则格式
|
||
|
||
常见格式大致是:
|
||
|
||
```text
|
||
用户或组 主机列表=(可切换身份) 命令列表
|
||
```
|
||
|
||
典型示例:
|
||
|
||
```text
|
||
root ALL=(ALL:ALL) ALL
|
||
```
|
||
|
||
含义可以理解为:
|
||
|
||
- `root`:用户
|
||
- `ALL`:允许从任意主机规则匹配
|
||
- `(ALL:ALL)`:可以切换为任意用户和组身份执行
|
||
- `ALL`:允许执行任意命令
|
||
|
||
## 4、常见授权方式
|
||
|
||
### 4.1 授权单个用户
|
||
|
||
```text
|
||
lzc ALL=(ALL:ALL) ALL
|
||
```
|
||
|
||
表示用户 `lzc` 可以执行任意 sudo 命令,执行时通常需要输入自己的密码。
|
||
|
||
### 4.2 授权用户组
|
||
|
||
```text
|
||
%devops ALL=(ALL:ALL) ALL
|
||
```
|
||
|
||
表示 `devops` 组内用户可执行 sudo 命令。
|
||
|
||
### 4.3 免密执行
|
||
|
||
```text
|
||
%devops ALL=(ALL:ALL) NOPASSWD: ALL
|
||
```
|
||
|
||
表示 `devops` 组内用户执行 sudo 时不需要输入密码。
|
||
|
||
## 5、常见运维建议
|
||
|
||
- 优先按**用户组**授权,而不是给每个人单独写规则
|
||
- 能精细授权命令时,尽量不要直接给 `ALL`
|
||
- 免密 sudo 要谨慎,只给可信场景
|
||
- 修改 sudo 配置时优先用 `visudo`
|
||
- 生产环境中建议结合审计日志一起使用
|
||
|
||
## 6、排障提示
|
||
|
||
如果 sudo 突然不可用,优先检查:
|
||
|
||
- `/etc/sudoers` 是否有语法错误
|
||
- `/etc/sudoers.d/` 中是否有冲突规则
|
||
- 文件权限是否正确
|
||
- 当前用户是否真的属于目标用户组
|
||
|
||
## 7、小结
|
||
|
||
- `sudo` 用于做权限委派,而不是直接共享 root
|
||
- 核心配置在 `/etc/sudoers` 和 `/etc/sudoers.d/`
|
||
- 推荐使用 `visudo` 修改配置
|
||
- 最佳实践是最小权限、分组授权、谨慎免密
|