web-dev-qa-db-ja.com

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

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

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

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

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

EDIT2:client min protocol = SMB2およびclient max protocol = SMB3を追加すると、smbclientがバージョン引数を指定せずにサーバーに接続できます。ただし、mountは、smb.confに新しく追加された行を考慮しません。

7
MarkP

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

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

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

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

3
telcoM

この問題の調査の一環として、mountコマンドのCIFSパラメーターを調整するスクリプトを作成しました。

#!/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
0
roaima