Zugriff auf Windows 10 Samba Share von der Linux-Befehlszeile mit minimalem SMB2

Zugriff auf Windows 10 Samba Share von der Linux-Befehlszeile mit minimalem SMB2

Umfeld:

  • Linux X86-Server mit Debian 9.3

  • Kernel: Debian 4.9.65-3+deb9u1

  • smbclient: Version 4.5.12-Debian

  • cifs-Dienstprogramme: 2:6.7-1

Situation:

Der Backupserver ( backuppc) soll ein Windows 10 Home Client sichern.

Keine Domäne

Alternative:

Für andere Win7-Clients verwendetes Cygwin/Rsync wurde aufgrund des erforderlichen manuellen Arbeitsaufwands abgelehnt.

Bereits bekannte Voraussetzungen:

  • DNS-Eintrag für Win10Client: erledigt, getestet und funktioniert

  • DHCP-Eintrag für Win10Client: erledigt, getestet und funktioniert

  • SMB1 ist unsicher, gehen Sie also nicht den „einfachen Weg“.

Der smbclient unterstützt das SMB2/3-Protokoll, daher muss ich den smb1-Registrierungs-Hack nicht ausführen, um SMB1 beispielsweise zu aktivieren.

So überprüfen Sie, welche SMB-Version unter Windows Server 2008 R2 aktiviert ist

Symptome:Ich kann weder die administrative noch eine andere Freigabe mounten, noch sehe ich sie mitsmbtree -b -N

Was ich versucht habe:

  • Ich habe versucht, die nicht-administrative Freigabe zu verwenden (Nein $am Ende)

  • Ich habe die administrative Freigabe von C$in mC$oder umbenannt mC.

  • Eine Testfreigabe in Dokumenten wurde hinzugefügt.

  • Eine Testfreigabe hinzugefügt inC:\test

Keines davon ist über sichtbar smbtree.

Direkte Verbindung zu den Freigaben herstellen (oder eine Liste der Freigaben abrufen):

geprüft:

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

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

Wie bekomme ich dies mit dem SMB2- oder SMB3-Protokoll zum Laufen?

Antwort1

Die Antwort auf die Frage „Wie geht das?“ besteht aus mehreren Teilen, da die Situation je nach Ihren Anforderungen etwas unterschiedlich sein kann.

Ich habe alles einbezogen, was ich bei den verschiedenen Suchvorgängen gefunden habe (oder zu finden glaubte) und was mir bei der Lösung meines unmittelbaren Problems geholfen hat.

Der standardmäßige Debian 9 Stretch Kernel unterstützt SMB3 nicht

Es stellte sich heraus, dass mein Kernel SMB3 nicht direkt unterstützt

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

Bezogen aufhttps://lists.debian.org/debian-kernel/2017/04/msg00266.html

Zitat:

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.

Meiner Recherche nach ist es auch nicht in den Stretch-Backports enthalten (CIFS-Utils zur Unterstützung der Kerneländerung von 4.11?)

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

Beim Backport-Teil bin ich mir jedoch nicht sicher, da es neuere Kernel gibt, ich in meinem Fall jedoch für diese Funktion nicht auf den Backport-Kernel aktualisieren werde und deshalb hier aufgehört habe.


smbtree benötigt mehr Parameter, um mit SMB3 zu funktionieren

Mir war nicht sofort klar, wie ich smbtree mit SMB3 zum Laufen bekomme, und aufgrund des Problems, das ich oben herausgefunden zu haben glaubte, habe ich die Idee mit SMB3 ganz verworfen.

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


smbclient verwendet standardmäßig weder SMB2 noch SMB3.

Die Standardversion des SMB-Protokolls für smbclient ist

SMB1

Dies wird in Windows 10 standardmäßig nicht unterstützt.

Wenn Sie dies für Ihren Anwendungsfall benötigen, müssen Sie den entsprechenden Registrierungsschlüssel hinzufügen:

HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters\SMB1 (Typ DWORD32, Wert 1 für ein, 0 für aus)

Powershell-Befehl(e):

Erkennen:

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

