macos と min protocol
macOSからSambaに繋がらない。
macOSからSambaに繋ごうと思ったら、全然繋がらないの。macOSのSambaが 繋がらないので、Sambaにバックアップが取れない。Ma側のsambaのソフトウェアとソフトウェアのデフォルト設定がおかしいのだと思うわ。
NAS/Sambaなんて最近使わないからSambaサーバー設定がデフォルトなのですが、デフォルトだと接続できなかった。
OSXからmacOSへ x86から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サーバーの設定が、macの smb://
とプロトコル不一致なのですよね。macOSが要求するバージョン・セキュリティとSambaが要求セキュリティが合わないのです。
つまり、server min protocol
がmacOSと合わないのです。
macOSのセキュリティ重視だろうけど、AppleのSMB3のサポートが遅すぎて、SambaをセキュアにしすぎるとmacOSがついてこれない感じですね
対策。
server min protocol
がmacOSと合うように調整すればいい。 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