Linux

Logrotate 服務失敗

  • June 10, 2021

我的 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 - 輪換日誌文件 已載入:已載入(/lib/systemd/system/logrotate.service;靜態;供應商預設:已啟用) 活動:自 2021 年 6 月 10 日星期四 09:36 起處於非活動狀態(死) :53 中央標準時間;52 秒前 文件:man:logrotate(8) man:logrotate.conf(5) 程序:20308 ExecStart=/usr/sbin/logrotate /etc/logrotate.conf (code=exited, status=0/SUCCESS) Main PID: 20308 (程式碼=退出,狀態=0/成功)

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 - 輪換日誌文件 已載入:已載入(/lib/systemd/system/logrotate.service;靜態;供應商預設:已啟用) 活動:自 2021 年 6 月 10 日星期四 09:54:05 CST 以來處於非活動狀態(死亡);4 秒前 文件:man:logrotate(8) man:logrotate.conf(5) 程序:21452 ExecStart=/usr/sbin/logrotate /etc/logrotate.conf (code=exited, status=0/SUCCESS) Main PID: 21452 (程式碼=退出,狀態=0/成功)

6 月 10 日 09:54:05 tester1.example.com systemd

$$ 1 $$:開始輪換日誌文件… Jun 10 09:54:05 tester1.example.com systemd$$ 1 $$:logrotate.service:成功。6 月 10 日 09:54:05 tester1.example.com systemd$$ 1 $$:開始輪換日誌文件。 同樣的故事/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 配置可能是由某些作業系統包安裝的。當您更新這些軟體包時,將重新安裝這些文件。雖然刪除的文件將重新放置到位,但編輯後的文件不會。配置文件保護將啟動,至少您會收到有關更新配置的通知和手動解決的提示。所以“創建一個空文件”被算作一次編輯,會為你節省一些頭髮。

而且,要徹底永久地解決這個問題,您應該發現這些衝突文件屬於哪些包,並將錯誤送出到您的發行版的錯誤跟踪器中。您可以說服他們修復軟體包,以便更新不會包含這些文件或這些文件不會發生衝突,因此更新後不會有任何中斷。

引用自:https://serverfault.com/questions/1066047