¿Cómo usar los cmdlets Get-Acl y Set-Acl al administrar permisos NTFS para un archivo o carpeta con PowerShell? – TrucosInformaticos

Powershell

Listas de control de acceso (ACL) se utilizan para controlar los permisos de acceso a archivos y carpetas en el sistema de archivos NTFS. En Windows, puede ver y cambiar las ACL en los objetos del sistema de archivos de varias maneras: desde la GUI del Explorador de archivos (Seguridad ficha en una carpeta o propiedades de archivo), o la línea de comando usando la herramienta icacls o PowerShell.

Hay dos cmdlets de PowerShell integrados para administrar los permisos de NTFS:

  • Obtener-Acl — le permite obtener la ACL de un objeto NTFS;
  • Set-Acl — le permite configurar o cambiar la ACL existente del sistema de archivos o del objeto de registro.

Para enumerar la ACL actual de un objeto en un sistema de archivos NTFS, ejecute el comando:

get-acl c:\docs|fl

El comando devuelve un objeto de la clase System.Security.AccessControl.DirectorySecurity.

Propiedades principales del objeto AccessControl.DirectorySecurity:

  • Acceso;
  • ID de política de acceso central;
  • Nombre de política de acceso central;
  • Grupo;
  • Dueño;
  • Camino;
  • Sddl;
  • PSChildName;
  • PS Drive;
  • PSParentPath;
  • PSPath;
  • proveedor PS;
  • AccesoDerechoTipo;
  • AccessRuleType;
  • son reglas de acceso canónicas;
  • están protegidas las reglas de acceso;
  • AreAuditRulesCanonical;
  • están protegidas las reglas de auditoría;
  • tipo de regla de auditoría;
  • AccesoACadena;
  • AuditToString.

Puede acceder a cualquiera de estas propiedades. Por ejemplo, obtenga el propietario de una carpeta:

get-acl c:\docs |Select-Object Owner

o:

$owner= (get-acl c:\docs).owner

establecer ac

Enumere solo la ACL de la carpeta actual:

(Get-ACL -Path "C:\Docs\").access | Format-Table -AutoSize

como obtener acl

Puede obtener la ACL no solo de una carpeta de red local sino también compartida por su ruta UNC:

Get-ACL -Path "\\NYFS1\Public\Docs\" | fl

Para copiar una ACL de una carpeta y aplicarla a otra, use los siguientes comandos de PowerShell:

$acl = Get-ACL -Path "C:\Docs\"

$acl | Set-Acl -Path "C:\Docs_new"

Si desea cambiar la ACL actual de una carpeta y agregar permisos de acceso para un nuevo usuario o grupo, primero debe crear un objeto de la clase FileSystemAccessRule.

New-Object Security.AccessControl.FileSystemAccessRule('IdentityReference\String','FileSystemRights','InheritanceFlags, PropagationFlags','AccessControlType')

Echemos un vistazo más de cerca a estas opciones:

  • Referencia de identidad\Cadena — nombre de usuario o grupo (use el siguiente formato principal: theitbros\bjackson)
  • Derechos del sistema de archivos — permiso (por ejemplo, lectura, escritura, etc.)
  • Banderas de herencia y PropagaciónBanderas – estos indicadores determinan la configuración de herencia de permisos de la carpeta principal (se describen más detalles sobre la propagación de ACL en la documentación de Microsoft https://docs.microsoft.com/en-us/previous-versions/ms229747(v=vs.110)?redirectedfrom=MSDN)
  • AccessControlType — permitir o denegar el acceso a un objeto (Permitir/Denegar)

Por ejemplo, desea otorgar theitbros\bjackson usuario permiso de acceso de lectura a la carpeta C:\Docs. Utilice estos comandos de PowerShell:

# get current NTFS permissions

$current_acl = Get-ACL -Path "C:\Docs"

# create an object with new NTFS permissions

$new_acl = New-Object System.Security.AccessControl.FileSystemAccessRule('THEITBROS\bjackson', 'Read', 'ContainerInherit, ObjectInherit', 'None', 'Allow')

# add new permissions to the current ACL

$current_acl.AddAccessRule($new_acl)

# Apply an ACL to a folder

Set-ACL -Path "C:\Docs" -ACLObject $current_acl

Del mismo modo, puede eliminar permisos para un grupo o usuario específico. Para hacer esto, use el método RemoveAccessRuleAll:

$current_acl = Get-ACL -Path "C:\Docs"

$new_acl = New-Object System.Security.AccessControl.FileSystemAccessRule('THEITBROS\bjackson', 'Read', 'ContainerInherit, ObjectInherit', 'None', 'Allow')

$current_acl.RemoveAccessRuleAll ($new_acl)

Set-ACL -Path "C:\Docs" -ACLObject $current_acl

Para cambiar el propietario de un objeto NTFS, utilice el método SetOwner. La cuenta o grupo que desea asignar como propietario se especifica mediante su SID:

$current_acl = Get-ACL -Path "C:\Docs"

$usr_sid = New-Object System.Security.Principal.Ntaccount('THEITBROS\bjackson')

$current_acl.SetOwner($user_sid)

Set-Acl -Path "C:\Docs" -ACLObject $current_acl

Pista. También puede tomar posesión de archivos o carpetas usando el comando takeown.

Para habilitar la herencia de permisos de carpetas y reemplazar todas las ACL actuales con las principales:

$current_acl.SetAccessRuleProtection($false,$true)

Set-Acl -Path "C:\Folder1\OneMoreFolder" -ACLObject $current_acl

El método SetAccessRuleProtection acepta dos argumentos booleanos:

  • esta protegido — determina si es necesario bloquear la herencia de la carpeta principal;
  • preservarherencia – es necesario volver a escribir los permisos.
5/5 - (75 votos)

Deja una respuesta

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