精准授权要求用户仅能以指定身份、固定参数运行特定绝对路径命令,须用visudo编辑sudoers.d下独立文件,通过别名分层管理,禁用危险通配符与逃逸入口,并启用全链路审计日志。

精准授权不是“给 sudo 权限”,而是让某个用户在某台机器上,仅能以指定身份、用固定参数运行特定命令——路径要绝对、参数要明确、环境要约束、操作要可追溯。
必须用 visudo 编辑,别碰 /etc/sudoers 主文件
直接 vim /etc/sudoers 一旦语法出错(比如少个空格、括号不匹配),sudo 会彻底失效,连 root 都无法恢复。正确做法是:
- 用 sudo visudo -f /etc/sudoers.d/your-rule 新建独立规则文件(如
ops-nginx.conf) - 文件名不能含点或波浪号(
ops.conf✅,ops.conf~❌) - /etc/sudoers 主文件只保留
Defaults和include /etc/sudoers.d/行,不写具体授权 - visudo 会自动校验语法、设权限为 440、拦截相对路径和空格错误
用别名分层,避免硬编码重复
把用户、主机、命令三类实体分别归组,规则才清晰、易扩展、好审计:
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
- User_Alias DBA = alice, bob, %db-admins
- Host_Alias PROD_DB = db01, db02
- Cmnd_Alias PG_OP = /usr/bin/pg_ctl start, /usr/bin/pg_dump --clean --if-exists
- 最终授权行:DBA PROD_DB = (postgres) NOPASSWD: PG_OP
新增成员?加进 db-admins 组即可;新增节点?补进 PROD_DB 列表即可——不用改任何命令路径。
命令必须写绝对路径 + 显式参数范围
允许 /usr/bin/systemctl restart nginx 是安全的;允许 /usr/bin/systemctl 或 /bin/bash 就等于开放 root shell:
- 所有命令必须带完整绝对路径(
/usr/bin/apt≠apt) - 通配符
*只能用于末尾参数,如/usr/bin/tail /var/log/app/*.log - 禁止出现
! /bin/sh、! /usr/bin/python3 -c、! /usr/bin/less等可逃逸入口 - NOPASSWD 只配完整命令,不继承二进制其他能力(例如允许
systemctl restart nginx,不代表能systemctl status mysql)
绑定执行环境,开启全链路审计
权限配置完只是开始,关键是要确保每次执行都受约束、可追溯:
- 在 sudoers 文件顶部加:Defaults logfile="/var/log/sudo.log", log_input, log_output, requiretty
-
requiretty阻止 Web 后台、crontab、SSH 非交互式提权(特殊场景可对单条规则豁免) - 限制环境变量:Defaults:alice env_reset, env_keep+="LANG LC_* PATH"
- 改完立即用目标用户执行
sudo -l查看可见权限,并实际运行命令验证

















