CIFSとSMBファイル共有プロトコル:その違いを解説

ネットワーク上でファイルを共有するためのプロトコルを選ぶ際、ソフトウェアのインターフェースやドキュメントで"SMB"や"CIFS"という用語をよく目にするでしょう。SMBとCIFSは同じものだと考えているユーザーもおり、両者の違いを明確に把握するのは難しいかもしれません。しかし、なぜCIFSをSMBの同義語として扱えないのか、その理由を見ていきましょう。SMBとCIFSのプロトコルの違いや、これらの用語の正しい使い方を解説します。

NAS向けデータバックアップ"NAKIVO"

NAS向けデータバックアップ"NAKIVO"

NASデバイスやWindows、Linuxのファイル共有にある数ギガバイト規模のデータを、高速にバックアップ・復元します。必要なデータを、必要な時に、わずか数秒で復元できます。

SMBとは何ですか?

SMB(Server Message Block)は、OSI通信モデルのアプリケーション層で動作するネットワークプロトコルです。SMBは、ネットワーク経由でリソースへの共有アクセスを提供するために使用されます。 SMBプロトコルは、ファイルサーバー上でのファイル共有、ユーザーコンピュータ間のファイル共有、およびコンピュータ間のファイルコピーに広く利用されています。

ファイル操作に加え、SMBのその他の用途としては、メッセージングや印刷(汎用的なリモートトランザクション)のほか、ネットワーク内のコンピュータの閲覧などが挙げられます。SMBは1983年にIBMによって開発され、それ以来、プロトコルは何度も改良が加えられてきました。

SMBファイル共有とは何ですか?

SMBファイル共有とは、SMBプロトコルを介して利用可能になるリモートホスト上のディレクトリのことです。これらはファイルサーバー上で設定され、これらの共有に対する読み取りおよび書き込みアクセス権を設定することができます。1台のファイルサーバーに複数のSMB共有を設定することができます。

SMBの仕組み:SMBはどのような役割を果たすのか?

SMBは、クライアント・サーバー型のネットワーク原理に基づいて動作します。このプロトコルは、クライアントから送信されるリクエストやサーバーから送信される応答を含む一連のデータパケットを使用します。クライアントは、IPアドレスまたはホスト名を使用してサーバーに接続できます。これらのSMBデータパケットは、次のように分類されます:

  • ファイル共有への接続を確立または切断するセッション制御パケット
  • ファイルアクセスパケット。その名の通り、ファイル共有にアクセスしてファイルを操作するものです
  • 一般的なメッセージパケット

SMBは、接続を確立し、認証を完了した後にセッションを開きます。その後、このセッションを介してSMBメッセージを送信できるようになります。セッションを開始する際、SMBクライアントは自身の機能一覧を送信します(機能はクライアントのSMBバージョンによって異なります)。

SMBプロトコルは、以下の環境で動作します:

  • ポート445を使用してTCP経由で直接接続する(NetBIOSを使用しない)――これが現代的なアプローチです。
  • UDPポート137および138、ならびにTCPポート137および139を使用したNetBIOS API経由――これはWindows 2000まで採用されていた従来の方式です。初期のSMBでは、トランスポートプロトコルとしてNetBIOS over TCP/IPが使用されていました。

SMBプロトコルはバッチ処理、つまり複数のメッセージをグループ化して1回の送信で送ることで、パフォーマンスを向上させる機能をサポートしています。

その他の機能として、複数のユーザーが同じファイルを開いた際に共有ファイルを保護するためのファイルロック機構があります。ファイルをロックすることで、複数のユーザーによる同時書き込みを防ぎ、ファイル内のデータの不整合を回避することができます。

IPC(プロセス間通信)は、ヌルセッション接続とも呼ばれます。 IPC$ Windowsによって作成されるこの共有は、クライアントとサーバー間の一時的な接続に使用されます。この隠し共有は、ファイルやディレクトリ、プリンターには分類できないデータ(たとえば、ユーザーや共有の列挙など)を共有するために作成されます。

Windowsシステムには、ネイティブのSMBクライアントとサーバーが組み込まれています。ただし、クライアント版のWindowsでは、ホストに接続できるユーザー数に制限がありますが、Windows Server版にはそのような制限はありません。

  • Windows XP および Vista – 最大 10 同時接続
  • Windows 7 および Windows 10 – 最大 20 同時接続

Linux上のSMBサーバーは、Linux向けのフリーなSMBサーバー実装であるSambaを設定することで構築されます。なお、Sambaを使用すれば、LinuxをActive Directoryドメインに参加させたり、Linuxをドメインコントローラーとして動作させたりすることも可能です。SMBクライアントソフトウェアも、Linux(無料)やその他のオペレーティングシステムで利用可能です。

