Compruebe que un usuario determinado tiene un privilegio determinado

Dado un par de un usuario y un privilegio necesito determinar si un usuario tiene el privilegio en el server. Lo siguiente es cierto en mi configuration:

  • El server es una parte de un dominio pero no un controller de dominio
  • Hay varios dominios con relación de confianza en la infraestructura
  • A veces los usuarios (locales, de dominio o de un dominio diferente) pueden pertenecer a un grupo local por el mérito de estar en algún otro grupo (dominio o local) que pertenece a un grupo local, en lugar de pertenecer al grupo directamente.

Ejemplo de escenario para el último punto:

  • El usuario1 pertenece al grupo TeamA en el dominioA
  • DomaimA \ TeamA es un miembro de DomainB \ SpecialAccess
  • DomainB \ SpecialAccess es un miembro de DomainB \ DomainAdmins
  • Finalmente DomainB \ DomainAdmins pertenece al grupo de administradores locales
  • El grupo de administradores locales tiene el privilegio de SeRemoteInteractiveLogonRight

Ahora si tengo en la input DomainA \ User1 y SeRemoteInteractiveLogonRight necesito llegar a Sí o No respuesta. Así que abro la política local en la máquina, nota que los grupos se enumeran contra la derecha que me interesan también entonces van a los encargados del server y ven qué en los miembros del grupo y entonces necesito ver qué miembros de cualesquiera grupos en estos grupos y así.

Tengo la sensación de que puede ser más fácil. Estaba realmente emocionado cuando encontré la utilidad de AccessChk duró tres minutos integers que me llevó a descubrir que sólo las lists de relación directa, por lo que el usuario dentro de un grupo no se enumeran.

Ahora estoy adivinando que sería posible combinar los resultados de AccessChk algunos cómo para que pueda comprobar si un usuario pertenece a cualquiera de los grupos que AccessChk devolver, pero dado que no es un solo dominio, pero varios de ellos estoy no estoy seguro de cómo abordar esto. Además, la salida de AccessChk no parece distinguir entre un grupo y un usuario.

EDIT : En el espíritu de no caer en la trampa de problema XY, lo que realmente necesito hacer es asegurarse de que en un grupo de serveres no counts de usuario específicas que se utilizan como IIS las identidades de grupo de aplicaciones tienen SeInteractiveLogonRight o SeRemoteInteractiveLogonRight privilegios. No tengo ningún problema con la parte de IIS, pero el último paso de la comprobación de una count contra un privilegio es algo que estoy luchando encontrar una manera directa de comprobar. También me gustaría automatizar el cheque porque esto es algo que tendrá que hacerse con regularidad.

Los tokens de acceso no tienen información sobre derechos, solo sobre privilegios.

Lo que debe hacer es:

  • Busque el process de trabajo de IIS que corresponde a su grupo de aplicaciones. Puesto que usted conoce la identidad del set de aplicaciones que debe ser fácil enumerando todos los processs con el nombre del process de trabajo y filtrando el que tiene la identidad. Si hay más de uno, puede usar cualquiera.
  • Utilice GetTokenInformation con class de información TokenGroup, no TokenPrivilege en el token de process. El resultado te dará todos los grupos transitivos a los que pertenece la identidad. Esto significa incluso indirectos.
  • Ahora puede realizar bucle a través de estos grupos y llamar a LsaEnumerateAccountRights en cada uno y agrupar la información. Esto le dará lo que quiere.

Lo anterior se basa en la existencia del process (y token) correspondiente a la identidad de la count. En su escenario esto no debería ser un problema. En situaciones en las que se trata de un problema, puede intentar usar la búsqueda de Active Directory para el atributo computarizado Token-Groups . En este artículo se enumeran algunos enfoques cómo extraer esto.