Como posso alterar programaticamente as permissões de arquivo de um usuário de domínio do AD para um usuário de domínio do AD separado?

3

Estamos em uma instalação de RackSpace em San Antonio, com um diretório ativo chamado "SAT".

Estamos sendo transferidos para o Dallas / Ft. Worth facility, com um diretório ativo chamado "DFW".

Essas máquinas estão executando o Windows 2008 Server (algumas de 32 bits, algumas de 64 bits).

As máquinas foram clonadas para a nova instalação usando o software DoubleTake e geralmente funcionam bem. Ao mover as máquinas, no entanto, fomos forçados a iniciar o login com novas contas de usuário estabelecidas no DFW Active Directory.

Eu passei muito tempo trabalhando com os servidores originais, em termos de permissões de arquivos nos servidores, e espero que alguém possa compartilhar alguma forma programática, seja com um software existente ou mesmo com um código .NET personalizado, que podemos "traduzir" todas essas permissões.

Por exemplo, gostaria de especificar as unidades a serem atualizadas, o nome de usuário "BEFORE", por exemplo, SAT \ User e o nome de usuário "AFTER", por ex. "DFW \ User", e deixe ras rip ... Alguma idéia?

    
por Mason G. Zhwiti 06.07.2011 / 04:08

3 respostas

1

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.

  1. Baixou o SetACL.exe do link
  2. 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"

  3. 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.

  4. 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;
    
  5. 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.

    
por 20.07.2011 / 19:33
6

Eu recomendo a ferramenta gratuita de código aberto, SetACL.

link

Suponho que SAT e DFW não possuem nenhum tipo de confiança e SAT \ USER1 provavelmente tem um SID muito diferente de DFW \ USER1. As permissões no NTFS são armazenadas pelo SID, não pelo nome de usuário. Isso pode complicar as coisas.

Aprenda os comandos de backup e restauração primeiro e faça o backup das permissões em todos os seus servidores para um local seguro. Talvez seja necessário criar sua própria solução em que você faça backup das permissões existentes em um arquivo SDDL, pesquise e substitua os nomes de domínio ou SIDs e, em seguida, restaure-o no novo domínio.

    
por 06.07.2011 / 04:52
1

Como os domínios são confiáveis, faça a Rackspace usar a ferramenta de migração do AD para migrar as contas para o novo domínio DFW. Dessa forma, todos os SIDs permanecerão os mesmos e as novas contas simplesmente terão as permissões corretas.

    
por 06.07.2011 / 09:08