- PowerShell permite exportar permisos NTFS a CSV o texto para analizarlos en Excel, aunque con limitaciones en entornos grandes.
- Herramientas gratuitas y de pago especializadas facilitan informes visuales, permisos efectivos y seguimiento de cambios.
- Comprender NTFS, ACL, ACE, herencia y el orden de evaluación es clave para interpretar correctamente cualquier informe.
- La combinación de scripts, auditoría de eventos y buenas prácticas ofrece un control sólido sobre accesos a datos en Windows.
Gestionar quién puede acceder a qué carpeta en un servidor de archivos Windows puede convertirse en un auténtico quebradero de cabeza. Cuando los permisos NTFS y las ACLs se descontrolan, aparecen problemas de seguridad, auditorías eternas y usuarios con más privilegios de los que deberían tener.
Por suerte, hoy en día tenemos una buena mezcla de scripts PowerShell y herramientas de reporting (gratuitas y de pago) que permiten generar informes claros en HTML, CSV o XLSX con todos los permisos efectivos sobre archivos y carpetas. En esta guía vas a ver, de forma muy detallada, cómo hacerlo con soluciones nativas y con software especializado, además de repasar a fondo conceptos clave de NTFS, ACL, herencia, cuentas especiales y buenas prácticas.
Auditoría nativa con PowerShell: exportar permisos NTFS a CSV
Windows incorpora todo lo necesario para auditar permisos NTFS sin instalar nada más, aunque con ciertas limitaciones. El enfoque clásico consiste en usar PowerShell para recorrer una estructura de carpetas, leer las ACL con Get-Acl y enviar la información a un fichero CSV que luego se abrirá en Excel para analizarla con filtros y tablas dinámicas.
Un ejemplo típico es el script que define un archivo de salida CSV, un encabezado con las columnas principales y una ruta raíz a revisar (por ejemplo, \\FileServer\share). Después, recorre todas las subcarpetas con Get-ChildItem -Recurse, comprueba que cada elemento es un contenedor (carpeta) y para cada una obtiene su lista de accesos:
– Ruta de la carpeta, cuenta o grupo (IdentityReference), tipo de acceso (Allow/Deny), si el permiso es heredado, banderas de herencia y propagación. Cada línea se construye como una cadena separada por comas y se va agregando al CSV mediante Add-Content.
Una vez completado el escaneo, basta con abrir el CSV en Microsoft Excel, aplicar filtros sobre columnas como IdentityReference o IsInherited, y ya dispones de un primer informe de permisos NTFS bastante completo, listo para filtrar por usuarios, grupos o rutas concretas.
Otra variante frecuente es enviar el resultado a Out-GridView, lo que permite una vista interactiva filtrable en tiempo real, muy útil cuando se quiere inspeccionar sin generar ficheros intermedios, aunque para auditoría formal suele preferirse el CSV.
Limitaciones de la auditoría nativa con PowerShell
Aunque PowerShell es muy potente y flexible, tiene varias limitaciones prácticas para auditorías grandes. La más evidente es el rendimiento: cuando se usa -Recurse sobre árboles muy profundos con cientos de miles de carpetas, la ejecución puede tardar bastante y consumir memoria de forma notable.
Además, los scripts básicos con Get-Acl suelen quedarse cortos para escenarios más avanzados, por ejemplo cuando necesitas permisos efectivos reales teniendo en cuenta membresías anidadas de grupos, denegaciones heredadas, SIDs especiales o conflictos entre varias ACE. Todo eso implica desarrollar lógica adicional o apoyarse en módulos externos, lo que complica el mantenimiento.
También es habitual que los scripts elementales no distingan claramente entre permisos heredados y explícitos más allá del simple campo IsInherited, ni que muestren el origen exacto de la herencia. En auditorías de cumplimiento (PCI DSS, SOX, HIPAA, etc.) suele pedirse precisamente esa trazabilidad, y recrearla a mano en Excel puede ser bastante tedioso.
Por último, aunque se puede programar una tarea con el Programador de Tareas y usar Send-MailMessage o similares, la automatización robusta de informes periódicos (con distintas plantillas, destinatarios, filtros por unidad de negocio, etc.) requiere bastante trabajo adicional si solo se usa scripting nativo.
Netwrix Auditor para Windows File Servers
Para quienes necesitan ir más allá del script artesanal, una de las opciones más populares es Netwrix Auditor para Windows File Servers. Este producto aporta un módulo específico de reporting sobre servidores de archivos con informes predefinidos y filtros avanzados.
El flujo típico para obtener un informe de permisos NTFS con Netwrix es muy directo: abres la consola, vas a la sección Informes > Servidores de Archivos > Estado en el Tiempo y seleccionas el informe Permisos de Carpeta. En el filtro Object UNC Path se indica la ruta del recurso compartido (por ejemplo \\MiServidor\MiShare) y se ejecuta la consulta.
El informe resultante muestra para cada carpeta los permisos efectivos por usuario o grupo, distinguiendo si han sido asignados de forma directa o mediante grupo, y si proceden de herencia. Desde ahí se puede exportar a HTML, PDF o Excel, o bien programar una suscripción por correo electrónico para recibirlo con la periodicidad deseada (diaria, semanal, mensual, etc.).
Una de las ventajas claras frente a PowerShell es que Netwrix ya integra el análisis de membresía de grupos y los cálculos de permisos efectivos, evitando tener que construir esa lógica a mano. Además, su motor está pensado para entornos grandes, por lo que los escaneos suelen ser más rápidos y manejables en infraestructuras con varios servidores de archivos.
Scripts prácticos en PowerShell para informes NTFS
Si prefieres seguir en el terreno nativo pero dando un paso más, una muy buena idea es preparar scripts PowerShell específicos para distintos tipos de auditoría. A partir del contenido proporcionado, se presentan tres ejemplos muy útiles que cubren necesidades diferentes sin necesidad de herramientas de terceros.
1. Script para comprobar un usuario concreto en el primer nivel
El primer script está pensado para responder a una pregunta muy común: “¿En qué carpetas de primer nivel tiene acceso directo este usuario?”. Esto resulta ideal cuando un auditor o un jefe de departamento pide revisar rápidamente lo que puede ver y modificar una cuenta concreta.
El guion define variables para la ruta base (por ejemplo P:\), el usuario objetivo (como DOMINIO\d.perez) y el fichero de salida. Después obtiene solo las carpetas del nivel inmediato mediante Get-ChildItem -Path $Ruta -Force filtrando por PSIsContainer. Para cada carpeta, recupera la ACL con Get-Acl y recorre sus entradas de acceso ($acl.Access).
En cada ACE comprueba si IdentityReference coincide con el usuario. Si es así, guarda información como el nombre de la carpeta, los derechos (FileSystemRights), el tipo de acceso (Allow/Deny) y si se trata de un permiso heredado. Todo se guarda en una colección y al final se vuelca a un txt o CSV con Out-File.
Cuando no se encuentra ninguna coincidencia, el script registra un mensaje del estilo “No se encontraron permisos para el usuario X bajo la ruta Y”, lo que evita informes vacíos y deja claro el resultado de la auditoría.
Este enfoque es perfecto para auditorías puntuales, para detectar permisos directos indeseados en carpetas de raíz o para revisar rápidamente a qué contenedores de primer nivel tiene acceso una cuenta crítica.
2. Script de inventario de todos los usuarios en el primer nivel
El segundo script tiene un enfoque más global: en lugar de centrarse en una cuenta, genera un inventario completo de todas las ACE de cada carpeta de primer nivel bajo una ruta UNC, por ejemplo \\recursocompartido\Administración\.
De nuevo, se obtienen solo las carpetas directamente bajo la ruta indicada, sin recursión. Para cada una se recupera la ACL y se construye un bloque de texto empezando por algo tipo “Carpeta: <ruta>”, seguido de una línea por cada entrada de acceso con el usuario o grupo, los derechos asignados, el tipo de permiso y si es heredado.
El resultado es un informe ligero, rápido de generar, que da una visión panorámica del nivel raíz del recurso compartido sin entrar en el detalle de todas las subcarpetas. Esto viene muy bien antes de una migración, para validar que la estructura base está limpia y bien organizada.
Aunque el script original incluía algún emoji para hacer más visual la salida, lo más práctico en entornos de producción suele ser mantener un formato de texto simple, especialmente si se va a importar luego en Excel o en herramientas de análisis.
3. Script de auditoría recursiva exhaustiva
El tercer script sube la apuesta y se encarga de realizar una auditoría recursiva de todas las carpetas bajo una ruta compartida, excluyendo los archivos. Es decir, no solo revisa el primer nivel, sino todo el árbol de subcarpetas usando Get-ChildItem -Recurse.
Para cada carpeta encontrada se obtiene la ACL y se recorre la colección .Access igual que en los guiones anteriores, exportando identidad, derechos, tipo de acceso y herencia. Se agrupan los resultados en un archivo de salida (txt o CSV) que puede ser muy voluminoso en estructuras grandes, pero que ofrece una visión completa de la seguridad del recurso.
Este tipo de informe es el que suele pedirse en auditorías formales de cumplimiento o cuando se quiere realizar una limpieza profunda de permisos, identificar accesos redundantes y localizar grupos con privilegios excesivos.
En estos casos es muy recomendable ejecutar el script desde PowerShell “Como administrador”, en horario de baja carga, y si es posible desde un servidor con buena conectividad al almacenamiento donde residen las carpetas, para minimizar tiempos de ejecución.
Herramientas gratuitas para reporting y gestión de permisos NTFS
Si no te apetece pelearte con scripts o quieres algo más visual y amigable para compartir con auditores y responsables de negocio, hay varias utilidades gratuitas muy interesantes centradas en informes de permisos NTFS.
NTFS Permissions Reporter Free Edition (Cjwdev)
Esta herramienta genera informes sobre permisos de archivos y carpetas que se pueden exportar fácilmente a HTML. Permite elegir entre una vista en forma de árbol o en tabla, y resaltar permisos con colores diferentes para identificar rápidamente quién tiene qué tipo de acceso.
Una de sus ventajas es que muestra en el propio informe los miembros de los grupos, incluyendo grupos anidados, lo que facilita ver permisos efectivos sin tener que ir a Active Directory a comprobar cada grupo. Sin embargo, la versión gratuita está orientada a informes por carpeta y no permite generar un informe centrado en un usuario concreto.
La interfaz puede resultar algo recargada al principio, porque incluye muchas opciones de personalización, pero una vez te haces a ella es una herramienta bastante cómoda. Eso sí, el proceso de escaneo de permisos puede tardar un poco en entornos con muchas carpetas y rutas remotas lentas.
Netwrix Effective Permissions Reporting Tool
Esta utilidad gratuita de Netwrix se centra en mostrar, para un usuario o grupo concreto, sus permisos efectivos de Active Directory y de comparticiones de archivos en un único informe. Indica además si los permisos se han asignado de forma explícita o por herencia, lo que ayuda a eliminar accesos sobrantes.
El uso es muy sencillo: introduces el nombre del usuario o grupo y la herramienta calcula sus permisos consolidados. El resultado se puede exportar a HTML con un par de clics. Su gran limitación es que no muestra el detalle de permisos por carpeta; para eso remite al producto de pago Netwrix Auditor for File Servers.
AccessEnum (Sysinternals, Microsoft)
La pega es que la exportación solo se realiza en formato .txt, con un layout bastante poco amigable si lo quieres llevar a Excel. Para tenerlo en .xls o .xlsx normalmente hay que hacer un poco de copia y pega manual, o un procesamiento posterior con scripts.
Permissions Reporter (Key Metric Software)
Permissions Reporter ofrece una experiencia similar a NTFS Permissions Reporter de Cjwdev, pero con una interfaz más moderna y visualmente agradable. Permite crear y descargar informes con facilidad, con vistas en árbol y exportación a distintos formatos.
Sus limitaciones principales en la versión gratuita son que los escaneos pueden resultar algo lentos en estructuras muy grandes, y que solo genera informes centrados en carpetas o archivos, no en usuarios específicos. Aun así, es una buena alternativa si buscas algo intuitivo.
Permissions Analyzer (SolarWinds)
Permissions Analyzer de SolarWinds es muy útil cuando quieres entender en detalle los permisos de un usuario concreto, cómo se heredan y qué grupos intervienen. Permite navegar por permisos por usuario o por grupo y desglosar el origen de cada acceso.
El gran inconveniente es que no permite exportar los resultados; está pensado más como herramienta interactiva de consulta que como generador de informes formales. Si tu necesidad es ver rápidamente por qué un usuario tiene acceso a una carpeta, te puede venir de lujo.
NTFS Permissions Tools (MajorGeeks.com)
Este conjunto de utilidades se orienta más a la gestión masiva de permisos que al reporting puro. Permite realizar cambios de ACL y configuraciones de seguridad en lotes sobre muchos archivos y carpetas, ahorrando tiempo frente a la consola GUI estándar de Windows.
Su principal ventaja es que reduce el tiempo necesario para modificar estructuras grandes de permisos en comparación con la pestaña de Seguridad de Windows. No es tanto una herramienta de informes, sino de administración rápida de NTFS.
PowerShell como “bonus” para informes personalizados
Aparte de los scripts comentados antes, siempre puedes recurrir a PowerShell como navaja suiza para exportar permisos de carpetas y usuarios en formato CSV, construir informes a medida para tu entorno e incluso integrarlos con otras herramientas de monitorización o bases de datos.
A partir de los ejemplos de código publicados por Microsoft y la comunidad, es posible crear scripts que exporten permisos por ruta, por usuario, por grupo o por combinación de todos ellos, incluyendo herencias, SIDs, permisos especiales y cualquier otra columna relevante.
Conceptos clave: NTFS, ACL, ACE, herencia y descriptores de seguridad
Para sacar verdadero partido a los informes de permisos NTFS es imprescindible tener clara la terminología básica de seguridad en Windows. Sin estos conceptos, interpretar un reporte complejo puede convertirse en algo caótico.
El sistema de archivos NTFS (New Technology File System) es el responsable de permitir permisos avanzados sobre archivos y directorios. Cada objeto seguro (fichero, carpeta, clave de registro, proceso, etc.) posee un descriptor de seguridad (SD), que incluye el SID del propietario, su grupo primario y dos listas: la DACL (Discretionary Access Control List) y la SACL (System Access Control List).
Una ACL (Access Control List) es, en esencia, una lista de entradas de control de acceso (ACE). Cada ACE indica para un SID concreto (usuario o grupo) qué permisos se permiten o se deniegan, y a qué se aplican (solo al objeto, a sus hijos, o a ambos). Hay tres grandes tipos: ACE de acceso permitido, ACE de acceso denegado y ACE de auditoría.
La DACL es la que controla quién entra y quién no a un recurso: si un objeto no tiene DACL, el acceso se permite a todo el mundo (comportamiento peligroso), mientras que una DACL vacía implica que nadie tiene acceso. La SACL se utiliza para definir qué intentos de acceso deben registrarse en el registro de seguridad (por ejemplo, lecturas fallidas de un fichero sensible).
El mecanismo de herencia hace que las ACL definidas en un objeto contenedor (carpeta padre) se propaguen a sus hijos. Al crear una ACE pueden definirse indicadores para determinar si se aplica al objeto, solo a sus hijos, o a ambos. Esto permite diseñar estructuras donde los permisos se transmiten automáticamente, ahorrando mucha administración manual.
Dónde se almacenan los permisos NTFS y cómo gestionarlos
Los permisos NTFS se almacenan en la Master File Table (MFT) del volumen NTFS. Esta tabla funciona como una especie de base de datos interna donde se guardan metadatos de cada archivo y carpeta, incluyendo su descriptor de seguridad (y por tanto la DACL y la SACL asociadas).
Cuando asignas permisos a un fichero o directorio a través de la pestaña Seguridad en Windows, o mediante comandos como icacls, lo que realmente se está modificando es el descriptor de seguridad del objeto en la MFT. El sistema operativo utiliza esos datos para permitir o denegar accesos en tiempo de ejecución.
Desde la interfaz gráfica, la forma estándar de gestionar permisos consiste en hacer clic derecho sobre el archivo o carpeta, ir a Propiedades > Seguridad, y ahí añadir o quitar usuarios y grupos, asignando permisos como Control total, Modificar, Leer y ejecutar, Lectura o Escritura.
En sistemas más antiguos, o cuando se usa el uso compartido simple, puede que la pestaña Seguridad no aparezca hasta desactivar el “uso compartido simple de archivos” en las opciones de carpeta. En entornos modernos de dominio, esta pestaña está disponible por defecto y es la puerta de entrada a buena parte de la administración de permisos.
Comandos avanzados: TAKEOWN e ICACLS
Para escenarios en los que se requiere tomar posesión masiva de archivos o reasignar permisos en bloque, la shell de Windows ofrece los comandos takeown e icacls, muy útiles cuando la interfaz gráfica se queda corta o es demasiado lenta.
Por ejemplo, un patrón habitual es ejecutar algo como takeown /F "%SYSTEMDRIVE%\*" /R /D S, con lo que se indica que el usuario actual se convierta en propietario recursivo de todos los archivos y carpetas del disco del sistema. El modificador /R aplica la operación a subdirectorios, y /D S fuerza respuestas afirmativas en los prompts interactivos.
Después se puede usar icacls "%SYSTEMDRIVE%\*" /grant Administradores:(D,WDAC) /T para conceder a los administradores permisos concretos como eliminación (D) o escritura de la DACL (WDAC) sobre todo el disco, utilizando /T para aplicar la operación a todos los elementos del árbol.
El comando icacls permite especificar permisos resumidos (como F para control total, M para modificar, RX para lectura y ejecución) o permisos más detallados (eliminar, leer atributos, escribir propietario, etc.), así como diferentes modos de herencia:
- OI (Object Inherit): herencia a archivos.
- CI (Container Inherit): herencia a subcarpetas.
- IO (Inherit Only): la ACE solo se aplica a los hijos, no al objeto actual.
- NP (No Propagate): no se siguen propagando más allá del siguiente nivel.
Combinando estos parámetros se pueden construir reglas de herencia muy precisas y automatizar grandes cambios de permisos de forma controlada, siempre con la precaución lógica de hacer pruebas previas en entornos de laboratorio.
Redactor apasionado del mundo de los bytes y la tecnología en general. Me encanta compartir mis conocimientos a través de la escritura, y eso es lo que haré en este blog, mostrarte todo lo más interesante sobre gadgets, software, hardware, tendencias tecnológicas, y más. Mi objetivo es ayudarte a navegar por el mundo digital de forma sencilla y entretenida.

