Si eres un profesional de tecnología de la información y te encuentras luchando con la configuración de permisos del sistema de archivos para tu organización, estás de suerte. Gestionar permisos NTFS mediante una interfaz gráfica es un proceso que consume tiempo, especialmente al trabajar con muchos usuarios o grupos. Afortunadamente, contamos con PowerShell para mejorar todo. ¿Cómo? A través del módulo Microsoft.PowerShell.Security.
PowerShell tiene dos cmdlets específicos para trabajar con ACLs llamados Get-ACL
y Set-ACL
. Estos dos cmdlets pueden recuperar y asignar cualquier cantidad de permisos NTFS, sobre lo cual aprenderás todo en este tutorial. Si deseas volverte más eficiente y ser inmediatamente útil en la gestión de permisos NTFS, sigue leyendo.
¿Sin tiempo para leer? ¡No hay problema! Mira este video complementario de TechSnips.io con Anthony Howell a continuación:
Gestiona e informa sobre Active Directory, Exchange y Microsoft 365 con ManageEngine ADManager Plus. ¡Descarga la prueba gratuita!
Prerrequisitos
Para seguir los ejemplos en este tutorial, necesitas:
- PowerShell 7 o Windows PowerShell 5.1
- A basic understanding of NTFS file and folder permissions
Creación de archivos/carpetas para probar.
Este tutorial se basará en un “laboratorio” simple o una carpeta única. Aprenderás cómo trabajar con permisos de NTFS en PowerShell desde cero; no se necesita trabajo adicional de tu parte.
- Para comenzar, abre una sesión de PowerShell como administrador.
- Crea una carpeta vacía llamada Share en algún lugar de tu sistema de archivos. En los siguientes ejemplos, supongamos que la carpeta se encuentra en C:\Share. Esto hará que los ejemplos sean más cortos y fáciles de seguir. Puedes crear este directorio copiando el código a continuación:
3. Crea una carpeta llamada C:\Share\Assets.
4. Crea un archivo llamado client_list.txt en la carpeta C:\Share.
5. Crea un archivo llamado client_projects.txt en la carpeta C:\Share.
6. A continuación, asigna una variable para la ruta de la carpeta Share. El uso de variables reduce la cantidad de escritura y facilita reutilizar la ruta. Suponiendo que estás usando C:\Share, copia el siguiente ejemplo de código en tu sesión de PowerShell:
7. Presiona Enter. Ahora tienes un directorio vacío y has guardado esa ruta como una variable.
Visualización de los permisos de NTFS con Get-Acl
PowerShell te permite ver rápidamente los permisos de NTFS utilizando el cmdlet Get-Acl
. En las siguientes secciones, aprenderás cómo usar el cmdlet para ver los permisos de NTFS de un archivo o carpeta.
Mostrando Permisos NTFS
Tradicionalmente, verías una ACL haciendo clic derecho en la carpeta C:\Compartir, haciendo clic en Propiedades, seleccionando la pestaña Seguridad y haciendo clic en el botón Avanzado. Puedes ver un ejemplo de cómo la GUI muestra los permisos a continuación.

El ejemplo anterior tiene algunas entradas de permisos y propiedades numeradas. Examínalas de cerca ya que verás la comparación más tarde en esta sección.
Usando el directorio que creaste anteriormente, muestra los permisos NTFS actuales para el directorio usando Get-Acl
.
Ahora deberías ver la ruta, el propietario y los detalles del nivel de acceso en la siguiente captura de pantalla.

La propiedad Access
mostrada en la captura de pantalla anterior contiene información adicional sobre el ACL, pero se desplaza fuera de la pantalla como se muestra por los tres puntos al final de FullControl arriba. Hay una mejor manera de ver esta propiedad encerrando el comando anterior entre paréntesis para ver las propiedades del objeto Access
. Solo busca la propiedad Access
en este objeto ejecutando el siguiente código.
El comando anterior también se puede expresar usando el objeto
Access
y utilizando el parámetro-ExpandProperties
:Get-Acl -Path $dir | Select-Object -ExpandProperty Access
Como se muestra en la siguiente captura de pantalla, la salida está envuelta para que el comando sea más fácil de ver las propiedades individuales de Access
:

