Linux历史命令审计需调大HISTSIZE/HISTFILESIZE、设置HISTTIMEFORMAT添加时间戳,并通过auditd或syslog集中记录命令至系统日志,辅以日志轮转与完整性校验。

Linux系统默认保存的历史命令条数有限,且原始记录缺乏时间戳和用户标识,不便于安全审计。调整历史命令配置、添加时间信息、统一日志归集,是提升操作可追溯性的关键步骤。
修改HISTSIZE与HISTFILESIZE限制
终端会话中显示的历史命令数量由HISTSIZE控制,而写入~/.bash_history文件的总行数由HISTFILESIZE决定。两者默认通常为1000,易造成早期命令被覆盖。
- 在
~/.bashrc中设置更大值,例如:HISTSIZE=5000<br>HISTFILESIZE=5000
- 如需全局生效(所有用户),可修改
/etc/bash.bashrc或/etc/profile,但需注意权限与兼容性 - 执行
source ~/.bashrc使当前会话立即生效
启用带时间戳的历史记录
默认history命令不显示执行时间,审计时难以定位事件时间线。通过设置HISTTIMEFORMAT可自动为每条记录添加时间前缀。
- 在
~/.bashrc中添加:HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S " - 该格式将写入
.bash_history,后续用history命令查看时即可看到时间 - 注意末尾空格不能省略,否则时间与命令会粘连
集中记录所有用户命令到系统日志
仅依赖.bash_history存在明显缺陷:非交互式shell不记录、用户可清空、多终端会话不同步、无登录IP与终端信息。建议结合syslog或auditd做增强审计。
- 启用
auditd监控/bin/bash执行及命令行参数(需配置-a always,exit -F path=/bin/bash -F perm=x -k shell_commands) - 或在
/etc/profile中追加日志写入逻辑:export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.info "$(whoami) [$$] $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//") [$RETRN_VAL]"' - 配合rsyslog将
local6.*重定向至独立文件(如/var/log/cmd.log),并按日轮转
清理与加固注意事项
增强审计能力的同时,也需防范绕过行为。历史记录本身不是安全机制,而是事后分析依据。
- 禁用
history -c无法彻底阻止清除,应依赖系统级日志(如auditd)作为权威来源 - 避免将敏感命令(如含密码的curl/wget)直接输入shell,可用变量或配置文件替代
- 定期校验
.bash_history完整性(如用aide或tripwire),防止未授权篡改










