TrueNas SMB 簽名及加密設定
TrueNAS 預設沒有開啟 SMB 簽名及加密,新版又取消了 auxiliary parameters 欄位,所以不要懷疑怎麼找不到,因為真的沒有這個選項。
網路上基礎設定的教學不少,這裡補足安全方面的設定,這陣子 Windows 更新要求 SMB 必須加上簽名所以順便回來更新此文章。
檢查設定
先檢查 TrueNAS 自己的設定,進入 TrueNAS 輸入
sudo smbstatus
此指令用於顯示現在的 SMB連線狀態,印出後檢查 Encryption 和 Signing 欄位是否出現加密演算法而不是代表沒有設定的 "-",partial 表示已經啟用只是不強制客戶端使用。除此之外也可以檢查 smb 設定檔
sudo testparm -s
這會印出 /etc/smb4.conf
的內容,檢查 server signing 和 server smb encrypt 的設定,如果都成功設定就不需要看完整篇文章。
設定 SMB 加密和簽名
先說預計要改哪些設定
- server signing = auto:啟用伺服器簽名功能,使用 required 強制客戶端必須使用才能連線。
- server smb encrypt = auto:啟用伺服器端的SMB加密。
- client smb encrypt = auto:啟用客戶端的SMB加密。
- inherit owner = yes:(可選)設定檔案和目錄繼承父目錄的擁有者。
- inherit permissions = yes:(可選)設定檔案和目錄繼承父目錄的權限設置。
不建議把加密和簽名功能設為 required,因為 macOS 使用簽名速度會非常慢。
設定簽名和加密功能
使用 TrueNAS CLI 方式設定,這會覆蓋過往設定,包括不在這些選項裡面的也會被清理。
因為沒有 GUI 欄位所以現在要改由 TrueNAS CLI 模式修改,首先在 TrueNAS 管理介面點選左側的 System > Shell,輸入 cli
進入 TrueNAS CLI 模式之後貼上
service smb update smb_options="server signing = auto\nserver smb encrypt = auto\nclient smb encrypt = auto\ninherit owner=yes\ninherit permissions=yes"
結束後重啟 smb 服務刷新才能設定。這個指令會設定在 /etc/smb4.conf
,但是直接修改此文件沒有用,該文件重開機會自動重置。
關閉 SMBv1
SMBv1 有安全漏洞不建議使用,在 System > Services 修改 SMB 設定,取消勾選 Enable SMB1 support
。
測試是否成功
設定完成後可以使用最前面的方式檢查設定,也可以用別台電腦使用 nmap 測試,在 macOS 使用 brew 安裝 nmap:
brew install nmap
測試前記得重啟服務,使用此指令測試,應該會顯示 "Message signing enabled but not required"
sudo nmap -sS -sV -Pn -p 445 --script="smb2-security-mode" <IP>
也可以使用此指令檢查是否啟用了 SMBv1
nmap -p 445 --script smb-protocols
常見問題
無法連線
時間必須正確才能成功連線,TrueNAS 不管在哪個時區都有可能慢八小時造成連線失敗,我設定過的時間有以下項目:
- System > General > Localization
- timedatectl
- hwclock
MacOS 連線非常慢
Mac SMB 使用簽名會慢到不行,使用此指令修正 Mac 本身的 SMB 設定,分成 Mac 本身是伺服器和客戶端兩種情況
伺服器
-
先關閉 SMB 共用功能
-
關閉簽名功能
sudo defaults write /Library/Preferences/SystemConfiguration/com.apple.smb.server SigningRequired -bool FALSE
-
開啟 SMB 服務,完成設定
-
額外指令
重新啟動 Mac OS X smb 服務
在這裡不會用到但是順便把指令放上來
https://gist.github.com/TomCan/7182edff81937687432f
sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.smbd.plist
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.smbd.plist
sudo defaults write /Library/Preferences/SystemConfiguration/com.apple.smb.server.plist EnabledServices -array disk
客戶端
-
輸入
sudo su
填入密碼 -
刪除原有設定檔
rm -f /private/etc/nsmb.conf
-
寫入新設定檔
sudo tee /etc/nsmb.conf > /dev/null <<EOF
# macOS SMB configuration file
# This file controls the behavior of the SMB client
[default]
# --- Settings that decrease security ---
# Disable SMB signing (reduces security)
signing_required=no
# Disable negotiation validation (reduces security)
validate_neg_off=yes
# --- Neutral or efficiency-impacting settings ---
# Enable named streams support (neutral)
streams=yes
# Disable change notifications (impacts operational efficiency)
notify_off=yes
# Enable soft mounts (may impact data availability)
soft=yes
# Disable directory caching (impacts performance)
dir_cache_max_cnt=0
dir_cache_max=0
dir_cache_off=yes
# --- Settings that improve or do not significantly impact security ---
# Disable NetBIOS and use direct hosting over TCP/IP (improves security)
port445=no_netbios
# Set SMB protocol version to SMB 2 or later (improves security)
protocol_vers_map=4
# Enable multi-channel support and prefer wired connections (neutral, generally safe)
mc_on=yes
mc_prefer_wired=yes
EOF -
避免在網路儲存裝置寫入 .DS_Store 文件
sudo defaults write com.apple.desktopservices DSDontWriteNetworkStores -bool TRUE