Usando o feedback de @Jed e @mrdenny, pensei em responder minha própria pergunta com o procedimento exato que usei para resolver o problema.
Acontece que o RackSpace não consegue migrar as contas com os mesmos SIDs, porque isso exigiria um "corte" em que nossos sistemas antigos não seriam mais utilizáveis. Precisamos que os dois ambientes fiquem on-line ao mesmo tempo, para testes durante a migração.
Então, mudei para a ideia do SetACL.exe e isso funcionou. Aqui está exatamente o que eu fiz.
- Baixou o SetACL.exe do link
-
Executou este comando para fazer backup de todas as informações existentes da ACL no servidor para a unidade C:
SetACL.exe -em C: \ -ot file -actn list -lst "f: sddl; w: d, s, o, g" -rec cont -bckp "c: \ acl-backup.txt"
-
Obteve os SIDs BEFORE e AFTER para todos os nossos usuários e grupos entre os domínios de diretório ativo antigo e novo.
-
Escreveu um script perl para localizar / substituir esses SIDs no arquivo acl-backup.txt. Um pouco complicado, pois o suporte de leitura / gravação Unicode 16 é um pouco instável na versão do Perl para Windows. O script que usei foi basicamente isto:
use charnames qw( :full ); # e.g. take acl-backup.txt and rename to acl-backup.replaced.txt my $newfilename = $ARGV[0]; $newfilename =~ s/(\..{3,4})$/.replaced$1/; if ($ARGV[0] eq $newfilename) { # Sanity Check die "Could not continue: new file would overwrite old file ($newfilename)\n"; } open my $input_fh, '<:raw:perlio:encoding(UTF-16):crlf', $ARGV[0]; or die "Could not open $ARGV[0] for reading: $!"; open my $output_fh, '>:raw:perlio:encoding(UTF-16LE):crlf', $newfilename or die "Could not open $newfilename for writing: $!"; print $output_fh "\N{BYTE ORDER MARK}"; while (my $line = <$input_fh>) { # you'll need a line like this for each SID you're replacing $line =~ s/S-1-5-21-1844237615-861567501-XXXXXXXXX-XXXX/S-1-5-21-1644697732-2861104425-YYYYYYYYY-YYYYY/g; chomp $line; print $output_fh "$line\n"; } close $output_fh; close $input_fh; exit;
-
Executou o comando setacl.exe restore no arquivo recém-gerado (tenha cuidado, como se você tivesse cometido um erro no seu novo arquivo substituído.txt, você poderia manipular suas ACLs completamente ... embora, teoricamente, você deva ter um arquivo pristine backup você pode restaurar a partir do Passo 2):
setacl -no c: \ -ot arquivo -actn restore -bckp acl-backup.replaced.txt
O único problema que encontrei é que ocasionalmente recebo erros como este:
ERROR: Writing SD to <\?\c:\inetpub\custerr> failed with: The parameter is incorrect.
Não sei porquê, mas no meu caso consegui remover as linhas do arquivo substituído.txt (bem como as que estão acima dele que já haviam sido completadas pelo setacl.exe) e seguir em frente. Em seguida, volte mais tarde e verifique manualmente as permissões nas áreas que falharam.