You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将X Window/VNC会话录制文件与认证用户名元数据关联生成可信审计记录

嗨,我完全懂你的处境——要搭建远程系统访问的可信审计记录,得把录制文件和已认证的用户名牢牢关联起来,还不能让用户察觉录制在运行,更不能依赖从会话内部启动工具(毕竟那样不仅会暴露,还可能被用户关掉)。结合rfbproxy和ffmpeg的特性,我给你几个贴合审计需求的可行方案:

1. 从RFB代理层捕获认证信息(最可信的方式)

rfbproxy作为VNC会话的中间代理,能直接拦截协议层面的认证交互,这是获取可信用户名的最佳途径,完全不受会话内部操作影响:

  • 先调整VNC服务的监听配置:让VNC服务只监听本地127.0.0.1(比如端口5900),然后用rfbproxy监听公网可访问的端口(比如5901),将流量转发到本地VNC端口。
  • 改造rfbproxy(或用脚本包装),在认证成功的节点提取用户名,直接生成包含用户名的录制文件名,格式可以是vnc-audit-<用户名>-<时间戳>.rfb。如果rfbproxy默认不输出认证用户名,你可以修改它的日志逻辑,把认证成功的用户名写入临时日志文件,再用脚本实时读取。
  • 后续如果需要转成视频格式,直接用ffmpeg读取这个带用户名的rfb文件即可,文件名保持一致,自然完成关联:
    # 示例:启动带用户名捕获的rfbproxy(假设已通过脚本处理日志提取用户名)
    rfbproxy -l 0.0.0.0:5901 -r 127.0.0.1:5900 -o "vnc-audit-$(get-authenticated-user)-$(date +%Y%m%d%H%M%S).rfb"
    
    # 转成MP4视频
    ffmpeg -i vnc-audit-john-20240520143000.rfb -crf 23 vnc-audit-john-20240520143000.mp4
    
    这种方式的核心优势是用户名来源绝对可信,完全绕过会话内部的篡改风险,而且录制对用户完全透明。

2. 通过PAM/系统会话管理器触发录制

远程用户登录时必然会经过系统的PAM认证或会话管理流程,我们可以利用这个时机自动启动录制,直接从系统层面获取可信用户名:

  • 找到VNC服务对应的PAM配置文件(比如/etc/pam.d/vncserver),添加一行触发脚本的配置:
    session optional pam_exec.so /usr/local/bin/start-vnc-audit.sh
    
  • 编写start-vnc-audit.sh脚本,通过PAM提供的环境变量获取用户名和会话DISPLAY,后台启动录制工具:
    #!/bin/bash
    # 从PAM环境变量获取可信用户名和显示端口
    USERNAME=$PAM_USER
    DISPLAY=$PAM_XDISPLAY
    TIMESTAMP=$(date +%Y%m%d%H%M%S)
    AUDIT_DIR="/var/vnc-audit"
    mkdir -p $AUDIT_DIR
    
    # 用ffmpeg录制X11会话(后台运行,避免被用户察觉)
    nohup ffmpeg -f x11grab -i $DISPLAY -crf 23 ${AUDIT_DIR}/vnc-audit-${USERNAME}-${TIMESTAMP}.mp4 > /dev/null 2>&1 &
    
    # 或者用rfbproxy录制RFB流(如果需要保留原始协议数据)
    # VNC端口通常是5900 + DISPLAY编号,比如DISPLAY :1对应5901
    # VNC_PORT=$((5900 + $(echo $DISPLAY | cut -d: -f2)))
    # nohup rfbproxy -l 127.0.0.1:$VNC_PORT -r 127.0.0.1:$VNC_PORT -o ${AUDIT_DIR}/vnc-audit-${USERNAME}-${TIMESTAMP}.rfb > /dev/null 2>&1 &
    
  • 把录制文件存到用户无权限访问的目录(比如/var/vnc-audit),权限设置为仅审计人员可读,同时用nohup或systemd管理录制进程,确保用户在会话内看不到也杀不掉。

3. 基于X11会话属性关联用户名(适合已有X11会话的场景)

如果是X11远程会话,系统会为会话设置一些可读取的全局属性,你可以通过这些属性获取用户名,再关联到录制文件:

  • 先确认当前X11会话的用户属性,比如用xprop -display $DISPLAY -root _NET_WM_USER可以获取登录用户名。
  • 启动ffmpeg时,先读取这个属性生成带用户名的文件名:
    DISPLAY=":1"
    # 提取X11会话的用户名
    USERNAME=$(xprop -display $DISPLAY -root _NET_WM_USER | awk '{print $3}' | tr -d '"')
    ffmpeg -f x11grab -i $DISPLAY -crf 23 /var/vnc-audit/vnc-audit-${USERNAME}-$(date +%Y%m%d%H%M%S).mp4
    
    注意:这种方式的可信度稍低,因为如果用户有X11权限,可能会修改会话属性篡改用户名,所以更适合非高风险场景。

核心注意事项

  • 优先选择可信数据源:用户名必须来自系统认证层(PAM、RFB代理),绝对不能用会话内部的环境变量或用户输入,避免被篡改。
  • 保持录制隐蔽性:录制进程要以root或专用审计用户启动,放到后台运行,不要在用户会话的进程列表中暴露。
  • 权限管控:审计文件存储目录要严格限制权限,只有授权的审计人员才能访问,防止文件被篡改或删除。

内容的提问来源于stack exchange,提问作者symcbean

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:25:21