Passando nome de usuário e senha UNC dentro de um caminho UNC


23

É possível passar o nome de usuário e a senha UNC em um caminho UNC?

Semelhante a como o FTP e o SMB suportam isso:

smb://user:pass@destination.com/share
ftp://user:pass@destination.com/share

Estou tentando obter um serviço (PC sem domínio) para acessar um caminho DFS.

Existe outra maneira de contornar isso? Eu poderia ligar o PC ao domínio e executar o serviço como um usuário do domínio, mas e se eu estivesse usando o Linux?

Respostas:


20

No Windows, você não pode colocar credenciais nos caminhos UNC. Você deve fornecê-los usando net use, runas /netonlyou quando solicitado pelo Windows. (Se você possui algum conhecimento em programação, pode armazenar a senha SMB como uma "credencial de domínio" usando CredWrite(), o que equivale a marcar a caixa "Lembrar senha" no Windows.)

No Linux, isso depende do programa.

  • Os Gvfs do GNOME aceitam a user@hostsintaxe, mas parecem ignorar completamente a senha. (No entanto, você pode armazená-lo no GNOME Keyring de antemão.)

  • smbclientusa a mesma sintaxe UNC do Windows; no entanto, ele tem uma --authentication-fileopção na qual as credenciais podem ser lidas.

  • Ambos os programas acima estão usando libsmbclient e podem usar autenticação Kerberos em vez de senhas: execute kinit user@YOUR.DOMAINe use smbclient -k //host/share. Isso é mais seguro que a autenticação por senha.

Observe que a inserção de senhas em URIs foi descontinuada e você não deve confiar em que seja suportado em qualquer lugar .


Você tem uma referência em relação a "colocar senhas nos URIs está obsoleto"?
Alexis Wilke

2
O @AlexisWilke RFC 1738 § 3.3 começou por não permitir no HTTP, o RFC 2396 § 3.2.2 tinha um "geral não recomendado" mais geral, e o RFC 3986 § 3.2.1 diz "Uso do formato" user: password "no userinfo campo está obsoleto ".
grawity

14

Você pode mapear uma "unidade" para o caminho UNC usando net use. Acessos futuros devem compartilhar a conexão existente

Net Use \\yourUNC\path /user:uname password

Nota: você não precisa especificar uma letra de unidade


1

Eu acho que o nome de usuário e a senha precisam ser passados ​​para o servidor para autenticação antes que qualquer acesso ao arquivo possa ser feito; portanto, o código que manipula a conexão SMB precisa analisar e extrair o nome de usuário e a senha da URL. Você precisará verificar se esse código suporta ou não esse formato.

Caso contrário, você pode montar esse compartilhamento SMB através do SAMBA e direcionar seu programa para usar esse caminho "local". Você pode colocar a montagem fstabe usar um arquivo de senha SAMBA para fornecer as credenciais do usuário. Lembre-se de definir as permissões corretas para o arquivo de senha, para que os usuários normais não possam lê-lo.

Observe que é uma prática recomendada armazenar senhas em texto não criptografado nos arquivos de configuração; portanto, mesmo que seu programa possa manipular a senha na URL, considere o método de compartilhamento montado.


Não fstabé um "arquivo de configuração de texto não criptografado"?
grawity

1
Sim, mas no fstab você se refere ao arquivo de senha em vez de incluir a senha diretamente. Em seguida, você pode proteger o arquivo de senhas, alterando o proprietário a raiz eo modo a 400.
billc.cn

Ainda é um arquivo de configuração de texto não criptografado. Qualquer pessoa com acesso físico à máquina pode ter permissões de root via reinicialização. Ambientes de desktop como XFCE, KDE e Gnome podem armazenar credenciais em um cofre de senhas, o que provavelmente é a melhor opção.
bobpaul

0

Você pode adicionar as credenciais no Painel de controle / Usuários / Gerenciador de credenciais do Windows para que as credenciais sejam armazenadas em cache. Você adicionaria o nome do dispositivo (server.domain.local) com o nome de usuário / senha do domínio, para poder acessar o compartilhamento sem fornecer as credenciais novamente.


0

Um PC que não seja de domínio não deve se importar com o DFS do qual não se inscreve ou participa diretamente. Ele só precisa ver um caminho de compartilhamento (servidor ou nome do compartilhamento). Os nomes de nomes removem todas as considerações sobre o caminho do servidor de arquivos host.

Honestamente, existem maneiras mais seguras de efetuar logon em compartilhamentos do que o UNC URI. UNC e URI são eles próprios um protocolo de comunicação de texto não criptografado.
Se essa é uma segurança aceitável ... por que não apenas ter um compartilhamento aberto sem nenhum usuário ou senha?

