Configuración de SMB 2.0 como predeterminado para operaciones de montaje

Configuración de SMB 2.0 como predeterminado para operaciones de montaje

El uso de mount -t cifs -v <address>a devuelve un Host is Downerror al conectarse a un servidor que ejecuta SMB 2.0 (con SMB 1.0 deshabilitado). Una solución alternativa es especificar vers=2.0en la lista de argumentos de mount. Esto funciona bien si está montando mediante la línea de comando y tiene la capacidad de especificar este argumento. Pero, cuando se utiliza una GUI o algún programa que llama mounten su nombre, este argumento no se especifica.

¿Hay alguna manera de hacer que SMB 2.0+ sea el predeterminado para todas mount -t cifslas llamadas, independientemente de cómo lo llame? ¿Quizás en smb.conf?

Actualmente ejecuta Arch Linux.

EDITAR: Agregado min protocol = SMB2y /etc/samba/smb.confreiniciado el servicio. Ambos mounty smbclientaún requieren que se especifique la versión SMB antes de conectarse al servidor.

EDITAR2: Agregar client min protocol = SMB2y client max protocol = SMB3permite smbclientconectarse al servidor sin especificar el argumento de versión. Pero mounttodavía no respeta las líneas recién agregadas en smb.conf.

Respuesta1

Desafortunadamente, el módulo del sistema de archivos del kernel cifsno lee /etc/samba/smb.confnada. El módulo de cliente CIFS que permite el montaje de archivos compartidos de Windows está completamente separado de Samba.

El nivel de protocolo predeterminado en el cifsmódulo se cambió a SMB3 en la versión 4.13 del kernel básico, y en septiembre de 2017 se agregó un parche de negociación multidialecto (estableciendo efectivamente el valor predeterminado en "SMB2.1 o posterior") a los kernels básicos.

Estoy bastante seguro de que las distribuciones "empresariales" de Linux han adaptado el parche a kernels anteriores, pero en Arch su única opción puede ser actualizar a la versión 4.13 o posterior del kernel.

Aquí hay un enlace al parche relevante en kernel.org Git.El ID de confirmación puede resultar útil para realizar un seguimiento del parche en versiones específicas del kernel.

Respuesta2

Como parte de la investigación de este problema, escribí un script que ajusta los parámetros CIFS para el mountcomando.

#!/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[@]}"

Instale este script como /bin/mount.sh. Luego ejecuta estos comandos

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

Desinstalarlo con

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

información relacionada