在 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 檔案服務的詳細資訊: