Linuxのカーネルモジュール「cifs.ko」には、Windows 8.1と同じ最新のSMB 3.02の最低限の実装が行われているそうです。その事実を確認してみましょう。
「cifs.ko」を使用してWindowsの共有フォルダーに接続するには、「mount」コマンドの「-t cifs」オプションまたは「mount.cifs」コマンドを使用して、Windowsの共有フォルダーをマウントポイントにマウントします。
sudo mount -t cifs //<コンピューター名>/<共有名> <マウントポイント> -o <オプション>
または
sudo mount.cifs //<コンピューター名>/<共有名> <マウントポイント> -o <オプション>
「mount」コマンドの「-t cifs」オプションは「mount.cifs」を呼び出すものであり、どちらのコマンドラインを実行しても結果は同じです(画面5)。また、「mount.cifs」は「cifs-utils」パッケージに依存します。このパッケージはUbuntuに既定でインストールされないので、「sudo apt-get install cifs-utils」を実行してインストールしておく必要があります。
以下の画面6は、「mount」コマンドで必要最小限のオプション指定(前出の画面5でcifs-utils不足により失敗したコマンドライン)で接続したときの、SMBネゴシエート要求の最初のパケットです。UbuntuのSMBクライアントは、Windows 8.1のSMBサーバーに対して「NT LM 0.12」を含むMS-SMBのダイアレクトを提示し、ネゴシエートの結果、Windows 8.1とは「NT LM 0.12」を使用して接続します。
このように、Linuxカーネルに組み込まれたSMBクライアント機能もまた、既定ではSMB 1.0/CIFSのクライアントとして動作します。提示しているダイアレクトの種類の違いからも、SambaのSMBクライアント機能ではないことが分かるでしょう。
「mount」コマンドおよび「mount.cifs」では、「vers=」オプションで使用するSMBプロトコルのバージョンを指定できます。「man mount.cifs」でマニュアルを確認すると、「vers=」オプションには、「1.0」「2.0」「2.1」「3.0」のいずれかを指定できるとあります(画面7)。指定しない場合は「vers=1.0」を指定したのと同じ扱いになります。
「vers=」オプションに「2.0」「2.1」「3.0」のいずれかを指定した場合は、指定したSMBバージョンのダイアレクトのみでネゴシエートしようとします。最上位のSMBバージョンを規定するSambaクライアントの「client max protocol = SMB3」とは動作が異なるので注意してください。
「vers=」オプションを使用する場合は、相手がそのSMBバージョンに対応しているかどうかに注意する必要があります。例えば、Windows 7の共有フォルダーに対しては、「vers=3.0」オプションで接続することはできません。
マニュアルには書いてありませんが、試しに「3.02」を指定してWindows 8.1の共有フォルダーに接続してみたところ、SMB 3.02による接続ができました(画面8)。ただし、Linuxのカーネルモジュール「cifs.ko」のSMB 3.02対応は最低限の実装であるため、実際の利用ではSMB 3.0を使用した方がよいでしょう。おそらく、SMB 3.02のダイアレクトに対応しただけで、SMB 3.02に追加されたアプリケーションレベルの新機能には対応していないと思います。
最後に、Linuxを共有フォルダーを提供する側のSMBサーバーとして利用する場合の動作、つまり、Samba 4.1のSMBサーバー機能の動作を見てみましょう。
Ubuntu Desktopの場合、標準の「ファイル」(Nautilus)を使用して、簡単にSMBの共有フォルダーを設定することができます。初めて共有設定を行う場合は、「Windowsネットワーク共有サービス」のインストールが求められますが、これはSambaのパッケージをインストールするものです(画面9)。UNIXやLinuxで共有といえば古くから「NFS(Network File System)」が標準的ですが、Ubuntu標準の共有機能はSMBベースの共有なのです。
「Windowsネットワーク共有サービス」のインストールが完了すると、Sambaが既定の設定で導入され、共有フォルダーが公開されます。Ubuntuの再起動は必要ありません。Windows 8.1からUbuntuの共有フォルダーに接続してみると、SMB 3.0で接続することができました(画面10)。
Samba 4.1のSMBサーバーが使用するSMBプロトコルのバージョンは、SMBクライアント機能と同様に「/etc/samba/smb.conf」ファイルで制御できます。SMBサーバー機能は[global]セクションの「server max protocol =」または「max protocol =」行に、「SMB3」「SMB2」「NT1」の値を設定します。
この設定を変更しなくても、Windows 8.1からの接続にはSMB 3.0が使用されました(Samba 4.1はSMB 3.02に非対応)。つまり、Samba 4.1のSMBサーバー機能の既定は、「server max protocol = SMB3」なのです。
そして、明示的に「server max protocol = SMB2」を指定すればSMB 1.0/CIFSからSMB 2.0、およびSMB 2.1までに対応したSMBサーバーとして動作するようになります。「server max protocol = NT1」を指定すれば、SMB 1.0/CIFSのみに対応したレガシーなSMBサーバーとして動作します(画面11)。
LinuxやSambaがSMB 2.1やSMB 3.0に対応していることは知っていても、本当にSMBの新しいバージョンが使用されているかどうかは、今回の記事のような方法で確認してみないと判断できません。SMB 2.1やSMB 3.0で使っていると思い込んでいるだけで、実際にはSMB 1.0/CIFSでのんびりとファイルをやりとりしているかもしれませんね。
次回は、WindowsとMacの間で、今回と同じことを調査します。
山市 良(やまいち りょう)
岩手県花巻市在住。Microsoft MVP:Hyper-V(Oct 2008 - Sep 2015)。SIer、IT出版社、中堅企業のシステム管理者を経て、フリーのテクニカルライターに。マイクロソフト製品、テクノロジを中心に、IT雑誌、Webサイトへの記事の寄稿、ドキュメント作成、事例取材などを手掛ける。個人ブログは『山市良のえぬなんとかわーるど』。
Copyright © ITmedia, Inc. All Rights Reserved.