Configurando o SMB 2.0 como padrão para operações de montagem

Configurando o SMB 2.0 como padrão para operações de montagem

O uso mount -t cifs -v <address>retorna com Host is Downerro ao conectar-se a um servidor executando SMB 2.0 (com SMB 1.0 desabilitado). Uma solução alternativa é especificar vers=2.0a 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 mountem seu nome, esse argumento não é especificado.

Existe uma maneira de tornar o SMB 2.0+ o padrão para todas mount -t cifsas chamadas, independentemente do que o chama? Talvez em smb.conf?

Atualmente executando Arch Linux.

EDITAR: Adicionado e min protocol = SMB2reiniciado /etc/samba/smb.confo serviço. Ambos mounte smbclientainda exigem que a versão SMB seja especificada antes de se conectar ao servidor.

EDITAR2: Adicionando client min protocol = SMB2e client max protocol = SMB3permite smbclientconectar-se ao servidor sem especificar o argumento da versão. Mas mountainda não respeita as linhas recém-adicionadas no smb.conf.

Responder1

Infelizmente, o módulo do sistema de arquivos do kernel cifsnão lê /etc/samba/smb.confnada. 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 cifsmó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 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. 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

informação relacionada