diff --git a/Implementierungshandbuch-IIS-PHP-AD.-.md b/Implementierungshandbuch-IIS-PHP-AD.-.md new file mode 100644 index 0000000..c1e737d --- /dev/null +++ b/Implementierungshandbuch-IIS-PHP-AD.-.md @@ -0,0 +1,737 @@ + +# Technisches Implementierungshandbuch: PHP-basierte Active Directory-Verwaltung mit IIS auf Windows Server 2025 + +--- + +## Zusammenfassung + +Dieses Dokument beschreibt die detaillierte, produktionsreife Implementierung einer PHP-Webanwendung auf einem Windows Server 2025 Datacenter, die über die Internet Information Services (IIS) bereitgestellt wird. + +Die Anwendung erfüllt folgende hoch privilegierte Aufgaben: + +- Authentifizierung von Administratoren über LDAP +- Abfrage von Servermetriken über SNMP +- Erstellung von Active-Directory-(AD)-Benutzern (einzeln und als CSV-Massenimport) + +Die AD-Benutzererstellung wird durch die sichere Ausführung von PowerShell-Skripten aus PHP heraus realisiert. Die Skripte verarbeiten sowohl Einzelbenutzer als auch CSV-Massenimporte. + +Der Schwerpunkt dieses Handbuchs liegt auf der Konfiguration einer robusten und sicheren Architektur nach dem **Least-Privilege-Prinzip**, um Risiken durch Web-basierten Zugriff auf AD und Serverdienste zu minimieren. + +--- + +## Teil 1: Einrichtung der Basisinfrastruktur (IIS, PHP & FastCGI) + +Dieser Abschnitt legt das Fundament für die Webanwendung durch die Installation und Konfiguration des Webservers und der PHP-Laufzeitumgebung auf einem sauberen Windows Server 2025. + +### 1.1 Installation der IIS-Serverrolle + +1. Öffnen des Server-Managers. +2. Auswahl von **Verwalten → Rollen und Features hinzufügen**. +3. Im Assistenten zur Seite **Serverrollen** navigieren. +4. **Webserver (IIS)** auswählen. +5. Im erscheinenden Pop-up auf **Features hinzufügen** klicken. +6. Zur Seite **Rollendienste** fortfahren. +7. Unter **Webserver → Anwendungsentwicklung** den Knoten erweitern. +8. Das Kontrollkästchen **CGI** aktivieren. + +**Technische Erläuterung:** +Die Auswahl von **CGI** ist entscheidend. Diese Option installiert nicht nur klassisches CGI, sondern auch das moderne **FastCGI-Modul**, das für die performante und stabile Anbindung von PHP an IIS erforderlich ist. Ohne FastCGI kann IIS nicht mit `php-cgi.exe` kommunizieren. + +9. Den Assistenten abschließen und die Installation abwarten. + +--- + +### 1.2 Installation der PHP-Laufzeitumgebung + +Die Installation von PHP erfolgt manuell, da der Web Platform Installer (WPI) nicht mehr unterstützt wird. + +#### Voraussetzung: Visual C++ Redistributable + +PHP unter Windows benötigt das **Microsoft Visual C++ 2015–2022 Redistributable (x64)**. + +1. Neueste x64-Version von Microsoft herunterladen (`vc_redist.x64.exe`). +2. Installation ausführen und abschließen. + +#### PHP-Download + +1. Zur offiziellen Download-Seite für PHP unter Windows wechseln: + `https://windows.php.net/download/` +2. Die **x64 Non-Thread Safe (NTS)** Version der gewünschten PHP-Version (z.B. PHP 8.3) im **Zip-Format** auswählen. + +**Technische Erläuterung:** +Die NTS-Version ist für den Betrieb mit IIS + FastCGI optimiert. FastCGI übernimmt das Prozess-Pooling, daher ist Thread-Safety in PHP selbst nicht erforderlich. Die Verwendung einer Thread-Safe-Version (TS) kann hier zu Performance- und Stabilitätsproblemen führen. + +#### PHP-Installation + +1. Ein Verzeichnis für PHP erstellen, z.B.: + `C:\PHP` +2. Das heruntergeladene ZIP-Archiv nach `C:\PHP` entpacken. + +--- + +### 1.3 Konfiguration von IIS für PHP (Handler Mapping) + +Nun muss IIS angewiesen werden, wie `.php`-Dateien behandelt werden. Dies erfolgt über eine **Handler-Zuordnung**. + +1. IIS-Manager starten (`inetmgr`). +2. Im linken Bereich **Verbindungen** den Servernamen (oberste Ebene) auswählen. +3. Im mittleren Bereich auf **Handlerzuordnungen** doppelklicken. +4. Im rechten Bereich unter **Aktionen** auf **Modulzuordnung hinzufügen…** klicken. +5. Felder wie folgt ausfüllen: + + - **Anforderungspfad:** `*.php` + - **Modul:** `FastCgiModule` + - **Ausführbare Datei:** `C:\PHP\php-cgi.exe` (Pfad ggf. anpassen) + - **Name:** z. B. `PHP via FastCGI` + +6. Mit **OK** bestätigen. +7. Die Nachfrage, ob eine FastCGI-Anwendung angelegt werden soll, mit **Ja** bestätigen. + +--- + +### 1.4 Konfiguration der „Default Web Site“ + +1. Im IIS-Manager im linken Bereich **Websites** erweitern. +2. Rechtsklick auf **Default Web Site** → **Verwalten der Website → Erweiterte Einstellungen…** +3. Die Eigenschaft **Physischer Pfad** suchen. +4. Den Standardpfad (z.B. `%SystemDrive%\inetpub\wwwroot`) ändern auf den `public`-Ordner des Projekts, z.B.: + `C:\Web\AdAdminPanel\public` +5. Mit **OK** bestätigen. + +Ab jetzt leitet IIS Anfragen an `http://localhost/` in das Verzeichnis `C:\Web\AdAdminPanel\public`. + +--- + +### 1.5 Validierung der Basisinstallation + +1. Eine neue Textdatei `phpinfo.php` in + `C:\Web\AdAdminPanel\public` erstellen. +2. Folgenden Inhalt einfügen: + + ```php + + + + + Admin Login + + +