A solução imediata mais simples seria fornecer às credenciais de serviço acesso direto ao logon no compartilhamento (por exemplo, usuário / senha correspondente). A longo prazo, essa correspondência não tão óbvia pode dificultar a atualização de permissões sempre que as coisas mudam. E também é uma área em que a MS pode mudar a maneira como a segurança passa credenciais novamente e quebrar as coisas.

A longo prazo, a melhor coisa simples é provavelmente mapear permanentemente uma letra de unidade local para o compartilhamento de rede. Proteja a unidade mapeada com permissões apenas para o serviço (e administradores apropriados, etc), além de que sharename pode estar oculto nos principais &.

Mas o DFS fornece uma pista para uma solução mais elegante. O Linux exige que os compartilhamentos de rede sejam montados primeiro ... geralmente como um diretório no sistema de arquivos raiz, de maneira muito parecida com o DFS. O comando mount do Linux permite especificar um arquivo de credenciais para nome de usuário e senha, facilitando a atualização e a segurança do script de linha de comando ou fstab (por exemplo, tabela do sistema de arquivos). Tenho certeza de que os shells de comando do Windows e o DFS podem fazer a mesma coisa (já faz um tempo). Seria apenas um sistema DFS diferente, privado para o PC de destino, incorporar compartilhamentos de rede montados usando credenciais armazenadas passadas por serviços SMB e logon, em vez de codificados em script e enviados como UNC em texto não criptografado.

Considere também se esse PC sem domínio continuará sendo um PC sem domínio a longo prazo. Os servidores de logon Kerberos no * NIX Realms podem ser vinculados aos domínios do Windows AD. Provavelmente o que você deseja fazer para qualquer projeto sério de longo prazo que envolva mais do que algumas pessoas. Por outro lado, provavelmente é um exagero para a maioria das situações da rede doméstica. Embora se você estiver usando o DFS por qualquer outro motivo que não seja o auto-desafio amador, provavelmente é o melhor.


0

A resposta de armazenamento de credenciais de Matt é a mais elegante para um PC Windows moderno. Embora não declarado, o armazenamento de credenciais usado deve ser para a conta de serviço. Isso é para garantir a disponibilidade do serviço e para que outros usuários que você não deseje acessar esse compartilhamento não possam (por exemplo, lembre-se de limpar credenciais erradas adicionadas sob conta incorreta).

Mas se o seu legado Windows ou Linux, talvez você precise ir um pouco mais longe.

Um PC que não seja de domínio não deve se importar com o DFS do qual não se inscreve ou participa diretamente. Ele só precisa ver um caminho de compartilhamento (servidor ou nome do compartilhamento). Os nomes de nomes removem todas as considerações sobre o caminho do servidor de arquivos host.

Honestamente, existem maneiras mais seguras de efetuar logon em compartilhamentos do que o UNC URI. UNC e URI são eles próprios um protocolo de comunicação de texto não criptografado.
Se essa é uma segurança aceitável ... por que não apenas ter um compartilhamento aberto sem nenhum usuário ou senha?

A solução imediata mais simples seria fornecer às credenciais de serviço acesso direto ao logon no compartilhamento (por exemplo, usuário / senha correspondente). A longo prazo, essa correspondência não tão óbvia pode dificultar a atualização de permissões sempre que as coisas mudam. E também é uma área em que a MS pode mudar a maneira como a segurança passa credenciais novamente e quebrar as coisas.

A longo prazo, a melhor coisa simples é provavelmente mapear permanentemente uma letra de unidade local para o compartilhamento de rede. Proteja a unidade mapeada com permissões apenas para o serviço (e administradores apropriados, etc), além de que sharename pode estar oculto nos principais &.

Mas o DFS fornece uma pista para uma solução mais elegante. O Linux exige que os compartilhamentos de rede sejam montados primeiro ... geralmente como um diretório no sistema de arquivos raiz, de maneira muito parecida com o DFS. O comando mount do Linux permite especificar um arquivo de credenciais para nome de usuário e senha, facilitando a atualização e a segurança do script de linha de comando ou fstab (por exemplo, tabela do sistema de arquivos). Tenho certeza de que os shells de comando do Windows e o DFS podem fazer a mesma coisa (já faz um tempo). Seria apenas um sistema DFS diferente, privado para o PC de destino, incorporar compartilhamentos de rede montados usando credenciais armazenadas passadas por serviços SMB e logon, em vez de codificados em script e enviados como UNC em texto não criptografado.

Considere também se esse PC sem domínio continuará sendo um PC sem domínio a longo prazo. Os servidores de logon Kerberos no * NIX Realms podem ser vinculados aos domínios do Windows AD. Provavelmente o que você deseja fazer para qualquer projeto sério de longo prazo que envolva mais do que algumas pessoas. Por outro lado, provavelmente é um exagero para a maioria das situações da rede doméstica. Embora se você estiver usando o DFS por qualquer outro motivo que não seja o auto-desafio amador, provavelmente é o melhor.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.