Logrotate服务失败

Logrotate服务失败

我的 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 所建议的那样

答案1

因此,该文件/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 配置可能由某些 OS 软件包安装。更新这些软件包时,这些文件将被重新安装。虽然删除的文件将重新放到位,但编辑的文件不会。配置文件保护将启动,至少您会收到有关更新配置的通知和手动解决的提示。因此,“创建一个空文件”算作编辑,这将为您省去一些麻烦。

而且,为了彻底、永久地解决这个问题,您应该找出这些冲突文件属于哪些软件包,并将错误提交到您的发行版的错误跟踪器中。您可以说服他们修复软件包,以便更新不会包含这些文件,或者这些文件不会发生冲突,这样更新后就不会出现任何问题。

答案2

很可能你在另一个文件中定义了重复的条目。
检查/etc/logrotate.conf文件是否有重复项,如果此文件中没有重复项,则会出现问题

grep -rnw '/etc/logrotate.d/' -e 'modsec_audit.log'

在其他文件中查找重复项。


您也可以尝试在/etc/logrotate.d/rsyslog文件中查找:

grep 'modsec_audit.log' /etc/logrotate.d/rsyslog

您可能会在那里发现重复的内容。

相关内容