Come concedo le autorizzazioni di avvio / arresto / riavvio di un servizio a un utente o gruppo arbitrario su un server non appartenente al dominio?


61

Disponiamo di una suite di servizi Windows in esecuzione sui nostri server che eseguono una serie di attività automatizzate indipendentemente l'una dall'altra, ad eccezione di un servizio che si occupa degli altri servizi.

Nel caso in cui uno dei servizi non risponda o si blocchi, questo servizio tenta di riavviare il servizio e, se viene generata un'eccezione durante il tentativo, invia un'e-mail al team di supporto, in modo che possano riavviare il servizio da soli.

Dopo aver fatto una piccola ricerca, mi sono imbattuto in alcune "soluzioni" che vanno dalla soluzione menzionata in KB907460 alla fornitura dell'account con cui il servizio esegue i diritti di amministratore.

Non mi sento a mio agio con nessuno di questi metodi: non capisco le conseguenze del primo metodo come indicato nell'articolo della Microsoft Knowledge Base, ma sicuramente non voglio dare l'accesso di amministratore all'account con cui è in esecuzione il servizio .

Ho dato una rapida occhiata alla politica di sicurezza locale e oltre alla politica che definisce se un account può accedere o meno come servizio, non riesco a vedere nient'altro che sembra riferirsi ai servizi.

Lo stiamo eseguendo su Server 2003 e Server 2008, quindi eventuali idee o suggerimenti verrebbero accolti con grazia!


Chiarimento: non desidero concedere la possibilità di avviare / arrestare / riavviare TUTTI i servizi a un determinato utente o gruppo - Voglio essere in grado di concedere l'autorizzazione a farlo solo su servizi specifici , a un determinato utente o gruppo.


Ulteriori chiarimenti: i server su cui devo concedere queste autorizzazioni non appartengono a un dominio: sono due server con connessione Internet che ricevono file, li elaborano e li inviano a terze parti, oltre a servire un paio di siti Web, quindi Criteri di gruppo di Active Directory non è possibile. Mi dispiace di non averlo chiarito.


potresti anche dare un'occhiata a questo articolo di ms, che indica anche le modifiche del GP: support.microsoft.com/kb/256345

3
Scusa, mi sei mancato ... Ero occupato. Stavi cercando qualcosa del genere: serverfault.com/questions/15147/…
Evan Anderson,

So che questa è una domanda molto vecchia, ma hai preso in considerazione l'utilizzo delle opzioni di "ripristino" nel gestore servizi di Windows?
Tim Long,

Risposte:


51

Non sembra esserci un modo basato su GUI per farlo a meno che non ti unisca a un dominio - almeno non uno che potrei trovare da nessuna parte - quindi ho fatto un po 'più di ricerca e ho trovato una risposta per cui funziona la nostra sitaution.

Non ho capito cosa significasse la rappresentazione della stringa nell'articolo della knowledge base, ma fare un po 'di scavo mi ha portato a scoprire che si tratta della sintassi SDDL. Ulteriori approfondimenti mi hanno portato a questo articolo di Alun Jones che spiega come ottenere il descrittore di sicurezza per un servizio e cosa significa ogni bit. MS KB914392 ha maggiori dettagli.

Per aggiungere al descrittore di sicurezza esistente del servizio, utilizzare sc sdshow "Service Name"per ottenere il descrittore esistente. Se si tratta di un semplice servizio Windows .NET, come nel caso del nostro, il descrittore di sicurezza dovrebbe assomigliare a questo:

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)

Avevamo bisogno di concedere le autorizzazioni RP(per avviare il servizio), WP(per interrompere il servizio), DT(per mettere in pausa / continuare il servizio) e LO(per interrogare lo stato corrente del servizio). Questo potrebbe essere fatto aggiungendo il nostro account di servizio al gruppo Power Users, ma desidero solo concedere l'accesso individuale all'account con cui viene eseguito il servizio di manutenzione.

Usando runasper aprire un prompt dei comandi sotto l'account del servizio, ho eseguito whoami /allche mi ha dato il SID dell'account del servizio, e quindi ho creato l'SDDL aggiuntivo di seguito:

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

Questo viene quindi aggiunto alla sezione D: della stringa SDDL sopra:

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)

Questo viene quindi applicato al servizio utilizzando il sc sdsetcomando:

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)

Se tutto procede secondo i piani, il servizio può essere avviato, arrestato, messo in pausa e il suo stato viene interrogato dall'utente definito dal SID sopra.


