O uso mount -t cifs -v <address>
retorna com Host is Down
erro ao conectar-se a um servidor executando SMB 2.0 (com SMB 1.0 desabilitado). Uma solução alternativa é especificar vers=2.0
a lista de argumentos de mount
. Isso funciona bem se você estiver montando via linha de comando e puder especificar esse argumento. Mas, ao usar uma GUI ou algum programa que chame mount
em seu nome, esse argumento não é especificado.
Existe uma maneira de tornar o SMB 2.0+ o padrão para todas mount -t cifs
as chamadas, independentemente do que o chama? Talvez em smb.conf
?
Atualmente executando Arch Linux.
EDITAR:
Adicionado e min protocol = SMB2
reiniciado /etc/samba/smb.conf
o serviço. Ambos mount
e smbclient
ainda exigem que a versão SMB seja especificada antes de se conectar ao servidor.
EDITAR2:
Adicionando client min protocol = SMB2
e client max protocol = SMB3
permite smbclient
conectar-se ao servidor sem especificar o argumento da versão. Mas mount
ainda não respeita as linhas recém-adicionadas no smb.conf
.
Responder1
Infelizmente, o módulo do sistema de arquivos do kernel cifs
não lê /etc/samba/smb.conf
nada. O módulo cliente CIFS que permite a montagem de compartilhamentos de arquivos do Windows é completamente separado do Samba.
O nível de protocolo padrão no cifs
módulo foi alterado para SMB3 no kernel vanilla versão 4.13, e um patch de negociação multidialeto (efetivamente definindo o padrão como "SMB2.1 ou posterior") foi adicionado aos kernels vanilla em setembro de 2017.
Tenho certeza de que as distribuições Linux "empresariais" portaram o patch para kernels anteriores, mas no Arch sua única opção pode ser atualizar para a versão 4.13 do kernel ou posterior.
Aqui está um link para o patch relevante no kernel.org Git.O ID de commit pode ser útil para rastrear o patch em versões específicas do kernel.
Responder2
Como parte da pesquisa sobre esse problema, escrevi um script que ajusta os parâmetros CIFS do 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
. Então execute estes comandos
chmod a+x /bin/mount.sh
mv /bin/mount /bin/mount.real && ln -fs mount.sh /bin/mount
Desinstale-o com
test -L /bin/mount && rm -f /bin/mount && mv -f /bin/mount.real /bin/mount
rm -f /bin/mount.sh