Page 1 of 2

crash - PHP Fehler /proc flooding

Posted: Wed 12. Feb 2025, 17:37
by Ralph
Hatte vorhin einen üblen crash, zuerst ging dabei nur apache in die Knie, dann innerhalb weniger Minuten war kein disk space mehr frei.
Das error.log hatte 95GB erreicht, durch löschen des logfiles wurde das Problem nicht gelöst:

Code: Select all

du -sh /*
du: cannot access '/proc/2098450': No such file or directory
du: cannot access '/proc/2098537/task/2098537/fd/4': No such file or directory
du: cannot access '/proc/2098537/task/2098537/fdinfo/4': No such file or directory
du: cannot access '/proc/2098537/fd/3': No such file or directory
du: cannot access '/proc/2098537/fdinfo/3': No such file or directory
demnach wurde der /proc folder flooded ...möglich wäre das der PHP Fehler zu lange (zu viele Details) enthielt und dann die Kombi Fail2ban, Apache und PHP für das fluten gesorgt haben ... Ich warte noch auf Kundenantwort.
Der freie Disk space war vorher 42% nach etwa 10 Minuten noch 10%
Nach einem reboot, war es dann wieder OK, momentan auf 40%.

Es handelt sich um einen veralteten Prestashop auf PHP 7.2, möglich wäre auch das diese irgendwo Malware enthielt, aber die files werden extern (rsync backups) mit maldet checked da war nichts.

Code: Select all

[Wed Feb 12 16:37:06.417710 2025] [proxy_fcgi:error] [pid 2085101:tid 2085140] [remote xxx.xxx.xxx.xxx:24010] AH01071: Got error 'nepper.lu/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Loader/XmlFileLoader.php on line 582\nPHP message: PHP Notice:  Undefined offset: 79494828 in /home/users/kunde/www/domainname.tld/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Loader/XmlFileLoader.php on line 582\nPHP message: PHP Notice:  Undefined offset: 79494830 in /home/users/kunde/www/domainname.tld/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Loader/XmlFileLoader.php on line 582\nPHP message: PHP Notice:  Undefined offset: 79494832 in /home/users/kunde/www/domainname.tld/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Loader/XmlFileLoader.php on line 582\nPHP message: PHP Notice:  Undefined offset: 79494834 in /home/users/kunde/www/domainname.tld/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Loader/XmlFileLoader.php on line 582\nPHP message: PHP Notice:  Undefined offset: 79494836 in /home/users/kunde/www/domainname.tld/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Loader/XmlFileLoader.php on line 582\nPHP message: PHP Notice:  Undefined offset: 79494838 in /home/users/kunde/www/domainname.tld/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Loader/XmlFileLoader.php on line 582\nPHP message: PHP Notice:  Undefined offset: 79494840 in /home/users/kunde/www/domainname.tld/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Loader/XmlFileLoader.php on line 582\nPHP message: PHP Notice:  Undefined offset: 79494842 in /home/users/kunde/www/domainname.tld/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Loader/XmlFileLoader.php on line 582\nPHP message: PHP Notice:  Undefined offset: 79494844 in /home/users/kunde/www/domainname.tld/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Loader/XmlFileLoader.php on line 582\nPHP message: PHP Notice:  Undefined offset: 79494846 in /home/users/kunde/www/domainname.tld/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Loader/XmlFileLoader.php on line 582\nPHP message: PHP Notice:  Undefined offset: 79494848 in /home/users/kunde/www/domainname.tld/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Loader/XmlFileLoader.php on line 582\nPHP message: PHP Notice:  Undefined offset: 79494850 in /home/users/kunde/www/domainname.tld/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Loader/XmlFileLoader.php on line 582\nPHP message: PHP Notice:  Undefined offset: 79494852 in /home/users/kunde/www/domainname.tld/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Loader/XmlFileLoader.php on line 582\nPHP message: PHP Notice:  Undefined offset: 79494854 in /home/users/kunde/www/domainname.tld/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Loader/XmlFileLoader.php on line 582\nPHP message: PHP Notice:  Undefined offset: 79494856 in /home/users/kunde/www/domainname.tld/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Loader/XmlFileLoader.php on line 582\nPHP message: PHP Notice:  Undefined offset: 79494858 in /home/users/kunde/www/domainname.tld/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Loader/XmlFileLoader.php on line 582\nPHP message: PHP Notice:  Undefined offset: 79494860 in /home/users/kunde/www/domainname.tld/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Loader/XmlFileLoader.php on line 582\nPHP message: PHP Notice:  Undefined offset: 79494862 in /home/users/kunde/www/domainname.tld/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Loader/XmlFileLoader.php on line 582\nPHP message: PHP Notice:  Undefined offset: 79494864 in /home/users/kunde/www/domainname.tld/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Loader/XmlFileLoader.php on line 582\nPHP message: PHP Notice:  Undefined offset: 79494866 in /home/users/kunde/www/domainname.tld/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Loader/XmlFileLoader.php on line 582\nPHP message: PHP Notice:  Undefined offset: 79494868 in /home/users/kunde/www/domainname.tld/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Loader/XmlFileLoader.php on line 582\nPHP message: PHP Notice:  Undefined offset: 79494870 in /home/users/kunde/www/domainname.tld/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Loader/XmlFileLoader.php on line 582\nPHP message: PHP Notice:  Undefined offset: 79494872 in /home/users/kunde/www/domainname.tld/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Loader/XmlFileLoader.php on line 582\nPHP message: PHP Notice:  Undefined offset: 79494874 in /home/users/kunde/www/domainname.tld/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Loader/XmlFileLoader.php on line 582\nPHP message: PHP Notice:  Undefined offset: 79494876 in /home/users/kunde/www/domainname.tld/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Loader/XmlFileLoader.php on line 582\nPHP message: PHP Notice:  Undefined offset: 79494878 in /home/users/kunde/www/domainname.tld/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Loader/XmlFileLoader.php on line 582\nPHP message: PHP Notice:  Undefined offset: 79494880 in /home/users/kunde/www/domainname.tld/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Loader/XmlFileLoader.php on line 582\nPHP message: PHP Notice:  Undefined offset: 79494882 in /home/users/kunde/www/domainname.tld/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Loader/XmlFileLoader.php on line 582\nPHP message: PHP Notice:  Undefined offset: 79494884 in /home/users/kunde/www/domainname.tld/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Loader/XmlFileLoader.php on line 582\nPHP message: PHP Notice:  Undefined offset: 79494886 in /home/users/kunde/www/domainname.tld/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Loader/XmlFileLoader.php on line 582\nPHP message: PHP Notice:  Undefined offset: 79494888 in /home/users/kunde/www/domainname.tld/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Loader/XmlFileLoader.php on line 582\nPHP message: PHP Notice:  Undefined offset: 79494890 in /home/users/kunde/www/domainname.tld/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Loader/XmlFileLoader.php on line 582\nPHP message: PHP Notice:  Undefined offset: 79494892 in /home/users/kunde/www/domainname.tld/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Loader/XmlFileLoader.php on line 582\nPHP message: PHP Notice:  Undefined offset: 79494894 in /home/users/kunde/www/domainname.tld/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Loader/XmlFileLoader.php on line 582\nPHP message: PHP Notice:  Undefined offset: 79494896 in /home/users/kunde/www/domainname.tld/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Loader/XmlFileLoader.php on line 582\nPHP message: PHP Notice:  Undefined offset: 79494898 in /home/users/kunde/www/domainname.tld/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Loader/XmlFileLoader.php on line 
Was mich dabei überascht, ist erstmal das Logfile voll mit immer dem selben Entry und dann eben das /proc flooding ....

Eigentlich auch kein schwerwiegender Fehler nur eine notice: Undefined offset
Gäbe es da eine Lösung global etwas weniger ins error log zu beamen?

### edit ###
Der Kunde hat sich gemeldet und sagt, er habe nur ein PS Modul deinstallieren wollen ...
Na ja wie auch immer, ich habe eine Neu Installation gefordert und erstmal einen PW Schutz auf den Folder gesetzt.
https://vulmon.com/searchpage?q=prestas ... tashop+1.7

Re: crash - PHP Fehler /proc flooding

Posted: Wed 12. Feb 2025, 20:20
by Ralph
Dieser KVM läuft mit 16 vcores und 32GB RAM, hab mal einen Screenshot angehängt der den Einschlag leicht hervorhebt :roll:
Vorher alles im grünen Bereich, kaum Last ... vermutlich hauptsächlich F2B basierend, welches sich da tapfer mit dem 95GB log amüsiert hat.

Re: crash - PHP Fehler /proc flooding

Posted: Thu 13. Feb 2025, 09:22
by Ralph
Ich hatte zwar einen Cron Job laufen der die log file Größe checkt, aber der lief auf 2 Stunden ... hab den cron job nun auf alle 7 Min. laufen.
Die Flut von Undefined notice in den error logs, könnte jeder User verursachen wenn auf eine Anwendung z.b. eine unpassende PHP Version aktiviert wird. Das ist quasi eine Achillesferse, F2B und Apache kommen dann mit dem anwachsenden Log file an einen Punkt wo das System crasht, auch wenn viele TB diskspace und hunderte cores vorhanden wären.
F2B wird bei Überlast nicht mehr funktionieren wie erwartet, bei F2B selbst können wohl keine Limits für log files gesetzt werden ...

Könnten bei der logrotation eventl. Limits gesetzt werden die zwingend ab x GB rotieren, oder wie könnte eine solche Situation am besten verhindert werden ... oder PHP logs mit Status notice ignorieren?

weitere Idee ...
z.b. einen Cron Job der die Größe checkt und bei erreichen des Limits den Vhost automatisch deaktiviert und User und Admin beachrichtigt.

Re: crash - PHP Fehler /proc flooding

Posted: Thu 13. Feb 2025, 10:41
by Alexander
Ralph wrote: Thu 13. Feb 2025, 09:22 Könnten bei der logrotation eventl. Limits gesetzt werden die zwingend ab x GB rotieren
Logrotate schaut ja auch nur zu festgelegten Zeiten nach, ob es rotieren muss. Diesen Zeitraum kannst du natürlich verringern und einstellen, das es nach x GB rotieren soll.

Sollte der Zeitraum zu weit gefasst sein, kann es natürlich trotzdem dazu führen, das das Log zu groß ist.

---

Für PHP gibt es natürlich noch diese ini Direktive, die Abhilfe schaffen kann: ignore_repeated_errors
Ggf. möchtest du sie Global für PHP auf deinem Server setzen.

Re: crash - PHP Fehler /proc flooding

Posted: Thu 13. Feb 2025, 11:29
by Ralph
Alexander wrote: Thu 13. Feb 2025, 10:41 Logrotate schaut ja auch nur zu festgelegten Zeiten nach, ob es rotieren muss. Diesen Zeitraum kannst du natürlich verringern und einstellen, das es nach x GB rotieren soll.
Sollte der Zeitraum zu weit gefasst sein, kann es natürlich trotzdem dazu führen, das das Log zu groß ist.
Für PHP gibt es natürlich noch diese ini Direktive, die Abhilfe schaffen kann: ignore_repeated_errors
Ggf. möchtest du sie Global für PHP auf deinem Server setzen.

- Bei logrotate auf size umstellen habe ich ein ungutes Gefühl ... im Betreib von Apache & F2B könnten Fehler auftreten.
- Das "ignore_repeated_errors" ist interessant, allerdings könnte es auch F2B Filter oder ModSecurity Filter aushebeln.
Mit dem logrotate hängen verutlich auch weitere KH interne Scripts und Funktionen mit drin ...

Alternativ eventl. ein log size check script

Code: Select all

#!/bin/bash
SIZE=500000000
MAILADDR="hostmaster@mydomain.tld"
if [ $(du -baS /home/users/*/logs/*/ | sort -rn | head -1 | awk '{print $1}') -gt $SIZE ]; then
        USERDIR=$(du -h -d 1 /home/users/*/logs/*/ | sort -hr | head -1)
        echo $USERDIR | mail -s "User Log size limit exceeded on Hostname" $MAILADDR
fi
müsste dann erweitert werden um den Vhost noch zu deaktivieren ...
Greift hierbei ein a2dissite oder a2disconf mit der KH vhost config?

Code: Select all

a2dissite /etc/apache2/keyhelp/vhosts/userx.conf
Was wäre denn die bessere und stabilste Lösung?

Re: crash - PHP Fehler /proc flooding

Posted: Thu 13. Feb 2025, 11:36
by Alexander
Ralph wrote: Thu 13. Feb 2025, 11:29 Greift hierbei ein a2dissite oder a2disconf mit der KH vhost config?

Code: Select all

a2dissite /etc/apache2/keyhelp/vhosts/userx.conf
Nein, KeyHelp nutzt keine a2dissite / a2disconf Befehle und sie würden auch nicht zum gewünschten Ergebnis führen.

Re: crash - PHP Fehler /proc flooding

Posted: Thu 13. Feb 2025, 14:47
by Ralph
OK, ich bin hier mal wieder im Stress und werde nächste Woche das Script erweitern :lol:
Ich denke da z.b. an:
- Webpfad mit ins Script setzen
- prüfen ob eine .htaccess existiert
- wenn ja, dann ein Deny from all oben rein hacken

Code: Select all

Order allow,deny
Deny from all
- wenn keine existiert, eine neue .htaccess erstellen Deny from all
- eventl. noch eine CC als Email mit rein

Somit bekommt der Admin eine Nachricht ggf. auch auf eine externe Emailadresse und das Web ist blockiert, damit sollte sich das log file nicht weiter vergrössern und der Admin hat etwas mehr Zeit zum eingreifen, je nach gesetztem Limit.

Re: crash - PHP Fehler /proc flooding

Posted: Thu 13. Feb 2025, 21:08
by Viktor
Hallo,

ich hatte letztens auch ein crash und root war zu 100 % belegt.

Die Datei "opt/keyhelp/php/7.1/var/log/php-fpm.log" war 92 GB groß.

Ich musste sie löschen dann ging wieder alles.

Kann man über die Log Dateien auch logrotate anlegen oder in Keyhelp eine Warnung wenn es zu viel wird ?

Gruß
Viktor ;)

Re: crash - PHP Fehler /proc flooding

Posted: Fri 14. Feb 2025, 08:48
by Ralph
Viktor wrote: Thu 13. Feb 2025, 21:08 Die Datei "opt/keyhelp/php/7.1/var/log/php-fpm.log" war 92 GB groß.
Ich musste sie löschen dann ging wieder alles.
Kann man über die Log Dateien auch logrotate anlegen oder in Keyhelp eine Warnung wenn es zu viel wird ?
Hi Viktor!
Die rotation für php-fpm.log sollte problemlos mit "size"laufen können ... bei global "ignore_repeated_errors" im PHP bin ich mir nicht sicher wg. möglicher fehlerhaften Auswertungen z.b. bei F2B bzw. Auswirkung auf Apache error logs.
Aber es wäre wohl keine schlechte Idee mal eine Liste zu machen von logfiles die nicht direkt an eine Auswertung angebunden sind ... für spezielle Optionen im logrotate.

Re: crash - PHP Fehler /proc flooding

Posted: Fri 14. Feb 2025, 09:05
by Alexander
Viktor wrote: Thu 13. Feb 2025, 21:08 Hallo,

ich hatte letztens auch ein crash und root war zu 100 % belegt.

Die Datei "opt/keyhelp/php/7.1/var/log/php-fpm.log" war 92 GB groß.

Ich musste sie löschen dann ging wieder alles.

Kann man über die Log Dateien auch logrotate anlegen oder in Keyhelp eine Warnung wenn es zu viel wird ?

Gruß
Viktor ;)

Danke für den Hinweis, /opt/keyhelp/php/*/var/log/php-fpm.log wird künftig im KeyHelp Logrotate Script bedacht.

