2012-07-06 20 views
7

Mi è stato assegnato il compito di scrivere script Powershell per configurare un server da zero per eseguire uno dei nostri servizi come parte di un'applicazione Web e uno dei passaggi necessari per l'impostazione di questo server up sta cambiando la configurazione DCOM per il servizio installato, in particolare aggiungendo account alle autorizzazioni "Avvia e attiva"/"Accesso" e imposta anche le autorizzazioni per questi account una volta che sono stati aggiunti.Modifica impostazioni di sicurezza DCOM di configurazione tramite PowerShell

Esiste un metodo per fare ciò utilizzando Powershell? Non sono stato in grado di trovare un metodo concreto per fare ciò che sto cercando di ottenere, quindi qualsiasi aiuto sarebbe fantastico

risposta

12

Sembra che lo fareste usando WMI.

ottenere un'istanza di: Win32_DCOMApplicationSetting come questo:

$dcom = Get-WMIObject -Class Win32_DCOMApplicationSetting -Filter 'Description="Something"' 

Ora si ha accesso a metodi e SetAccessSecurityDescriptorSetLaunchSecurityDescriptor.

Da: http://msdn.microsoft.com/en-us/library/windows/desktop/aa384905(v=vs.85).aspx applicazioni

DCOM

istanze di applicazioni DCOM hanno diversi descrittori di protezione. A partire da con Windows Vista, utilizzare i metodi della classe Win32_DCOMApplicationSetting per ottenere o modificare i vari descrittori di sicurezza. I descrittori di sicurezza vengono restituiti come istanze della classe Win32_SecurityDescriptor .

Per ottenere o modificare le autorizzazioni di configurazione, chiamare il metodo GetConfigurationSecurityDescriptor o SetConfigurationSecurityDescriptor.

Per ottenere o modificare le autorizzazioni di accesso, chiamare i metodi GetAccessSecurityDescriptor o SetAccessSecurityDescriptor.

Per ottenere o modificare le autorizzazioni di avvio e attivazione, chiamare i metodi GetLaunchSecurityDescriptor o SetLaunchSecurityDescriptor.

Windows Server 2003, Windows XP, Windows 2000, Windows NT 4.0 e Windows Me/98/95: I metodi descrittori Win32_DCOMApplicationSetting sicurezza non sono disponibili.

C'è anche uno strumento chiamato DCOMPERM in cui codice sorgente è disponibile nel Windows SDK: http://www.microsoft.com/en-us/download/details.aspx?id=8279

È possibile trovare compilato versioni intorno in linea se si cerca DCOMPERM compilato.

Ecco le opzioni della riga di comando:

Syntax: dcomperm <option> [...] 
Options: 

Modify or list the machine access permission list 
-ma <"set" or "remove"> <Principal Name> ["permit" or "deny"] ["level:l,r"] 
-ma list 

Modify or list the machine launch permission list 
-ml <"set" or "remove"> <Principal Name> ["permit" or "deny"] ["level:l,r,ll,la,rl,ra"] 
-ml list 

Modify or list the default access permission list 
-da <"set" or "remove"> <Principal Name> ["permit" or "deny"] ["level:l,r"] 
-da list 

Modify or list the default launch permission list 
-dl <"set" or "remove"> <Principal Name> ["permit" or "deny"] ["level:l,r,ll,la,rl,ra"] 
-dl list 

Modify or list the access permission list for a specific AppID 
-aa <AppID> <"set" or "remove"> <Principal Name> ["permit" or "deny"] ["level:l,r"] 
-aa <AppID> default 
-aa <AppID> list 

Modify or list the launch permission list for a specific AppID 
-al <AppID> <"set" or "remove"> <Principal Name> ["permit" or "deny"] ["level:l,r,ll,la,rl,ra"] 
-al <AppID> default 
-al <AppID> list 

level: 
    ll - local launch (only applies to {ml, dl, al} options) 
    rl - remote launch (only applies to {ml, dl, al} options) 
    la - local activate (only applies to {ml, dl, al} options) 
    ra - remote activate (only applies to {ml, dl, al} options) 
    l - local (local access - means launch and activate when used with {ml, dl, al} options) 
    r - remote (remote access - means launch and activate when used with {ml, dl, al} options) 
+0

Grazie Andy, mi ha aiutato molto! Alla fine ho usato una miscela di entrambi i metodi. Ho utilizzato il Win32_DCOMApplicationSetting per ottenere gli ID app, quindi ho utilizzato DComPerm per aggiungere le autorizzazioni necessarie. Qualcosa che ho trovato un po 'strano è che CMD ha eseguito DcomPerm con meno problemi rispetto a Powershell, quindi per ottenere ciò di cui avevo bisogno, ho scritto un file batch in cui alcune variabili sono state passate e chiamato da Powershell. – Vermin

+0

@ Probabilmente la mia ipotesi sarebbe che i problemi che avevate con PowerShell sono probabilmente sintassi/analisi della riga di comando correlata. Forse post l'errore che hai ottenuto? –

7

ho avuto la stessa domanda, come l'OP. La risposta che Andy ha postato è stata molto utile e mi ha aiutato a metà strada. Ho quindi trovato lo Set-DCOMLaunchPermissions scritto da qualcuno per aiutarli a distribuire SharePoint.

Ho adattato la loro funzione per i miei scopi e ho trovato una soluzione che imposta le autorizzazioni che mi servono.

$user = "sql2012agent" 
$domain = "MYDOMAIN" 
$appdesc = "Microsoft SQL Server Integration Services 11.0" 
$app = get-wmiobject -query ('SELECT * FROM Win32_DCOMApplicationSetting WHERE Description = "' + $appdesc + '"') -enableallprivileges 
#$appid = "{83B33982-693D-4824-B42E-7196AE61BB05}" 
#$app = get-wmiobject -query ('SELECT * FROM Win32_DCOMApplicationSetting WHERE AppId = "' + $appid + '"') -enableallprivileges 
$sdRes = $app.GetLaunchSecurityDescriptor() 
$sd = $sdRes.Descriptor 
$trustee = ([wmiclass] 'Win32_Trustee').CreateInstance() 
$trustee.Domain = $domain 
$trustee.Name = $user 
$fullControl = 31 
$localLaunchActivate = 11 
$ace = ([wmiclass] 'Win32_ACE').CreateInstance() 
$ace.AccessMask = $localLaunchActivate 
$ace.AceFlags = 0 
$ace.AceType = 0 
$ace.Trustee = $trustee 
[System.Management.ManagementBaseObject[]] $newDACL = $sd.DACL + @($ace) 
$sd.DACL = $newDACL 
$app.SetLaunchSecurityDescriptor($sd) 
+0

Sto provando a utilizzare lo script PS pubblicato da @Elijah W. Gagne sopra per configurare DCOM e sto ricevendo l'errore "Impossibile trovare la proprietà 'DACL' su questo oggetto Verificare che la proprietà esista e che possa essere impostata." L'errore è relativo alla riga "$ sd.DACL = $ newDACL". Non sono molto esperto nell'uso di PS. Qualcuno può dirmi cosa devo fare per farlo funzionare. Grazie mille! – RGuggisberg

+0

Vorrei eseguire le operazioni fino alla riga 4. Quindi emettere la variabile $ app e confermare che non è vuota (null). Se lo è, probabilmente devi modificare la tua clausola WHERE nella riga 4. –

+0

Sì, ho dovuto cambiare il mio perché stavo usando la versione 12.0 non 11.0 e ho trovato l'app $ come null. Ma dopo aver cambiato il $ appdesc per me, la sceneggiatura ha funzionato in modo affascinante. –

Problemi correlati