Tengo un usuario en un dominio que tiene acceso a múltiples subcarpetas en varias carpetas. Sus derechos se definieron de manera bastante granular. Ahora deja la empresa, pero seguirá trabajando para una empresa como recurso contratado.
Necesito encontrar todas las carpetas a las que tuvo acceso y revocar sus permisos, luego configurarlo con un conjunto diferente de permisos de acceso.
¿Existe alguna herramienta (freeware, preferiblemente) que enumere todos los permisos NTFS para un usuario determinado? He intentado con AccessEnum de Sysinternals, pero la lista no se puede filtrar por nombre de usuario y es inútil para mí. También he mirado CACLS, pero por lo que puedo decir, muestra permisos ordenados por archivo, no por usuario.
¿Algunas ideas?
fuente
Respuestas:
Esto parece hacer el truco (quizás con una advertencia), para encontrar todas las carpetas a las que el usuario "someuser" tiene acceso, en este ejemplo en la unidad C, utilizando el comando icacls incorporado de Windows:
El / t es necesario para indicarle que repita directorios. El / c es necesario para indicarle que continúe, incluso si encuentra errores. El / l hace que funcione con enlaces simbólicos (si los hay). (Esa última es una L, y estas banderas pueden ser mayúsculas o minúsculas).
Los
*.
antiguos de DOS lo reconocerán como la forma de decir "buscar directorios, no archivos". Por supuesto, si desea buscar archivos y no carpetas, cámbielos*.*
y, por supuesto, puede apuntarlos a cualquier unidad o ejecutarlos desde cualquier carpeta y dejar la ruta de la unidad / carpeta y dejar que busque en relación con eso solo carpetaBusqué la misma respuesta que el OP, y encontré esta entrada, pero me decepcionó ver solo una oferta basada en una herramienta descargable. Como otros, preferí usar algo incorporado, y lo encontré en esta herramienta icacls.
Y he confirmado que funciona en Windows Server 2012, 2008 y Windows 7, por lo que sospecho que funcionará también en Server 2003, Windows 8, etc.
La lista resultante será carpetas indicadas línea tras línea, tales como:
SID encontrado: c: \ somedir \ somesubdir.
Tenga en cuenta que si ejecuta esto como un usuario que no tiene permisos para recorrer algunos directorios, obtendrá errores intercalados en los resultados, tales como:
c: \ Información del volumen del sistema: acceso denegado.
Y si puede estar buscando una unidad completa, eso podría dar lugar a cientos de tales errores, lo que dificultaría encontrar dentro de ellos los resultados.
Algunos pueden pensar que la respuesta es ejecutar la línea de comando como administrador, pero eso simplemente provocará que aparezcan muchos más errores, ya que ahora atravesará carpetas que anteriormente estaban ocultas.
Ahora, si estaba interesado en ocultar esos errores, no podrá usar un comando de búsqueda para canalizar solo los resultados que sí tienen éxito (los que sí se refieren a "SID encontrado"), porque los errores NO se filtrarán por la tubería al comando encontrar. En cambio, si desea eliminar todos los errores, debe utilizar el truco bastante oscuro de redirigir la secuencia de errores (stderr) al "depósito de bits" mediante el uso
2>nul:
. Entonces el ejemplo anterior se convertiría en:Solo tenga en cuenta que algunas de las carpetas que generaron tales errores, cuyos errores ahora están ocultos, bien pueden ser carpetas a las que el "usuario" tiene acceso, pero que USTEDES no tienen. Por lo tanto, puede pensar dos veces antes de simplemente ignorar estos errores. pero si quieres, así es como puedes hacerlo.
Me doy cuenta de que esa posibilidad limita el valor de esta respuesta. Si alguien con más familiaridad con las cosas quisiera ampliar o corregir mi respuesta, lo agradecería.
fuente
Puede usar PowerShell sin necesidad de descargar nada más. Esto funcionará con v2.0 y posterior:
No es tan limpio como lo que está disponible con PowerShell v3 y encendido, pero funcionará. Esto generará una lista de los directorios encontrados en formato de cadena.
Puede generarlos fácilmente como objetos y continuar trabajando con ellos (exportarlos a un archivo CSV, eliminar las entradas a medida que las encuentre, actualizar un ticket con la información ... etc.) manipulando el objeto de entrada de Write- Llamadas de salida.
fuente
if ($ACL.IdentityReference -like $ReferenceAccountName -and !$ACL.IsInherited){
Encontré una solución a mi propia pregunta. Es, creo, muy simple y limpio. Solo tiene que instalar subinacl y ejecutar una línea desde el símbolo del sistema.
Puedes descargar subinacl aquí . Aunque oficialmente solo es compatible con Windows 2000, Windows XP y Windows Server 2003, también debería funcionar en Windows Vista, Windows Server 2008 y Windows 7.
A continuación, ejecuta lo siguiente desde el símbolo del sistema:
Donde X: es la unidad que está escaneando y el nombre de usuario es el usuario cuyos permisos desea enumerar. El escaneo puede llevar algo de tiempo y obtienes los resultados en TEXTFILENAME.TXT.
Si usa el interruptor / noverbose , obtendrá una lista compacta de permisos de acceso, básicamente verá a qué directorios tiene acceso el usuario (con máscaras de acceso y algunas otras cosas que pueden ser útiles a veces).
Utilicé OpenOffice Calc para importar la lista y luego apliqué un filtro personalizado y filtré solo para aquellas líneas que comienzan con + FILE . Estas líneas contienen directorios a los que el usuario tiene acceso. Así es como al usar herramientas simples, terminas con solo información relevante.
Dado que la herencia a menudo está habilitada en los directorios principales, la cantidad real de directorios que puede necesitar visitar para ajustar los permisos suele ser significativamente menor que la lista misma.
fuente