## 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` 修改配置 - 最佳实践是最小权限、分组授权、谨慎免密