Acceda a Windows 10 Samba Share desde la línea de comandos de Linux con un SMB2 mínimo

Acceda a Windows 10 Samba Share desde la línea de comandos de Linux con un SMB2 mínimo

Ambiente:

  • Servidor Linux X86 con Debian 9.3

  • núcleo: Debian 4.9.65-3+deb9u1

  • smbclient: Versión 4.5.12-Debian

  • cifs-utils: 2:6.7-1

Situación:

Backupserver ( backuppc) tiene que hacer una copia de seguridad de un cliente de Windows 10 Home.

Sin dominio

Alternativa:

Cygwin/Rsync utilizado para otros clientes Win7 rechazados debido al trabajo manual involucrado.

Requisitos previos conocidos ya:

  • Entrada DNS para Win10Client: lista, probada y funcionando

  • Entrada DHCP para Win10Client: listo, probado y funcionando

  • SMB1 no es seguro, así que no siga el "camino fácil".

El cliente smb es compatible con el protocolo SMB2/3, por lo que no debería tener que configurar el truco del registro smb1 para habilitar SMB1 desde, por ejemplo,

Cómo comprobar qué versión SMB está habilitada en Windows Server 2008 R2

Problemas:No puedo montar el share administrativo o cualquier otro, ni los veo consmbtree -b -N

Lo que he probado:

  • Intenté utilizar el recurso compartido no administrativo (no $al final)

  • Cambié el nombre del recurso compartido administrativo de C$a mC$o mC.

  • Se agregó un recurso compartido de prueba en los documentos.

  • Se agregó un recurso compartido de prueba enC:\test

Ninguno de ellos es visible a través de smbtree.

Conexión directa a las acciones (u obtener una lista de acciones):

probado:

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

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

¿Cómo hago para que esto funcione con el protocolo SMB2 o SMB3?

Respuesta1

La respuesta al procedimiento incluye varias partes, ya que la situación puede ser un poco diferente según lo que necesite.

Incluí todo lo que encontré (o creo haber encontrado) a través de las diversas búsquedas que me ayudaron a solucionar mi problema directo.

El Debian 9 Stretch Kernel predeterminado no es compatible con SMB3

Resulta que mi kernel parece no soportar SMB3 directamente

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

Residencia enhttps://lists.debian.org/debian-kernel/2017/04/msg00266.html

cita:

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.

Según mi investigación, tampoco está en los backports extendidos (¿cifs-utils para admitir el cambio de kernel desde 4.11?)

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

Sin embargo, no estoy seguro de la parte del backport ya que hay kernels más nuevos, pero en mi caso no actualizaré al kernel del backport para esta función, así que me detuve aquí.


smbtree necesita más parámetros para funcionar con SMB3

No me quedó claro de inmediato cómo hacer que smbtree funcione con SMB3, y con el problema que descubrí anteriormente, abandoné la idea de SMB3 por completo.

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


smbclient no utiliza SMB2 o SMB3 de forma predeterminada.

La versión predeterminada del protocolo smb para smbclient es

SMB1

Esto no es compatible de forma predeterminada en Windows 10.

Si necesita esto para su caso de uso, debe agregar la clave de registro correspondiente:

HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters\SMB1 (Escriba DWORD32, valor 1 para activado, 0 para desactivado)

Comandos de Powershell:

Detectar:

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

Permitir:

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

Desactivar:

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

Esto fue tomado dehttps://support.microsoft.com/en-us/help/2696547/how-to-detect-enable-and-disable-smbv1-smbv2-and-smbv3-in-windows-and

Es posible que tengas que cambiar el nivel de cifrado para compartir archivos en Windows 10 para que SMB1 también funcione:

Como no probé esto directamente, no sé si realmente es necesario:

vea, por ejemplo, cómo hacer esto desde aquí:

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

Cita:

Para cambiar el nivel de cifrado de archivos compartidos en el Centro de redes y recursos compartidos

  1. Abra el Panel de control y haga clic/toque el ícono del Centro de redes y recursos compartidos.

  2. Haga clic/toque el enlace Cambiar configuración avanzada de uso compartido en el lado izquierdo. (ver captura de pantalla a continuación)

  3. Expanda el perfil de red Todas las redes.

  4. En Conexiones para compartir archivos, seleccione "Habilitar el uso compartido de archivos para dispositivos que usan cifrado de 40 o 56 bits".

Comandos de trabajo

Ahora para que las cosas funcionen

Participación no administrativa:

cambiando el comando smbclient

smbclient -U WIN10Username -L //Client/

a

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

le permite ver las acciones de ese cliente.

Como parámetro de montaje para que la consola acceda a él:

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

o como entrada /etc/fstab (¡sin montaje automático al arrancar!)

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

Compartir administrativo

Para el recurso compartido administrativo tienes que hacer un cambio de registro adicional (si no estás en un dominio):

Comando de PowerShell:

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

tomado de aquí:

No se puede montar el recurso compartido de Windows en Ubuntu

Básicamente lo que hace es deshabilitar el UAC para el acceso y mantenimiento remoto de recursos compartidos, así que tenga cuidado.

Esto podría ayudar a comprender mejor las implicaciones, así que asegúrese de si realmente desea hacer esto:

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 con la copia de seguridad:

Querrá otra cuenta específica para backuppc que debe tener permisos de lectura para el recurso compartido.

Las opciones predeterminadas de backuppcs smbclient no incluyen -m SMB2

El comando que utiliza backuppc es:

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

cambie eso para incluir -m SMB2

Después de eso todavía tengo 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

hacerlo manualmente con la contraseña agregada después de -U

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

obras

eliminar -N también me solicita la contraseña con la que funciona.

Como no quería almacenarlo dentro de un archivo de configuración de backuppc, en la versión final usaré el método de credencial.

Después de intentar descubrir cuál era la diferencia entre el comando backuppc y el comando smbclient manualmente, descubrí que el -Nresultado es un comportamiento diferente durante la conexión.

solución de trabajo sin -N (con nombre de usuario, contraseña o archivo de credenciales, no importó. El recurso compartido administrativo o no administrativo tampoco cambió 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

Dominio=[NOMBRE DEL CLIENTE] SO=[] Servidor=[] ... cortar

Versión que no funciona con -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

Solución de trabajo del cliente Backuppc Win10

Dada toda la información anterior, puedo hacer una copia de seguridad del recurso compartido administrativo de Win10 con las siguientes opciones de copia de seguridad:

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.

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

información relacionada