Re: crash - PHP Fehler /proc flooding

Posted: Fri 14. Feb 2025, 11:42
by Ralph
Bei dem Code Schnipsel wäre es richtig wenn "USERDIR" einen Loop "for i in" durchläuft (momentan zeigt es nur die größte Datei an), ist vieleicht auch ganz gut so ... mit einem Loop könnte die Büchse der Pandora geöffnet werden, wenn sehr viele Log files auf einmal dieses Kriterium erfüllen.
Daher ist die Idee mit dem auto sperren via "Deny from all" nicht wirklich die beste Lösung, es könnte im Nachhinein viel restore Arbeit verursachen und auch was die Mail Benachrichtigungen betrifft, könnte es zu Problemen mit Rate Limits führen.

Ich denke mal wenn einmal eine Benachrichtigung zugestellt wird reicht es aus, dann muß der Admin eh eingreifen und entscheiden was zu tun ist.
Vieleicht wäre noch etwas am Apache LogFormat zu machen um weniger wichtige Hinweise nicht zu loggen ... entlasten halt, mehr fällt mir derzeit dazu nicht ein.

Vieleicht hat Alex ja noch eine Idee :roll:

Re: crash - PHP Fehler /proc flooding

Posted: Sat 15. Feb 2025, 12:07
by Ralph
Noch eine Frage dazu, die jeweilige php.ini files beinhaltet ja bereits ein:

Code: Select all

error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
wäre diese Einstellung im KH noch durch eine user.ini überschreibbar?

also bzgl. global PHP php_admin_value extra setzen erforderlich zum schützen?

Code: Select all

php_admin_value[error_reporting] = E_ALL & ~E_DEPRECATED & ~E_STRICT

Re: crash - PHP Fehler /proc flooding

Posted: Sat 15. Feb 2025, 16:52
by Ralph
Production Value ist ja default in der php.ini

Code: Select all

error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
wenn es nicht überschreibbar ist z.b. via user.ini oder .htaccess etc. wäre das soweit OK ...

was die Optimierung betrifft z.b. notice reduzieren bzw. rausnehmen, habe ich keine Erfahrung ob es z.b. bei der Auswertung von F2B Filtern oder ModSecurity wichtig wäre ... machbar wäre es z.b.

Code: Select all

error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT
oder

Code: Select all

error_reporting = E_ALL & ~E_NOTICE & ~E_USER_NOTICE & ~E_DEPRECATED & ~E_STRICT
Kann jemand mehr dazu sagen was genau zu erwarten wäre beir Verwendung von ~E_NOTICE & ~E_USER_NOTICE ???

Re: crash - PHP Fehler /proc flooding

Posted: Sat 22. Feb 2025, 14:56
by Ralph
@Alexander

Mir ist vorhin noch etwas aufgefallen bzgl. PHP Fehler, im Grunde nichts besonderes, aber es hatte Auswirkungen ...

Code: Select all

AH01071: Got error 'PHP message: PHP Warning: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in
Bei den kompilierten PHP packages, scheint "max_execution_time" nicht berücksichtigt zu werden bzw. bei überschreiten nicht gekillt.
Der entsprechende Prozess läuft bei einem PHP Fehler z.b. mit einer Anwendung die eine fehlerhafte PHP Version verwendet auf 100% Last solange weiter bis die Anwendung auf eine passende PHP Version geändert wurde oder das Web gesperrt wurde.

Code: Select all

536216 userx+  20   0  310052  44964  30800 R 100.0   0.1   1:29.26 keyhelp-php73-f
Bei nur "einem" Web ging mir vorhin die Systemload entsprechend durch die Decke ... ein manuelles stoppen des Interpreters hat gute 3 Minuten gebraucht, eventl. werden in dem Fall KH interne PHP basierende tasks nicht mehr richtig ausgeführt, wg. Überlast oder das time limit greift und killt nicht.
Der Prozess zeigte hier auch ein "-f" mit an ... Zombies gab es keine, auch nach wiederholtem nachstellen nicht.
error logs zeigen nur folgendes

Code: Select all

(70007)The timeout specified has expired: [client xx.xxx.xx.xx:42446] AH01075: Error dispatching request to : (polling)
aber der entsprechende PHP Interpreter arbeitet nicht mehr aufgrund der Überlast ....

Re: crash - PHP Fehler /proc flooding

Posted: Sun 23. Feb 2025, 12:15
by Ralph
Ich bin der Sache nun etwas näher gekommen, habe vorhin noch eine Entdeckung gemacht ...
Beim Umzug von einem Wordpress Web von x86 auf einen arm64 (PHP 8.1 compiled) kam es zu PHP Fehler:

Code: Select all

Got error 'PHP message: PHP Warning: error_log() has been disabled for security reasons 
Got error 'PHP message: PHP Fatal error: Uncaught Error: Call to undefined function error_log() in
Vorher auf dem x86, ist die WP mit der gleichen PHP Version und settings gelaufen ohne diesen Fehler.
Ich erinnere mich nicht wo das error_log herkommt, war "error_log" vorher mal in den standard disable_functions?
Im Demo und bei einer neuen Installation scheint es nicht mehr vorhanden zu sein, ich hatte die Account Templates von einem x86 importiert ...

Nachdem ich das error_log unter disabled_function rausgenommen habe, läuft alles auf dem arm, aber seltsam ist das schon ...
Sollte denn error_log in den disable_functions noch weiterhin verwendet werden oder besser überall raus?
Das wären sehr sehr viele User die dann alle von Hand nochmal abgespeichert werden müssten ...

Nochmal zusammengefasst:
- Beim x86 kam es "nur" zu dem riesigen Logfile - keine error_log Fehler, aber undefined function Fehler die dann ein 95GB log file erzeugt haben.
- Beim arm64 kam es direkt zu einem 500er undefined function error_log() Fehler und die WP funktionierte nicht, bis das error_log aus den disabled_function raus war.