Linux系统不支持sudoers直接录屏,但可通过封装脚本调用asciinema或script实现特权命令执行时自动录屏,需配置sudoers授权、权限隔离与防篡改机制。
Linux 系统本身不支持通过
直接录制终端视频,
仅控制命令执行权限与环境策略,不具备媒体捕获能力。但可通过组合机制实现“执行特权命令时自动启动录屏”,核心思路是:将真实管理命令封装进受控脚本,并在该脚本中调用录屏工具(如
、
或
),再让
仅允许运行该封装脚本。
使用 asciinema 实现带元数据的可回放操作记录
是轻量、开源的终端会话记录工具,生成 JSON 格式录像,支持回放、分享与搜索。它不录制视频画面,而是记录键盘输入与终端输出流,体积小、可审计性强,适合合规场景。
安装并配置用户级权限:
sudo apt install asciinema(Debian/Ubuntu)或 sudo yum install asciinema(RHEL/CentOS)
编写封装脚本(例如
):
#!/bin/bashif [ $# -lt 1 ]; thenecho "Usage: $0[args...]" >&2exit 1fi# 生成唯一录像文件名(含时间戳和调用者)REC_FILE="/var/log/sudo-casts/$(date -u +%Y%m%d-%H%M%S)-$(whoami).cast"mkdir -p /var/log/sudo-castschmod 755 /var/log/sudo-casts# 使用 asciinema rec 录制,强制非交互模式,跳过确认exec asciinema rec -y -c "$*" "$REC_FILE"
赋予脚本可执行权限:
sudo chmod +x /usr/local/bin/sudo-recorded
在
中添加(用
编辑):
Cmnd_Alias ADMIN_CMD = /usr/local/bin/sudo-recorded%admin ALL=(root) NOPASSWD: ADMIN_CMD
这样管理员组成员即可免密运行该脚本。
用 script 命令实现简单二进制会话日志(兼容性更强)
是 POSIX 标准工具,无需额外安装,生成的是带时间戳的纯文本日志(含控制字符),可用
回放,适合离线审计或低资源环境。
修改封装脚本(如
):
#!/bin/bashif [ $# -lt 1 ]; thenecho "Usage: $0[args...]" >&2exit 1fiLOG_DIR="/var/log/sudo-sessions"mkdir -p "$LOG_DIR"LOG_FILE="$LOG_DIR/$(date -u +%Y%m%d-%H%M%S)-$(whoami)-$$"# 启动 script 并执行目标命令exec script -qec "$*" "$LOG_FILE"
在
中授权:
Cmnd_Alias SCRIPTED = /usr/local/bin/sudo-scripted%admin ALL=(root) NOPASSWD: SCRIPTED
注意:
默认不记录鼠标和图形操作,且需确保
目录对普通用户可写(或由脚本以 root 权限创建并设属主)。
增强安全性与审计可控性的关键配置
仅启用录制不够,还需防止绕过、伪造或删除记录:
禁用直接 sudo 执行敏感命令
:在
中显式拒绝裸命令,例如:
Defaults:%admin !/bin/bash, !/bin/sh, !/usr/bin/python*, !/usr/bin/perl*
限制封装脚本参数格式
:使用
的命令参数白名单(如
),避免 shell 注入。
录像存储权限隔离
:将录像目录挂载为只追加(append-only)或使用
,防止篡改删除:
sudo chattr +a /var/log/sudo-casts/
自动归档与哈希校验
:在脚本末尾调用
,并同步至远程日志服务器。
注意事项与常见问题
该方案不是“透明录屏”,而是“受控录屏”——用户必须主动使用封装命令(如
),无法对已有
类交互式命令自动生效。
GUI 应用、tmux/screen 会话内执行的命令不会被录制,需统一规范操作入口。
asciinema 不捕获 root 密码输入(显示为星号),但会记录命令行参数——敏感参数(如密码)应改用
或 stdin 方式传入。
若需真正视频级录制(含窗口、鼠标),需结合
或
,但这类工具通常无法安全集成进 sudo 流程,且存在权限与性能风险,不推荐用于生产管理终端。
sudoerssudoersasciinemascriptttyrecsudoersasciinema/usr/local/bin/sudo-recorded/etc/sudoerssudo visudoscriptscriptreplay/usr/local/bin/sudo-scriptedsudoersscript/var/log/sudo-sessionssudoerssudoers/usr/local/bin/sudo-recorded /usr/sbin/useradd *chattr +asha256sum "$REC_FILE" >> /var/log/sudo-casts/checksums.logsudo sudo-recorded usermod -aG wheel alicesudo vim /etc/sudoers-fffmpeg -f x11grabrecordmydesktop