sudo本身不支持双人确认,但可通过堡垒机实现:前置拦截敏感sql、审批联动下发临时sudo规则、脚本校验调用来源与会话签名,并串联堡垒机、系统及mysql日志完成端到端追溯。

sudo 本身不支持双重身份确认,但可以和堡垒机配合,通过“操作前置拦截 + 审批联动 + 动态授权”实现核心数据库修改类高危命令的双人确认效果。关键不在 sudo 配置本身,而在于把 sudo 执行纳入堡垒机管控闭环。
堡垒机作为统一入口,强制所有数据库操作走审批流
直接禁用运维人员对数据库服务器的直连 SSH 权限(包括 22 端口),所有访问必须经由堡垒机跳转。堡垒机在此角色中不只是“跳板”,而是“策略执行点”:
- 在资产纳管时,将 MySQL 主机设为“需审批资产”,开启 SQL 审计与命令拦截策略;
- 配置数据库账号白名单,只允许特定运维账号登录,且该账号默认无 SUPER 或 DROP 权限;
- 设置敏感操作规则:匹配包含 UPDATE、DELETE、TRUNCATE、ALTER TABLE、GRANT、REVOKE、mysqldump --all-databases 等关键词的语句,自动触发人工审批;
- 审批人收到企业微信/钉钉/邮件通知,查看原始 SQL、执行人、目标库表、时间戳及哈希摘要,确认后点击“放行”或输入验证码完成双签。
sudo 命令被封装进堡垒机可审计的“受控脚本”
不开放 raw sudo 权限,而是提供预定义、带签名验证的运维脚本,例如:
-
/opt/bin/db-maintain.sh:仅封装安全范围内的操作,如
mysql -u admin -p$PASS db1 -e "OPTIMIZE TABLE logs_202407"; - 脚本开头校验调用来源是否为堡垒机 IP(
SSH_CLIENT或SSH_CONNECTION环境变量); - 执行前调用堡垒机 API 查询本次会话是否已获双人审批(传入 session_id 和命令哈希);
- 通过
sudo -u mysqladm /opt/bin/db-maintain.sh ...调用,而mysqladm用户仅能运行该脚本,不能执行任意 sudo 命令。
权限分离:sudoers 中只授权“审批后生成的临时凭证”
避免静态配置高危权限。堡垒机审批通过后,自动下发一次性的、带时效的 sudo 规则:
- 审批系统调用后台脚本,在目标数据库服务器上生成
/etc/sudoers.d/tmp_db_20260722_abc123; - 内容示例:
%db_requestor ALL=(mysqladm) NOPASSWD: /usr/bin/mysql -u admin -S /var/run/mysqld/mysqld.sock -e "UPDATE ..."; - 同时设置
at或 systemd timer,在 5 分钟后自动删除该文件; - sudoers 主文件中启用
#includedir /etc/sudoers.d,确保动态规则即时生效。
日志与回溯必须端到端贯通
双人确认的价值最终体现在可追溯性上,三个环节日志要能串联:
- 堡垒机记录:谁、何时、从哪台终端、发起什么 SQL 请求、审批人 A 和 B 的确认时间与签名;
- Linux 系统日志(/var/log/secure):记录 sudo 执行的精确命令、调用者 UID、实际执行时间、临时规则文件名;
- MySQL 慢日志或 general_log(开启后):记录真实执行的 SQL 及其 client_host(应为堡垒机出口 IP);
- 三者通过唯一请求 ID(如
req-8f3a9b21)关联,满足金融行业“操作留痕、责任到人”要求。











