跳转到主内容
极星编程网:以代码为星,赴技术山海!

如何利用Sudoers配置实现在执行管理操作时强制录制终端视频

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

相关文章