跳转到主内容
新派编程网 - 新潮编程理念,全新技术课堂!

Linux系统历史命令记录条数限制及格式化审计

Linux历史命令审计需调大HISTSIZE/HISTFILESIZE、设置HISTTIMEFORMAT添加时间戳,并通过auditd或syslog集中记录命令至系统日志,辅以日志轮转与完整性校验。 Linux系统默认保存的历史命令条数有限,且原始记录缺乏时间戳和用户标识,不便于安全审计。调整历史命令配置、添加时间信息、统一日志归集,是提升操作可追溯性的关键步骤。 修改HISTSIZE与HISTFILESIZE限制 终端会话中显示的历史命令数量由 HISTSIZE 控制,而写入
~/.bash_history
文件的总行数由 HISTFILESIZE 决定。两者默认通常为1000,易造成早期命令被覆盖。 在
~/.bashrc
中设置更大值,例如:
HISTSIZE=5000
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
),防止未授权篡改

相关文章