Acesse o Windows 10 Samba Share a partir da linha de comando do Linux com o mínimo de SMB2

Acesse o Windows 10 Samba Share a partir da linha de comando do Linux com o mínimo de SMB2

Ambiente:

  • Servidor Linux X86 com Debian 9.3

  • kernel: Debian 4.9.65-3+deb9u1

  • smbclient: Versão 4.5.12-Debian

  • cifs-utils: 2:6.7-1

Situação:

Backupserver ( backuppc) precisa fazer backup de um cliente Windows 10 Home.

Nenhum domínio

Alternativa:

Cygwin/Rsync usado para outros clientes Win7 rejeitados devido ao trabalho manual envolvido.

Pré-requisitos já conhecidos:

  • Entrada DNS para Win10Client: concluída, testada e funcionando

  • Entrada DHCP para Win10Client: concluída, testada e funcionando

  • SMB1 não é seguro, portanto não siga o "caminho mais fácil".

O smbclient suporta o protocolo SMB2/3, então eu não deveria ter que configurar o hack do registro smb1 para ativar o SMB1, por exemplo

Como verificar qual versão SMB está habilitada no Windows Server 2008 R2

Problemas:Não consigo montar o compartilhamento administrativo ou qualquer outro compartilhamento, nem os vejo comsmbtree -b -N

O que eu tentei:

  • Tentei usar o compartilhamento não administrativo (não $no final)

  • Renomeei o compartilhamento administrativo de C$para mC$ou mC.

  • Adicionado um compartilhamento de teste em documentos.

  • Adicionado um compartilhamento de teste emC:\test

Nenhum deles é visível via smbtree.

Conectando-se diretamente aos compartilhamentos (ou obtenha uma lista de compartilhamentos):

testado:

smbclient -U WIN10Username -L //CLIENT/
protocol negotiation failed: NT_STATUS_CONNECTION_RESET

smbclient -L //CLIENT/
protocol negotiation failed: NT_STATUS_CONNECTION_RESET

Como faço para que isso funcione com o protocolo SMB2 ou SMB3?

Responder1

A resposta ao tutorial inclui várias partes, pois a situação pode ser um pouco diferente dependendo do que você precisa.

Incluí tudo o que encontrei (ou acredito ter encontrado) por meio de várias pesquisas que me ajudaram a resolver meu problema direto.

O Debian 9 Stretch Kernel padrão não suporta SMB3

Acontece que meu kernel parece não suportar SMB3 diretamente

https://unix.stackexchange.com/questions/202961/mounting-smb3-share-with-encryption-fails-mount-error13-permission-denied-s/376166

Baseado emhttps://lists.debian.org/debian-kernel/2017/04/msg00266.html

pergunta:

Am 22.04.2017 um 17:21 schrieb Ben Hutchings:

On Sat, 2017-04-22 at 16:19 +0100, Ben Hutchings wrote:

    On Sat, 2017-04-22 at 14:47 +0200, [email protected] wrote:

        Hi!

        It´s not possible to mount a enrypted CIFS Share yet. is it possible
        to add the following Kernel changes to Debian 8?

    No, we don't backport big features like that.

