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

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

Bei Verwendung von wird ein Fehler mount -t cifs -v <address>zurückgegeben Host is Down, wenn eine Verbindung zu einem Server hergestellt wird, auf dem SMB 2.0 ausgeführt wird (und SMB 1.0 deaktiviert ist). Eine Problemumgehung besteht darin, vers=2.0die Argumentliste von anzugeben mount. Dies funktioniert einwandfrei, wenn Sie über die Befehlszeile mounten und die Möglichkeit haben, dieses Argument anzugeben. 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+ als Standard für alle Anrufe festzulegen mount -t cifs, unabhängig davon, wer anruft? Vielleicht in smb.conf?

Derzeit wird Arch Linux ausgeführt.

BEARBEITEN:Dem Dienst hinzugefügt und neu gestartet. min protocol = SMB2Für beide ist weiterhin die Angabe der SMB-Version vor der Verbindung mit dem Server erforderlich./etc/samba/smb.confmountsmbclient

EDIT2: Durch das Hinzufügen von client min protocol = SMB2und client max protocol = SMB3kann smbclienteine Verbindung zum Server hergestellt werden, ohne dass das Versionsargument angegeben werden muss. mountDie neu hinzugefügten Zeilen in werden jedoch weiterhin nicht berücksichtigt smb.conf.

Antwort1

cifsLeider kann das Dateisystemmodul des Kernels /etc/samba/smb.confüberhaupt nicht gelesen werden. Das CIFS-Clientmodul, das das Mounten von Windows-Dateifreigaben ermöglicht, ist vollständig von Samba getrennt.

Die Standardprotokollebene im cifsModul wurde im Vanilla-Kernel, Version 4.13, auf SMB3 geändert und im September 2017 wurde den Vanilla-Kerneln ein Patch zur Verhandlung mehrerer Dialekte hinzugefügt (der den Standard effektiv auf „SMB2.1 oder höher“ setzt).

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

Hier ist ein Link zum entsprechenden Patch im Git von kernel.org.Die Commit-ID kann beim Verfolgen des Patches in bestimmten Kernelversionen hilfreich sein.

Antwort2

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

verwandte Informationen