Enumerar y administrar permisos de carpetas y archivos en Windows – 2xsoftware

Administrar permisos NTFS en carpetas y archivos en el sistema de archivos es una de las tareas típicas de un administrador de Windows. Puede usar la GUI del Explorador de archivos para ver y administrar la interfaz de permisos de NTFS (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 los permisos de carpetas y archivos en Windows.

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 mostrar 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 mostrar permisos

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

icacls C:DOCsIT_Dept

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:DOCsIT_Dept CONTOSOallowUSB:(OI)(CI)(RX)

CREATOR OWNER:(OI)(CI)(IO)(F)

NT AUTHORITYSYSTEM:(OI)(CI)(F)

CONTOSOfs01-IT_dept_RW:(OI)(CI)(M)

CONTOSOfs01-IT_dept_R:(OI)(CI)(RX)

BUILTINAdministrators:(OI)(CI)(F)

BUILTINUsers:(OI)(CI)(RX)

Successfully processed 1 files; Failed processing 0 files

icacls obtener permisos

El permiso 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 grupo de seguridad CONTOSOfs01-IT_dept_RW. Los siguientes permisos están asignados a este usuario:

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

Esto significa que los miembros de este grupo tienen 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.

Para ver todos los permisos de carpeta que tiene con icacls desde la GUI del Explorador de archivos:

  1. Abrir propiedades de archivo o carpeta;
  2. Navegar a la permisos pestaña;
  3. presione el Avanzado botón;
  4. La lista de permisos de carpeta que obtuvimos anteriormente usando el símbolo del sistema se encuentra en la Entradas de permisos lista.
    permisos de la carpeta icacls

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 total;
  • N — sin acceso;
  • M — modificar (incluye ‘eliminar’);
  • 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

Otorgar y quitar permisos a una carpeta o archivo con iCACLS

Puede cambiar las listas de acceso de la carpeta mediante el comando icacls. 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

La opción /eliminar le permite eliminar solo los permisos Concedidos o Denegados para un usuario o SID específico:

  • /eliminar:g — eliminar todo otorgada derechos;
  • /eliminar:d — eliminar todo denegado bien.

Además, puede evitar que un usuario o grupo de usuarios acceda a un archivo o carpeta usando el permiso de 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 un símbolo del sistema cmd elevado (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.

Pista. La gran desventaja de la herramienta icacls es que no le permite obtener permisos NTFS efectivos en un objeto del sistema de archivos. Puede usar el Explorador de archivos, 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

Si su versión de Windows no admite rutas largas, no podrá cambiar los permisos de un objeto si la ruta completa 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:

Etiqueta obligatoriaNivel obligatorio alto:(NW)

permisos de visualización 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 error de acceso denegado.

Nota. 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.

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 — use el modo recursivo (el comando se ejecuta contra 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

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. Este comando es equivalente a la opción «Reemplazar todas las entradas de permisos secundarios con permisos heredables de este objeto» en la configuración de Seguridad avanzada de un objeto del sistema de archivos en el Explorador de archivos.

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 para tomar posesión 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

¿Cómo hacer una copia de seguridad y restaurar las ACL de NTFS mediante ICACLS?

El comando icacls le permite guardar la ACL del objeto actual en un archivo de texto sin formato. Puede aplicar la lista de permisos guardada al mismo o a 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 para el directorio en sí, sino también para todas las subcarpetas y archivos. Puede abrir el archivo de texto resultante usando el bloc de notas o cualquier editor de texto.

permisos icacls

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

icacls C:PS /restore c:tempPS_folder_ACLs.txt /T /C /Q

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 ITSec Active Directory. 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. Este script utiliza la comunicación remota de PowerShell para ejecutar comandos en equipos remotos.

El icacls le permite administrar no solo los permisos NTFS para los objetos del sistema de archivos en la computadora local, sino también los permisos para los recursos compartidos de archivos remotos.

Con el fin de otorgar acceso total a la documentos carpeta en la computadora remota fssrv01ejecute el siguiente comando:

icacls \fssrv01docs /grant bjackson:F

También puede usar recursos compartidos administrativos (C$, D$, etc.) para acceder a archivos locales en una computadora remota a través de la red. Esto significa que este comando también funcionará:

icacls \fssrv01d$docs /grant bjackson:F

Valora este artculo post

Deja una respuesta

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