Start · Sprachen · PHP · Referenz · win32_remove_right_access_service

win32_remove_right_access_service

Funktion

Entfernt die Dienstrechte eines Benutzers für einen bestimmten Windows-Dienst.

seit PHP 0.4.0 Kategorie: misc

Signatur

win32_remove_right_access_service(string $servicename, string $username): void

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

Typ
void
Beschreibung
Gibt keinen Wert zurück. Bei einem Fehler wird ab win32service 1.0.0 eine 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;
}
Die Zugriffsrechte für '.\ServiceUser' auf den Dienst 'MyPHPService' wurden erfolgreich entfernt.

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;
Rechte für 'DOMAIN\MaintenanceUser' auf 'MyPHPService' entfernt. Rechte für 'DOMAIN\MaintenanceUser' auf 'MyBackupService' entfernt. Wartungsfenster abgeschlossen, Berechtigungen bereinigt.

// 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.