From c7ab78e9dd4e2a8241e45fbe2d54f7f15536723f Mon Sep 17 00:00:00 2001 From: mm Date: Mon, 14 Sep 2026 10:33:32 +0200 Subject: [PATCH] fix(acl): nur Log-Verzeichnisse, Timeout pro Wurzel MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit setfacl -R lief ueber die GANZE Panel-Wurzel (/home/users) — dort liegen auch Mails, Webinhalte und Backups. Das Recht auf die Logs waere damit teuer und wirkungslos zugleich. Jetzt werden die logs/-Verzeichnisse eingesammelt (find -maxdepth 3), und jeder setfacl-Lauf hat ein Timeout von 120 s, damit ein langsamer Lauf nicht wie ein Haenger aussieht. --- install.sh | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/install.sh b/install.sh index 6c11aca..3302b69 100755 --- a/install.sh +++ b/install.sh @@ -647,14 +647,29 @@ grant_apache_log_access() { [ -n "$_roots" ] || return 0 _n=0 + # Timeout pro Wurzel: setfacl laeuft rekursiv. Auf einem Panel-Host kann eine + # Wurzel sehr gross sein; ohne Grenze sieht ein langsamer Lauf wie ein Haenger + # aus. 120 s pro Wurzel sind grosszuegig und begrenzen die Gesamtdauer. for _r in $_roots; do - # Durchgangsrecht (x) auf die Elternverzeichnisse, Leserecht (r) auf die - # Dateien: rX vergibt x nur fuer Verzeichnisse. - setfacl -R -m "u:$_u:rX" "$_r" 2>/dev/null && _n=$((_n+1)) - # Neu angelegte Dateien/Ordner erben das Recht (default-ACL nur fuer dirs). - if [ -d "$_r" ]; then - setfacl -R -d -m "u:$_u:rX" "$_r" 2>/dev/null || true - fi + # Nur die LOG-Verzeichnisse, nicht den ganzen User-Baum: /home/users + # enthaelt auch Mails, Webinhalte und Backups — ein rekursives Recht darauf + # waere wirkungslos fuer die Logs, aber teuer und semantisch falsch. + _targets="" + case "$_r" in + /home/*|/var/www*) + # Untergeordnete logs/-Verzeichnisse einsammeln (eine Ebene tief genug) + _targets="$(find "$_r" -maxdepth 3 -type d -name 'logs' 2>/dev/null | head -500 | tr '\n' ' ')" + [ -n "$_targets" ] || _targets="$_r" ;; + *) _targets="$_r" ;; + esac + for _t in $_targets; do + [ -d "$_t" ] || continue + # Durchgangsrecht (x) auf die Elternverzeichnisse, Leserecht (r) auf die + # Dateien: rX vergibt x nur fuer Verzeichnisse. + timeout 120 setfacl -R -m "u:$_u:rX" "$_t" 2>/dev/null && _n=$((_n+1)) + # Neu angelegte Dateien/Ordner erben das Recht (default-ACL nur fuer dirs). + timeout 120 setfacl -R -d -m "u:$_u:rX" "$_t" 2>/dev/null || true + done done [ "$_n" -gt 0 ] && log "Log-Leserechte gesetzt (ACL fuer '$_u') auf $_n Wurzel(n)."