powershell dcom

Cambie la configuración de seguridad de las configuraciones de DCOM con Powershell



(2)

Se me ha dado la tarea de escribir scripts de 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 es cambiar 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 estableciendo los permisos para estas cuentas una vez que se han agregado.

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


Parece que lo harías usando WMI.

Obtenga una instancia de: Win32_DCOMApplicationSetting siguiente manera:

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

Ahora tiene acceso a los métodos SetAccessSecurityDescriptor y SetLaunchSecurityDescriptor .

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

Aplicaciones DCOM

Las instancias de aplicación DCOM tienen varias descripciones de seguridad. Comenzando 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 a los métodos GetConfigurationSecurityDescriptor o SetConfigurationSecurityDescriptor.

Para obtener o cambiar los permisos de acceso, llame a los 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 del descriptor de seguridad Win32_DCOMApplicationSetting no están disponibles.

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

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

Estas son las opciones de línea de 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)


Tenía 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.

Adapte 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)