2012-07-06 25 views
7

Se me ha dado la tarea de escribir scripts Powershell para configurar un servidor desde cero para ejecutar uno de nuestros servicios como parte de una aplicación web, y uno de los pasos necesarios para configurar este servidor up está cambiando la configuración de DCOM para el servicio instalado, específicamente agregando cuentas a los permisos de "Inicio y activación"/"Acceso" y también establece los permisos para estas cuentas una vez que se han agregado.Cambiar las configuraciones de seguridad de configuración DCOM usando Powershell

¿Hay algún método para hacerlo con Powershell? No he podido encontrar un método concreto de hacer lo que pretendo lograr, así que cualquier ayuda sería genial

Respuesta

12

Parece que lo harías con WMI.

Obtener una instancia de: Win32_DCOMApplicationSetting así:

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

Ahora usted tienen acceso a los métodos y SetAccessSecurityDescriptorSetLaunchSecurityDescriptor.

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

DCOM

instancias de aplicaciones DCOM tienen varios descriptores de seguridad. Iniciando con Windows Vista, use los métodos de la clase Win32_DCOMApplicationSetting para obtener o cambiar los diversos descriptores de seguridad. Los descriptores de seguridad se devuelven como instancias de la clase Win32_SecurityDescriptor .

Para obtener o cambiar los permisos de configuración, llame al GetConfigurationSecurityDescriptor o métodos SetConfigurationSecurityDescriptor.

Para obtener o cambiar los permisos de acceso, llame al Métodos GetAccessSecurityDescriptor o SetAccessSecurityDescriptor.

Para obtener o cambiar los permisos de inicio y activación, llame a los métodos GetLaunchSecurityDescriptor o SetLaunchSecurityDescriptor.

Windows Server 2003, Windows XP, Windows 2000, Windows NT 4.0 y Windows Me/98/95: Los métodos de descriptor de seguridad Win32_DCOMApplicationSetting no están disponibles.

También hay una herramienta llamada DCOMPERM en el que el código fuente está disponible en el SDK de Windows: http://www.microsoft.com/en-us/download/details.aspx?id=8279

Puede encontrar versiones compiladas alrededor en línea si busca DCOMPERM compilado.

Aquí están las opciones de línea de comandos:

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

Gracias Andy, eso ha ayudado mucho! Al final usé una mezcla de ambos métodos. Usé Win32_DCOMApplicationSetting para obtener los ID de la aplicación y luego utilicé DComPerm para agregar los permisos necesarios. Algo que encontré un poco extraño fue que CMD ejecutó DcomPerm con muchos menos problemas que Powershell, así que para lograr lo que necesitaba, escribí un archivo de proceso por lotes donde se transfirieron ciertas variables y lo llamé Powershell. – Vermin

+0

@Vermin, supongo que los problemas que tuvo con PowerShell probablemente estén relacionados con la sintaxis/análisis de línea de comandos. Tal vez publicar el error que tienes? –

7

que tenían la misma pregunta que el OP. La respuesta que Andy publicó fue muy útil y me ayudó a llegar a la mitad. Luego encontré el Set-DCOMLaunchPermissions escrito por alguien para ayudarlos a implementar SharePoint.

He adaptado su función para mis propósitos y se me ocurrió una solución que establece los permisos que necesito.

$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

Estoy tratando de usar el script PS publicado por @Elijah W. Gagne arriba para configurar DCOM y obtengo el error "La propiedad 'DACL' no se puede encontrar en este objeto. Verifique que la propiedad exista y se pueda establecer." El error es para la línea "$ sd.DACL = $ newDACL". No estoy muy versado en el uso de PS. ¿Alguien puede decirme qué debo hacer para que funcione? ¡Muchas gracias! – RGuggisberg

+0

Correría las cosas hasta la línea 4. Luego mostraría la variable $ app y confirmaría que no está vacía (nula). Si es así, probablemente deba ajustar su cláusula WHERE en la línea 4. –

+0

Sí, tuve que cambiar la mía porque estaba usando la versión 12.0 no 11.0 y encontré que $ app era nula. Pero después de cambiar el $ appdesc para que fuera el correcto para mí, el guión funcionó de maravilla. –

Cuestiones relacionadas