1.2K
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
Enumere solo la ACL de la carpeta actual:
(Get-ACL -Path "C:\Docs\").access | Format-Table -AutoSize
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.