Festlegen von SMB 2.0 als Standard für Mount-Vorgänge

7

Verwenden einer fehlerhaften mount -t cifs -v <address>Rückgabe beim Host is DownHerstellen einer Verbindung zu einem Server mit SMB 2.0 (mit deaktiviertem SMB 1.0). Eine Problemumgehung besteht darin, vers=2.0die Argumentliste von anzugeben mount. Dies funktioniert einwandfrei, wenn Sie über die Befehlszeile mounten und dieses Argument angeben können. Wenn Sie jedoch eine GUI oder ein Programm verwenden, das mountin Ihrem Namen aufruft , wird dieses Argument nicht angegeben.

Gibt es eine Möglichkeit, SMB 2.0+ zum Standard für alle mount -t cifsAnrufe zu machen, unabhängig davon, welche Anrufe es tätigen? Vielleicht in smb.conf?

Derzeit läuft Arch Linux.

EDIT: Hinzugefügt min protocol = SMB2zu /etc/samba/smb.confund der Dienst neu gestartet. Für beide mountund smbclientnoch muss die SMB-Version angegeben werden, bevor eine Verbindung zum Server hergestellt wird.

EDIT2: Hinzufügen client min protocol = SMB2und client max protocol = SMB3Ermöglichen smbclienteiner Verbindung zum Server ohne Angabe des Versionsarguments. Aber mountrespektiert immer noch nicht die neu hinzugefügten Zeilen in smb.conf.

MarkP
quelle

Antworten:

3

Leider cifsliest das Dateisystemmodul des Kernels überhaupt nicht /etc/samba/smb.conf. Das CIFS-Clientmodul, mit dem Windows-Dateifreigaben bereitgestellt werden können, ist vollständig von Samba getrennt.

Die Standardprotokollebene im cifsModul wurde in Vanilla-Kernel-Version 4.13 in SMB3 geändert, und im September 2017 wurde den Vanilla-Kerneln ein Multi-Dialect-Verhandlungs-Patch hinzugefügt (wobei der Standard effektiv auf "SMB2.1 oder höher" gesetzt wurde).

Ich bin mir ziemlich sicher, dass die Linux-Distributionen "Enterprise" den Patch auf frühere Kernel zurückportiert haben, aber unter Arch besteht Ihre einzige Option möglicherweise darin, auf Kernel Version 4.13 oder höher zu aktualisieren.

Hier ist ein Link zum entsprechenden Patch in kernel.org Git. Die Commit-ID kann hilfreich sein, um den Patch in bestimmten Kernelversionen zu verfolgen.

telcoM
quelle
Danke dafür. Ich nehme nicht an, dass Sie wissen, ob es in den letzten Debian-Kerneln enthalten ist, oder?
Roaima
1
Debian 9 (der aktuelle Stall) befindet sich im Kernel 4.9.88-1 + deb9u1 (obwohl benannt linux-image-4.9.0-6-amd64), und leider ist der einzige CIFS-Patch, den es zu haben scheint, für CVE-2018-1066. Debian-Tests haben Kernel 4.16. *, Daher hat es den Patch bereits über Upstream.
TelcoM
0

Im Rahmen der Untersuchung dieses Problems habe ich ein Skript geschrieben, das die CIFS-Parameter für den mountBefehl anpasst .

#!/bin/bash
#
# Force SMB2.0 mount. We prefix the options list because a later explicit
# "vers=..." option overrides the one we add.
########################################################################
#
args=()

# Only consider checking options if we have a CIFS mount
[[ "$*" =~ '-t cifs' ]] && cifs=yes || cifs=

options=
for arg in "$@"
do
    if [[ $next == 'options' ]]
    then
        # Prefix version to options string
        arg="vers=2.0,$arg"
        next=
    fi

    args+=("$arg")

    # CIFS options check
    if [[ $cifs == 'yes' ]]
    then
        [[ $arg == '-o' ]] && next=options
    fi
done

logger -p user.notice -t "${0/*\/}" "intercepted $0 ${args[*]}"
exec "$0.real" "${args[@]}"

Installieren Sie dieses Skript als /bin/mount.sh. Führen Sie dann diese Befehle aus

chmod a+x /bin/mount.sh
mv /bin/mount /bin/mount.real && ln -fs mount.sh /bin/mount

Deinstallieren Sie es mit

test -L /bin/mount && rm -f /bin/mount && mv -f /bin/mount.real /bin/mount
rm -f /bin/mount.sh
Roaima
quelle