Signatur
Beschreibung
win32_remove_right_access_service() widerruft einem Windows-Benutzerkonto die Zugriffsrechte auf einen spezifischen Windows-Dienst. Die Funktion ist Teil der PECL-Erweiterung win32service und steht ausschließlich auf Windows-Systemen zur Verfügung.
Sie wird typischerweise eingesetzt, wenn ein Benutzer, der zuvor mit win32_set_right_access_service() Zugriffsrechte auf einen Dienst erhalten hat, diese Rechte wieder verlieren soll – etwa beim Entfernen eines Dienstkontos oder beim Ändern von Sicherheitsrichtlinien.
Die Funktion kommuniziert direkt mit dem Windows Service Control Manager (SCM) und passt die Sicherheitsdeskriptoren des Dienstes entsprechend an. Der aufrufende PHP-Prozess benötigt dafür ausreichende Administrative Rechte auf dem System.
Ab win32service 1.0.0 wirft die Funktion bei einem Fehler eine Win32ServiceException anstatt einen Fehlercode zurückzugeben. Der Aufruf sollte daher in einem try/catch-Block erfolgen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $servicename Pflicht | string | Der interne Name des Windows-Dienstes (nicht der Anzeigename), dem die Benutzerrechte entzogen werden sollen. | |
| $username Pflicht | string | Der Windows-Benutzername (z. B. DOMAIN\User oder .\LocalUser), dem die Dienstrechte entzogen werden sollen. |
Rückgabewert
Win32ServiceException geworfen.Beispiele
Dienstrechte eines Benutzers entfernen
<?php
if (PHP_OS_FAMILY !== 'Windows') {
die('Diese Funktion steht nur unter Windows zur Verfügung.');
}
$serviceName = 'MyPHPService';
$username = '.\\ServiceUser';
try {
win32_remove_right_access_service($serviceName, $username);
echo "Die Zugriffsrechte für '{$username}' auf den Dienst '{$serviceName}' wurden erfolgreich entfernt.\n";
} catch (Win32ServiceException $e) {
echo 'Fehler beim Entfernen der Dienstrechte: ' . $e->getMessage() . PHP_EOL;
}
Rechte nach Abschluss eines Wartungsfensters entziehen
<?php
// Beispiel: Temporärer Wartungsbenutzer verliert nach Skriptlauf seine Dienstrechte
$services = ['MyPHPService', 'MyBackupService'];
$tempUser = 'DOMAIN\\MaintenanceUser';
foreach ($services as $service) {
try {
win32_remove_right_access_service($service, $tempUser);
echo "Rechte für '{$tempUser}' auf '{$service}' entfernt.\n";
} catch (Win32ServiceException $e) {
fprintf(STDERR, "Fehler bei Dienst '%s': %s\n", $service, $e->getMessage());
}
}
echo 'Wartungsfenster abgeschlossen, Berechtigungen bereinigt.' . PHP_EOL;
// Wichtig · Fallstricke
Plattform: Diese Funktion ist ausschließlich unter Windows verfügbar und erfordert die PECL-Erweiterung win32service. Auf anderen Betriebssystemen führt ihr Aufruf zu einem fatalen Fehler.
Berechtigungen: Der PHP-Prozess (bzw. der ausführende Benutzer) muss über ausreichende administrative Rechte verfügen, um Sicherheitsdeskriptoren des Windows Service Control Managers zu verändern. Andernfalls schlägt die Funktion mit einer Ausnahme fehl.
Versionshinweis: In älteren Versionen der win32service-Erweiterung (< 1.0.0) wurde ein Win32-Fehlercode zurückgegeben statt eine Ausnahme zu werfen. Code, der für ältere Versionen geschrieben wurde, muss entsprechend angepasst werden.
Sicherheit: Das Entfernen von Dienstrechten sollte nur nach sorgfältiger Prüfung erfolgen, da es den laufenden Betrieb von Diensten beeinflussen kann, falls der betroffene Benutzer aktiv Dienste verwaltet.