diff --git a/README.md b/README.md index c676c0f..aa0109a 100644 --- a/README.md +++ b/README.md @@ -23,6 +23,7 @@ Dieses Tool ermöglicht es, einzelne oder alle Shops auf einem Plesk-Server temp - ✅ **Plesk-kompatibel**: Funktioniert mit Plesk-verwalteten Shops - ✅ **CDN-kompatibel**: Funktioniert auch hinter Link11, Cloudflare & Co. - ✅ **Fail-Open**: Bei Cache-Fehlern wird Traffic durchgelassen (keine Ausfälle) +- ✅ **Korrekte Ownership**: Erstellte Dateien gehören dem Shop-User, nicht root ## 🏗️ Architektur @@ -49,6 +50,35 @@ Dieses Tool ermöglicht es, einzelne oder alle Shops auf einem Plesk-Server temp **Anwendungsfall**: Shop soll weltweit erreichbar bleiben, aber Bots sollen gebremst werden. +## 👤 Ownership-Handling + +### Problem: root:root Dateien + +Wenn das Script als root läuft, werden erstellte Dateien standardmäßig `root:root` zugeordnet. Das kann zu Problemen führen: + +- PHP läuft als Domain-User und kann die Dateien evtl. nicht lesen/schreiben +- Plesk zeigt falsche Berechtigungen an +- Backup-Tools erfassen die Dateien möglicherweise nicht korrekt + +### Lösung: Automatische Owner-Erkennung + +Das Script ermittelt automatisch den häufigsten Owner im `httpdocs`-Verzeichnis und verwendet diesen für alle erstellten Dateien: + +``` +👤 Ownership: dbartholomae:psacln (uid=10005, gid=10006) +``` + +**Betroffene Dateien/Ordner:** +- `index.php` (nach Änderung) +- `index.php.geoip_backup` +- `geoip_blocking.php` +- `geoip_ip_ranges.cache` +- `geoip_ratelimit/` (inkl. Unterordner) + +### Warum "häufigster Owner"? + +In manchen Fällen können einzelne Dateien im `httpdocs`-Verzeichnis einem anderen User gehören (z.B. durch manuelle Uploads oder Plugins). Die Zählung der häufigsten `uid:gid`-Kombination stellt sicher, dass der "richtige" Owner verwendet wird. + ## 🚦 Rate-Limiting (Bot-Modus) ### Funktionsweise @@ -211,11 +241,12 @@ Das war's! Das Script ist vollständig selbstverwaltend. ``` ============================================================ - GeoIP Shop Blocker Manager v4.1.0 + GeoIP Shop Blocker Manager v4.2.0 🇩🇪🇦🇹🇨🇭 DACH | 🇪🇺 Eurozone+GB | 🤖 Bot-Rate-Limiting 🛡️ Mit Cache-Validierung und Fail-Open 🚦 Rate-Limiting nach BOT-TYP (nicht IP) 🌐 IP-basierte Erkennung: 37 Ranges für 1 Bot(s) + 👤 Korrekte Ownership für erstellte Dateien ============================================================ ---------------------------------------- @@ -254,6 +285,8 @@ Region wählen [1/2]: ### Beispiel: Bot-Rate-Limiting aktivieren ``` +👤 Ownership: dbartholomae:psacln (uid=10005, gid=10006) + 🔧 Aktiviere 🤖 Bot-Only für: shop.example.com Modus: Bot-Rate-Limiting nach Bot-Typ (weltweit erreichbar) Rate-Limit: 30 req/min pro Bot-Typ, Ban: 5 min @@ -341,6 +374,8 @@ Region wählen [1/2]: - `bans/` - Aktive Bans (`.ban` Dateien mit Timestamp|Bot-Name) - `counts/` - Request-Counter (`.count` Dateien) +**Wichtig**: Alle diese Dateien gehören dem Shop-User (z.B. `dbartholomae:psacln`), nicht `root:root`. + ### System-weit - `/var/lib/geoip/active_shops.json` - Tracking aktiver Shops @@ -434,10 +469,29 @@ mv index.php.geoip_backup index.php # Prüfe Verzeichnis-Berechtigungen ls -la /var/www/vhosts/SHOP/httpdocs/geoip_ratelimit/ -# Sollte 777 sein (PHP läuft als Domain-User) +# Sollte 777 sein und dem Shop-User gehören chmod -R 777 /var/www/vhosts/SHOP/httpdocs/geoip_ratelimit/ + +# Falls Owner falsch ist (root statt Shop-User): +chown -R SHOPUSER:psacln /var/www/vhosts/SHOP/httpdocs/geoip_ratelimit/ ``` +### Dateien gehören root:root + +Falls du eine ältere Version verwendet hast, können Dateien noch `root:root` gehören: + +```bash +# Prüfen +ls -la /var/www/vhosts/SHOP/httpdocs/geoip_* + +# Korrigieren (ersetze SHOPUSER mit dem richtigen User) +chown SHOPUSER:psacln /var/www/vhosts/SHOP/httpdocs/geoip_* +chown SHOPUSER:psacln /var/www/vhosts/SHOP/httpdocs/index.php* +chown -R SHOPUSER:psacln /var/www/vhosts/SHOP/httpdocs/geoip_ratelimit/ +``` + +Alternativ: Shop deaktivieren und mit v4.2.0+ neu aktivieren. + ### Alibaba-Bot wird nicht erkannt ```bash @@ -502,6 +556,13 @@ grep -oP '(BOT|BANNED): \K[^|]+' /var/www/vhosts/SHOP/httpdocs/geoip_blocked.log ## 📚 Changelog +### v4.2.0 +- **NEU**: Korrekte Ownership für erstellte Dateien +- **NEU**: Automatische Erkennung des häufigsten Owners im httpdocs-Verzeichnis +- **NEU**: Alle erstellten Dateien/Ordner gehören dem Shop-User statt root +- **NEU**: `get_most_common_owner()` und `set_owner()` Hilfsfunktionen +- Betroffene Dateien: index.php, Backup, geoip_blocking.php, Cache, ratelimit-Ordner + ### v4.1.0 - **NEU**: IP-basierte Bot-Erkennung für getarnte Bots - **NEU**: `BOT_IP_RANGES` mit Alibaba Cloud IP-Ranges (~20 Mio IPs) @@ -537,9 +598,10 @@ grep -oP '(BOT|BANNED): \K[^|]+' /var/www/vhosts/SHOP/httpdocs/geoip_blocked.log --- -**Version**: 4.1.0 +**Version**: 4.2.0 **Letztes Update**: Dezember 2025 **Status**: Production Ready ✅ **Bot-Patterns**: 321 spezifisch + 32 generisch **Bot-IP-Ranges**: 37 Ranges für Alibaba (~20 Mio IPs) -**Modi**: 🌍 GeoIP-Blocking | 🤖 Bot-Rate-Limiting \ No newline at end of file +**Modi**: 🌍 GeoIP-Blocking | 🤖 Bot-Rate-Limiting +**Ownership**: Automatisch vom Shop-User übernommen 👤 \ No newline at end of file