マウント操作のデフォルトとして SMB 2.0 を設定する

マウント操作のデフォルトとして SMB 2.0 を設定する

SMB 2.0 を実行しているサーバー (SMB 1.0 は無効) に接続するときに を使用するとmount -t cifs -v <address>エラーが返されます。回避策は、 の引数リストに を指定することです。これは、コマンド ライン経由でマウントしていて、この引数を指定できる場合は正常に機能します。ただし、GUI またはユーザーに代わって呼び出すプログラムを使用する場合は、この引数は指定されません。Host is Downvers=2.0mountmount

呼び出し元に関係なく、すべての呼び出しに対して SMB 2.0+ をデフォルトにする方法はありますかmount -t cifs? おそらくsmb.conf?

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

編集:サービスmin protocol = SMB2に 追加され、再起動されました。 と の両方で、サーバーに接続する前に SMB バージョンを指定する必要があります。/etc/samba/smb.confmountsmbclient

編集2: と を追加するとclient min protocol = SMB2、バージョン引数を指定せずにサーバーに接続できるようclient max protocol = SMB3になります。ただし、では に新しく追加された行がまだ考慮されません。smbclientmountsmb.conf

答え1

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

モジュールのデフォルトのプロトコル レベルは、cifsバニラ カーネル バージョン 4.13 で SMB3 に変更され、マルチ方言ネゴシエーション パッチ (実質的にはデフォルトを「SMB2.1 以降」に設定) が 2017 年 9 月にバニラ カーネルに追加されました。

「エンタープライズ」 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

関連情報