CIFSとは何ですか?

CIFS(Common Internet File System)は、1996年にWindows 95のリリースを受けてマイクロソフトが開発した、SMBの特定の実装、あるいは方言です。方言とはバージョンであり、独立した別のプロトコルではありません。方言とは、ホスト間の通信のために送受信されるメッセージパケットの集合であり、特定のプロトコルバージョンを定義するものです。CIFSは、その名称が示唆する通りではありませんが、ファイルシステムではありません。

CIFSプロトコルの仕様は、オリジナルのSMBプロトコルを基にしていますが、マイクロソフトによっていくつかの機能が追加されています。マイクロソフトは、TCP上のNetBIOS(初期のSMB 1実装で使用されていたもの)を使用せず、TCPおよびポート445を介した直接接続を実装しました。CIFSはSMB 1の実装であり、独立したファイル共有プロトコルではありません。

SMBプロトコルのバリエーション

マイクロソフトによるSMB1の実装について話す場合は、"CIFS"という用語を使用できます。それ以外の場合、および一般的には、このネットワークプロトコルを指す正しい用語は"SMB"です。CIFS以降にリリースされたSMBのバージョンを詳しく見ていくことで、CIFSとその他の(より新しい)SMBのバリエーション(バージョン)との違いをより深く理解しましょう。

SMB 2.0

マイクロソフトは2006年、Windows Vistaのリリースに伴いSMB 2.0(またはSMB2)を公開しました。このSMBバージョンはSMB 1.0/CIFSよりも信頼性が高く、CIFSとは異なります。ファイル転送に必要なコマンド数は、100以上から20に削減されました。 パイプライン処理メカニズム、すなわち、前のリクエストに対する応答を受け取る前に次のリクエストを送信できる機能により、パフォーマンスが向上しています。複数のアクションを1つのリクエストにまとめることで、クライアントへのリクエスト数が減り、パフォーマンスが向上します。

SMB 2.1

SMB 2.1 は、SMB 2.0 と比較して、パフォーマンスやブロッキング機構においてわずかな改善しか見られません。このプロトコルバージョンは、Windows 7 および Windows Server 2008 R2 とともにリリースされました。

SMB 3.0

当初、このプロトコルバージョンはSMB 2.2と呼ばれていましたが、その後Windows 8のリリースに伴いSMB 3.0へと名称が変更されました。SMB 3.0バージョン:

  • SMB Direct(メモリへの直接アクセス)、SMBマルチチャネル、およびSMBトランスポートフェイルオーバーを追加しました
  • セキュリティの強化
  • エンドツーエンド暗号化のサポートを追加しました
  • 遅延を低減することでネットワーク効率を向上させた

SMB 3.0.2

SMB 3.0.2 または 3.02 は、Windows 8.1 および Windows Server 2012 R2 以降で利用可能となっています。このバージョンでは、セキュリティを強化するために SMB 1.0 との互換性を無効にすることができます。

SMB 3.1.1

このバージョンは、Windows 10 および Windows Server 2016 以降で利用可能になりました。改善点としては、暗号化方式の強化(AES 128 GCM および AES 128 CCM)や、事前認証時の整合性チェックにおける SHA-512 ハッシュの使用などが挙げられます。

Windows および Microsoft Server における SMB

SMBは、Windows 3.1(Windows for Workgroups)以降のWindowsで利用可能です。各WindowsバージョンにおけるSMBのバージョンと互換性については、以下の表で説明しています。

列と行には、SMBクライアントまたはSMBサーバーを実行できるWindowsバージョンが記載されています(列と行は互換性があります)。列と行の交点にあるセルには、それぞれのWindowsバージョン間の通信に使用されるSMBプロトコルのバージョンが表示されています。

Windows 10、

、Server 2016 以降

Windows 8.1、

、Server 2012 R2

Windows 8、

、Server 2012

Windows 7、

、Server 2008 R2

Windows Vista、

、Server 2008

Windows XP、Server 2003 およびそれ以前のバージョン
Windows 10、

、Server 2016 以降

SMB 3.1.1 SMB 3.02 SMB 3.0 SMB 2.1 SMB 2.0 SMB 1.0
Windows 8.1、

、Server 2012 R2

SMB 3.02 SMB 3.02 SMB 3.0 SMB 2.1 SMB 2.0 SMB 1.0
Windows 8、

、Server 2012

SMB 3.0 SMB 3.0 SMB 3.0 SMB 2.1 SMB 2.0 SMB 1.0
Windows 7、

、Server 2008 R2

SMB 2.1 SMB 2.1 SMB 2.1 SMB 2.1 SMB 2.0 SMB 1.0
Windows Vista、

