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:

  1. 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?
  2. 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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top