KnowHow

技術的なメモを中心にまとめます。
検索にて調べることができます。

SMBとCIFS

登録日 :2024/07/17 08:07
カテゴリ :Linux

【SMBとCIFS】
マイクロソフトでは、Windowsで使われるファイル共有プロトコルについて、現時点での正式名称をSMB(Server Message Block)と呼んでいます。このプロトコルは、かなり長い歴史的な変遷を経て、SMB/CIFS(Common Internet File System)とも呼ばれていますが、Windows世界での変遷と対応するLinux側での対応がそれぞれ別にあり、かつ各時代などによる呼称の変化や取り扱いの変化の経緯が複雑で、わかりにくくなっています。

SMB/CIFSという呼称は、どちらかというと、CIFSを独立した1プロトコルとして扱う現在のLinux側から見た場合の言い方です。
現在のマイクロソフトの言うところのSMB(SMB2、SMB3を含む)を実現しているモジュールやファイルシステムの呼称は、LinuxではCIFSという呼称になっていることから、このように呼ばれます。モジュール名等も、cifs.ko、cifs-utils、mount.cifs等、cifsという語が使われています。
注意する必要がある点がもう一つあり、SMBやCIFSという呼称の指す範囲が複数あることです。
「SMB」は、上記のようにWindowsのファイル共有プロトコル全般を指す一般名称として使われる場合と、初期のバージョンSMB1.0を限定して指す場合とがあります。
また、「SMB/CIFS」という呼称も、先ほどの現在のLinuxでの捉え方以外にも、SMB1.0を意味する場合や、SMB全般(SMB1.0、SMB2.x、SMB3.xと、SMB全般に含まれるCIFS)という意味で使わる場合がありますので、こちらも注意が必要です。

こうした混乱の背景は、マイクロソフトによる呼称が、SMB → CIFS → SMBと変動したことに一因があります。
現在、マイクロソフトはCIFSを独立した1つのプロトコルとして位置付けてはおらず、SMBの「一方言」という扱いにしています。しかし、最初からそうだったわけではありません。LAN環境でのプロトコルとして(もともとはIBMから)誕生したSMBを、インターネットに対応させる、という意味でCommon Internet File System、CIFSとしたのですが、この時点で、マイクロソフトは、将来的にはCIFSを個別プロトコルとし、SMBの後継とするはずでした。しかし、最終的にCIFSは独立した完全な個別プロトコルとならず、再びSMBという名称を用いてプロトコルを再定義することになったのです。
一方、WindowsのSMB1.0以降を追いかけてsmbfs(LinuxでのSMB1.0)→cifsと実装したLinuxでは、SMB2、SMB3の実装時もSMBとは呼ばず、cifsとして取り扱っています。
こうしたことから、読む文脈や、時期により、説明が前後したり、違う経緯をたどったように見える場合があります。
これらの呼称を把握した上で見直すと、Samba4の機能は、Windows側のプロトコルSMB2.x、SMB3.xに対応したLinuxのプロトコル実装CIFS(cifs.ko等)でなされており、これらで実装された共有リソースへのアクセスは、mount.cifsを呼び出すことで実現されている、と言う説明の意味・背景が把握できます。

なお、Samba3.2まではSMB1.0であるsmbfsも実装されていましたが、現在はsmbfsを扱っていたsmbmount、mount.smbfs、といった旧コマンドは使用できず、サポートされていません。
Samba4でWindowsの共有フォルダやSambaが提供する共有ディレクトリにアクセスするには、CIFSをプロトコルとして用い、「mount.cifs」を使用します。
実際には、smbclientコマンドや、mountコマンドのオプション「-t cifs」を使用して、CIFSでアクセスすることになります。