Of course, if this feature is in Linux 4.9 (I don't know) then you have
the option to install the new kernel version from jessie-backports
(https://backports.debian.org/).

Ben.

Pela minha pesquisa, também não está nos backports extensos (cifs-utils para suportar a mudança do kernel de 4.11?)

https://packages.debian.org/stretch-backports/allpackages 

No entanto, não tenho certeza sobre a parte do backport, pois existem kernels mais recentes, mas no meu caso não atualizarei para o kernel do backport para esse recurso, então parei aqui.


smbtree precisa de mais parâmetros para funcionar com SMB3

Não ficou imediatamente claro para mim como fazer o smbtree funcionar com o SMB3 e, com o problema que descobri acima, abandonei completamente a ideia do SMB3.

https://www.samba.org/samba/docs/current/man-html/smbtree.1.html


smbclient não usa SMB2 ou SMB3 por padrão.

A versão padrão do protocolo smb para smbclient é

PME1

Isso não é compatível por padrão no Windows 10.

Se precisar disso para o seu caso de uso, você deverá adicionar a chave de registro correspondente:

HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters\SMB1 (Digite DWORD32, valor 1 para ativado, 0 para desativado)

Comandos do Powershell:

Detectar:

Get-Item HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters | ForEach-Object {Get-ItemProperty $_.pspath}

Habilitar:

Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" SMB1 -Type DWORD -Value 1 –Force

Desativar:

Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" SMB1 -Type DWORD -Value 0 –Force

Isto foi tirado dehttps://support.microsoft.com/en-us/help/2696547/how-to-detect-enable-and-disable-smbv1-smbv2-and-smbv3-in-windows-and

Talvez seja necessário alterar o nível de criptografia de compartilhamento de arquivos no Windows 10 para que o SMB1 funcione também:

como não testei isso diretamente, não sei se é realmente necessário:

veja por exemplo como fazer isso aqui:

https://www.tenforums.com/tutorials/51024-change-file-sharing-encryption-level-windows-10-a.html

Citação:

Para alterar o nível de criptografia de compartilhamento de arquivos na Central de Rede e Compartilhamento

  1. Abra o Painel de Controle e clique/toque no ícone Central de Rede e Compartilhamento.

  2. Clique/toque no link Alterar configurações de compartilhamento avançadas no lado esquerdo. (veja a captura de tela abaixo)

  3. Expanda o perfil de rede Todas as redes.

  4. Em Conexões de compartilhamento de arquivos, selecione "Ativar compartilhamento de arquivos para dispositivos que usam criptografia de 40 ou 56 bits"

Comandos de trabalho

Agora, para fazer as coisas funcionarem de verdade

Compartilhamento não administrativo:

alterando o comando smbclient

smbclient -U WIN10Username -L //Client/

para

smbclient -m SMB2 -U WIN10Username -L //Client/

permite visualizar os compartilhamentos desse cliente.

Como mountparam para console realmente acessá-lo:

mount -t cifs -o vers=2.0,username=WIN10Username,password=WIN10Password //CLIENTIP/TESTSHARE MOUNTPOINT

ou como entrada /etc/fstab (sem montagem automática na inicialização!)

 //CLIENTIP/TESTSHARE /MOUNTPOINT    cifs    vers=2.0,username=WIN10Username,password=WIN10Password 0 0

Compartilhamento Administrativo

Para o compartilhamento administrativo, você precisa fazer uma alteração adicional no registro (se não estiver em um domínio):

Comando Powershell:

Set-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\ -Name LocalAccountTokenFilterPolicy -Value 1 

retirado daqui:

Não é possível montar o compartilhamento do Windows no Ubuntu

basicamente o que ele faz é desabilitar o UAC para acesso e manutenção de compartilhamento remoto, então tome cuidado com isso.

Isso pode ajudar a entender melhor as implicações, então tenha certeza se você realmente deseja fazer isso:

https://www.harmj0y.net/blog/redteaming/pass-the-hash-is-dead-long-live-localaccounttokenfilterpolicy/

#note the \$ is actually needed!, i did read about Qouting the whole String "//CLIENTIP/C$" but i did not test that
mount -t cifs -o vers=2.0,username=WIN10Username,password=WIN10Password //CLIENTIP/C\$ MOUNTPOINT

Problemas de backuppc:

Você desejará outra conta específica para backuppc que precise ter permissões de leitura para o compartilhamento.

As opções padrão do backuppcs smbclient não incluem -m SMB2

O comando que backuppc usa é:

/usr/bin/smbclient \\\\CLIENT-NAME\\SHARENAME -U Win10Username -E -N -d 1 -c tarmode\ full -Tc -

mude isso para incluir -m SMB2

Depois disso ainda obtive NT_STATUS_ACCESS_DENIED:

session setup failed: NT_STATUS_ACCESS_DENIED
session setup failed: NT_STATUS_ACCESS_DENIED
tarExtract: Done: 0 errors, 0 filesExist, 0 sizeExist, 0 sizeExistComp, 0 filesTotal, 0 sizeTotal

fazendo isso manualmente com a senha adicionada após o -U

/usr/bin/smbclient -m SMB2 \\\\CLIENT-NAME\\SHARENAME -U Win10Username WIN10Password -E -N -d 1 -c tarmode\ full -Tc -

funciona

remover o -N me mostra a senha com a qual ele funciona também.

Como não queria armazená-lo em um arquivo de configuração do backuppc, na versão final usarei o método de credencial.

Depois de tentar descobrir qual era a diferença entre o comando backuppc e o comando smbclient manualmente, descobri que isso -Nresulta em um comportamento diferente durante a conexão.

solução funcional sem -N (com nome de usuário, senha ou arquivo de credencial, não importava. O compartilhamento não administrativo ou administrativo também não mudou nada)

/usr/bin/smbclient -m SMB2 \\\\CLIENTNAME\\test3 -U WIN10Username WIN10Password -E -d 5 -c tarmode\ full -Tc -
/usr/bin/smbclient -m SMB2 \\\\CLIENTNAME\\test3 -A /etc/samba/smb.cred -E -d 5 -c tarmode\ full -Tc -


cut
...
NTLMSSP Sign/Seal - Initialising with flags:
Got NTLMSSP neg_flags=0x62088215
NTLMSSP_NEGOTIATE_UNICODE
NTLMSSP_REQUEST_TARGET
NTLMSSP_NEGOTIATE_SIGN
NTLMSSP_NEGOTIATE_NTLM
NTLMSSP_NEGOTIATE_ALWAYS_SIGN
NTLMSSP_NEGOTIATE_EXTENDED_SESSIONSECURITY
NTLMSSP_NEGOTIATE_VERSION
NTLMSSP_NEGOTIATE_128
NTLMSSP_NEGOTIATE_KEY_EXCH
NTLMSSP Sign/Seal - Initialising with flags:
Got NTLMSSP neg_flags=0x62088215
NTLMSSP_NEGOTIATE_UNICODE
NTLMSSP_REQUEST_TARGET
NTLMSSP_NEGOTIATE_SIGN
NTLMSSP_NEGOTIATE_NTLM
NTLMSSP_NEGOTIATE_ALWAYS_SIGN
NTLMSSP_NEGOTIATE_EXTENDED_SESSIONSECURITY
NTLMSSP_NEGOTIATE_VERSION
NTLMSSP_NEGOTIATE_128
NTLMSSP_NEGOTIATE_KEY_EXCH

Domínio=[CLIENTNAME] SO=[] Servidor=[] ... cortar

Versão não funcional com -N:

/usr/bin/smbclient -m SMB2 \\\\CLIENTNAME\\test3 -U WIN10Username WIN10Password -N -E -d 5 -c tarmode\ full -Tc -
/usr/bin/smbclient -m SMB2 \\\\CLIENTNAME\\test3 -A /etc/samba/smb.cred -N -E -d 5 -c tarmode\ full -Tc -


cut
...
NTLMSSP Sign/Seal - Initialising with flags:
Got NTLMSSP neg_flags=0x62088215
NTLMSSP_NEGOTIATE_UNICODE
NTLMSSP_REQUEST_TARGET
NTLMSSP_NEGOTIATE_SIGN
NTLMSSP_NEGOTIATE_NTLM
NTLMSSP_NEGOTIATE_ALWAYS_SIGN
NTLMSSP_NEGOTIATE_EXTENDED_SESSIONSECURITY
NTLMSSP_NEGOTIATE_VERSION
NTLMSSP_NEGOTIATE_128
NTLMSSP_NEGOTIATE_KEY_EXCH
SPNEGO login failed: Logon failure
...
cut
...
SPNEGO login failed: Access denied
session setup failed: NT_STATUS_ACCESS_DENIED

Solução de trabalho do cliente Backuppc Win10

Dadas todas as informações acima, posso fazer backup do compartilhamento administrativo do Win10 com as seguintes opções de backuppc:

SmbClientFullCmd:

Codificado:

$smbClientPath -m SMB2 \\$host\$shareName $I_option -U $userName WIN10Password -E -d 5 -c tarmode\ full -Tc$X_option - $fileList

I was unable to use the Password in SmbSharePasswd, but as this wasn't the desired output i did not dig deeper if i made an possible error here.

Arquivo de crédito:

$smbClientPath -m SMB2 \\$host\$shareName $I_option -A /PATH/samb_creditfile -E -d 5 -c tarmode\ full -Tc$X_option - $fileList


Remember you need permissions for the backuppc user on that file.

informação relacionada