Vraag Hoe verleen ik start / stop / herstartrechten voor een service aan een willekeurige gebruiker of groep op een server die geen lid is van een domein?


We hebben een reeks Windows-services op onze servers die een groot aantal geautomatiseerde taken onafhankelijk van elkaar uitvoeren, met uitzondering van één service die voor de andere services zorgt.

In het geval dat een van de services niet reageert of vastloopt, probeert deze service de service opnieuw op te starten en, als er tijdens de poging een uitzondering wordt gegenereerd, e-mailt het ondersteuningsteam in plaats daarvan, zodat ze de service zelf kunnen herstarten.

Na wat onderzoek gedaan te hebben, ben ik een paar 'oplossingen' tegengekomen die uiteenlopen van de oplossing die in dit document wordt genoemd KB907460 om het account te geven waaronder de service beheerdersrechten uitvoert.

Ik ben niet comfortabel met een van deze methoden - ik begrijp de consequenties van de eerste methode niet zoals beschreven in het Microsoft Knowledge Base-artikel, maar ik wil absoluut geen beheerderstoegang geven tot het account waaronder de service wordt uitgevoerd .

Ik heb snel het lokale beveiligingsbeleid doorgenomen en niet het beleid dat bepaalt of een account zich als een service kan aanmelden, ik kan niets anders zien dat eruit ziet als een verwijzing naar services.

We gebruiken dit op Server 2003 en Server 2008, dus alle ideeën of verwijzingen zouden genadig worden ontvangen!


Verduidelijking: Ik wil niet toestaan ​​dat ALLE services aan een bepaalde gebruiker of groep kunnen worden gestart / gestopt / opnieuw kunnen worden gestart. Ik wil toestemming kunnen geven om dit te doen op specifiek alleen voor een bepaalde gebruiker of groep.


Nadere toelichting: De servers die ik nodig heb om deze machtigingen te verlenen, behoren niet tot een domein - het zijn twee internetgerichte servers die bestanden ontvangen, verwerken en doorsturen naar derden, evenals een aantal websites bedienen, dus Active Directory Group Beleid is niet mogelijk. Sorry dat ik dit niet duidelijker heb gemaakt.


58
2017-10-04 13:16


oorsprong


je zou ook dit artikel uit ms kunnen bekijken, dat ook verwijst naar GP-aanpassingen: support.microsoft.com/kb/256345
Sorry dat ik je heb gemist ... ik had het druk. U zocht naar zoiets als dit: serverfault.com/questions/15147/... - Evan Anderson
Ik weet dat dit een heel oude vraag is, maar heb je overwogen de 'herstel'-opties te gebruiken in Windows Service Manager? - Tim Long


antwoorden:


Er lijkt geen GUI-gebaseerde manier om dit te doen tenzij je lid bent van een domein - in ieder geval niet één die ik overal zou kunnen vinden - dus ik heb wat meer gegraven en ik heb een antwoord gevonden dat werkt voor onze sitaution.

Ik begreep niet wat de tekenreeksrepresentatie betekende in het Knowledge Base-artikel, maar als ik wat ging graven, ontdekte ik dat het de SDDL-syntaxis is. Verder graven leidde me naar dit artikel door Alun Jones waarin wordt uitgelegd hoe de beveiligingsdescriptor voor een service wordt opgehaald en wat elk bit betekent. MS KB914392 heeft meer details.

Als u wilt toevoegen aan de bestaande beveiligingsdescriptor van de service, gebruikt u sc sdshow "Service Name" om de bestaande descriptor te krijgen. Als dit een eenvoudige oude .NET Windows Service is - zoals het geval is met de onze - zou de security descriptor er ongeveer zo uit moeten zien:

D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOC
RRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;CR;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU)S:(AU;FA
;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)

We moesten toestemmingen verlenen RP (om de service te starten), WP (om de service te stoppen), DT (om de service te onderbreken / voort te zetten) en LO(om de huidige status van de service te bevragen). Dit kan worden gedaan door ons serviceaccount toe te voegen aan de groep Hoofdgebruikers, maar ik wil alleen individuele toegang verlenen tot het account waaronder de onderhoudsdienst wordt uitgevoerd.

Gebruik makend van runas om een ​​bevelherinnering onder het dienstrekening te openen, liep ik whoami /all die mij de SID van de serviceaccount gaf en vervolgens de extra SDDL hieronder construeerde:

(A;;RPWPDTLO;;;S-x-x-xx-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxx-xxxx)

Dit wordt dan toegevoegd aan de D: sectie van de SDDL-string hierboven:

D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOC
RRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;CR;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU)(A;;RPWP
DTLO;;;S-x-x-xx-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxx-xxxx)S:(AU;FA;CCDCLCSWRPWPDTLOC
RSDRCWDWO;;;WD)

Dit wordt vervolgens toegepast op de service met behulp van de sc sdset commando:

sc sdset "Service Name" D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;
CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;CR;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU
)(A;;RPWPDTLO;;;S-x-x-xx-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxx-xxxx)S:(AU;FA;CCDCLCSW
RPWPDTLOCRSDRCWDWO;;;WD)

Als alles volgens plan verloopt, kan de service vervolgens worden gestart, gestopt, gepauzeerd en de status worden opgevraagd door de gebruiker die wordt gedefinieerd door de SID hierboven.


