linux运维中可通过sudo授权包装脚本+script命令实现高危操作文本级录屏审计,分三步:写audit-rm包装脚本、sudo chmod赋权、visudo精确白名单授权;需配合requiretty、log_input/output等sudo审计配置,并用scriptreplay回放,禁用ffmpeg因无gui、资源高、难索引。

Linux 运维中不能靠 sudoers 直接触发录屏,但可通过“sudo 授权包装脚本 + script 命令封装”实现高危操作的全程文本级录屏审计。核心是把真实命令嵌入到受控的录制流程中,确保每次执行都落盘、可回放、不可绕过。
用 script 包装高危命令并授权给 sudo
script 不录图形界面,但能完整捕获终端输入、命令执行过程和输出(不含 vim 编辑内容),适合审计类场景。操作分三步:
- 写一个包装脚本,例如 /usr/local/bin/audit-rm:
#!/bin/bash
if [[ $# -eq 0 ]]; then echo "Usage: audit-rm
LOG_DIR="/var/log/audit"
mkdir -p "$LOG_DIR"
LOG_FILE="$LOG_DIR/session_$(whoami)_$(hostname)_$(date +%s).log"
TIME_FILE="$LOG_DIR/timing_$(whoami)_$(hostname)_$(date +%s).log"
exec script -t "$TIME_FILE" "$LOG_FILE" --command="/bin/rm $@"
- 赋予执行权限:sudo chmod 755 /usr/local/bin/audit-rm
- 在 /etc/sudoers 中精确授权(用 visudo):
alice ALL=(root) /usr/local/bin/audit-rm /tmp/*, /usr/local/bin/audit-rm /var/tmp/*
⚠️ 路径必须白名单化,禁止通配符越界(如不写/usr/local/bin/audit-rm *)
强化审计可信度的关键配置
仅录屏不够,需配合 sudo 自身审计机制防绕过、保上下文:
- 在 /etc/sudoers 顶部添加:
Defaults requiretty, log_input, log_output
Defaults logfile="/var/log/sudo.log"
Defaults iolog_dir="/var/log/sudo-io" - requiretty 强制操作必须发生在真实终端(阻断 cron、web shell 等非交互调用)
- log_input/log_output 会自动生成二进制 I/O 日志(含 stdin/stdout/stderr 和退出码),与 script 文本日志互为备份
-
iolog_dir 需提前创建并设权限:
sudo mkdir -p /var/log/sudo-io
sudo chown root:root /var/log/sudo-io
sudo chmod 700 /var/log/sudo-io
回放与日常管理要点
script 录制的日志不是视频,但可精准还原操作流:
- 用 scriptreplay 回放:
scriptreplay timing_xxx.log session_xxx.log(需两个文件配对) - 日志文件建议加入用户名、主机名、时间戳,便于归档检索;可配合 logrotate 按天轮转
- 保护日志不被删改:
sudo chattr +a /var/log/audit/(只允许追加)
旧日志可 chattr +i 锁定 - 避免用 script 录复杂交互:遇到 tmux/screen/vim 时易失真;若需更高保真,换用 asciinema rec(生成 JSON,支持 Web 回放+搜索)
为什么不推荐直接 ffmpeg 录屏?
虽然技术上可行,但存在明显短板:
- 依赖桌面环境(X11/Wayland),服务器常无 GUI,无法启用
- ffmpeg 录屏占用资源高,可能影响高危操作本身稳定性
- 录制文件大、难索引,不支持命令级搜索或时间轴跳转
- 无法与 sudo 会话绑定——用户开两个终端,只录一个,审计就断链











