Saltar al contenido

Listar los permisos de acceso a la carpeta del usuario

Siéntete en la libertad de divulgar nuestro espacio y códigos con tus amigos, necesitamos tu ayuda para hacer crecer esta comunidad.

Solución:

Solución 1:

Esto parece funcionar (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, usando el comando integrado icacls de Windows:

icacls c:*. /findsid someuser /t /c /l

La / t es necesaria para indicarle a los directorios recurrentes. Se necesita / c para decirle que continúe incluso si encuentra errores. La / l hace que funcione con enlaces simbólicos (si los hay). (El último es una L, y estas banderas pueden ser mayúsculas o minúsculas).

los *. será reconocido por los veteranos de DOS como la forma de decir “buscar directorios, no archivos”. Por supuesto, si desea buscar archivos y no carpetas, cámbielo a *.*y, por supuesto, puede apuntarlo a cualquier unidad, o ejecutarlo desde cualquier carpeta y dejar la ruta de la unidad / carpeta y dejar que busque solo en esa carpeta.

Busqué la misma respuesta que el OP y encontré esta entrada, pero me desanimó ver solo una oferta basada en una herramienta descargable. Como otros, preferí usar algo integrado, 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án las carpetas indicadas línea tras línea, como por ejemplo:

SID encontrado: c: somedir somesubdir.

Tenga en cuenta que si ejecuta esto como un usuario que no tiene permisos para atravesar algunos directorios, obtendrá errores intercalados en los resultados como:

c: System Volume Information: se deniega el acceso.

Y si está buscando en una unidad completa, eso podría resultar en cientos de errores de este tipo, lo que dificultaría encontrar los resultados dentro de ellos.

Algunos pueden pensar que la respuesta es ejecutar la línea de comandos como administrador, pero eso simplemente hará que aparezcan muchos más errores de este tipo, ya que ahora atravesará carpetas que antes 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 de búsqueda. En cambio, si desea eliminar todos los errores, debe utilizar el truco bastante oscuro de redirigir el flujo de errores (stderr) al “cubo de bits” mediante el uso de 2>nul:. Entonces el ejemplo anterior se convertiría en:

icacls c:*. /findsid someuser /t /c /l 2>nul:

Solo tenga en cuenta que algunas de las carpetas que generaron tales errores, cuyos errores ahora están ocultos, pueden ser carpetas a las que el “someuser” tiene acceso pero a las que USTED no. Por lo tanto, es posible que desee 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 potencialmente el valor de esta respuesta. Si alguien con más familiaridad con las cosas quisiera ampliar o corregir mi respuesta, lo agradecería.

Solucion 2:

Puede usar PowerShell sin necesidad de descargar nada más. Esto funcionará con v2.0 y posteriores:

$ReferenceAccountName = 'DOMAINUsername'
[string[]]$SearchDirectories = @('X:SomeDirectory', 'F:AnotherDirectory')

foreach ($RootDir in $SearchDirectories)  `
                            Where-Object -FilterScript $_.Attributes `
                            -contains 'Directory'))
        $DirACL = Get-Acl -Path $Directory.FullName
        foreach ($ACL in $DirACL.Access)
            if ($ACL.IdentityReference -like $ReferenceAccountName)
                Write-Output $Directory.FullName
            
        
    

No es tan limpio como lo que está disponible con PowerShell v3 y posteriores, pero funcionará. Esto generará una lista de los directorios que se encuentran en string formato.

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.


Solución 3:

Encontré una solución a mi propia pregunta. Creo que es muy sencillo 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:

subinacl /testmode /noverbose /outputlog=c:TEXTFILENAME.TXT /subdirectories=directoriesonly X:*.* /findsid=DOMAINusername

Dónde X: es la unidad que estás escaneando y nombre de usuario es el usuario cuyos permisos le gustaría incluir. El escaneo puede llevar algún tiempo y obtendrá los resultados en TEXTFILENAME.TXT.

Si usa el interruptor / noverbose obtienes una lista compacta de permisos de acceso; básicamente, ves a qué directorios tiene acceso el usuario (con máscaras de acceso y algunas otras cosas que pueden ser útiles a veces).

Usé OpenOffice Calc para importar la lista y luego apliqué un filtro personalizado y filtré solo para aquellas líneas que comienzan con + ARCHIVO. 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 en sí.

Comentarios y puntuaciones del tutorial

Nos encantaría que puedieras comunicar este enunciado si si solucionó tu problema.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *