Problemas Com o Novo grupo de anúncios, Set-ACL e Pastas de Rede
-
14-12-2019 - |
Pergunta
Eu estou jogando com um código PowerShell para gerar dinamicamente ANÚNCIO grupos de segurança e, em seguida, aplicá-las para pastas em um compartilhamento de rede, mas tendo problemas com a resolução de grupo recém-criado.
Considere isto:
import-module activedirectory
for ($i = 0; $i -lt 10; $i++) {
$group = New-ADGroup -Path "OU=Groups,OU=Department,DC=Domain,DC=Network" -Name "z-test-group-$i" -GroupScope DomainLocal -GroupCategory Security -PassThru
$acl = Get-Acl C:\Temp
$permission = $group.SID,"FullControl","Allow"
$accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule $permission
$acl.SetAccessRule($accessRule)
$acl | Set-Acl C:\Temp
}
O que funciona bem.
No entanto, se eu alterar a pasta para uma pasta de rede, tais como G: emp ou \\domain.rede\DFS\GroupShare emp, recebo um 'Método falhou com código de erro inesperado 1337'.
Eu cansado usando SetACL.exe e recebeu um erro semelhante:
C:\Temp\SetACL.exe -on "\\domani.network\dfs\GroupShare\Temp" -ot file -actn ace -ace "n:$GroupSID;p:full;s:y"
SetACL finished with error(s):
SetACL error message: The call to SetNamedSecurityInfo () failed
Operating system error message: The security ID structure is invalid.
INFORMATION: Processing ACL of: <\\?\UNC\domain.network\dfs\GroupShare\Temp>
Se eu esperar dizem que de 10 a 20 segundos, e executar o Set-ACL (ou SetACL.exe parte do código novamente, ela é concluída com êxito.
No começo eu pensei que isso estava relacionado diretamente para os controladores de domínio (4 deles que são uma mistura de 2003 e 2008 R2), mas o fato de que ele funcionou bem em pastas locais foi intrigante (e irritante).
Eu fiz um Wireshark rastreamento durante a execução do código em uma pasta local e, em seguida, uma pasta de rede.A principal diferença é quando se tenta aplicar a Acl para a pasta de rede que eu vejo pesquisas LDAP e (entre outras coisas), a seguinte resposta SMB:
NT Trans Response, FID: 0x0040, NT SET SECURITY DESC, Error: STATUS_INVALID_SID
O que eu suponho que é o que faz com que o meu Set-ACL comando falhar.
Subjacente sistema de arquivos de rede é a EMC Celerra 6.0.xx.Eu sou muito familiarizado com essa tecnologia, no entanto, a partir do que eu entendo que detém algum tipo de cache de SID que explicaria o erro acima (ele ainda não sabe do novo grupo, mesmo que AD faz).
Então, eu acho que há duas questões:
- Existe alguma maneira de contornar isso (PowerShell/C# ect) que não envolver dormir esperando?Ou seja, definir o ACL, mesmo que o SID é inválido?
- Se o EMC Celerra é o problema (eu suponho que é), não existe qualquer maneira que eu posso forçá-lo para atualizar o seu "cache de SID' ou seja o que pode ser?
Eu leia vários artigos sobre esse assunto, mas nenhum parece ter uma resolução efetiva (ou para mim).
Obrigado por sua ajuda.
Rhys.
Solução 2
Percebi isso!
Modificado o acl.mappingErrorAction no nosso EMC Celerra NAS.
Foi definido para 0, atualizado para 1.
server_param server_2 -facilidade de cifs -modificar a acl.mappingErrorAction -valor de 1
Agora, nós não temos problemas em definir o recém-criado grupo de segurança para a Acl para a pasta em um compartilhamento de rede (sem atrasos).
Informações:acl.mappingErrorAction
Define as regras para o desconhecido mapeamento entre segurança, usuário, e os identificadores de grupo (SID/UID/GID) em configurações de ACL.
Dois tipos de erros podem ocorrer:O SID definido na ACL é desconhecido para os controladores de domínio a ser usado.O nome ainda não está mapeada para um UID/GID.
O bit lista é composta de quatro bits binários (bits 0 a 3, da direita para a esquerda).Cada bit é 1 quando definido;caso contrário, 0.
Bit 0 (0001 or +1): Store unknown SID.
Bit 1 (0010 or +2): Store SID with no UNIX mapping.
Bit 2 (0100 or +4): Enable debug traces.
Bit 3 (1000 or +8): Do lookup only in cache (secmap or global SID cache or per connection SID cache).
Valores:0 – 15 Padrão:0
Parece bastante óbvio agora que eu entendo mais sobre subjacente CIFS/configurações de ACL no NAS, então eu sempre quis saber.
Rhys.
Outras dicas
Se o problema é apenas o atraso envolvido em espera para o cache para atualizar o bloqueio de outros trabalhos que o script precisa fazer, você poderia enviar isto para um trabalho de fundo e deixe o seu script principal ir para outras coisas.