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

6

Usando um erro mount -t cifs -v <address> retorna com Host is Down ao se conectar a um servidor executando o SMB 2.0 (com o SMB 1.0 desativado). Uma solução alternativa é especificar vers=2.0 para a lista de argumentos de mount . Isso funciona bem se você está montando via linha de comando e tem a capacidade de 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 as chamadas mount -t cifs , independentemente do que chama? Talvez em smb.conf ?

Atualmente executando o Arch Linux.

EDITAR: Adicionou min protocol = SMB2 a /etc/samba/smb.conf e reiniciou o serviço. Ambos mount e smbclient ainda exigem que a versão SMB seja especificada antes de se conectar ao servidor.

EDIT2: Adicionar client min protocol = SMB2 e client max protocol = SMB3 permite que smbclient se conecte ao servidor sem especificar o argumento de versão. Porém, mount ainda não respeita as linhas recém-adicionadas em smb.conf .

    
por MarkP 25.05.2017 / 16:13

2 respostas

3

Infelizmente, o módulo do sistema de arquivos cifs do kernel não lê /etc/samba/smb.conf . 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 módulo cifs foi alterado para SMB3 no kernel do vanilla versão 4.13, e um patch de negociação de vários dialetos (definindo efetivamente o padrão como "SMB2.1 ou posterior") foi adicionado aos kernels de baunilha em setembro de 2017.

Tenho certeza de que as distribuições "enterprise" do Linux deram backport ao patch para os kernels anteriores, mas no Arch sua única opção pode ser a atualização para o kernel versão 4.13 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.

    
por 27.06.2018 / 16:44
0

Como parte da pesquisa deste problema, escrevi um script que ajusta os parâmetros do CIFS para o comando mount .

#!/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
    
por 28.06.2018 / 13:15