判断logrotate配置是否被篡改需检查三处:/etc/logrotate.conf及/etc/logrotate.d/下文件是否含恶意copytruncate+prerotate组合、postrotate中是否有rm命令或可疑脚本、/usr/sbin/logrotate版本与完整性是否被篡改;恢复时须用绝对路径工具操作,挂载原始iso提取干净配置,再手动触发-d调试模式验证轮转动作。

logrotate 配置本身被篡改后,日志切割行为就不可信了——比如轮转被禁用、postrotate 脚本被注入清理命令、或日志直接被重定向到 /dev/null。不能只看日志文件是否“变小”,得先确认切割机制是否还在按预期工作。
怎么判断 logrotate 配置已被篡改
攻击者常不动日志内容,而是让日志根本“不落地”或“轮转即删”。重点检查三处:
-
/etc/logrotate.conf和/etc/logrotate.d/下所有文件是否被添加copytruncate+prerotate组合(可能清空原文件再切) - 是否存在异常的
postrotate块,比如包含rm -f /var/log/*.log或调用可疑脚本路径 - 检查
logrotate是否被替换成恶意版本:/usr/sbin/logrotate --version输出是否匹配官方包版本;再用rpm -Vf /usr/sbin/logrotate(RHEL)或debsums -s /usr/sbin/logrotate(Debian)核验完整性
如何恢复可信的日志切割逻辑
别直接编辑配置——当前 shell 环境和 vi 可能已被劫持。必须用绝对路径+未被污染工具操作:
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
- 用
/usr/bin/grep -v '^#' /etc/logrotate.d/auth-log | /usr/bin/head -10快速查看真实配置片段,避开注释干扰 - 从同版本 ISO 挂载后提取原始配置:
mount -o loop CentOS-7-x86_64-DVD.iso /mnt && cp /mnt/etc/logrotate.d/syslog /tmp/syslog.clean - 恢复时用
/usr/bin/cp -f /tmp/syslog.clean /etc/logrotate.d/syslog,再/usr/bin/chown root:root /etc/logrotate.d/syslog && /usr/bin/chmod 644 /etc/logrotate.d/syslog - 手动触发一次可信轮转验证:
/usr/sbin/logrotate -d /etc/logrotate.conf 2>&1 | /usr/bin/grep -E "(rotating|renaming)",确认输出含实际动作而非静默跳过
日志文件本身被删或清空后怎么补救
如果 /var/log/auth.log 已为空或被 echo > 清过,别指望它还能“恢复内容”。但可抢救元数据与残留痕迹:
- 用
/usr/bin/stat /var/log/auth.log查ctime(状态变更时间),若与可疑登录时间接近,说明清空操作发生在此刻 - 检查
/var/log/journal/(如果 journald 启用):/usr/bin/journalctl --since "2026-09-07" -u sshd | /usr/bin/grep "Failed",journald 默认不依赖文件系统,更难被同步清除 - 用
/usr/bin/find /var/log -name "auth.log.*" -type f -mtime -7 -ls扫描是否残留压缩归档(auth.log.1.gz等),攻击者常漏掉这些 - 若启用
rsyslog远程转发,立刻检查远端服务器上是否有未被清理的副本
为什么单纯重启 rsyslog 不解决问题
因为 systemctl restart rsyslog 只是重载配置,不恢复已丢失的日志内容,更不修复被篡改的 logrotate 行为。而且:
- 重启会重置
/proc/sys/kernel/msgmax等内核日志缓冲参数,可能掩盖之前写入但未刷盘的记录 - 若
rsyslog的imfile模块监控了被清空的文件,重启后它会从头开始读——等于丢弃所有历史 - 攻击者可能已在
rsyslog配置里加了if $msg contains 'Failed' then stop这类过滤规则,重启只是让过滤生效得更彻底










