fix(acl): nur Log-Verzeichnisse, Timeout pro Wurzel

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.
This commit is contained in:
mm committed 2026-09-14 10:33:32 +02:00
1 parent 7ec5d44517
commit c7ab78e9dd
1 file changed
+22 -7
+22 -7
View File
@@ -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)."