Sudo
集中下发 sudo 规则:谁、在哪台主机、以谁的身份、执行哪些命令;命令与命令组、拒绝命令、选项,以及 sudo 顺序的作用。
本页说明 Policy 下的 Sudo 页面组。Sudo 规则把各主机的 /etc/sudoers 集中到目录里。客户端 sssd 的 sudo 提供者获取规则,sudo -l 显示的就是这里定义的内容。本地 /etc/sudoers 仍然生效,两者取并集。不受许可模块限制。

规则的组成

| 区块 | 对应 sudoers | 说明 |
|---|---|---|
| Who | 用户、用户组 | Anyone 对应 ALL |
| Access this host | 主机、主机组 | Any host 对应 ALL |
| Run commands | 允许的 Sudo 命令和命令组;拒绝的命令和命令组 | Any command 对应 ALL。拒绝列表在允许列表之后减去 |
| As whom | RunAs 用户、组 | 留空表示默认 root。Anyone 对应 ALL,即 sudo -u 任意用户 |
| Options | Defaults 项 | !authenticate(免密)、env_keep、log_output 等,按 sudoers 选项名原样填写 |
| Sudo order | sudoOrder | 多条规则同时命中时的优先级,数字大的生效。留空视为 0 |
自带的规则 all 没有任何内容、默认禁用,是一个空模板。
命令必须是绝对路径,可以带参数(/usr/bin/systemctl restart httpd);只写 /usr/bin/systemctl 则任何参数都放行。参数里的通配符按 sudoers 规则解释。
命令与命令组

命令先在 Sudo commands 页登记,再被规则引用。同一条命令可以在多条规则里使用。命令组把一类命令打包(service-control:重启 httpd、重启 nginx、查看日志),规则引用组,新增命令只改组。

与 HBAC 的关系
两道判定都要通过:HBAC 里 sudo 服务对该用户该主机放行(allow_all 或专门的规则),Sudo 规则里有对应命令。只配置 Sudo 规则而 HBAC 未放行 sudo 服务时,客户端提示密码错误或直接拒绝。
客户端
# /etc/sssd/sssd.conf
[sssd]
services = nss, pam, sudo
# /etc/nsswitch.conf
sudoers: files sssipa-client-install 默认已配置。规则改动到客户端可见的延迟:sssd 每 6 小时全量刷新、每 15 分钟增量刷新(ldap_sudo_full_refresh_interval、ldap_sudo_smart_refresh_interval)。需要立即生效时执行 sss_cache -E。
边界
| 事项 | 说明 |
|---|---|
| 免密 | !authenticate 写在规则选项里,对整条规则生效,不能按命令区分 |
| RunAs 对象 | 必须是 IPA 或 AD 用户、组。本地用户(如 postgres)在 External 字段填名字 |
| 按网段匹配主机 | 只在命令行支持:ipa sudorule-add-host --hostmask=192.168.57.0/24。界面只有主机和主机组 |