要让sudo在跳板机上配合正向代理实现强审计,核心是将sudo权限控制与日志捕获嵌入跳板机链路最前端,通过proxyjump构建可信通道,确保所有命令必须经sudo审计点;首层跳板机jump1需启用sudo强审计策略、封装脚本白名单控制、日志分离存储与外发、auditd内核级兜底,形成强制交汇的唯一出口闸门。

要让 sudo 在跳板机上配合正向代理实现对研发人员命令执行的强审计,核心不是“sudo + 代理”简单叠加,而是把 sudo 的权限控制、日志捕获能力,嵌入到跳板机链路的最前端,并通过 ProxyJump 建立可信通道,确保所有命令行为都必须经过 sudo 审计点——不走 sudo 就无法提权,不走跳板就无法触达内网,二者形成强制交汇。
必须用 ProxyJump 构建首层跳转链路
OpenSSH 7.3+ 的 ProxyJump 是唯一能保证审计链不断裂的跳转方式。它让本地只与第一台跳板机(如 jump1)建立连接,后续跳转(jump1 → jump2 → target)全部在服务端完成。这意味着:
- 所有研发人员的初始登录、身份认证、TTY 分配、sudo 行为,全部发生在
jump1上 -
jump1是唯一需要部署 sudo 强审计策略的节点;中间跳板机只需做透传,无需重复配置 sudo 日志 -
ssh -o ProxyCommand=...这类旧写法会让本地客户端参与每跳,导致jump1无法记录jump2上的真实操作,审计断点
在首层跳板机上启用 sudo 强审计策略
研发人员登录 jump1 后,必须通过 sudo 才能执行目标命令(如 sudo ssh user@target 或 sudo /usr/local/bin/ssh-to-prod),不能直接使用普通用户身份连出。为此需:
- 编辑
/etc/sudoers(用visudo):Defaults logfile="/var/log/sudo-jump.log" Defaults log_input, tty_tickets, requiretty %dev ALL=(root) NOPASSWD: /usr/bin/ssh, /usr/local/bin/ssh-to-prod
-
log_input确保记录完整命令行(如sudo ssh -p 2222 user@10.10.20.5 "ps aux | grep nginx") -
tty_tickets防止多终端复用同一票据,requiretty拒绝 cron、脚本等非交互式提权
用封装脚本替代裸 ssh,实现参数级可控与审计增强
允许 sudo ssh 太宽泛,易被用于绕过审计(如 sudo ssh root@target bash)。更安全的做法是:
- 创建
/usr/local/bin/ssh-to-prod脚本,只允许访问预定义资产列表(如从/etc/ssh/allowed-targets读取 IP 和端口) - 脚本校验目标主机名是否在白名单中,拒绝任意 IP 或通配符(如
10.*.*.*) - 脚本内记录调用上下文:
logger -t "ssh-to-prod" "$USER $*",并写入/var/log/ssh-audit.log - sudoers 中仅授权该脚本:
%dev ALL=(root) NOPASSWD: /usr/local/bin/ssh-to-prod
日志必须分离存储、不可篡改、实时外发jump1 是审计单点,其日志一旦被删即全盘失效:
- 日志路径设为
/var/log/sudo-jump.log,属主root:syslog,权限600 - 配置
logrotate每日轮转、保留 90 天、压缩归档、新日志自动设600 - 用
rsyslogTLS 加密转发至 SIEM(如 Graylog),规则匹配sudo-jump.log中含COMMAND=.*ssh.*@的条目,触发告警 - 对已归档日志文件执行
chattr +i(不可变属性),防止覆盖或删除
补充 auditd 内核级兜底,防绕过 sudo 直接提权
研发人员可能尝试 su -c "ssh..." 或 bash -p 绕过 sudo:
- 在
jump1上启用 auditd,添加规则:-a always,exit -F path=/bin/su -F perm=x -k jump_su_bypass -a always,exit -F path=/bin/bash -F euid!=uid -k jump_shell_escape -w /etc/sudoers -p wa -k jump_sudoers_mod
- 日志落于
/var/log/audit/audit.log,用ausearch -k jump_su_bypass可快速定位绕过行为
本质上,这不是 sudo 配合代理,而是把 sudo 变成跳板机上的“唯一出口闸门”,所有命令流必须经它登记、校验、记录,再由 ProxyJump 安全送达下游。代理只负责链路传输,sudo 负责行为准入与留痕——两者职责分明,缺一不可。











