SMB 2.0をインストール操作のデフォルト値に設定する

SMB 2.0をインストール操作のデフォルト値に設定する

SMB 2.0(SMB 1.0が無効)を実行しているサーバーに接続すると、エラーが返されますmount -t cifs -v <address>Host is Down解決策はvers=2.0パラメータリストを指定することですmount。コマンドラインからインストールしてこのパラメータを指定できる場合、これは非常に効果的です。ただし、GUIまたはmountユーザーに代わって呼び出される一部のプログラムを使用する場合、このパラメーターは指定されません。

mount -t cifsすべての通話に対してSMB 2.0+をデフォルトに設定する方法はありますか?おそらくsmb.conf

現在、Arch Linuxを実行しています。

編集する:サービスを追加しmin protocol = SMB2て再起動します。/etc/samba/smb.confどちらもサーバーに接続する前にSMBバージョンを指定する必要がありますmountsmbclient

編集2:バージョンパラメータを指定せずにサーバーに接続できるようにclient min protocol = SMB2追加されました。ただし、新しく追加された行はまだ尊重されていません。client max protocol = SMB3smbclientmountsmb.conf

答え1

残念ながら、カーネルのファイルシステムモジュールはcifsまったく読みません。/etc/samba/smb.confWindowsファイル共有マウントを可能にするCIFSクライアントモジュールは、Sambaから完全に独立しています。

ストックカーネルバージョン4.13では、モジュールのcifsデフォルトプロトコルレベルがSMB3に変更されました。

私は「エンタープライズ」Linuxディストリビューションがパッチを以前のカーネルにバックポートしたと確信していますが、Archではカーネルバージョン4.13以降にアップグレードすることが唯一のオプションかもしれません。

以下はkernel.org Gitの関連パッチへのリンクです。コミットIDは、特定のカーネルバージョンのパッチを追跡するのに役立ちます。

答え2

この問題の調査中に、コマンドのCIFSパラメータを調整するスクリプトを作成しました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[@]}"

このスクリプトを/bin/mount.sh

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

削除する

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

関連情報