2.7 sudo 权限精细化管理配置
为落实最小权限原则(Principle of Least Privilege)与职责分离(SoD)安全策略,Ubuntu 服务器应通过 sudo 实现细粒度的特权访问控制。本配置指南涵盖从基础安装、用户级完全授权、命令级白名单/黑名单、组级策略分发,到审计日志独立归集的完整实践路径,适用于多管理员协同运维场景。所有操作需以 root 身份执行,并严格遵循 `visudo` 安全编辑流程(防止语法错误导致系统无法提权)。
[1] 安装 sudo 工具包
root@localhost:~# apt -y install sudo
[2] 授予指定用户完全管理权限(谨慎使用)
适用场景:初始系统管理员账户或临时应急账号。
root@localhost:~# visudo
```
在文件末尾添加以下行(以用户 `ubuntu` 为例):
```
ubuntu ALL=(ALL:ALL) ALL
```
说明:该规则表示 `ubuntu` 用户可在任意主机(`ALL`)上,以任意目标用户与用户组(`(ALL:ALL)`)身份,执行全部命令(`ALL`)。
验证方式:
ubuntu@dlp:~$ /sbin/reboot
Call to Reboot failed: Interactive authentication required. # 无 sudo 时拒绝
ubuntu@dlp:~$ sudo /sbin/reboot
[sudo] password for ubuntu: # 输入用户 ubuntu 密码
Session terminated, terminating shell... # 成功执行
[3] 基于命令别名实施权限限制(推荐生产环境采用)
在保留完全权限基础上,显式禁止高危操作(如关机类命令),实现“默认允许、例外禁止”策略:
root@localhost:~# visudo
添加以下配置块:
# 命令别名:关机相关操作
Cmnd_Alias SHUTDOWN = /sbin/halt, /sbin/shutdown, /sbin/poweroff, /sbin/reboot, /sbin/init, /bin/systemctl
# 应用限制:ubuntu 可执行全部命令,但禁止 SHUTDOWN 别名中的命令
ubuntu ALL=(ALL:ALL) ALL, !SHUTDOWN
```
验证示例:
```bash
ubuntu@dlp:~$ sudo /sbin/shutdown -r now
Sorry, user ubuntu is not allowed to execute '/sbin/shutdown -r now' as root on ubuntu. # 精准拦截
```
[4] 基于用户组分发特定命令权限(最佳实践)
通过组机制实现权限批量管理,降低维护复杂度:
root@localhost:~# visudo
添加配置:
# 命令别名:用户管理操作
Cmnd_Alias USERMGR = /usr/sbin/adduser, /usr/sbin/useradd, /usr/sbin/newusers, \
/usr/sbin/deluser, /usr/sbin/userdel, /usr/sbin/usermod, /usr/bin/passwd
# 授权组 %usermgr 执行 USERMGR 命令
%usermgr ALL=(ALL) USERMGR
```
创建组并添加用户:
root@localhost:~# groupadd usermgr
root@localhost:~# usermod -aG usermgr ubuntu
验证:
ubuntu@dlp:~$ sudo /usr/sbin/useradd testuser # 成功
ubuntu@dlp:~$ sudo /usr/bin/passwd testuser # 成功
[5] 面向单用户的命令级精准授权(零信任模式)
为不同角色分配最小必要命令集,杜绝权限冗余:
root@localhost:~# visudo
添加以下规则:
```
fedora ALL=(ALL:ALL) /usr/sbin/visudo
centos ALL=(ALL:ALL) /usr/sbin/adduser, /usr/sbin/useradd, /usr/sbin/newusers, \
/usr/sbin/deluser, /usr/sbin/userdel, /usr/sbin/usermod, /usr/bin/passwd
debian ALL=(ALL:ALL) /usr/bin/vim
```
说明:`fedora` 仅可编辑 sudoers 文件;`centos` 仅可执行用户生命周期管理;`debian` 仅可编辑系统文件(需配合 `sudo vim /root/.profile` 使用)。
[6] 独立 Sudo 审计日志配置(满足合规审计要求)
将 sudo 操作日志分离至专用文件 `/var/log/sudo.log`,便于 SIEM 接入与定期审计:
root@localhost:~# visudo
追加全局日志设置:
```
Defaults syslog=local1
```
配置 rsyslog 规则(`/etc/rsyslog.d/50-default.conf`):
# 第 8 行起:重定向 local1 日志至 sudo.log,同时从 auth.log 中排除
local1.* /var/log/sudo.log
auth,authpriv.*;local1.none /var/log/auth.log
*.*;auth,authpriv.none -/var/log/syslog
重启服务生效:
root@localhost:~# systemctl restart rsyslog