10
Per un modo più semplice di fare la stessa cosa, dovresti guardare usando SetACL.exe . Ecco un esempio di come utilizzarlo per impostare le autorizzazioni per un servizio:SetACL.exe -on "\\server1\W32Time" -ot srv -actn ace -ace "n:domain1\group1;p:start_stop"
Mason G. Zhwiti,

2
È possibile utilizzare Process Hacker ( processhacker.sourceforge.net ) per una GUI per configurare tutti i servizi. Include servizi nascosti e consente di configurare più impostazioni di un servizio come il percorso binario e le autorizzazioni.
giovedì

1
La GUI CoreTech ha funzionato per me. Difficile credere che la GUI non esista già in Windows. Leggendo le risposte qui come può essere così difficile? Grande fallimento per conto di Microsoft.
MikeKulls,

Mi piace aggiungere CCLCSWle autorizzazioni SDDL (oltre a RPWPDTLO) in modo da poter vedere anche il servizio elencato quando eseguo Get-Service (che richiede innanzitutto la modifica dell'SDDL affinché il servizio gestore controllo servizi scmanager sia in grado di elencare i servizi accessibili) . Dovevo anche SWessere in grado di riavviare determinati servizi.
Baodad,

34

Ho appena avuto lo stesso problema.
È possibile utilizzare SubInACL.exe dal Resource Kit. Scarica l'utilità standalone qui: http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=23510

Utilizzare msiexec /a PathToMSIFile /qb TARGETDIR=DirectoryToExtractToper estrarre i file se non si desidera installare il file .msi

  1. Aprire un prompt dei comandi come amministratore
  2. Vai alla directory in cui hai posizionato il file .exe
  3. Correre subinacl /service SERVICE_NAME /grant=COMPUTER_NAME\USERNAME=TOP

T = Avvia servizio
O = Arresta servizio
P = Pausa / continua servizio

Riferimento completo: come concedere agli utenti i diritti di gestione dei servizi in Windows 2000
o tiposubinacl /help

Nota: non provare subinacl /service SERVICE_NAME /permperché potrebbe metterti nei guai (lezione appresa: P). Il nome potrebbe essere fuorviante (perm! = Permesso), in quanto elimina tutte le autorizzazioni a tutti gli utenti (anche Admin!).


Non posso unire gli account SO e SF scusate Pat.
Chopper3

@ Chopper3 Grazie per la tua risposta. In realtà ho 2 account SO: uno è registrato e associato a questo account SF; l'altro è un account SO non registrato che avevo prima della registrazione (usato lo stesso indirizzo e-mail). Speravo che i due potessero essere uniti in modo da poter tracciare il post che ho fatto prima. Come menzionato qui, ho provato a contrassegnare un post ma non sono riuscito a farlo su SO (1 reputazione). Questo è il motivo per cui ho segnalato questo post. Ho anche provato a inviare un'e-mail a team@stackoverflow.com più di due settimane fa ma non ho ricevuto alcuna risposta. Potresti indirizzarmi nel posto / persona giusto per favore?
patrx,

1
Scopri i dettagli di questa procedura su MSDN: support.microsoft.com/?kbid=288129
Marc Climent,

4

Stai cercando Configurazione computer - Criteri - Impostazioni di Windows - Impostazioni di sicurezza - Servizi di sistema

Qui è possibile non solo definire il tipo di avvio del servizio, ma è anche possibile configurare gli ACL di sicurezza per ciascun servizio. Per impostazione predefinita, l'interfaccia elencherà solo i servizi installati sul computer su cui è in esecuzione GP Editor.

Per aggiungere servizi che esistono solo su un altro computer:

  • esporta la chiave reg del servizio dall'altra macchina
  • importazione sulla macchina gpedit
  • applicare la politica
  • elimina la chiave importata

Confido che tu intenda farlo gpedit.msc, poiché la finestra "Gestisci server" non elenca un nodo delle politiche. In tal caso, non riesco a vedere un elemento sotto il nodo Impostazioni di sicurezza che fa riferimento a "Servizi di sistema" come suggerisci sopra, su Server 2008 o Server 2003.
abitgone

Ah sì. Supponevo che avessi intenzione di apportare queste modifiche tramite i criteri di gruppo.
Ryan Bolger,

1
In effetti, questi non sono server membri. Esiste un modo per indirizzarlo utilizzando la politica locale o qualche altro metodo?
abitgone

2

Ho usato SubinAcl (come suggerito da Patrx) per essere in grado di avviare MySQL come un normale utente di dominio (non amministratore) e funziona perfettamente! (il comando deve comunque essere eseguito come -local almeno- Admin)

Il comando è:

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

Basta notare che ho inserito l'utente senza prefissarlo con il dominio ... altrimenti il ​​comando fallisce durante l'analisi del comando!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.