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 - 輪換日誌文件 已載入:已載入(/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 配置可能是由某些作業系統包安裝的。當您更新這些軟體包時,將重新安裝這些文件。雖然刪除的文件將重新放置到位,但編輯後的文件不會。配置文件保護將啟動,至少您會收到有關更新配置的通知和手動解決的提示。所以“創建一個空文件”被算作一次編輯,會為你節省一些頭髮。而且,要徹底永久地解決這個問題,您應該發現這些衝突文件屬於哪些包,並將錯誤送出到您的發行版的錯誤跟踪器中。您可以說服他們修復軟體包,以便更新不會包含這些文件或這些文件不會發生衝突,因此更新後不會有任何中斷。