Una de las tareas típicas del administrador de Windows es administrar los permisos NTFS en carpetas y archivos en el sistema de archivos. Para administrar los permisos de NTFS, puede usar la interfaz gráfica del Explorador de archivos (vaya a la Seguridad en las propiedades de una carpeta o archivo), o la herramienta de línea de comandos iCACLS integrada. En este artículo, veremos el ejemplo del uso del comando iCACLS para ver y administrar carpetas y permisos de archivos en Windows.

permisos de la lista icacls

Cada archivo o carpeta del sistema de archivos tiene un Dakota del Sur (Descriptor de seguridad). Cada descriptor de seguridad contiene dos listas de control de acceso:

  • Lista de control de acceso al sistema (SACL) — administrado por Windows y utilizado para proporcionar auditoría de acceso a objetos del sistema de archivos;
  • Lista de control de acceso discrecional (DACL) — contiene una ACL (Lista de control de acceso) que define los permisos de acceso de un objeto.

La ACL consta de muchas entradas con tres campos:

  • S.I.D. del usuario o grupo al que se aplica la regla de acceso;
  • Acceso tipo: leer, escribir, ejecutar, etc.;
  • AS tipo — Permitir o Denegar.

¿Cómo ver los permisos de archivos y carpetas usando el comando iCACLS?

El comando iCACLS permite mostrar o cambiar las Listas de control de acceso (ACL) para archivos y carpetas en el sistema de archivos. El predecesor de la utilidad iCACLS.EXE es el comando CACLS.EXE (que se usaba en Windows XP).

La sintaxis completa de las herramientas icacls y algunos ejemplos de uso útiles se pueden mostrar con el comando:

icacls.exe /?

icacls

Para enumerar los permisos NTFS actuales en una carpeta específica (por ejemplo, C:PS), abra un símbolo del sistema y ejecute el comando:

icacls c:PS

Este comando devolverá una lista de todos los usuarios y grupos a los que se les asignan permisos para este directorio. Intentemos comprender la sintaxis de la lista de permisos devuelta por el comando iCACLS:

c:PS CORPalgún nombre de usuario:(OI)(CI)(M)

AUTORIDADSISTEMA NT:(I)(OI)(CI)(F)

INTEGRADOAdministradores:(I)(OI)(CI)(F)

INTEGRADOUsuarios:(I)(OI)(CI)(RX)

CREADOR PROPIETARIO:(I)(OI)(CI)(IO)(F)

1 archivos procesados ​​con éxito; Error al procesar 0 archivos

Comando icacls

El nivel de acceso al objeto se especifica delante de cada grupo o usuario. Los permisos de acceso se indican mediante abreviaturas. Considere los permisos para el usuario CORPsomeusername. Los siguientes permisos están asignados a este usuario:

  • (OI) — herencia del objeto;
  • (CI) — herencia del contenedor;
  • (M) — modificar el acceso.

Esto significa que este usuario tiene derecho a escribir y modificar objetos del sistema de archivos en este directorio. Estos permisos NTFS se heredan a todos los objetos secundarios (anidados) en este directorio.

A continuación se muestra una lista completa de los permisos que se pueden configurar mediante la utilidad icacls:

Configuración de herencia de iCACLS:

  • (OI) — herencia del objeto;
  • (CI) — herencia del contenedor;
  • (IO) — solo heredar;
  • (NP) — no propagar heredar;
  • (I): permiso heredado del contenedor principal.

Lista de permisos de acceso básicos:

  • D — eliminar el acceso;
  • F — acceso completo;
  • N — sin acceso;
  • M — modificar el acceso;
  • RX: acceso de lectura y ejecución;
  • R: acceso de solo lectura;
  • W: acceso de solo escritura.

Permisos detallados:

  • DE — suprimir;
  • RC — control de lectura;
  • WDAC: escribir DAC;
  • WO — escribir propietario;
  • S — sincronizar;
  • AS — seguridad del sistema de acceso;
  • MA — los permisos máximos permitidos;
  • GR - lectura genérica;
  • GW: escritura genérica;
  • GE: ejecución genérica;
  • GA — todos genéricos;
  • RD — leer directorio de datos/lista;
  • WD — escribir datos/agregar archivo;
  • AD: agregar datos/agregar subdirectorio;
  • REA — leer atributos extendidos;
  • WEA — escribir atributos extendidos;
  • X — ejecutar/atravesar;
  • DC — eliminar hijo;
  • RA — leer atributos;
  • WA — escribir atributos.

Si necesita encontrar todos los objetos en el directorio especificado y sus subdirectorios en los que se especifica el SID de un usuario y grupo específico, use el comando:

icacls C:PS /findsid [User/Group_SID_here] /t /c /l /q

Use iCACLS para establecer permisos de carpetas o archivos

Con el comando icacls, puede cambiar las listas de acceso de la carpeta. Para cambiar la DACL de un objeto, el usuario debe tener permiso de escritura DAC (WRITE_DAC — WDAC). Al menos un usuario (el propietario del objeto) tiene permiso para modificar la DACL.

Por ejemplo, desea otorgar los permisos para modificar (M) el contenido de la carpeta C:PS al usuario John. Ejecute el comando:

icacls C:PS /grant  John:M

Para otorgar permiso de control total para el grupo de dominio NYUsers y aplicar todas las configuraciones a las subcarpetas:

icacls "C:PS" /grant domainnameNYUsers:F /Q /C /T

El siguiente comando se puede usar para otorgar a un usuario permisos de acceso de lectura + ejecución + eliminación a la carpeta:

icacls E:PS /grant John:(OI)(CI)(RX,D)

Para otorgar acceso de lectura + ejecución + escritura, use el comando:

icacls E:PS /grant John:(OI)(CI)(RX,W)

Puede usar los nombres de grupo incorporados en el comando icacls. Por ejemplo, Administradores, Todos, Usuarios, etc. Por ejemplo:

icacls C:PS /grant Everyone:F /T

Puede eliminar todos los permisos NTFS asignados a John usando el comando:

icacls C:PS /remove John

Además, puede evitar que un usuario o grupo de usuarios acceda a un archivo o carpeta usando la denegación explícita de una manera como esta:

icacls c:ps /deny "NYUsers:(CI)(M)"

Tenga en cuenta que prohibir las reglas tiene mayor prioridad que permitirlas.

Puede habilitar o deshabilitar permisos en objetos de carpeta/archivo usando el /herencia opción del comando icacls.

Hay tres valores disponibles para el parámetro de herencia:

  • mi — habilitar la herencia;
  • d — deshabilitar herencia y copia de ACE;
  • r — elimine todas las ACE heredadas.

Para deshabilitar los permisos de herencia en el objeto del sistema de archivos y copiar la lista de control de acceso actual (permisos explícitos), ejecute la lista de comandos:

icacls c:PS /inheritance:d

Para deshabilitar la herencia y eliminar todos los permisos heredados, ejecute:

icacls c:PS /inheritance:r

Para habilitar los permisos heredados en un objeto de archivo o carpeta:

icacls c:PS /inheritance:e

Si necesita propagar un nuevo permiso a todos los archivos y subcarpetas de la carpeta de destino sin usar la herencia, use el comando:

icacls "C:PS" /grant:r Everyone:(NP)(RX) /T

En este caso, no se sobrescribirán los permisos específicos de las subcarpetas.

Además, puede configurar la variable de entorno %username% para otorgar permisos al usuario que ha iniciado sesión actualmente:

ICACLS c:PS /grant %username%:F

En algunos casos, puede recibir el mensaje “Acceso denegado” error al intentar cambiar los permisos en un archivo o carpeta usando la herramienta icacls. En este caso, primero, asegúrese de estar ejecutando una ventana cmd con derechos elevados (ejecutar como administrador). Dado que icacls no es una herramienta compatible con UAC, no verá el aviso de elevación.

Si el error persiste, enumere los permisos de archivo actuales y asegúrese de que su cuenta tenga los derechos de "Cambiar permisos" en el archivo.

Insinuación. Puede usar la herramienta accesschk o el módulo NTFSSecurity PowerShell para obtener permisos NTFS efectivos en archivos y carpetas. Puede instalar el módulo NTFSSecurity desde la Galería de PowerShell:

Install-Module -Name NTFSSecurity

Para obtener permisos de objetos efectivos para una cuenta de usuario específica, ejecute:

Get-NTFSEffectiveAccess -Path C:PSmyfile.txt -Account samaccountname

Un problema bastante común: después de copiar directorios entre dos unidades, puede perder el permiso de acceso a las carpetas en una unidad de destino. En este caso, puede restablecer los permisos de NTFS con icacls. El siguiente comando restablecerá todos los permisos explícitos y heredados para todas las carpetas y archivos en la unidad E:

Icacls.exe E:*   /reset    /T

En las versiones de Windows sin compatibilidad con rutas largas, no puede cambiar los permisos para un objeto en el árbol si la ruta completa del archivo a dicho objeto tiene más de 256 caracteres (con el error Ruta de destino demasiado larga). En estos casos, en lugar de usar el siguiente comando icacls:

ICACLS C:PSLongFilePath /Q /C /T /reset

Deberías usar:

ICACLS "\?C:PSLongFilePath " /Q /C /T /reset