Aktivieren:

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

Deaktivieren:

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

Dies stammt aushttps://support.microsoft.com/en-us/help/2696547/how-to-detect-enable-and-disable-smbv1-smbv2-and-smbv3-in-windows-and

Möglicherweise müssen Sie die Verschlüsselungsstufe für die Dateifreigabe in Windows 10 ändern, damit auch SMB1 funktioniert:

da ich das nicht direkt getestet habe, weiß ich nicht, ob es wirklich nötig ist:

Hier erfahren Sie beispielsweise, wie das geht:

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

Zitat:

So ändern Sie die Verschlüsselungsstufe für die Dateifreigabe im Netzwerk- und Freigabecenter

  1. Öffnen Sie die Systemsteuerung und klicken/tippen Sie auf das Symbol „Netzwerk- und Freigabecenter“.

  2. Klicken/tippen Sie auf den Link „Erweiterte Freigabeeinstellungen ändern“ auf der linken Seite. (siehe Screenshot unten)

  3. Erweitern Sie das Netzwerkprofil „Alle Netzwerke“.

  4. Wählen Sie unter „Dateifreigabeverbindungen“ die Option „Dateifreigabe für Geräte aktivieren, die 40- oder 56-Bit-Verschlüsselung verwenden“ aus.

Arbeitsbefehle

Jetzt müssen wir die Dinge tatsächlich zum Laufen bringen

Nicht-administrative Freigabe:

Ändern des smbclient-Befehls

smbclient -U WIN10Username -L //Client/

Zu

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

ermöglicht Ihnen, die Freigaben dieses Clients anzuzeigen.

Als Mountparam für die Konsole, um tatsächlich darauf zuzugreifen:

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

oder als /etc/fstab-Eintrag (kein Automount beim Booten!)

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

Administrative Freigabe

Für die administrative Freigabe müssen Sie eine zusätzliche Registrierungsänderung durchführen (wenn Sie sich nicht in einer Domäne befinden):

Powershell-Befehl:

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

entnommen von hier:

Windows-Freigabe kann in Ubuntu nicht gemountet werden.

Im Grunde genommen wird damit die Benutzerkontensteuerung für den Remotezugriff auf Freigaben und die Remotewartung deaktiviert. Gehen Sie also vorsichtig damit um.

Dies hilft Ihnen möglicherweise, die Auswirkungen besser zu verstehen. Überlegen Sie sich also gut, ob Sie dies wirklich tun möchten:

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

Probleme mit Backuppc:

Sie benötigen ein weiteres Konto speziell für BackupPC, das über Leseberechtigungen für die Freigabe verfügen muss.

Die Standardoptionen von backuppcs smbclient umfassen nicht -m SMB2

Der von Backuppc verwendete Befehl lautet:

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

ändern Sie dies, um -m SMB2 einzuschließen

Danach bekam ich immer noch 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

Durch manuelles Ausführen mit einem nach dem -U hinzugefügten Passwort

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

Werke

durch das Entfernen von -N werde ich nach dem Passwort gefragt, mit dem es auch funktioniert.

Da ich es nicht in einer Konfigurationsdatei von BackupPC speichern wollte, werde ich in der endgültigen Version die Anmeldeinformationsmethode verwenden.

Nachdem ich versucht hatte, den Unterschied zwischen den Befehlen „BackupPC“ und „Smbclient“ manuell herauszufinden, stellte ich fest, dass dies -Nzu unterschiedlichem Verhalten während der Verbindung führt.

funktionierende Lösung ohne -N (mit Benutzername, Passwort oder Credential-Datei, war egal. Nicht-administrative oder administrative Freigabe hat auch nichts geändert)

/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äne=[CLIENTNAME] OS=[] Server=[] ... ausschneiden

Nicht funktionierende Version mit -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

Funktionierende Backuppc Win10-Client-Lösung

Angesichts aller oben genannten Informationen kann ich die Win10-Administratorfreigabe mit den folgenden BackupPC-Optionen sichern:

SmbClientFullCmd:

Fest codiert:

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

Anmeldedatei:

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

verwandte Informationen