Linux记录TTY操作日志有三种推荐方式:1. 用script命令在/etc/profile中注入静默会话记录;2. 用pty+Python脚本实现屏幕级全字节流审计;3. 用rsyslog+PROMPT_COMMAND补充精准命令元数据日志,三者可组合使用。

要让 Linux 系统自动记录所有 TTY 终端(包括本地控制台、SSH 登录、虚拟终端等)的交互式操作日志,核心思路是:在用户 shell 启动时注入记录机制,并确保覆盖登录、执行、退出全过程。不能只依赖 history,因为它只存命令不存输出;也不能只靠手动运行 script,它无法全自动触发。以下是最实用、可落地的三类配置方式,按推荐优先级排序。
用 script 命令实现登录即录(轻量可靠)
这是最成熟、无需额外依赖、兼容性最好的方案。关键在于把 script 放进用户 shell 初始化文件中,且避免递归调用。
- 编辑
/etc/profile或/etc/bash.bashrc(对所有 bash 用户生效) - 添加如下判断逻辑(防止重复嵌套启动):
if [ -z "$SCRIPT_LOGGING" ] && [ -t 0 ]; then
export SCRIPT_LOGGING=1
LOG_DIR="/var/log/tty_sessions"
mkdir -p "$LOG_DIR"
SESSION_FILE="${LOG_DIR}/$(date +%Y%m%d_%H%M%S)_$(whoami)_$(tty | sed 's|/dev/||').log"
script -q -a "$SESSION_FILE"
exit
fi说明:-q 静默启动不提示,-a 追加写入(避免覆盖),exit 是关键——它让原始 shell 退出,由 script 子 shell 接管会话。所有输入输出都会被完整捕获为纯文本,含控制字符(可用 col -b 清理后阅读)。
用 pty + Python 脚本审计全链路(高保真)
适合需要记录“屏幕级”输出(如 htop、vim 分屏、颜色、光标移动)的审计场景。本质是用伪终端(pty)劫持用户 shell,全程重定向 I/O 到日志文件。
- 将知识库中的
/data_audit/.pty.py脚本保存到系统路径(如/usr/local/bin/audit_pty.py),并确保可执行 - 在
/etc/profile中加入(同样需防递归):
if [ -z "$AUDIT_PTY" ] && [ -t 0 ] && [ "$(whoami)" != "root" ]; then
export AUDIT_PTY=1
LOG_DIR="/var/log/audit/$(whoami)"
mkdir -p "$LOG_DIR"
LOG_FILE="${LOG_DIR}/$(date +%Y%m%d_%H%M%S)_$(tty|sed 's|/dev/||').log"
/usr/bin/python3 /usr/local/bin/audit_pty.py -a "$LOG_FILE"
exit
fi注意:该脚本会记录从登录到登出的完整字节流,包括密码输入(显示为星号或空白),但不解析密码明文;日志文件权限应设为 600,仅 root 可读。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
用 rsyslog + PROMPT_COMMAND 补充命令级日志(精准可查)
作为前两种方案的补充,它不记录输出,但能精确打点每条命令的执行时间、用户、IP、TTY 设备,便于事后快速检索和关联分析。
- 在
/etc/profile中设置:
export HISTTIMEFORMAT="%Y-%m-%d %T " export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.info "$(whoami) [$(tty)] $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//") [$RETRN_VAL]"'
- 配置
/etc/rsyslog.conf,添加:
local6.* /var/log/cmd.log # 可选:转发到远程日志服务器 local6.* @192.168.10.5:514
效果:每次回车执行命令后,rsyslog 就会写入一行类似 Apr 16 17:22:03 host user1[pts/2] ls -la [0] 的日志,含返回值,支持按时间、用户、错误码过滤。
注意事项与加固建议
无论采用哪种方式,都必须同步做以下几件事:
-
日志目录权限严格限制:如
/var/log/tty_sessions应属root:root,权限700;普通用户不可写不可列目录 -
禁止用户修改或绕过配置:将关键脚本(如
.pty.py)设为chown root:root & chmod 500,防止篡改 -
定期轮转与清理:用
logrotate配置自动压缩归档,避免磁盘占满;例如每日切割、保留 90 天 -
SSH 场景额外确认:确保
/etc/ssh/sshd_config中未禁用PermitUserEnvironment yes(若用环境变量触发),但更推荐统一走/etc/profile
三种方法可以组合使用:用 script 做主录(文本全量),用 rsyslog 做索引(命令元数据),再用 pty 在关键账号上启用高保真备份。不复杂但容易忽略细节。

















