Im Folgenden habe ich alles zusammengestellt, was ich über das Starten / Stoppen eines Windows-Dienstes über ein Nicht-Administrator-Benutzerkonto gelernt habe, falls jemand dies wissen muss.
In erster Linie gibt es zwei Möglichkeiten, einen Windows-Dienst zu starten / zu stoppen.
1. Direkter Zugriff auf den Dienst über das Windows-Anmelde-Benutzerkonto. 2. Zugriff auf den Dienst über IIS über das Netzwerkdienstkonto.
Befehlszeilenbefehl zum Starten / Stoppen von Diensten:
C:/> net start <SERVICE_NAME>
C:/> net stop <SERVICE_NAME>
C # -Code zum Starten / Stoppen von Diensten:
ServiceController service = new ServiceController(SERVICE_NAME);
//Start the service
if (service.Status == ServiceControllerStatus.Stopped)
{
service.Start();
service.WaitForStatus(ServiceControllerStatus.Running, TimeSpan.FromSeconds(10.0));
}
//Stop the service
if (service.Status == ServiceControllerStatus.Running)
{
service.Stop();
service.WaitForStatus(ServiceControllerStatus.Stopped, TimeSpan.FromSeconds(10.0));
}
Hinweis 1:
Wenn Sie über IIS auf den Dienst zugreifen, erstellen Sie eine Visual Studio C # ASP.NET-Webanwendung und geben Sie den Code dort ein. Stellen Sie den WebService im IIS-Stammordner (C: \ inetpub \ wwwroot \) bereit, und Sie können loslegen. Greifen Sie über die URL http: /// darauf zu.
1. Direktzugriffsmethode
Wenn das Windows-Benutzerkonto, von dem aus Sie entweder den Befehl eingeben oder den Code ausführen, ein Nicht-Administratorkonto ist, müssen Sie die Berechtigungen für dieses bestimmte Benutzerkonto festlegen, damit Windows-Dienste gestartet und gestoppt werden können. Das ist wie man es macht.
Melden Sie sich bei einem Administratorkonto auf dem Computer an, auf dem sich das Nicht-Administratorkonto befindet, von dem aus Sie den Dienst starten / stoppen möchten. Öffnen Sie die Eingabeaufforderung und geben Sie den folgenden Befehl ein:
C:/>sc sdshow <SERVICE_NAME>
Die Ausgabe davon wird ungefähr so aussehen:
D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)
Es listet alle Berechtigungen auf, die jeder Benutzer / jede Gruppe auf diesem Computer in Bezug auf hat.
A description of one part of above command is as follows:
D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)
It has the default owner, default group, and it has the Security descriptor control flags (A;;CCLCSWRPWPDTLOCRRC;;;SY):
ace_type - "A": ACCESS_ALLOWED_ACE_TYPE,
ace_flags - n/a,
rights - CCLCSWRPWPDTLOCRRC, please refer to the Access Rights and Access Masks and Directory Services Access Rights
CC: ADS_RIGHT_DS_CREATE_CHILD - Create a child DS object.
LC: ADS_RIGHT_ACTRL_DS_LIST - Enumerate a DS object.
SW: ADS_RIGHT_DS_SELF - Access allowed only after validated rights checks supported by the object are performed. This flag can be used alone to perform all validated rights checks of the object or it can be combined with an identifier of a specific validated right to perform only that check.
RP: ADS_RIGHT_DS_READ_PROP - Read the properties of a DS object.
WP: ADS_RIGHT_DS_WRITE_PROP - Write properties for a DS object.
DT: ADS_RIGHT_DS_DELETE_TREE - Delete a tree of DS objects.
LO: ADS_RIGHT_DS_LIST_OBJECT - List a tree of DS objects.
CR: ADS_RIGHT_DS_CONTROL_ACCESS - Access allowed only after extended rights checks supported by the object are performed. This flag can be used alone to perform all extended rights checks on the object or it can be combined with an identifier of a specific extended right to perform only that check.
RC: READ_CONTROL - The right to read the information in the object's security descriptor, not including the information in the system access control list (SACL). (This is a Standard Access Right, please read more http://msdn.microsoft.com/en-us/library/aa379607(VS.85).aspx)
object_guid - n/a,
inherit_object_guid - n/a,
account_sid - "SY": Local system. The corresponding RID is SECURITY_LOCAL_SYSTEM_RID.
Jetzt müssen wir die entsprechenden Berechtigungen zum Starten / Stoppen von Windows-Diensten für die gewünschten Gruppen oder Benutzer festlegen. In diesem Fall muss der aktuelle Nicht-Administrator-Benutzer den Dienst starten / stoppen können, damit wir die Berechtigungen für diesen Benutzer festlegen können. Dazu benötigen wir die SID dieses bestimmten Windows-Benutzerkontos. Um es zu erhalten, öffnen Sie die Registrierung (Start> regedit) und suchen Sie den folgenden Registrierungsschlüssel.
LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList
Darunter befindet sich für jedes Benutzerkonto in diesem Computer ein separater Schlüssel, und der Schlüsselname ist die SID jedes Kontos. SID haben normalerweise das Format S-1-5-21-2103278432-2794320136-1883075150-1000. Klicken Sie auf jeden Schlüssel. Im rechten Bereich wird eine Werteliste für jeden Schlüssel angezeigt. Suchen Sie "ProfileImagePath", und anhand seines Werts finden Sie den Benutzernamen, zu dem die SID gehört. Wenn der Benutzername des Kontos beispielsweise SACH lautet, lautet der Wert von "ProfileImagePath" etwa "C: \ Users \ Sach". Notieren Sie sich daher die SID des Benutzerkontos, für das Sie die Berechtigungen festlegen möchten.
Hinweis 2:
Hier ein einfaches C # -Codebeispiel , mit dem eine Liste der Schlüssel und ihrer Werte abgerufen werden kann.
//LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList RegistryKey
RegistryKey profileList = Registry.LocalMachine.OpenSubKey(keyName);
//Get a list of SID corresponding to each account on the computer
string[] sidList = profileList.GetSubKeyNames();
foreach (string sid in sidList)
{
//Based on above names, get 'Registry Keys' corresponding to each SID
RegistryKey profile = Registry.LocalMachine.OpenSubKey(Path.Combine(keyName, sid));
//SID
string strSID = sid;
//UserName which is represented by above SID
string strUserName = (string)profile.GetValue("ProfileImagePath");
}
Nachdem wir nun die SID des Benutzerkontos haben, auf das wir die Berechtigungen festlegen möchten, wollen wir uns darauf konzentrieren. Angenommen , die SID des Benutzerkontos lautet S-1-5-21-2103278432-2794320136-1883075150-1000 . Kopieren Sie die Ausgabe des Befehls [sc sdshow] in einen Texteditor. Es wird so aussehen:
D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)
Kopieren Sie nun den Teil (A ;; CCLCSWRPWPDTLOCRRC ;;; SY) des obigen Textes und fügen Sie ihn kurz vor dem Teil S: (AU; ... des Textes ein. Ändern Sie diesen Teil dann so, dass er wie folgt aussieht :
(A. ;; RPWPCR ;;; S-1-5-21-2103278432-2794320136-1883075150-1000)
Dann fügen Sie sc sdset an der Front, und den obigen Teil mit Anführungszeichen setzen. Ihr letzter Befehl sollte ungefähr so aussehen:
sc sdset <SERVICE_NAME> "D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;RPWPCR;;;S-1-5-21-2103278432-2794320136-1883075150-1000)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)"
Führen Sie dies nun an Ihrer Eingabeaufforderung aus. Bei Erfolg sollte die Ausgabe wie folgt erfolgen:
[SC] SetServiceObjectSecurity SUCCESS
Jetzt können wir loslegen! Ihrem Nicht-Administrator-Benutzerkonto wurden Berechtigungen zum Starten / Stoppen Ihres Dienstes erteilt! Versuchen Sie, sich beim Benutzerkonto anzumelden und den Dienst zu starten / zu stoppen. Dies sollte Ihnen ermöglichen.
2. Zugriff über die IIS-Methode
In diesem Fall müssen wir dem IIS-Benutzer "Network Services" anstelle des Windows-Anmeldekontos die Berechtigung erteilen. Die Vorgehensweise ist dieselbe, nur die Parameter des Befehls werden geändert. Da wir die Berechtigung auf "Netzwerkdienste" gesetzt haben, ersetzen Sie die SID durch die Zeichenfolge "NS" im letzten Befehl sdset, den wir zuvor verwendet haben. Der letzte Befehl sollte ungefähr so aussehen:
sc sdset <SERVICE_NAME> "D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;RPWPCR;;;NS)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)"
Führen Sie es in der Eingabeaufforderung von einem Admin-Benutzerkonto aus, und voila! Sie haben die Berechtigung, den Dienst über ein beliebiges Benutzerkonto (unabhängig davon, ob es sich um ein Administratorkonto handelt oder nicht) mithilfe einer WebMethod zu starten / zu stoppen. Informationen dazu finden Sie in Anmerkung 1.
sc sdshow
können Sie diesen regulären Ausdruck verwenden, um die Komponenten aufzuteilen:(?:\D:)?\(.+?\)
und dann den neuen Teil mit der SID als vorletzten einfügen.Ich benutze dafür das Dienstprogramm SubInACL . Zum Beispiel, wenn ich will , um den Benutzer geben Job auf dem Computer VMX001 die Fähigkeit zum Starten und Stoppen des World Wide Web - Publishing - Dienstes (auch als w3svc), würde ich den folgenden Befehl als Administrator erteilen:
subinacl.exe /service w3svc /grant=VMX001\job=PTO
Die Berechtigungen, die Sie erteilen können, sind wie folgt definiert (Liste von hier ):
Also, durch PTO Angabe, ich bin berechtigt , den Job Benutzer Pause / Weiter, Start und Stopp des w3svc - Dienst.
quelle
sc \\server start|stop|query servicename
vom Remote-Server verwendet wird. Kein Neustart \ Abmelden erforderlichCouldNotAccessDependentServices
Remote-Powershell ab :Cannot access dependent services of '...'
. Durch HinzufügenE : Enumerate Dependent Services
zu den ACL-Rechten wurde dies behoben.subinacl.exe
von Microsoft:http://www.microsoft.com/en-us/download/details.aspx?id=23510
(
subinacl.exe
ist inC:\Program Files (x86)\Windows Resource Kits\Tools\
).cd C:\Program Files (x86)\Windows Resource Kits\Tools\
subinacl /SERVICE \\MachineName\bst /GRANT=domainname.com\username=F
odersubinacl /SERVICE \\MachineName\bst /GRANT=username=F
quelle
Es gibt ein kostenloses GUI-Tool ServiceSecurityEditor
Hiermit können Sie Windows-Dienstberechtigungen bearbeiten. Ich habe es erfolgreich verwendet, um einem Nicht-Administrator-Benutzer die Rechte zum Starten und Stoppen eines Dienstes zu erteilen.
Ich hatte "sc sdset" verwendet, bevor ich von diesem Tool wusste.
ServiceSecurityEditor hat Lust zu schummeln, so einfach ist das :)
quelle
Mit einem der folgenden Tools ist es wesentlich einfacher, einem Dienst Verwaltungsberechtigungen zu erteilen:
Hier ist der MSKB-Artikel mit Anweisungen für Windows Server 2008 / Windows 7, die Anweisungen sind jedoch für 2000 und 2003 identisch.
quelle
Das Befehlszeilentool subinacl.exe ist wahrscheinlich das einzige brauchbare und sehr einfach zu verwendende Tool in diesem Beitrag. Sie können kein Gruppenrichtlinienobjekt mit Nicht-Systemdiensten verwenden, und die andere Option ist viel zu kompliziert.
quelle
Der Windows-Dienst wird mit einem lokalen Systemkonto ausgeführt. Er kann automatisch gestartet werden, wenn sich der Benutzer beim System anmeldet, oder er kann manuell gestartet werden. Ein Windows-Dienst gibt jedoch an, dass BST mit einem bestimmten Benutzerkonto auf dem Computer ausgeführt werden kann. Dies kann durchgeführt werden Gehen Sie wie folgt vor: Starten Sie services.msc und rufen Sie die Eigenschaften Ihres Windows-Dienstes BST auf. Von dort aus können Sie die Anmeldeparameter des erforderlichen Benutzers angeben. Der Dienst wird dann mit diesem Benutzerkonto ausgeführt, und kein anderer Benutzer kann diesen Dienst ausführen.
quelle