Linux の SMB 1 を削除する

注意

この記事では、間もなくサポート終了 (EOL) 状態になる Linux ディストリビューションである CentOS について説明します。 適宜、使用と計画を検討してください。 詳細については、「CentOS のサポート終了に関するガイダンス」を参照してください。 SMB での通信に使用されるポート (445) は、多くの組織とインターネット サービス プロバイダー (ISP) でブロックされています。 この慣例の由来は、今や非推奨の古いバージョンの SMB プロトコルに関するセキュリティ ガイダンスです。 SMB 3.x はインターネットでも安全に使用できるプロトコルですが、以前のバージョンの SMB、特に SMB 1 はそうではありません。 SMB 1 は CIFS (Common Internet File System) とも呼ばれ、多くの Linux ディストリビューションに備わっています。

SMB 1 は、旧式で効率が悪く、またセキュリティに不安があるプロトコルです。 さいわいなことに、Azure Files では SMB 1 はサポートされていません。 また、Linux カーネル バージョン 4.18 以降では、Linux で SMB 1 を無効にすることができます。 運用環境で SMB ファイル共有を使用する前に、Linux クライアント上で SMB 1 を無効にすることを常に強くお勧めします

Linux ディストリビューション ステータス

Linux カーネル 4.18 以降、レガシの理由から cifs と呼ばれる SMB カーネル モジュールでは、disable_legacy_dialects と呼ばれる新しいモジュール パラメーター (各種外部ドキュメントでは "parm" と呼ばれることが多い) を公開しています。 Linux カーネル 4.18 で導入されましたが、一部のベンダーでは、サポート対象の旧カーネルにこの変更を移植しています。 次の表では、よく知られた Linux ディストリビューションでこのモジュール パラメーターを使用できるかどうかについて詳しく示しています。

Distribution SMB 1 を無効にできる
Ubuntu 14.04-16.04 No
Ubuntu 18.04 Yes
Ubuntu 19.04+ Yes
Debian 8-9 No
Debian 10+ Yes
Fedora 29+ Yes
CentOS 7 No
CentOS 8+ Yes
Red Hat Enterprise Linux 6.x-7.x No
Red Hat Enterprise Linux 8+ Yes
openSUSE Leap 15.0 No
openSUSE Leap 15.1+ Yes
openSUSE Tumbleweed Yes
SUSE Linux Enterprise 11.x-12.x No
SUSE Linux Enterprise 15 No
SUSE Linux Enterprise 15.1 No

次のコマンドを使用して、Linux ディストリビューションで disable_legacy_dialects モジュール パラメーターがサポートされているかどうかを確認できます。

sudo modinfo -p cifs | grep disable_legacy_dialects

このコマンドを実行すると、次のメッセージが出力されます。

disable_legacy_dialects: To improve security it may be helpful to restrict the ability to override the default dialects (SMB2.1, SMB3 and SMB3.02) on mount with old dialects (CIFS/SMB1 and SMB2) since vers=1.0 (CIFS/SMB1) and vers=2.0 are weaker and less secure. Default: n/N/0 (bool)

SMB 1 を削除する

SMB 1 を無効にする前に、SMB モジュールがご利用のシステムに現在読み込まれていないことを確認してください (これは、SMB 共有をマウントしている場合に自動的に発生します)。 次のコマンドを実行します。SMB が読み込まれていない場合は、何も出力されません。

lsmod | grep cifs

モジュールをアンロードするには、最初に umount コマンドを使用してすべての SMB 共有のマウントを解除します。 次のコマンドを使用して、システム上にマウントされているすべての SMB 共有を特定できます。

mount | grep cifs

すべての SMB ファイル共有のマウントを解除したら、モジュールをアンロードしても安全です。 modprobe コマンドを実行します。

sudo modprobe -r cifs

modprobe コマンドを使用して、SMB 1 をアンロードしてモジュールを手動で読み込むことができます。

sudo modprobe cifs disable_legacy_dialects=Y

最後に、/sys/module/cifs/parameters の読み込み済みパラメーターを参照すると、パラメーターを使用して SMB モジュールが読み込まれていることを確認できます。

cat /sys/module/cifs/parameters/disable_legacy_dialects

Ubuntu および Debian ベースのディストリビューションで SMB 1 を永続的に無効にするには、設定を使用して /etc/modprobe.d/local.conf という新しいファイルを作成する必要があります (他のモジュールのカスタム オプションがまだない場合)。 次のコマンドを実行します。

echo "options cifs disable_legacy_dialects=Y" | sudo tee -a /etc/modprobe.d/local.conf > /dev/null

SMB モジュールを読み込むと、これが動作していることを確認できます。

sudo modprobe cifs
cat /sys/module/cifs/parameters/disable_legacy_dialects

次のステップ

Azure Files の詳細については、次のリンクをご覧ください。