在已取得 Root 權限的 Android 裝置上執行 Samba smbd,並透過模組 WebUI 管理 SMB 分享、認證、協議、網路介面與日誌。
目前版本:v0.3.17
版本代碼:59
架構:arm64-v8a
Samba:4.25.0
Samba 五個 ELF 已於 RC2 使用 NDK r30/API 28 重建,smbd 於 RC6 移除啟動版權橫幅;RC8 沿用上述產物。
本模組會以 Root 身分執行
smbd。請只分享必要目錄,優先使用帳號密碼模式,並且不要把 TCP 445 直接暴露到網際網路。
本版仍為 standalone Samba 與本機 passdb:帳密模式只允許 NTLMv2、禁用 LanMan。移除 ntlmhash ELF 後,Rust 使用 RustCrypto MD4 計算 Samba 所需 NT Hash;已有帳密資料不需轉換。NTLMv2 已被微軟棄用,收斂到 Rust 不會消除 NTLM 的協議風險。未改成 Guest 作為安全替代,也未宣稱支援 Kerberos。真正停用 NTLM 需先完成可用的替代認證部署。
來源:微軟 NTLM 淘汰方向、Samba ntlm auth、NTOWF 格式。
- 內建 Samba 4.25.0
smbd與四個 RPC 輔助程式 - 五個伺服器 ELF 均為 ARM64 完整靜態連結,無
PT_INTERP或DT_NEEDED - Samba 採
-Os + ThinLTO、未使用區段移除與相同程式碼合併,未因精簡額外裁掉協定或認證功能 - WebUI 啟動、停止與重新啟動 SMB 服務
- Guest/匿名模式
- 使用者名稱/密碼模式
- 密碼只保存 NT Hash,不將明文寫入
config.conf - 自訂分享路徑、分享名稱、連接埠、NetBIOS 名稱與 Workgroup
- 可讀寫或唯讀分享
- SMB2/SMB3 最低與最高協議設定
- LAN Guard:只在可信任區域網路介面上啟動服務
- 原生 rtnetlink 網路事件監看,不使用常駐輪詢
- 離開可信任 LAN 時自動停止,重新進入 LAN 時自動啟動
- LAN IP 或介面變更後自動重新綁定
smbd - 原生 Android property wait,等待開機完成時不做每秒輪詢
- Windows 目錄變更即時通知
- 繁體中文、簡體中文及英文 WebUI
- 跟隨系統、淺色、深色及 OLED 黑主題
- 模組卡片即時顯示服務狀態與 SMB 位址
- 一鍵產生診斷報告
- 支援安裝後立即啟用及熱更新,通常不需要重新開機
模組預設只接受可信任的實體 LAN 類型介面,例如:
- Wi-Fi
- Ethernet
- Wi-Fi 熱點
- USB 網路
- Bluetooth PAN
- Bridge/Bond
下列介面會被排除:
- 行動數據
- VPN
- TUN/TAP
- WireGuard
- Tailscale/ZeroTier 類虛擬網路
- CLAT、GRE 及其他隧道介面
- Wi-Fi Aware/P2P
開啟「開機自動啟動」時,模組會強制啟用介面綁定。裝置離開可信任 LAN 後,smbd 會停止並等待可信任網路恢復。
不需要帳號密碼,適合完全可信任的私人區域網路。
Guest 模式不應用於公共 Wi-Fi、宿舍網路、公司訪客網路或任何無法控制其他使用者的環境。
- 停用 Guest 存取
- 使用者名稱只允許英文字母、數字、點、底線及連字號
- 使用者名稱最長 32 個字元
- 密碼經本機工具轉換為 NT Hash
- 明文密碼不會寫入
config.conf - Hash 儲存在權限受限的 Samba passdb 檔案中
NT Hash 仍屬敏感認證資料,不應分享診斷目錄、runtime private 目錄或完整 /data/adb 備份。
- Android Root 環境
arm64-v8a裝置- 模組格式要求 Magisk
26.4.2或相容的模組管理器 - WebUI 目前使用
ksu.exec或ap.exec執行 Root 指令 - KernelSU/KernelSU Next 與 APatch 類 WebUI 管理器可使用完整 WebUI
- 沒有相容 WebUI bridge 時,SMB 服務及命令列控制仍可使用
目前發布包只包含 ARM64 版 Samba 伺服器與 RPC 程式,其他架構會在安裝時中止。Samba 編譯目標為 API 28(Android 9);目前實機驗證使用 Android 17,尚未逐一驗證 Android 9 至其他版本、ROM 與 Root 管理器。
- 從 Releases 下載最新模組 ZIP。
- 在 Magisk、KernelSU、KernelSU Next、APatch 或相容模組管理器中安裝。
- 安裝完成後重新開啟模組頁面。
- 進入 WebUI 設定分享目錄及認證模式。
- 按下「啟動服務」。
本模組沒有 system overlay。安裝程序會將新版內容同步到正式模組目錄,通常不需要重新開機;部分模組管理器仍可能顯示通用的重新開機提示。
預設值:
AUTO_START=0
ENABLED=0
SHARE_PATH=/sdcard/SpeedBackup
SHARE_NAME=SpeedBackup
READ_ONLY=0
MIN_PROTOCOL=SMB2_02
MAX_PROTOCOL=SMB3
BIND_INTERFACES=1
INTERFACES_AUTO=1
EXTRA_INTERFACES=
PORT=445
NETBIOS_NAME=ANDROIDSMB
WORKGROUP=WORKGROUP
AUTH_MODE=guest
SMB_USERNAME=speedbackup建議首次使用時:
- 將分享路徑改成實際需要存取的目錄。
- Windows 或多使用者網路環境優先改用帳號密碼模式。
- 保持「只綁定指定介面」開啟。
- 最低協議保持
SMB2_02或更高。 - 確認 WebUI 顯示的 SMB 位址後再從客戶端連線。
假設 WebUI 顯示:
smb://192.168.1.100/SpeedBackup/
在檔案總管網址列輸入:
\\192.168.1.100\SpeedBackup
在支援 SMB 的檔案管理器中輸入:
smb://192.168.1.100/SpeedBackup/
帳號密碼模式請使用 WebUI 內設定的 SMB 使用者名稱與密碼。Windows 連線建議使用帳號密碼模式。
在 MT「新增網路儲存空間 → SMB」填入手機目前的 LAN 位址與連接埠 445。
Guest 模式下留空網域、使用者名稱與密碼;帳密模式則使用 WebUI 設定的 SMB 帳密。
MT 帳號/VIP 登入與 SMB 伺服器帳密是兩套不同的認證。
已實測 MT 2.26.9 由另一台 Android 手機匿名連線,成功列出共享、瀏覽目錄並開啟測試文字檔。 此項驗證不涵蓋 MT 的帳密模式、寫入、大檔傳輸或其他 MT 版本。 遇到問題請提供 MT 版本、完整錯誤畫面、登入模式與模組診斷資料。
| 設定 | 說明 |
|---|---|
| 分享路徑 | Android 上要公開的目錄 |
| 分享名稱 | 客戶端看到的 SMB share 名稱 |
| 唯讀分享 | 開啟後禁止客戶端寫入及刪除 |
| 開機自動啟動 | Android 開機完成且可信任 LAN 就緒後啟動 |
| 設定 | 說明 |
|---|---|
| 最低/最高 SMB 協議 | 支援 SMB2_02 至 SMB3_11 |
| Port | 預設為 TCP 445 |
| 自動加入目前 IPv4 | 從可信任 LAN 介面取得 IPv4/CIDR |
| 只綁定指定介面 | 將 smbd 限制在產生的 interfaces 清單 |
| 額外 interfaces/CIDR | 指定目前可信任 LAN 的介面名稱或手機位址;使用核心回報的實際 CIDR,忽略不存在的位址 |
| NetBIOS | Samba NetBIOS 名稱 |
| Workgroup | SMB Workgroup 名稱 |
不接受 0.0.0.0/0 作為額外綁定;填入手機位址但遮罩不符時,會使用目前實際遮罩。沒有可綁定的可信任 LAN 時,不會只靠短暫出現的 PID 回報啟動成功。
WebUI 設定採即時保存。服務執行中時,需要重新載入的設定會自動重新啟動 smbd。
產生的 smb.conf 會啟用:
change notify = yes
kernel change notify = yes
smb3 directory leases = no這組設定用來讓 Windows 更快看到 Android 本機程序建立、刪除或重新命名的檔案,同時避免 SMB3 目錄租約長時間快取舊目錄清單。
模組控制入口:
su
MODDIR=/data/adb/modules/smbdwebui常用指令:
sh "$MODDIR/control.sh" start
sh "$MODDIR/control.sh" stop
sh "$MODDIR/control.sh" restart
sh "$MODDIR/control.sh" status_text
sh "$MODDIR/control.sh" log
sh "$MODDIR/control.sh" conf
sh "$MODDIR/control.sh" diagnose完整指令:
start
stop
restart
status
status_text
get_config
set_config
save_restart
set_password_hex
log
diagnose
conf
interface_key
trusted_lan
suspend_network
is_running
refresh_card
範例:
sh "$MODDIR/control.sh" set_config \
SHARE_PATH=/sdcard/SpeedBackup \
SHARE_NAME=SpeedBackup \
READ_ONLY=0 \
AUTH_MODE=guest不建議直接使用 set_password_hex。一般使用者應透過 WebUI 設定密碼,避免手動編碼錯誤。
| 路徑 | 用途 |
|---|---|
/data/adb/modules/smbdwebui |
模組程式及 WebUI |
/data/adb/smbdwebui/config.conf |
非機密使用者設定 |
/data/adb/smbdwebui/runtime/smb.conf |
執行時產生的 Samba 設定 |
/data/adb/smbdwebui/runtime/log |
模組及 Samba 日誌 |
/data/adb/smbdwebui/runtime/private |
Samba passdb 與使用者對應 |
/data/adb/smbdwebui/runtime/run |
PID 及執行時資料 |
/data/adb/smbdwebui/runtime/tmp |
模組專用暫存目錄,權限 0700 |
升級時會保留 config.conf。解除安裝時會刪除已保存的 SMB 認證資料,但刻意保留非機密設定,重新安裝後可沿用。
需要完全清除所有設定時,可在解除安裝後手動刪除:
su -c 'rm -rf /data/adb/smbdwebui'WebUI 的「查看日誌」可顯示模組日誌、即時網路診斷及 Samba 日誌。
命令列產生完整診斷報告:
su
/data/adb/modules/smbdwebui/diagnose.sh診斷內容包括:
- 模組版本
smbd與 Rustsmbctl版本- 目前設定,但不輸出密碼
- 目前網路介面與 LAN 判定
- 最近的模組及 Samba 日誌
回報問題時請一併提供診斷檔,並先確認其中沒有你不希望公開的裝置名稱、路徑、IP 位址或其他環境資訊。
- 啟動時確認必要伺服器與 RPC 程式可執行,並檢查設定埠的 LISTEN socket inode 確實由本模組 smbd 持有。
- 啟動等待以 inotify 事件及一次性 5 秒期限驅動;停止透過 pidfd 發送訊號並等待程序退出。
- 啟停、設定與認證操作共用 flock,設定採同目錄暫存檔、fsync 與 rename 保存。
- watcher 接收 rtnetlink、inotify 和 master pidfd 退出事件。失敗最多安排三次一次性退避重試;短時間反覆崩潰另有 30 秒退避。
- 異常紀錄寫入 module.log;Samba stdout/stderr 保留於 runtime/log。
- 停止服務或離開 LAN 時一併停止本模組 RPC 程序。
沒有常駐定時巡檢。Samba 本身的連線與協定計時器仍可能使用 CPU/網路,不宣稱整個服務零功耗。
WebUI / action.sh -> control.sh -> bin/smbctl
設定解析、JSON、程序與 socket 查詢、原子保存、序列化啟停
service.sh -> smbctl boot(內建開機屬性事件等待)
-> smbctl watch(rtnetlink + inotify + pidfd)
LAN 與設定變更 / smbd 退出 -> 同一套 Rust 管理流程
network_watch.sh -> smbctl watch(升級相容入口)
notify.sh -> app_process + smbnotify.dex
smbd -> samba-dcerpcd -> rpcd_classic / rpcd_lsad / rpcd_winreg
META-INF/ 安裝入口
action.sh 模組管理器動作按鈕
customize.sh 安裝及熱更新流程
service.sh 開機服務入口
control.sh Rust 命令列相容入口
network_watch.sh Rust watcher 相容入口
notify.sh Android 狀態通知入口
diagnose.sh 一鍵診斷
uninstall.sh 解除安裝清理
module.prop 模組資訊
sha256sum.txt 發布包內檔案雜湊
bin/smbd Samba 伺服器
bin/samba-dcerpcd RPC 服務調度
bin/rpcd_classic 共享列舉等傳統 RPC 服務
bin/rpcd_lsad LSA/SAMR 等 RPC 服務
bin/rpcd_winreg 遠端登錄 RPC 服務
bin/smbctl Rust 管理核心及事件監聽器
bin/smbctl Rust 多功能核心(內建 property wait)
bin/smbnotify.dex 獨立通知 Dex
webroot/ WebUI
sha256sum.txt 供人工或發布流程核對檔案,目前安裝腳本不會強制執行整包雜湊驗證。
統一建置包使用同一套 Samba 原始碼、Android 補丁與建置腳本,涵蓋客戶端及伺服器。 建置包不含可刷模組、模組底包或模組打包工具。完成後由維護者自行替換模組中的二進制。
準備 MSYS2、Git for Windows 與 ADB;目前腳本使用 C:\msys64、Git 所附 GPG 與
C:\platform-tools\adb.exe。腳本會檢查/準備 NDK 與其餘編譯依賴,詳見建置包內 build.ps1。
使用 Windows PowerShell 5.1 或 PowerShell 7,在建置包根目錄執行:
./build.ps1 # 預設:六個 ELF,全套 -Os + ThinLTO
./build.ps1 -BuildScope client # 同一套設定,只建置 smbclient
./build.ps1 -DeviceSerial SERIAL # 連接多台 ADB 裝置時指定測試裝置
./build.ps1 -Clean # 重建目前選定的 Samba 原始碼工作目錄編譯與連結全部在 Windows 本機完成,不使用 Termux。ADB 用於配置階段的目標端探測及
smbclient --version 執行檢查,目前建置流程仍要求連接已授權的 ARM64 Android 裝置。
預設輸出目錄為 dist/android-arm64-size/:
| 產物 | 用途 | 本版大小(位元組) |
|---|---|---|
smbclient |
腳本使用的 SMB 客戶端 | 7,551,304 |
smbd |
手機上的 SMB 伺服器 | 11,168,352 |
samba-dcerpcd |
RPC 調度 | 5,856,168 |
rpcd_classic |
傳統 RPC 服務 | 13,830,696 |
rpcd_lsad |
LSA/SAMR 服務 | 8,826,128 |
rpcd_winreg |
遠端登錄服務 | 6,989,872 |
smbclient 不能改名替代 smbd。模組伺服器端需搭配其餘五個程式,放入 bin/ 並設定執行權限。
RPC helper 的編譯路徑為 /data/adb/modules/smbdwebui/bin,預設日誌目錄為
/data/adb/smbdwebui/runtime/log;更改模組 ID 或目錄時需一併處理這些路徑。
smbctl 使用 native/ 的 Rust 建置流程。屬性等待已收進 smbctl,不再有獨立 propwait;smbnotify.dex 由 native/notify/build.ps1 建置。兩者均不屬於 Samba 建置目標。
Samba 使用 -Os -fPIE -ffunction-sections -fdata-sections -flto=thin,並搭配
--gc-sections --icf=safe;GMP/Nettle/GnuTLS 靜態函式庫仍使用原來的 -O2 建置。
-BuildProfile standard 可選用一般 -O2 版本,輸出至 dist/android-arm64/。
快取位於 %USERPROFILE%/SambaAndroidBuild,不需要建立 S: 磁碟映射。
- 每次執行查詢 Samba 官方下載頁的最新穩定版,下載後驗證簽章與固定金鑰指紋。
- 相同版本重用快取;查詢失敗時警告並使用最新快取來源,快取不保證是官網最新版。
- 建置包檔名中的 4.25.0 表示內附產物版本,不會將後續建置鎖在 4.25.0。
- NDK r29、API 28 及依賴版本固定,不隨 Samba 自動升級;也不在背景自動更新。
- 未來 Samba 若改動補丁位置,腳本會停止並要求維護補丁,不保證新版不需調整即可編譯。
build-metadata.json、source-version.txt、SHA256SUMS.txt記錄實際建置版本與產物。- 發布對應原始碼請保留
upstream-source/內精確版本來源、補丁、腳本及授權檔。 日後直接執行會查最新版本,因此保留精確版本來源仍是重現歷史產物的重要依據。
本模組包含 Samba 4.25.0 的 smbd 與 RPC 輔助程式。Samba 專案使用 GPLv3-or-later/LGPLv3-or-later 授權,實際適用條款依元件而定。散布編譯後的 Samba binary 時,應一併提供對應原始碼、修改內容、建置方式及必要授權文字。
正式公開前請完成:
- 在倉庫根目錄加入
LICENSE - 明確標示自有腳本、WebUI、native helper 與 Dex 的授權
- 加入 Samba 對應版本的授權文字
- 加入
THIRD_PARTY_NOTICES.md - 提供本次全部 Samba ELF 對應的完整 source/patch/build instructions,以及 GMP/Nettle/GnuTLS 等相依元件來源與授權
- 確認所有 binary 都能追溯到公開原始碼及建置產物
若希望整個倉庫使用單一且與 Samba 相容的授權,GPL-3.0-or-later 是較容易管理的選項;最終授權仍應由專案維護者決定。
Issue 請至少提供:
- 裝置型號
- Android 版本
- Root/模組管理器及版本
- 模組版本
- 使用的認證模式
- 網路類型
- 問題重現步驟
diagnose.sh產生的診斷資料
提交 Pull Request 前請:
- 保持 shell 相容 Android
/system/bin/sh - 避免依賴 Bash-only 語法
- 不在日誌輸出明文密碼或 NT Hash
- 不取消 LAN Guard 或降低預設網路安全性
- 更新 README、版本資訊及對應 checksum
- 說明是否需要重新編譯 native binary 或 Dex
- 目前只提供 arm64 binary
smbd以 Root 身分執行,錯誤的分享路徑可能公開敏感檔案- Guest 模式沒有身分驗證
- WebUI 需要相容的 Root manager exec bridge
- 某些 ROM、核心或 SELinux 策略可能阻止 Samba 綁定連接埠或存取指定路徑
- Windows 舊連線工作階段可能保留先前認證或目錄快取,需要中斷連線後重試
- 模組不應作為公網 SMB 伺服器使用
本專案需要 Root 權限,會執行網路服務並讀寫使用者指定的檔案目錄。使用者應自行確認分享範圍、網路環境、備份及授權合規性。維護者不對資料遺失、未授權存取、裝置異常或錯誤設定造成的損害負責。