Skip to content

About

在已取得 Root 權限的 Android 裝置上執行 Samba smbd 將手機通過445port設置成SMB 伺服器,並透過模組 WebUI 管理 SMB 分享、認證、協議、網路介面與日誌。

Resources

Stars

17 stars

Watchers

0 watching

Forks

Repository files navigation

Android SMB Server WebUI

在已取得 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 直接暴露到網際網路。

NTLM 相容性與安全範圍

本版仍為 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 Guard

模組預設只接受可信任的實體 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/匿名

不需要帳號密碼,適合完全可信任的私人區域網路。

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 管理器。

安裝

  1. 從 Releases 下載最新模組 ZIP。
  2. 在 Magisk、KernelSU、KernelSU Next、APatch 或相容模組管理器中安裝。
  3. 安裝完成後重新開啟模組頁面。
  4. 進入 WebUI 設定分享目錄及認證模式。
  5. 按下「啟動服務」。

本模組沒有 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

建議首次使用時:

  1. 將分享路徑改成實際需要存取的目錄。
  2. Windows 或多使用者網路環境優先改用帳號密碼模式。
  3. 保持「只綁定指定介面」開啟。
  4. 最低協議保持 SMB2_02 或更高。
  5. 確認 WebUI 顯示的 SMB 位址後再從客戶端連線。

連線方式

假設 WebUI 顯示:

smb://192.168.1.100/SpeedBackup/

Windows

在檔案總管網址列輸入:

\\192.168.1.100\SpeedBackup

Android、macOS 或 Linux

在支援 SMB 的檔案管理器中輸入:

smb://192.168.1.100/SpeedBackup/

帳號密碼模式請使用 WebUI 內設定的 SMB 使用者名稱與密碼。Windows 連線建議使用帳號密碼模式。

MT 管理器

在 MT「新增網路儲存空間 → SMB」填入手機目前的 LAN 位址與連接埠 445。 Guest 模式下留空網域、使用者名稱與密碼;帳密模式則使用 WebUI 設定的 SMB 帳密。 MT 帳號/VIP 登入與 SMB 伺服器帳密是兩套不同的認證。

已實測 MT 2.26.9 由另一台 Android 手機匿名連線,成功列出共享、瀏覽目錄並開啟測試文字檔。 此項驗證不涵蓋 MT 的帳密模式、寫入、大檔傳輸或其他 MT 版本。 遇到問題請提供 MT 版本、完整錯誤畫面、登入模式與模組診斷資料。

WebUI 設定

分享設定

設定 說明
分享路徑 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。

Windows 目錄刷新

產生的 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 與 Rust smbctl 版本
  • 目前設定,但不輸出密碼
  • 目前網路介面與 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 原始碼建置(既有配方)

統一建置包使用同一套 Samba 原始碼、Android 補丁與建置腳本,涵蓋客戶端及伺服器。 建置包不含可刷模組、模組底包或模組打包工具。完成後由維護者自行替換模組中的二進制。

Windows 本機建置

準備 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 權限,會執行網路服務並讀寫使用者指定的檔案目錄。使用者應自行確認分享範圍、網路環境、備份及授權合規性。維護者不對資料遺失、未授權存取、裝置異常或錯誤設定造成的損害負責。

About

在已取得 Root 權限的 Android 裝置上執行 Samba smbd 將手機通過445port設置成SMB 伺服器,並透過模組 WebUI 管理 SMB 分享、認證、協議、網路介面與日誌。

Resources

Stars

17 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages