마운트 작업을 위한 기본값으로 SMB 2.0 설정

마운트 작업을 위한 기본값으로 SMB 2.0 설정

SMB 2.0(SMB 1.0이 비활성화된 상태)을 실행하는 서버에 연결할 때 오류가 mount -t cifs -v <address>있는 반환을 사용합니다 . 해결 방법은 의 인수 목록을 Host is Down지정하는 것입니다 . 명령줄을 통해 마운트하고 이 인수를 지정할 수 있는 경우에는 잘 작동합니다. 그러나 GUI나 사용자를 대신하여 호출하는 일부 프로그램을 사용할 때는 이 인수가 지정되지 않습니다.vers=2.0mountmount

mount -t cifs통화 대상에 관계없이 모든 통화에 대해 SMB 2.0+를 기본값으로 설정할 수 있는 방법이 있습니까 ? 아마도 smb.conf?

현재 아치 리눅스를 실행하고 있습니다.

편집하다:서비스 min protocol = SMB2에 추가 하고 다시 시작했습니다. /etc/samba/smb.conf두 가지 모두 mount서버 smbclient에 연결하기 전에 SMB 버전을 지정해야 합니다.

편집2:버전 인수를 지정하지 않고 서버에 연결할 수 있도록 추가 client min protocol = SMB2하고 client max protocol = SMB3허용합니다 . smbclient그러나 mount여전히 smb.conf.

답변1

불행하게도 커널의 파일 시스템 모듈은 전혀 cifs읽지 못합니다 . /etc/samba/smb.confWindows 파일 공유 마운트를 허용하는 CIFS 클라이언트 모듈은 Samba와 완전히 별개입니다.

모듈의 기본 프로토콜 수준은 cifs바닐라 커널 버전 4.13에서 SMB3으로 변경되었으며, 2017년 9월에 다중 언어 협상 패치(기본값을 "SMB2.1 이상"으로 설정)가 바닐라 커널에 추가되었습니다.

나는 "엔터프라이즈" 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

관련 정보