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)."