Ver las propiedades de acceso de la manera anterior puede hacer que la salida del terminal se desplace rápidamente por la pantalla si tienes muchas Entidades de Control de Acceso (ACE). Cada entidad contiene propiedades FileSystemRights, AccessControlType, IdentityReference, IsInherited, InheritenceFlags y PropagationFlags. Para hacer todo esto un poco más legible, pasa los objetos a Format-Table -AutoSize
. Ejecute el siguiente comando.
Como puedes ver en la siguiente captura de pantalla, las propiedades de acceso son más limpias y organizadas cuando se utiliza Format-Table -AutoSize
:

Examinar las propiedades y el número de columna. Nota que estas son las mismas propiedades que viste en la interfaz gráfica al principio del tutorial.

Filtrando Objetos de Acceso
Hay momentos en los que querrás ser más preciso al descubrir los permisos NTFS. Para hacerlo, puedes filtrar un ACE específico, o encontrar resultados particulares que tengan permisos NTFS heredados o explícitos dentro de una ACL usando PowerShell. En lugar de desplazar la ventana del terminal con los ojos línea por línea, puedes usar el cmdlet Where-Object
para realizar algún filtrado.
El ejemplo de código a continuación filtra objetos que no heredan permisos NTFS. Esto se hace usando Where-Object
con el operador -Not
mirando el objeto actual en la canalización $_.
miembro del objeto propiedad de IsInherited
, que indica si el ACE es el resultado de la herencia y no está establecido explícitamente:
Recuerda enviar los objetos a
Format-Table -AutoSize
o la salida se desplazará por la pantalla. Haz de esto un nuevo hábito; ¡me lo agradecerás más tarde!
Usando el código a continuación, reemplaza 'NOMBRE DE USUARIO'
con otro nombre de usuario para ver resultados específicos:
A continuación se muestra un ejemplo de cómo podrían verse los resultados:

El ejemplo anterior muestra todos los ACE para los cuales la propiedad IdentityReference
es el usuario o grupo de seguridad al que se le han asignado permisos.
Continúa practicando lo que has aprendido hasta ahora sobre
Get-Acl
. Examina diferentes archivos y carpetas en tu sistema. Esto te ayudará a ver muchos descriptores de seguridad diferentes para diferentes contextos. También te ayudará a construir algo de memoria muscular.
Vamos a subir un nivel y asignar permisos NTFS.
Modificando Permisos NTFS con Set-Acl
Ahora que puedes ver los permisos NTFS, es hora de asignar y modificar permisos NTFS usando PowerShell. El cmdlet Set-Acl
hace posible eso. Las siguientes secciones demostrarán cómo usar este cmdlet en conjunto con Get-Acl
para copiar, modificar la herencia y eliminar permisos NTFS de un archivo o carpeta.
Copiando Permisos NTFS
Puede que tengas un archivo o carpeta que contiene el nivel apropiado de permisos NTFS que necesitas usar para un nuevo ACL. Puedes ahorrar tiempo copiando permisos de un archivo o carpeta a otro.
Copiar ACLs/ACEs existentes puede reducir errores humanos al configurar permisos NTFS, siempre y cuando el descriptor de seguridad del que estás copiando sea correcto y apropiado para el destino en primer lugar. Como dice el dicho, “Con gran poder, viene gran responsabilidad”. Tenlo en cuenta.
Considera la siguiente captura de pantalla. Aquí estás revisando el ACL de un archivo en C:\Share llamado Client_List.txt. El ACL tiene el nivel correcto de permisos NTFS que deseas:

Ahora, considera la siguiente captura de pantalla. Esta vez estás revisando el ACL de otro archivo en C:\Share llamado Client_Projects.txt. Este archivo no tiene los permisos NTFS que deseas:

