我的 logrotate 服务失败。它抱怨 modsecurity 的重复条目。
● logrotate.service - Rotate log files
Loaded: loaded (/lib/systemd/system/logrotate.service; static; vendor preset: enabled)
Active: failed (Result: exit-code) since Tue 2021-06-08 14:22:07 CST; 2h 54min ago
Docs: man:logrotate(8)
man:logrotate.conf(5)
Main PID: 15370 (code=exited, status=1/FAILURE)
Jun 08 14:22:07 server1.example.com systemd[1]: Starting Rotate log files...
Jun 08 14:22:07 server1.example.com logrotate[15370]: error: modsecurity:1 duplicate log entry for /var/log/apache2/modsec_audit.log
Jun 08 14:22:07 server1.example.com logrotate[15370]: error: found error in file modsecurity, skipping
Jun 08 14:22:07 server1.example.com systemd[1]: logrotate.service: Main process exited, code=exited, status=1/FAILURE
Jun 08 14:22:07 server1.example.com systemd[1]: logrotate.service: Failed with result 'exit-code'.
Jun 08 14:22:07 server1.example.com systemd[1]: Failed to start Rotate log files.
但是,/etc/logrotate.d/modsecurity
不包含任何重复项:
/var/log/apache2/modsec_audit.log
{
rotate 14
daily
missingok
compress
delaycompress
notifempty
}
任何想法?
更新:
#grep -r 'modsec_audit.log' /etc/
/etc/logrotate.d/modsecurity:/var/log/apache2/modsec_audit.log
/etc/modsecurity/modsecurity.conf:SecAuditLog /var/log/apache2/modsec_audit.log
/etc/modsecurity/modsecurity.conf-recommended:SecAuditLog /var/log/apache2/modsec_audit.log
所以我经历了:
/etc/modsecurity/modsecurity.conf:SecAuditLog /var/log/apache2/modsec_audit.log
/etc/modsecurity/modsecurity.conf-recommended:SecAuditLog /var/log/apache2/modsec_audit.log
并散列出 modsec_audit.log 值,如下所示
#SecAuditLogType Serial
#SecAuditLog /var/log/apache2/modsec_audit.log
然后跑:
systemctl restart logrotate
同样的错误
更新 2:
遵循@Nikita Kipriyanov 的建议,我完成并完全散列了 /etc/logrotate.d/modsecurity ,现在 logrotate 成功执行(所有 mdosec 日志都散列了):
#systemctl status logrotate
● logrotate.service - Rotate log files
Loaded: loaded (/lib/systemd/system/logrotate.service; static; vendor preset: enabled)
Active: inactive (dead) since Thu 2021-06-10 09:36:53 CST; 52s ago
Docs: man:logrotate(8)
man:logrotate.conf(5)
Process: 20308 ExecStart=/usr/sbin/logrotate /etc/logrotate.conf (code=exited, status=0/SUCCESS)
Main PID: 20308 (code=exited, status=0/SUCCESS)
Jun 10 09:36:52 tester1.example.com systemd[1]: Starting Rotate log files...
Jun 10 09:36:53 tester1.example.com systemd[1]: logrotate.service: Succeeded.
Jun 10 09:36:53 tester1.example.com systemd[1]: Started Rotate log files.
所以我启用了位于的原始 modsec_audit.log/etc/modsecurity/modsecuirty.conf
以查看会发生什么。再次,事情似乎正常工作
# systemctl status logrotate
● logrotate.service - Rotate log files
Loaded: loaded (/lib/systemd/system/logrotate.service; static; vendor preset: enabled)
Active: inactive (dead) since Thu 2021-06-10 09:54:05 CST; 4s ago
Docs: man:logrotate(8)
man:logrotate.conf(5)
Process: 21452 ExecStart=/usr/sbin/logrotate /etc/logrotate.conf (code=exited, status=0/SUCCESS)
Main PID: 21452 (code=exited, status=0/SUCCESS)
Jun 10 09:54:05 tester1.example.com systemd[1]: Starting Rotate log files...
Jun 10 09:54:05 tester1.example.com systemd[1]: logrotate.service: Succeeded.
Jun 10 09:54:05 tester1.example.com systemd[1]: Started Rotate log files.
同样的故事/etc/modsecurity/modsecurity-recommended
,这意味着 logrotate 服务仅在我使用时失败,/etc/logrotate.d/modsecuirty
并且碰撞必须是@Nikita Kipriyanov 建议的通配符
因此,该文件
/var/log/apache2/modsec_audit.log
被设置为由/etc/logrotate.d/modsecurity
和其他一些文件旋转,这些文件用通配符覆盖它。例如,可以定义为/var/log/apache2/*log
,当然也包括这个文件。我不知道您还有哪些其他 logrotate 配置文件,但很有可能它/etc/logrotate.d/apache2
或类似的东西有通配符。因此,
/var/log/apache2/modsec_audit.log
即使您删除/etc/logrotate.d/modsecurity
. 或者更好的是,将其替换为空文件(或仅包含指向此 SF 问题和答案的链接的评论的文件,以便轻松记住发生了什么)。这是解决问题的最简单的近时解决方案。否则,您可能希望/var/log/apache2/modsec_audit.log
避免被通配符捕获;没有办法将排除设置为 中的通配符logrotate
,因此您最终会重写通配符,因此它将包含除此之外的所有文件。我认为这很麻烦。还要记住,
/etc/logrotate.d/modsecurity
其他 logrotate 配置可能是由某些操作系统包安装的。当您更新这些软件包时,将重新安装这些文件。虽然删除的文件将重新放置到位,但编辑后的文件不会。配置文件保护将启动,至少您会收到有关更新配置的通知和手动解决的提示。所以“创建一个空文件”被算作一次编辑,会为你节省一些头发。而且,要彻底永久地解决这个问题,您应该发现这些冲突文件属于哪些包,并将错误提交到您的发行版的错误跟踪器中。您可以说服他们修复软件包,以便更新不会包含这些文件或这些文件不会发生冲突,因此更新后不会有任何中断。
很可能您在另一个文件中定义了重复条目。
检查
/etc/logrotate.conf
文件是否有重复项,如果此文件中没有重复项在其他文件中查找重复项。
您也可以尝试在
/etc/logrotate.d/rsyslog
文件中查找:您可能会在那里找到重复项。