我終於搞定了。而且這解法真的很髒。
macOS 26.4 悄悄搞壞了 SMB 的 Time Machine —— 網路上的修法都只解了一半
TL;DR:這裡其實有兩個 bug,網路上的討論都只講到第一個,所以大多數解法都沒用。
症狀
- 備份一開始就失敗,出現
BACKUP_FAILED_AUTHENTICATION_ERROR (29)/錯誤 80 - 用 Finder 以相同帳密掛載同一個分享沒問題
smbutil view //USER@nas.local也可正常運作- 舊款 Synology/NAS 備份目標(Tahoe 之前設定的)還是正常,只有新加的目標失敗
兩個 bug
Bug A —「isKnownServer 0」: Tahoe 會利用 whitelist plist 限定哪些 SMB 憑證有效。這是網路上都在解決的部分:
sudo /usr/libexec/PlistBuddy -c 'Add :nas.local bool true' \
'/private/var/root/Library/Group Containers/group.com.apple.NetworkAuthorization.ServerMarkers/serverMarkers.plist'
你要加入 Time Machine URL 會出現的所有 host 名,包含有結尾點的原始 Bonjour FQDN,像是 NAS(TimeMachine)._smb._tcp.local.。
Bug B — 鑰匙圈 ACL 回歸問題(沒人在講的那個):
NetAuthSysAgent在 26.4 以你自己的 uid(501)執行,不是 root。- 所以
/Library/Keychains/System.keychain單筆 ACL 真的有影響。 - 新的 TM-Settings 介面會用
partition_id=apple:寫入密碼,NetAuthSysAgent看不到 →Unable to find matching items -25300→OpenSession failed 80。 - 直觀本能失效:
security add-internet-password -A(允許任何 App)其實寫進去的applications: <null>,Agent 解讀成「不給任何 App 用」,而不是「任何 App 都行」。還是壞的。
完整修法
有 Bug B 時的 log 長這樣:
isKnownServer 1
Unable to find matching items -25300 (x8-10)
OpenSession failed 80
要用明確 -T 授權重新建立鑰匙圈條目,不能用 -A:
read -r -s "TMPW?SMB password: " && echo
for S in 'NAS(TimeMachine)._smb._tcp.local.' 'nas.local'; do
sudo security delete-internet-password -a USER -s "$S" /Library/Keychains/System.keychain 2>/dev/null
sudo security add-internet-password \
-a USER -s "$S" -p /YourShare -r 'smb ' \
-D 'Time Machine Network Password' \
-T /System/Library/CoreServices/NetAuthAgent.app \
-T /System/Library/CoreServices/NetAuthAgent.app/Contents/MacOS/NetAuthSysAgent \
-T /System/Library/PrivateFrameworks/SystemAdministration.framework/XPCServices/writeconfig.xpc \
-T /System/Library/CoreServices/TimeMachine/backupd \
-T /System/Library/CoreServices/TimeMachine/backupd-helper \
-w "$TMPW" \
/Library/Keychains/System.keychain
done
unset TMPW
把 USER、主機名稱、/YourShare(要有前導斜線,不要 URL 編碼)都換成你的實際資料。
檢查
sudo security dump-keychain -a /Library/Keychains/System.keychain | less
找到你新增的條目。正常 ACL 會有3 個授權,decript 下會列出 Apple helper app,沒有 partition_id。如果有 4 個授權結果出現 partition_id → apple:,或者 3 個授權結果有 applications: <null>,就還是有問題 —— 請照上面指令重建。
注意點
- **千萬別用
-A。**只用-T。 - **一定要加
-w "$PASSWORD"。**沒加的話,security默認讀 stdin,在 script 或 non-TTY 下會是空的 → exit 0 → 結果你建立了沒有密碼的項目。 -p那個 share 值要給目標目錄的實際路徑(/Time Machine - Server),不是 URL 編碼。- 協定
-r 'smb '要有結尾空白(四碼 OSType)。 NetAuthSysAgent以 uid=501 行為才是 Synology(Tahoe 前加的,ACL 不一樣)會正常,但新加目標失敗的真正原因。- Reddit 流傳的
/etc/nsmb.conf signing_required=yes修的是另一個 SMB 問題,跟 Bug B 無關。
我這樣一做備份就一次成功。希望能救大家不要再狂翻 log 追 bug 了。