Necesitas copiar los permisos NTFS de Client_List.txt a Client_Projects.txt. ¿Cómo puedes hacer esto? Modificarás los permisos obteniendo el ACL de Client_List.txt y luego usando el cmdlet Set-Acl
con el parámetro -AclObject
. Cuando ejecutas el código a continuación, el ACL completo de Client_List.txt se copia a Client_Projects.txt :
Como puedes ver en la captura de pantalla numerada a continuación, el archivo Client_Projects.txt ahora tiene los mismos descriptores de seguridad que Client_list.txt.
- Obtener un ACL existente de un archivo existente.
- Establecer el objeto ACL copiado en el archivo o carpeta.
- Comprobar que el ACL se copió correctamente en el archivo o carpeta.

Ahora ves que el ACL es idéntico para el archivo Client_Projects.txt como el archivo Client_List.txt en la columna IdentityReference con AccessControlType establecido en Allow. Utilizas la misma técnica para asignar permisos NTFS a las carpetas también.
Agregando Permisos NTFS
En la última sección, copiaste los permisos NTFS existentes de un objeto de archivo a otro. Esta vez vas a crear permisos NTFS desde cero. Esto te permitirá asignar permisos NTFS que se aplicarán a un archivo o carpeta.
Primero, comienza asignando algunas variables para usar al crear un nuevo objeto utilizado por Set-Acl
. Hacerlo de esta manera facilita un poco las cosas cuando llega el momento de ejecutar el comando. El código a continuación construye las propiedades de un ACE que se convertirá en los permisos NTFS asignados a un archivo o carpeta:
A continuación, asigna una variable más que obtendrá el ACL inicial para la carpeta Assets
. Luego, utilizando el tipo de miembro del método AddAccessRule
, agrega una regla de acceso utilizando la variable $ACE
:
Ahora estás listo para agregar el ACE recién creado al ACL de C:\Share\Assets
. Ahora usa Set-Acl
para aplicar este nuevo ACE al directorio adecuado:
A continuación, verifica que el usuario que elegiste tenga los permisos para ver el directorio necesario utilizando el código a continuación:
Eliminación de Permisos NTFS
Llegará un momento en el que necesitarás eliminar los permisos NTFS de un recurso.
Para eliminar los permisos NTFS, comienza obteniendo la Lista de Control de Acceso (ACL) actual del archivo o carpeta. En este ejemplo, ese archivo es Client_Projects.txt
:
Ahora filtra el ACE específico que deseas eliminar. Hazlo llamando a los objetos miembro $Acl
y dirigiendo esos resultados a Where-Object
y unos pocos operandos:
A continuación, utiliza la variable $Acl
que contiene los descriptores de seguridad ACL actuales, llama al método RemoveAccessRule
y pasa el objeto ACE creado anteriormente utilizando el cmdlet New-Object
al método RemoveAccessRule()
. Esto eliminará la entrada:
Es importante recordar que has modificado un ACL existente aquí y aún no has confirmado los cambios.
Ahora, para que esos cambios se mantengan, ejecuta el cmdlet Set-Acl
, proporcionando los parámetros -Path
y -AclObject
con los valores apropiados de "$dir\Client_Projects.txt"
y $Acl
. Una vez que hayas ingresado el siguiente comando, presiona Enter:
Gestiona e informa sobre Active Directory, Exchange y Microsoft 365 con ManageEngine ADManager Plus. ¡Descarga la Prueba Gratuita!
Resumen
En este artículo, has aprendido sobre cómo administrar permisos NTFS con PowerShell. Has aprendido sobre los dos cmdlets, Get-Acl
y Set-Acl
, y qué hacen con los permisos NTFS.
También has aprendido cómo usar filtros para apuntar a un ACE específico en un ACL para usarlo en los cmdlets anteriores. Con un poco de práctica, podrás gestionar fácilmente más solicitudes de permisos NTFS que nunca antes.