Skip to main content

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