Con icacls puede establecer un alto nivel de integridad para un archivo o carpeta. Solo los administradores pueden acceder y modificar archivos y carpetas con un alto nivel de integridad.

icacls C:PSmyfile.txt /setintegritylevel H

Ahora aparecerá la siguiente entrada en la ACL del archivo:

Mandatory LabelHigh Mandatory Level:(NW)

ejemplos de icacls

Después de eso, incluso si el usuario tiene permisos de acceso de Control total al archivo, no podrá cambiarlo y recibirá un Acceso denegado error.

Cambio de propiedad usando ICACLS en Windows

Usando el comando icacls, puede cambiar el propietario de un directorio o carpeta, por ejemplo:

icacls c:pssecret.docx /setowner John /T /C /L /Q
  • /Q — suprimir mensajes de éxito;
  • /L — el comando se ejecuta directamente sobre el enlace simbólico, no sobre el objeto específico;
  • /C — la ejecución del comando continuará a pesar de los errores del archivo. Se seguirán mostrando mensajes de error;
  • /T — el comando se ejecuta para todos los archivos y directorios que se encuentran en el directorio especificado y sus subdirectorios.

Puede cambiar el propietario de todos los archivos en el directorio:

icacls c:ps* /setowner John /T /C /L /Q

Además, con icacls puede restablecer los permisos actuales en los objetos del sistema de archivos:

ICACLS C:ps /T /Q /C /RESET

icacls mostrar permisos

Después de ejecutar este comando, se restablecerán todos los permisos actuales sobre el objeto de archivo en la carpeta especificada. Serán reemplazados por permisos heredados del objeto principal.

Tenga en cuenta que el comando icacls con la opción /setowner no le permite cambiar a la fuerza la propiedad del objeto del sistema de archivos. Si no es el propietario actual del objeto, use el comando takeown.exe para reemplazar la propiedad del archivo o la carpeta.

Para averiguar todos los archivos con ACL no canónica o longitudes que no coinciden con la cantidad de ACE, use el parámetro /verify.

icacls "c:test" /verify /T

Guardar y restaurar ACL de NTFS mediante ICACLS

Con el comando icacls, puede guardar la ACL del objeto actual en un archivo de texto. Luego puede aplicar la lista de permisos guardada al mismo u otros objetos (una especie de forma de hacer una copia de seguridad de las ACL).

Para exportar la ACL actual en la carpeta C:PS y guardarla en el archivo PS_folder_ACLs.txt, ejecute el comando:

icacls C:PS* /save c:tempPS_folder_ACLs.txt /t

Este comando guarda las ACL no solo en el directorio en sí, sino también en todas las subcarpetas y archivos. Puede abrir el archivo de texto resultante usando el bloc de notas o cualquier editor de texto.

permisos de visualización de icacls

Para aplicar las ACL de acceso guardadas (permisos de restauración), ejecute el comando:

icacls C:PS /restore c:tempPS_folder_ACLs.txt

Por lo tanto, el proceso de transferencia de ACL de una carpeta a otra (o entre hosts) se vuelve mucho más fácil.

Uso de ICACL en PowerShell Script para cambiar permisos

Si necesita bajar la estructura de carpetas y cambiar los permisos NTFS solo en ciertos tipos de archivos, puede usar la utilidad ICACL. Por ejemplo, debe encontrar todos los archivos con la frase "contraseña" en el nombre y la extensión *.docx en su carpeta de red compartida. Además, desea otorgarles acceso de lectura para el grupo de seguridad del dominio ITSec. Puede usar el siguiente script de PowerShell (no olvide cambiar la ruta de la carpeta):

$files = get-childitem "d:docs" -recurse | Where-Object { $_.Extension -eq ".txt" }

foreach($file in $files){

if($file -like "*pass*"){

$path = $file.FullName

icacls $file.FullName /grant corpITSec:(R)

write-host $file.FullName

}

}

Puede usar icacls en scripts de PowerShell para cambiar los permisos de NTFS en directorios en equipos remotos:

$folder = “c:Tools”

$Grant = “grant:rw”

$users = “corphepldesk”

$permission = “:(OI)(CI)(F) /T”

srv_list = @(″server1″,″server2″,″server3″)

Invoke-Command -ScriptBlock {Invoke-Expression -Command (‘icacls $initFolder $Grant “${$users}${$permission}”’)} -ComputerName $servers

Este script otorgará permisos RW al directorio C:tools para el grupo de seguridad del dominio corphepldesk en tres servidores remotos.

Además de la herramienta icacls, puede administrar los permisos NTFS de los objetos del sistema de archivos mediante PowerShell. Para obtener la ACL actual de un objeto, use el Obtener ACL cmdlet. Para cambiar los permisos de NTFS, use Establecer-ACL.

Recomendado para ti