共用方式為


在 Linux 用戶端上停用 SMB 1

許多組織和網際網路服務提供者 (ISP) 會將 SMB 用來通訊的連接埠 (連接埠445) 封鎖起來。 這種做法源自舊版和已過時 SMB 通訊協定版本的相關安全性指引。 雖然 SMB 3.x 是可在網際網路上安全使用的通訊協定,但舊版 SMB (尤其是 SMB 1) 卻不是。 SMB 1 也稱為 CIFS (通用網際網路檔案系統),隨附於許多 Linux 發行版本。

SMB 1 已過時、沒有效率,而且是不安全的通訊協定。 好消息是 Azure 檔案服務不支援 SMB 1。 此外,從 Linux 核心 4.18 版開始,Linux 可讓您停用 SMB 1。 強烈建議在生產環境中使用SMB檔案共用之前,先停用Linux用戶端上的SMB 1。

警告

本文參考 CentOS,這是 2024 年 6 月之後不再支援的 Linux 發行版。 請據以考慮您的使用和規劃。 如需詳細資訊,請參閱 CentOS 生命週期結束指導

Linux 發行版本狀態

從 Linux 核心 4.18 開始,SMB 核心模組 (基於舊版原因而稱為 cifs) 公開名為 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 檔案服務的詳細資訊: