Beiträge von Sumeragi

    jetzt bin hier wieder an der selben stelle

    Code
    1. svwrap
    2. $Revision: 1.60d $
    3. Error in line 1082
    4. cannot fork, most likely the process limit RLIMIT_NPROC is exceeded

    wie ich damals es gelöst habe, weiß ich nicht mehr, aber das komische ist das es sich nur auf die index.php(besser gesagt auf die scripte im htdocs, auch zu probe erstelle phpinfo.php hat den selben fehler) bezieht

    pd-admin an sich geht ohne probleme und sonstige web-mailer usw

    Das RLIMIT_NPROC bezieht sich ja auf die Anzahl an gleichzeitigen Prozessen. Sprich zum Zeitpunkt des Fehlers müssten 64 Prozesse gleichzeitig laufen. Vorstellbar wäre, dass z.b. eine Brute-Force-Attacke auf phpMyAdmin oder Roundcube stattfindet und dadurch das Limit erreicht wird. Es sollte daher bei Auftreten des Fehlers das access_log und die Prozessliste analysiert werden.

    Führt man

    Shell-Script
    1. strace -vvfe trace=write,open,read -s 4096 -o strace.log /opt/pdadmin/bin/httpd_vhosts.pl

    aus, sieht man dass dort RLIMIT_NPROC 64 in die httpd.conf geschrieben wird. Ich hab nur flüchtig drüber geschaut, konnte aber nicht sehen, dass die Werte irgendwo her kommen. Daher gehe ich davon aus, dass die Werte direkt aus der httpd_vhosts.pl kommen.

    Ich habe bzgl. der Problematik mit dem logs Ordner ein guten Tipp bekommen, womit das Problem updatesicher gelöst werden kann. Schaut man in die man Page von tar steht dort 'exclude=PATTERN' - bei PATTERN kann man selbstverständlich auch mit Wildcards arbeiten. Kurzum


    $backup_user_exclude = '/home/*/logs';


    bringt hier die gewünschte Lösung :)

    Das Skript holt sich aus der pdadmin.conf die Werte von backup_user_exclude. Wenn dort $HOME drin steht, hat dies den Wert der Systemvariable und enthält /root


    Wird dies nun übergeben, z.b. an eine andere Variable oder Skript, steht dort nicht mehr $HOME drin, sondern eben dessen Inhalt /root

    Shell-Script
    1. irgendeineVariable=$HOME
    2. echo $irgendeineVariable
    3. /root


    In der backup_user.sh wird anfangs $HOME lokal (innerhalb des Skripts) gesetzt und überschreibt damit die Systemvariable. Diese enthält dann den Pfad zum Nutzer Home-Verzeichnis. Daher kann man in der backup_user.sh auch

    --exclude=$HOME/logs

    in die Zeile mit tar einfügen. Somit hat man einen absoluten Pfad zum logs Verzeichnis des jeweiligen Nutzers. Dies wird dann ausgenommen.


    Hat man \$HOME/logs in der Variable stehen, wird dies durch \ escaped und als normaler String behandelt.

    Dies funktioniert leider nicht. Die logs Ordner werden dann trotzdem mit gesichert. Dies liegt daran, dass das Skript als root ausgeführt wird und $HOME in dem Moment /root enthält. Somit steht dort dann --exclude=/root/logs. Und würde man es escapen, stünde dort --exclude=$HOME/logs


    Sehe da also gerade keine andere einfache Lösung.

    Kurzes Feedback:


    Die o.g. Änderungen funktionieren auf meinem Server problemlos. Der logs Ordner im Home-Verzeichnis wird ausgenommen. Andere logs Verzeichnisse werden inkludiert.


    Shell-Script: /opt/pdadmin/etc/pdadmin.conf
    1. $backup_user_exclude = '';


    Code: /opt/pdadmin/bin/backup_user.sh
    1. nice -n 19 setuidgid $USER tar --preserve-permissions --exclude=$HOME/logs $PARM_EXCLUDE -czf $BACKUPDIR/user/$USER/$ROTATION/backup.tar.gz $HOME

    So sieht es bei mir aus.


    chmod 755 /opt/pdadmin


    sollte es tun.

    Code
    1. [Mon Feb 25 21:19:05.178501 2019] [core:crit] [pid 24808] (13)Permission denied: [client 84.156.181.212:43970] AH00529: /opt/pdadmin/.htaccess pcfg_openfile: unable to check htaccess file, ensure it is readable and that '/opt/pdadmin/' is executable

    Anscheinend fehlen bei /opt/pdadmin/ die Ausfuhrrechte.

    Der Forbidden Fehler wird durch den Symlink kommen. Den Ordner einfach von /opt nach /home verschieben und ein Symlink setzen funktioniert nicht. Der Ordner muss leider wieder zurück verschoben werden. Oder anstatt ein Symlink muss 'mount --bind' verwendet werden.

    Ausgeführt wird das Backup in /opt/pdadmin/bin/backup_user.sh. Darin enthalten sind folgende Zeilen:

    Wird in der pdadmin.conf logs exkludiert, wird tar mit [...] --exclude=logs [...] ausgeführt. Dies schließt alle Dateien mit dem Muster logs aus. Ein erster Lösungsvorschlag wäre die Variable in pdadmin.conf leer zu lassen und --exclude=$HOME/logs in der tar Zeile (vor oder nach $PARM_EXCLUDE) zu setzen:

    Shell-Script
    1. nice -n 19 setuidgid $USER tar --preserve-permissions --exclude=$HOME/logs $PARM_EXCLUDE -czf $BACKUPDIR/user/$USER/$ROTATION/backup.tar.gz $HOME

    Wenn ich gerade kein Denkfehler habe, sollte so /home/<LOGINID>/logs ausgelassen werden. Und dort werden ja per default die Logs platziert.

    Im tarball der Serverumgebung gibt es das Tool "pdu-clean.sh". Damit kann man Recht komfortabel die pd-admin Backups aufräumen.


    Man kann auch mit 'mount --bind' arbeiten und so Ordner von einer anderen Partition in das Dateisystem einbinden. Wenn die größere Partition als /home gemountet ist, könnte man dort den Ordner 'usr_local' erstellen, /usr/local hinein kopieren und dann mittels 'mount --bind' wieder in die eigentliche Position mounten.

    Wenn man die einfach "drüber mountet" bleiben die Daten unter /usr/local bestehen. Der Speicherplatz unter / ist somit noch nicht frei gegeben.


    Edit:


    In der fstab sähe dies dann so aus:

    Code
    1. /home/usr_local /usr/local none bind 0 0

    Die Autoresponder-Mail wird in /home/popuser/autorespond/autorespond generiert. Mir wäre auch neu, dass qmail da was manipuliert - dann müssten reguläre Mails ja auch irgendwie betroffen sein. Ich würde jetzt auf Verdacht mal die Binärdatei austauschen und noch einmal testen.

    Hab auf dem betroffenen Server die checksumme von /home/popuser/autorespond/autorespond mit Deiner verglichen. Die ist ident. Daran liegts wohl nicht.

    Hmm... Dann muss man sich weiter langsam nähern. Die Zeilen

    Code
    1. Content-type: text/plain; charset=windows-1252
    2. Content-Transfer-Encoding: 8bit

    sind also in der Binärdatei enthalten? Sollte ja, wenn die Checksum identisch ist. In der Mail später fehlen diese dann?

    Ich habe es einmal auf meinem Server getestet. Mail in utf-8 gesendet. Der Autoresponder antwortet dann mit einer Mail im windows-1252 Format:

    Code
    1. Content-type: text/plain; charset=windows-1252
    2. Content-Transfer-Encoding: 8bit

    windows-1252 enthält jedenfalls Umlaute. Die Mail wird bei mir auch korrekt angezeigt.


    Auch wenn /home/popuser/autorespond/autorespond eine Binärdatei ist, kann ich diese im vi öffnen. Wenn ich dann nach "Content" suche finde ich auch die o.g. Zeilen bzw. den Aufbau des Autoresponse als Klartext. Für mich scheint das Problem an der Binärdatei zu liegen. Hat mal jemand mit einem "alten" System die Binärdatei mit einem frischen System verglichen?

    Shell-Script
    1. # md5sum /home/popuser/autorespond/autorespond
    2. 32125b4b9daad6d9c4e72428bcb021e2 /home/popuser/autorespond/autorespond

    Mein Server ist auch aus der Post-Courier Zeit, wurde also direkt mit Dovecot aufgesetzt. PDA 4.60, SE 4-0.328.