51
2017-10-05 12:23



Voor een eenvoudigere manier om hetzelfde te doen, zou je moeten kijken naar gebruik SetACL.exe. Hier is een voorbeeld van hoe het te gebruiken om machtigingen voor een dienst in te stellen: SetACL.exe -on "\\server1\W32Time" -ot srv -actn ace -ace "n:domain1\group1;p:start_stop" - Mason G. Zhwiti
Je zou Process Hacker kunnen gebruiken (processhacker.sourceforge.net) voor een GUI om alle services te configureren. Het bevat verborgen services en stelt u in staat om meer instellingen van een service zoals het binaire pad - en de permissies - te configureren. - ygoe
De CoreTech gui werkte voor mij. Moeilijk te geloven dat GUI niet al in Windows bestaat. Lees hier de antwoorden hoe kan dit zo moeilijk zijn? Groot faalt namens Microsoft. - MikeKulls
Ik voeg graag toe CCLCSW naar de SDDL-machtigingen (in aanvulling op RPWPDTLO), zodat ik de service ook kan zien als ik Get-Service uitvoer (wat als eerste vereist het aanpassen van de SDDL voor de scmanager service control manager-service om toegankelijke services te kunnen weergeven). Ik had ook nodig SW om bepaalde services opnieuw te kunnen starten. - Baodad


Ik had net hetzelfde probleem.
Je zou kunnen gebruiken SubInACL.exe uit de Resource Kit. Download het zelfstandige hulpprogramma hier: http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=23510

Gebruik msiexec /a PathToMSIFile /qb TARGETDIR=DirectoryToExtractTo om de bestanden uit te pakken als u de .msi niet wilt installeren

  1. Open een opdrachtprompt als Beheerder
  2. Ga naar de map waar u de .exe hebt geplaatst
  3. Rennen subinacl /service SERVICE_NAME /grant=COMPUTER_NAME\USERNAME=TOP

T = Start service
O = stop service
P = Service pauzeren / doorgaan

Volledige referentie: Hoe gebruikers rechten verlenen om services te beheren in Windows 2000 
of typ subinacl /help

Notitie: probeer het niet subinacl /service SERVICE_NAME /perm omdat het je in de problemen kan brengen (les geleerd: P). De naam kan misleidend zijn (perm! = Permission), omdat alle machtigingen worden verwijderd voor alle gebruikers (zelfs Admin!).


31
2017-08-26 22:17



Kan SO en SA niet samenvoegen, sorry Pat. - Chopper3
@ Chopper3 Bedankt voor je reactie. In feite heb ik 2 SO-accounts: één is geregistreerd en gekoppeld aan dit SF-account; de andere is een niet ingeschreven ZO account had ik voor registratie (gebruikte de dezelfde e-mailadres). Ik hoopte dat de twee zouden kunnen worden samengevoegd, zodat ik het bericht kan volgen dat ik eerder heb gedaan. Zoals genoemd hier Ik heb geprobeerd een bericht te markeren maar kon het niet doen op SO (1 reputatie). Dit is de reden waarom ik dit bericht heb gemarkeerd. Ik heb ook meer dan twee weken geleden geprobeerd om team@stackoverflow.com te e-mailen, maar kreeg geen reactie. Kun je me alsjeblieft naar de juiste plaats / persoon verwijzen? - patrx
Bekijk de details van deze procedure op MSDN: support.microsoft.com/?kbid=288129 - Marc Climent


Je zoekt Computerconfiguratie - Beleid - Windows-instellingen - Beveiligingsinstellingen - Systeemservices

Daar kunt u niet alleen het type dienststart definiëren, maar u kunt ook de beveiligings-ACL's voor elke service configureren. Standaard toont de interface alleen de services die zijn geïnstalleerd op de computer waarop u de GP-editor gebruikt.

Services toevoegen die alleen op een andere computer bestaan:

  • exporteer de reg-sleutel van de service van de andere machine
  • importeren op de gpedit-machine
  • het beleid toepassen
  • verwijder de geïmporteerde sleutel

4
2017-10-04 15:57



Ik hoop dat je dit van plan bent om dit te doen gpedit.msc, omdat het venster "Server beheren" geen beleidsknooppunt bevat. Als dat het geval is, zie ik geen item onder het knooppunt Beveiligingsinstellingen dat verwijst naar "Systeemservices" zoals u hierboven suggereert, op Server 2008 of Server 2003. - abitgone
Ah ja. Ik ging ervan uit dat je van plan was deze wijzigingen door te voeren via het groepsbeleid. - Ryan Bolger
Inderdaad - dit zijn geen lidservers. Is er een manier om dit te targeten met behulp van lokaal beleid of een andere methode? - abitgone


Ik gebruikte SubinAcl (zoals gesuggereerd door patrx) om MySQL te kunnen starten als een gewone domeingebruiker (geen admin) en het werkt perfect! (de opdracht moet echter worden uitgevoerd als een -local tenminste- Admin)

Het commando is:

[PATH_TO_SUBACL]\subinacl.exe /service MySQL /grant=[Domain User - Without domain]=TOP

Houd er rekening mee dat ik de gebruiker heb ingevoerd zonder het te voorafgaan aan het domein ... anders mislukt het commando bij het ontleden van het commando!


2
2018-05-11 08:24