Linux无原生sudo录屏功能,实际是分层审计:1. sudo log_input/log_output记录I/O并sudoreplay回放;2. tlog实现全终端JSON录像;3. auditd捕获execve/exit事件用于高保真取证。

Linux 系统中没有“sudo 操作会话录屏”这种原生功能,也没有图形界面式的屏幕录制机制。所谓“录屏日志”,实际是指完整捕获 sudo 会话的输入、输出、命令执行过程及退出状态,以便事后可回放、审计、还原操作全过程。这靠的是分层配置:sudo 自身日志 + 会话 I/O 记录 + 可选的系统级审计(auditd)或专用终端审计工具(如 tlog)。
以下是你真正需要做的三类实用方案,按审计深度由浅入深排列:
配置 sudo 输入输出记录(基础回放能力)
这是最常用、开销可控、无需额外服务的方式,能记录命令、参数、stdout/stderr 和退出码,并支持回放。
-
编辑
/etc/sudoers(务必用sudo visudo):Defaults log_input, log_output Defaults iolog_dir="/var/log/sudo-io"
-
创建并设置目录权限:
sudo mkdir -p /var/log/sudo-io sudo chown root:root /var/log/sudo-io sudo chmod 700 /var/log/sudo-io
-
执行一条 sudo 命令(如
sudo ls /root),会自动生成一个带时间戳的子目录(如/var/log/sudo-io/00/0001),内含:-
stdin:键盘输入(如密码后输入的命令内容,不含密码本身) -
stdout、stderr:标准输出与错误流(纯文本) -
exit_code:命令退出状态码(如0表示成功)
-
-
查看和回放:
sudo sudoreplay -l # 列出所有会话 sudo sudoreplay 00/0001 # 回放指定会话(实时逐行显示,类似录像)
⚠️ 注意:
sudo su -或sudo -i启动的交互式 shell,其内部所有命令不会被单独记录——只记录 shell 进程启动本身。如需审计这类行为,需配合 auditd 或 tlog。
使用 tlog 实现全终端操作审计(推荐给运维/安全团队)
tlog 是专为 Linux 终端审计设计的工具,能对 SSH 登录、sudo 提权后的全部键盘输入与屏幕输出做结构化 JSON 录制,真正实现“操作录像”效果。
-
安装(以 Ubuntu 为例):
sudo add-apt-repository ppa:scribery/tlog sudo apt update && sudo apt install -y tlog
-
配置自动录制(SSH 登录即触发): 编辑
/etc/ssh/sshd_config,添加:ForceCommand /usr/bin/tlog-rec-session
重启服务:
sudo systemctl restart sshd -
设置日志路径(推荐 JSON 格式,便于解析与归档): 创建
/etc/tlog/conf.d/10-output.conf:{ "output": { "type": "file", "path": "/var/log/tlog/%Y-%m-%d-%H-%u.json" } }并确保目录安全:
sudo mkdir -p /var/log/tlog && sudo chmod 0700 /var/log/tlog
-
回放方式:
tlog-play -f /var/log/tlog/2026-09-25-16-alice.json
✅ 优势:记录完整命令行、每键输入、每行输出、时间戳、用户 UID、TTY、进程树;支持搜索、导出、对接 SIEM。
结合 auditd 捕获 execve 与 exit 事件(高保真取证级)
适用于合规强要求场景(如等保、金融审计),可精确到每个子命令及其退出码,但需日志解析能力。
-
启用 execve 参数记录(编辑
/etc/audit/rules.d/audit.rules):-a always,exit -F arch=b64 -S execve -k sudo_cmd -a always,exit -F arch=b32 -S execve -k sudo_cmd -a always,exit -F path=/usr/bin/sudo -F perm=x -k sudo_exec -a always,exit -F auid!=4294967295 -F uid>=1000 -S exit,exit_group -k sudo_exit
-
重启生效:
sudo systemctl restart auditd
-
查询并关联命令与退出码:
# 获取最近 sudo 相关 execve + exit 事件 sudo ausearch -m execve,exit -ts recent -k sudo_cmd | aureport -f -i # 或提取 COMMAND 和 exit= 字段 sudo ausearch -m execve -ts today | grep -E "(COMMAND=|exit=)"
? 提示:auditd 不直接“录像”,但能精准还原“谁在 sudo 会话中运行了什么命令、返回了什么状态”,适合与 sudo 日志或 tlog 日志交叉验证。
不复杂但容易忽略:日志文件权限必须设为 600 或 640,目录属主为 root:root,并启用 logrotate 轮转 + 远程日志转发,否则审计链条就断了。


















