Manipulando Permissões de pastas com Powershell
Introdução
É comum termos que criar pastas ou usuários em scripts de automação, uma parte importante desse processo é configurar as permissões nas pastas e outras propriedades
como proprietário, neste artigo vamos aprender a utilizar esse recurso presente no Powershell.
Configurando permissões
Para configurarmos permissões nos diretórios utilizando Powershell, utilizamos uma combinação entre os cmdlts Get-Acl, Set-Acl e o objeto System.Security.AccessControl.FileSystemAccessRule,
Abaixo um breve exemplo sobre a utilização desses itens em conjunto.
$ACL = Get-Acl “E:\Nova Pasta”
$ACLRULE = New-Object System.Security.AccessControl.FileSystemAccessRule(“Administrator”,”FullControl”,”ContainerInherit”,”None”,”Allow”)
$ACL.AddAccessRule($ACLRULE)
Set-Acl “E:\Nova Pasta” $acl
Explicando então o que foi feito, utilizamos o cmdlet Get-Acl para criar um objeto contendo as permissões da pasta “Nova Pasta”
utilizamos o New-Object para criar um novo objeto do tipo FileSystemAccessRule, contendo as informações da permissão que queremos adicionar a pasta.
Utilizamos o método AddAccessRule passando como parâmetro o objeto FileSystemAccessRule para que essa regra seja adicionada ao nosso objeto ACL
Utilizamos o cmdlet Set-Acl para aplicar as permissões contidas no objeto ACL a pasta “Nova Pasta”
Dessa forma conseguimos adicionar permissões em pastas utilizando Powershell, caso queria adicionar permissões a um usuário do domínio utilize o formato user@dominio.local,
Para alterarmos as permissões que queremos aplicar trocamos somente os parâmetros passados para o FileSystemAccessRule no momento de criação por exemplo ao invés de darmos Fullcontrol queremos que o usuário HowToServer tenha permissões de somente leitura.
$ACLRULE = New-Object System.Security.AccessControl.FileSystemAccessRule(“HowToServer”,”Read”,”ContainerInherit”,”None”,”Allow”)
Explicações, passamos alguns parâmetros determinando a regra de permissão que queremos criar, o primeiro parâmetro é o usuário, podendo ser o nome simples ou com a extensão do domínio (“howtoserver@contoso.local”), segundo parâmetros é o tipo de permissão, temos as opções;
- ListDirectory
- ReadData
- WriteData
- CreateFiles
- CreateDirectories
- AppendData
- ReadExtendedAttributes
- WriteExtendedAttributes
- Traverse
- ExecuteFile
- DeleteSubdirectoriesAndFiles
- ReadAttributes
- WriteAttributes
- Write
- Delete
- ReadPermissions
- Read
- ReadAndExecute
- Modify
- ChangePermissions
- TakeOwnership
- Synchronize
- FullControl
O terceiro parâmetro é a quais itens a permissão vai ser herdada e as opções são:
- None.
- ContainerInherit.
- ObjectInherit.
Se quisermos que a permissão seja herdada para Pastas e Arquivos temos que criar duas ACLs uma para pastas e outra para arquivos e adicionar as duas ao diretório.
$ACL = Get-Acl 'E:\Nova Pasta'
$ACLRULE = New-Object
System.Security.AccessControl.FileSystemAccessRule(“Matheus”,”Read”,”ContainerInherit","none",”Allow”)
$ACL.AddAccessRule($ACLRULE)
$ACLRULE = New-Object System.Security.AccessControl.FileSystemAccessRule(“Admin”,”Read”,”ObjectInherit","none",”Allow”)$ACL.AddAccessRule($ACLRULE)
Set-Acl 'E:\Nova Pasta' $ACL
Quarto parâmetro representa a forma de propagação da permissão, podendo variar entre ;
- None
- NoPropagateInherit
- InheritOnly
Quinto e ultimo parâmetro é o que define o tipo de permissão, podendo ser permissões de acesso ou permissões de bloqueio, as opções são:
- Allow
- Deny
Referencias
Os sites abaixo contém mais informações sobre o assunto e podem ter sido utilizados como fonte de consulta.
http://msdn.microsoft.com/pt-br/library/system.security.accesscontrol.filesystemaccessrule.aspx
http://blogs.technet.com/b/josebda/archive/2010/11/12/how-to-handle-ntfs-folder-permissions-security-descriptors-and-acls-in-powershell.aspx
Este artigo foi originalmente escrito por:
Matheus Kamphorst | Blog: http://howtoserver.com