Permissões de segurança para pastas compartilhadas remotas

1

Eu tenho dois servidores executando o Windows Server 2003 e quero copiar arquivos de um servidor (A), programaticamente com um serviço do Windows em execução na conta do Sistema Local, para uma pasta compartilhada no outro (B). Eu continuo recebendo erros de "acesso negado" e não consigo descobrir quais configurações de segurança eu preciso definir para abrir a pasta compartilhada para gravação.

Isso é o que eu fiz no final:

  1. Em A, clique com o botão direito do mouse na pasta para compartilhar, escolha a guia "Compartilhamento" e selecione "Compartilhar esta pasta". Definir um nome de compartilhamento.
  2. Clique em "Permissões", adicione o grupo "Todos" e dê controle total.

Eu tentei escolher a aba "Segurança" para dar algumas permissões também, mas a caixa de diálogo "Adicionar" só encontra usuários locais, apesar do fato de que B aparece na caixa de diálogo "Computadores do grupo de trabalho". Após uma inspeção mais aprofundada, esse também é o caso da caixa de diálogo "Permissões" na guia "Compartilhamento" (elas são iguais?).

Atualização: Fiz mais algumas pesquisas e descobri que o programa no servidor A é executado na conta SYSTEM. Isso não é algo que eu ouso mudar, devido ao risco de quebrar outras coisas que este programa também faz (é um agente de compilação em nosso servidor de equipe do TeamCity).

Assim, eu preciso de uma maneira de dar acesso A \ SYSTEM para escrever em uma pasta compartilhada em B, em um ambiente de grupo de trabalho.

Atualização 2: agora consegui fazer as seguintes alterações na minha configuração:

  • Existe uma conta de usuário em cada servidor chamado TeamCity. Eles têm as mesmas senhas e são partes de seus respectivos grupos Administradores (que eu verifiquei ao fazer logon via desktop remoto em ambos os servidores usando as mesmas informações).
  • O TeamCity (especificamente \\ B \ TeamCity) tem acesso total ao controle da pasta compartilhada em B.
  • O agente de compilação em A é executado sob a conta \\ A \ TeamCity.

Quando tento copiar arquivos dessa vez, recebo um erro informando

Could not find part of the path '\B\Shared.Folder.Name'

Eu posso copiar o caminho da mensagem de erro e colá-lo na barra de endereços no Windows Explorer quando conectado à conta do TeamCity via Remote Desktop, e o explorador navega para a pasta compartilhada em B.

    
por Tomas Aschan 20.06.2011 / 09:35

4 respostas

4

  1. Em um grupo de trabalho, não há repositório central de usuários, portanto, é necessário duplicar manualmente as contas em cada estação de trabalho (ou servidor no seu caso)
  2. Em um grupo de trabalho, o LocalSystem acessa a rede como Anônimo.

Você deve ter o serviço executado como uma conta diferente. Crie uma conta com o mesmo nome / senha em ambas as máquinas, conceda permissões de compartilhamento à conta do Serviço e defina o serviço para ser executado como esse, em vez de LocalSystem: start > execute: services.msc clique com o botão direito do mouse no serviço e acesse as propriedades. Altere o logon para a conta de usuário que você criou.

Se isso não funcionar, você pode configurar a pasta de recebimento para aceitar gravações do Anonymous, mas não de leitura / execução. isso faria com que a pasta funcionasse como uma caixa de depósito.

Para responder à sua pergunta sobre permissões de "segurança" e "compartilhamento", não, elas não são as mesmas. Segurança é permissões NTFS ... permissão para acessar o sistema de arquivos. Permissões de compartilhamento é permissão para acessar esse recurso pela rede. A mais restritiva das duas vitórias, portanto, se você definir Todos em Controle Total em configurações de segurança, mas Todos em Somente Leitura em compartilhamento, você obterá Controle Total se acessar o recurso localmente, mas somente o acesso de leitura, se tentar usá-lo outro computador.

    
por 22.06.2011 / 20:20
1

A conta do sistema local não tem permissão para acessar os recursos da rede. Você precisará executar um processo que possa fazer a conexão usando credenciais adequadas ou executar o serviço em outra conta, que ainda precisará usar credenciais adequadas para acessar o recurso remoto.

    
por 22.06.2011 / 23:59
1

Você provavelmente está em um domínio. Eu recomendaria usar contas de domínio, se você é. A autenticação de passagem é possível, como já foi mencionado, mas destina-se apenas a um grupo de trabalho ou se você estiver realmente restrito ao que seu administrador de domínio lhe dará (embora isso sugira que você esteja fazendo algo que seu administrador de rede ganhou) t suporte).

Veja como você pode verificar se está em um domínio.

  • Clique em Iniciar . Clique com o botão direito em Meu Computador e clique em Propriedades
  • Clique na guia Nome do computador
  • Você pode dizer a partir dessa tela, mas clique em Alterar
  • Veja se Membro de é domínio ou grupo de trabalho.

Se for um grupo de trabalho, use a autenticação de passagem já mencionada. (exatamente o mesmo nome de usuário / senha em ambas as máquinas)

No entanto, se estiver em um domínio, o que recomendo é que você peça ao administrador do seu domínio uma conta de serviço que possa ser usada aqui. Não use sua própria conta, pois as alterações de senha e isso farão com que seu serviço seja interrompido.

Na caixa de diálogo Adicionar, existe um botão Locais ... . Clique nele e certifique-se de que seu domínio esteja selecionado (se você estiver indo pelo caminho do domínio). Isso lhe dará acesso aos usuários do domínio.

Em ambos os casos (grupo de trabalho ou domínio), atualize sua conta de serviço em A que você está usando para usar essa conta, em vez de usar o sistema local.

Conceda à nova conta apenas as permissões necessárias para a guia Compartilhar e a Segurança (permissões NTFS). Eu não concedo a Everyone acesso ao Share nem ao NTFS, pois isso abre o seu computador para qualquer pessoa no domínio.

Observação: às vezes, é melhor testar usando o grupo Todos para remover permissões como um problema durante o teste, mas certifique-se de apertar a configuração final. Isso deve ser apenas temporário.

Atualização: Com base na discussão nos comentários, aqui está um exemplo de uma configuração do TeamCity baseada em uma configuração de trabalho minha.

<property name="source.root" value="D:\svn\trunk\admin"/>
<property name="staging.directory" value="\B\Shared.Folder.Name"/>
<property name="directory.to.upload" value="${source.root}\ControlPanel"/>

<target name="network.deploy">
<echo message="-------- NETWORK.DEPLOY ---------------"/>
    <copy todir="${staging.directory}" verbose="true">
        <fileset basedir="${directory.to.upload}">
            <include name="**/*"/>
            <exclude name="**/*.vb"/>
        </fileset>
    </copy>
</target>
    
por 25.06.2011 / 17:15
0

Você deve conseguir fazer isso criando o mesmo usuário local em cada sistema. Exatamente o mesmo nome de usuário, exatamente a mesma senha. Em seguida, execute seu serviço usando essas credenciais. Também defina as ACLs NTFS como você estava e forneça a conta local em cada acesso ao sistema, bem como nas permissões de compartilhamento.

    
por 22.06.2011 / 22:19