Admin Login

+ +

+ +
+ Benutzername:
+ Passwort:
+ +
+ + +``` + +--- + +### 6.2 Modul 2: Server-Monitoring (SNMP) + +**Datei:** `dashboard.php` + +```php + +

Admin Dashboard

+

Angemeldet als:

+ +

Server-Status (SNMP)

+

CPU-Last (Kern 1): %

+

System Uptime:

+

RAM-Auslastung: + +

+ +
+

Einzelnen Benutzer erstellen

+

Benutzer per CSV importieren

+``` + +--- + +### 6.3 Modul 3: Einzelne Benutzererstellung + +**Datei:** `create_single_user.php` + +```php +&1) + $output = shell_exec($command . " 2>&1"); + } +} +?> +

Neuen AD-Benutzer erstellen

+
+ Benutzername (SamAccountName):
+ Temporäres Passwort:
+ Vorname:
+ Nachname:
+ +
+ + +

Ausgabe:

+
+ +``` + +--- + +### 6.4 Modul 4: CSV-Massenimport + +**Datei:** `bulk_create_users.php` + +```php +&1"); + + // Temporäre CSV mit Klartext-Passwörtern löschen + unlink($temp_csv_path); + } else { + $output = "Fehler beim Hochladen der Datei."; + } +} +?> +

AD-Benutzer per CSV-Massenimport erstellen

+

Die CSV-Datei muss die Spaltenüberschriften SamAccountName, GivenName, Surname und Password enthalten.

+ +
+ CSV-Datei auswählen:
+ +
+ + +

Import-Ergebnis:

+
+ +``` + +--- + +## Teil 7: Abschließendes Sicherheits-Audit und Risikobewertung + +Die Lösung ist mächtig, aber sensibel, da sie eine Brücke zwischen Web und Active Directory bildet. Die folgenden Risiken und Gegenmaßnahmen sind zentral: + +### Risiko: Command Injection + +**Beschreibung:** +Ein Angreifer könnte versuchen, über Formulare Befehle einzuschleusen, z.B.: +`username; Remove-ADUser -Identity 'Administrator'` + +**Gegenmaßnahme:** + +- Konsequente Verwendung von **`escapeshellarg()`** für alle Parameter, die an `powershell.exe` übergeben werden. +- Dadurch werden Eingaben als einzelne, harmlose Zeichenkette behandelt und nicht als eigenständiger Befehl interpretiert. + +--- + +### Risiko: Eskalation von Berechtigungen + +**Beschreibung:** +Eine Schwachstelle in der PHP-Anwendung könnte genutzt werden, um die Rechte des Webserverkontos zu missbrauchen. + +**Gegenmaßnahme:** + +- AppPool läuft als **`svc_iis_php_ad`** mit minimal notwendigen Rechten. +- AD-Delegierung beschränkt das Konto auf das Erstellen/Ändern von Benutzern in der OU `WebAppUsers`. +- Keine Mitgliedschaft in administrativen Gruppen, kein Zugriff auf andere OUs oder Systeme. + +--- + +### Risiko: Klartext-Passwörter + +**Beschreibung:** + +- Passwörter liegen im Klartext in Formularen und CSV-Dateien vor. +- Übergabe an PowerShell erfolgt im Klartext. +- Temporäre CSV-Dateien enthalten Klartext-Passwörter auf der Festplatte. + +**Gegenmaßnahmen:** + +- **HTTPS erzwingen:** Die gesamte Weboberfläche muss über TLS gesichert werden. +- **Schnelle Konvertierung**: PowerShell wandelt Klartext-Passwörter sofort in `SecureString` um. +- **Löschung der CSV-Dateien:** Temporäre CSV-Dateien werden nach der Verarbeitung gelöscht (`unlink()`). +- **Passwortwechsel erzwingen:** `ChangePasswordAtLogon = $true` zwingt Benutzer zur Passwortänderung bei der ersten Anmeldung. + +--- + +### Risiko: Fehlende Fehlerbehandlung + +**Beschreibung:** + +- PowerShell-Fehler (z.B. Kennwort-Komplexität) landen auf STDERR, das von `shell_exec()` standardmäßig ignoriert wird. + +**Gegenmaßnahme:** + +- Anhängen von `2>&1` an alle Befehle im `shell_exec()`-Kontext, damit Fehlermeldungen im `$output`-String landen und im Webinterface angezeigt werden können. + +--- + +**Ende des Dokuments**