、Server 2008

SMB 2.0 SMB 2.0 SMB 2.0 SMB 2.0 SMB 2.0 SMB 1.0
Windows XP、Server 2003 およびそれ以前のバージョン SMB 1.0 SMB 1.0 SMB 1.0 SMB 1.0 SMB 1.0 SMB 1.0

CIFS 対 SMB:混乱の原因となりやすい点

例を挙げて、なぜCIFSとSMBという用語が今でもユーザーの間で混同されがちなのかを見てみましょう。そのために、SMB共有が設定されたファイルサーバーを使用していると仮定しましょう。 Windows Server 2019 および、SMBプロトコルを介してこのファイルサーバーに接続するLinuxマシン。この例では、Ubuntu 20.04を使用しています。なお、Ubuntu 22でも設定は同じです。

環境の設定は以下の通りです:

  • Windows Server 2019: 192.168.101.209
  • Linux Ubuntu 20.04: 192.168.101.210
  • Windows Server での SMB 共有: 192.168.101.209 共有

Windows Server 2019 では、SMB 1.0/CIFS プロトコルはデフォルトで無効になっています。この設定を確認し、SMB 1.0/CIFS クライアントおよびサーバーを手動で有効または無効にするには、次の手順を実行します。 Server Manager > Add Roles and Features > Features.

当社のWindows Server 2019マシンでは、SMB 1.0/CIFSを無効にしています。つまり、デフォルトではSMB 3が使用されますが、SMB 2のバージョン(ダイアレクト)を使用するクライアントとの互換性を確保するため、SMB 2に切り替えることも可能です。

CIFS vs SMB – SMB 1.0/CIFS is disabled by default in Windows Server 2019

Windows 10などの新しいバージョンのWindowsでは、セキュリティ強化のため、CIFSプロトコルはデフォルトで無効になっています。必要に応じて手動で有効にすることができます。

注: 2017年、世界中で大規模なランサムウェア攻撃が発生し(ワナクライ そして NotPetya) は、SMB 1の脆弱性を悪用するエクスプロイトを用いて実行されました。これらのエクスプロイトは、EternalBlue、EternalRomance、およびEternalChampionと名付けられました。マイクロソフトは、当時これらのOSが公式にサポート対象外であったにもかかわらず、Windows XPおよびWindows Server 2003以降のOS向けにセキュリティパッチをリリースしました。 マイクロソフトは、SMB 1.0/CIFSの代わりに、SMB 2およびSMB 3(事前認証整合性をサポート)の使用を推奨しました。

前述の通り、LinuxにおけるSMBサーバーの名称はSambaです(サンバ (パッケージ名です)。WindowsではSMBサーバーを使用します。そのため、この例ではSambaは必要ありませんが、Ubuntu Linux用のSMBクライアントが必要になります。

Linux用のSMBクライアントは、Linux CIFS Utilsに含まれています(cifs-utils (これがパッケージ名です)。ここに混乱の根源があります。Linux用クライアントの最初のバージョンは、SMB 1.0/CIFSが広く使われていた時代に作成されました。その後、SMBプロトコルは更新され、SMBバージョン2および3がリリースされましたが、Linux用SMBクライアントの名前は変わらず、SMBクライアントを含むパッケージは今でも"CIFS Utils"と呼ばれています。このパッケージは cifs-utils ~の一部ではありません サンバ.

Linux上でCIFS Utilsを使用してWindows Server 2019上のSMB共有に接続し、CIFSが依然として使用されているかどうかを確認します。CIFS Utilsをインストールするには、root権限で次のコマンドを実行してください:

sudo apt-get install cifs-utils

SMB共有のマウントポイントとして使用するディレクトリを作成します:

mkdir /mnt/share

リモートにある Windows ファイルサーバー上の SMB ファイル共有に接続します:

mount.cifs //192.168.101.209/share /mnt/share -o user=administrator

この例では、説明のためにWindowsの管理者ユーザーアカウントを使用しています。

What is SMB file share – connecting to the share from Linux

CIFS 対 SMB – 現在のセッションでファイルサーバーへの接続に使用されているのはどちらでしょうか?Windows Server 2019 上で PowerShell コマンドを使用して、Windows Server の SMB 共有に接続しているクライアントの SMB バージョンを確認します:

Get-SmbSession | Select-Object -Property ClientComputerName,ClientUserName,Dialect

PowerShell の出力からわかるように、Ubuntu Linux からの接続には SMB 3.1.1 が使用されています。SMB 1.0/CIFS は、接続する際に使用されません。 cifs-utils そして mount.cifs コマンドを、Windows Server 2019 で構成されたファイルサーバーに送信します。

What is SMB file share – how to check the SMB dialect used

また、SMBプロトコルのバージョンは /proc/mounts ~とともに cat /proc/mounts Linuxのコマンド。以下のコマンドを使用すると、必要な結果のみを抽出できます:

cat /proc/mounts | grep cifs

出力からわかるように、ファイル共有への接続に使用されるプロトコルバージョンが指定されています cifsですが、表示されているバージョンは 3.1.1 (vers=3.1.1)は、CIFSのバージョンではありません。これは、SMBとCIFSという用語が混同されやすいことを示す、もう一つの例です。

CIFS vs SMB – checking which SMB version is used for the current connection

実際、使用されているのはCIFSではなくSMB 3.1.1です。次の方法を使えば、これをさらに裏付けることができます。 nmapこれは、分析やトラブルシューティングに使用される無料のネットワーク検出ツールです。

インストールするには nmap Ubuntuでは、root権限で次のコマンドを実行してください:

sudo apt-get install nmap

オンラインで、かつ当社の 192.168.101.0/24 ネットワークでは、次のコマンドを使用します:

nmap --script smb-protocols 192.168.101.0/24

ファイルサーバーとして動作している当社のWindows Server 2019のIPアドレスである192.168.101.209の結果を確認したいと考えています。Linuxはこのサーバーのファイル共有に接続されています。 出力結果を見ると、当社のWindows ServerがサポートしているSMBプロトコルのダイアレクトは、2.02、2.10、3.00、3.02、および3.11であることがわかります。Linuxの設定ファイルやコマンドでは依然としてCIFSという用語が使用されていますが、SMB 1.0/CIFSはサポートされていません。

CIFS vs SMB – checking which SMB dialects are supported on the server

次の設定を追加することで、手動でCIFSの使用を強制できます。 vers=1.0 のパラメータ mount Linux(クライアント側)で、リモートサーバー上のファイル共有に接続する際にSMB 1.0/CIFSプロトコルのみを使用するようにするコマンド。

mount -t cifs //192.168.101.209/share /mnt/share -o user=administrator,vers=1.0

または

mount.cifs //192.168.101.209/share /mnt/share -o user=administrator,vers=1.0

結果は以下の通りです:

サーバーが突然接続を切断しました。これは、使用しようとしているSMBのバージョンがサーバーでサポートされていない場合に発生することがあります。SMBのデフォルトバージョンは、最近SMB1からSMB2.1以降に変更されました。.

この結果は、最新のオペレーティングシステムにおけるSMBとCIFSの比較調査で得られたこれまでの結果と一致しています。当方のWindows ServerではCIFSは使用されておらず、SMB 1.0/CIFSは無効化されています。

少なくともSMB 2.0を使用するように設定すれば、サーバーに接続できます(当方のWindows Server 2019がサポートするSMBダイアレクトの一覧は、 nmap):

mount.cifs //192.168.101.209/share /mnt/share -o user=administrator,vers=2.0

Connecting to an SMB share using the SMB2 dialect from Linux

Linux やその他のオペレーティングシステムでグラフィカルユーザーインターフェースを使用する際は、 smb:// リモートサーバー上のファイル共有に接続するために使用するネットワークプロトコルを定義する際、アドレス行に次のように入力します。

SMBファイル共有のアドレスを入力する際は、次のように指定してください:

smb://server-name/share-name

使用しないでください:

cifs://server-name/share-name

クライアントはSMB1.0/CIFSプロトコルを使用して接続を試みるため、サーバー側でこのプロトコルが無効になっている可能性があるからです(そもそもクライアントがそれをサポートしているとしても)。 cifs:// (構文)。

結論

CIFSプロトコルが時代遅れとなった現在、ファイルサーバーやNAS上の共有ストレージに接続するために使用されるプロトコルの一つがSMBです(もう一つ一般的に使用されているのはNFSです)。共有ストレージは、データの破損やランサムウェア、ネットワーク上で容易に拡散するその他の脅威に対して特に脆弱であるため、データ損失を防ぐために、共有リソースに保存されているファイルやフォルダーを必ずバックアップしてください。 共有ファイルへの書き込み権限を持つユーザーがたった1人でもコンピュータに感染すると、すべてのユーザーでデータ損失が発生する可能性があります。

NAKIVO Backup & Replication NASおよびWindows/Linuxファイルサーバー上に保存されたデータに対し、SMBおよびNFS経由での増分バックアップをサポートするデータ保護ソリューションです。

試してみてください NAKIVO Backup & Replication

試してみてください NAKIVO Backup & Replication

無料トライアルをご利用いただき、本ソリューションのデータ保護機能をすべてお試しください。15日間無料です。機能や容量の制限は一切ありません。クレジットカードも不要です。

People also read