それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

macOSからLinuxのSambaにつなぐときのサーバー設定 / smb3 暗号化

macos と min protocol

macOSからSambaに繋がらない。

macOSからSambaに繋ごうと思ったら、全然繋がらないの。macOSのSambaが 繋がらないので、Sambaにバックアップが取れない。Ma側のsambaのソフトウェアとソフトウェアのデフォルト設定がおかしいのだと思うわ。

NAS/Sambaなんて最近使わないからSambaサーバー設定がデフォルトなのですが、デフォルトだと接続できなかった。

OSXからmacOSx86からArmへ更新されるたびに劣化されてるし、最近使わないので、使い方をわすれてた。

エラーメッセージ

サーバーへ接続( connect to server )を使ってSambaサーバーへ繋ごうとしたら、エラーになる。

エラーメッセージが酷いsmb://タイプのURLには対応していません。これは 接続先URLは、smb:で接続可能なタイプではありませんが正しい日本語訳だと思うんだ。日本語の機械翻訳は法律で禁止してほしい。

コマンドでも確認

smbutil コマンドを使ってターミナルからも確認してみる。

sudo smbutil -v view //takuya@192.168.1.102
smbutil: server connection failed: Operation not supported

smbutil: server connection failed: Operation not supported が特にややこしいエラー。このまま読めば、サーバー接続失敗、接続操作はサポートされてないとなりなんのエラーか全くわからない。

原因

要は、これ、Sambaサーバーの設定が、macsmb://プロトコル不一致なのですよね。macOSが要求するバージョン・セキュリティとSambaが要求セキュリティが合わないのです。

つまり、server min protocolmacOSと合わないのです。

macOSのセキュリティ重視だろうけど、AppleのSMB3のサポートが遅すぎて、SambaをセキュアにしすぎるとmacOSがついてこれない感じですね

対策。

server min protocolmacOSと合うように調整すればいい。 SMB3だと最新版のSMB3_11が使われるようです。しかし、macOSは未対応なのでちょっと調整する。

smb.conf を次のようにしました。

[global]

server signing = mandatory
#server min protocol = SMB3
server min protocol = SMB3_02
server smb encrypt = required

Sambaのマニュアルを読むと、プロトコルに指定できるのはいくつか選択肢があった。

min protocol 試してみた

min protocol macOS接続 プロトコル
SMB3 failed The same as SMB2. Used by Windows 8.
SMB3 has sub protocols available.
SMB3_00 ok Windows 8 SMB3 version.
SMB3_02 ok Windows 8.1 SMB3 version.
SMB3_11 failed Windows 10 SMB3 version.

以下のように総当たりで試した結果、SMB3_02でつながることがわかった。

server min protocol = SMB3
server min protocol = SMB3_00
server min protocol = SMB3_02
server min protocol = SMB3_11

設定を変えたら、macOS側から接続テスト

ssh 192.168.2.12 'sudo systemctl restart smbd'
sudo smbutil -v view //takuya@192.168.1.102

接続できた

無事に接続ができた

sudo smbutil -v view //takuya@192.168.2.12

接続ができているときにsmbutil statshares -aで接続の詳細を調べた

smbutil statshares -a
==========================================================
SHARE                         ATTRIBUTE TYPE                VALUE
==========================================================
TimeMachine
  SERVER_NAME                   192.168.1.102
  USER_ID                       501
  SMB_NEGOTIATE                 SMBV_NEG_SMB1_ENABLED
  SMB_NEGOTIATE                 SMBV_NEG_SMB2_ENABLED
  SMB_NEGOTIATE                 SMBV_NEG_SMB3_ENABLED
  SMB_VERSION                   SMB_3.02
  SMB_SHARE_TYPE                DISK
  SIGNING_SUPPORTED             TRUE
  SIGNING_REQUIRED              TRUE
  EXTENDED_SECURITY_SUPPORTED   TRUE
  UNIX_SUPPORT                  TRUE
  LARGE_FILE_SUPPORTED          TRUE
  OS_X_SERVER                   TRUE
  FILE_IDS_SUPPORTED            TRUE
  DFS_SUPPORTED                 TRUE
  FILE_LEASING_SUPPORTED        TRUE
  MULTI_CREDIT_SUPPORTED        TRUE
  ENCRYPTION_SUPPORTED          TRUE
  ENCRYPTION_REQUIRED           TRUE
  SIGNING_ON                    TRUE

暗号化がONだったり、署名が必須だったりちゃんと繋がる。

ネットをみると、「遅い」と言って、あえてSMB1へダウングレードしてる人も多く見られるけど、暗号化されない、署名がないパケットを流すと、盗聴や詐称(なりすまし)を許してしまう。私はいまは速度よりセキュアを重視してこれで使ってみようと思う。あまりに遅いなら、CIFSにダウングレードしたうえで、SOCKSやsshやs_tunnel でトンネルすることも考えよう。Appleは速度よりセキュアな実装を重視してるんだろうなぁ

結論

macOSのSMBはSMB3で接続できる。

ただし、、apple の実装に難あり

今後のアップデートで本気で繋がらないときは、まじでどうしたらいいんですかね。

パケットを暗号化して飛ばすしかなくね?

https://netatalk.sourceforge.io/3.1/htmldocs/configuration.html