El uso de mount -t cifs -v <address>
a devuelve un Host is Down
error al conectarse a un servidor que ejecuta SMB 2.0 (con SMB 1.0 deshabilitado). Una solución alternativa es especificar vers=2.0
en 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 mount
en su nombre, este argumento no se especifica.
¿Hay alguna manera de hacer que SMB 2.0+ sea el predeterminado para todas mount -t cifs
las llamadas, independientemente de cómo lo llame? ¿Quizás en smb.conf
?
Actualmente ejecuta Arch Linux.
EDITAR:
Agregado min protocol = SMB2
y /etc/samba/smb.conf
reiniciado el servicio. Ambos mount
y smbclient
aún requieren que se especifique la versión SMB antes de conectarse al servidor.
EDITAR2:
Agregar client min protocol = SMB2
y client max protocol = SMB3
permite smbclient
conectarse al servidor sin especificar el argumento de versión. Pero mount
todavía no respeta las líneas recién agregadas en smb.conf
.
Respuesta1
Desafortunadamente, el módulo del sistema de archivos del kernel cifs
no lee /etc/samba/smb.conf
nada. 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 cifs
mó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 mount
comando.
#!/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