自架檔案管理器比較:FileBrowser、Filestash 與 SFTPGo
比較 FileBrowser、Filestash、SFTPGo 與 Cloud Commander 的功能差異。深入分析權限控管、儲存後端與驗證機制,並提供安全部署建議,避免檔案系統曝露風險。
什麼是自架檔案管理器,以及它不是什麼
自架檔案管理器是一個覆蓋在您 VPS (虛擬私人伺服器) 現有目錄樹上的網頁介面。登入後,您看到的 /srv/files 即是磁碟上的實際狀態,您可以進行上傳、重新命名、下載或分享連結。檔案不會被複製到第二個系統,因此您透過瀏覽器放入的檔案,ls 在一秒後即可顯示。
搜尋結果常將此類工具與執行其他任務的軟體混淆。同步工具會在每個裝置上保留檔案副本,這正是 自架 Dropbox 替代方案 的用途。物件儲存完全沒有目錄樹結構,它使用儲存桶 (buckets) 與 API,因此 執行 MinIO 以提供 S3 相容物件儲存 是針對不同需求的回應。伺服器管理面板是用於管理機器而非檔案,這屬於 Cockpit 與 Webmin 比較 的範疇。
當同事需要從伺服器取得一個 300 MB 的壓縮檔,或是您想用手機修正設定檔中的錯字時,您就需要檔案管理器。這類任務很單純,工具也同樣輕量。
閱讀時請記住一個事實:這是一個對您的檔案系統擁有讀寫權限並監聽連接埠的 Web 應用程式。以下每個選項,本質上都是在決定該處理程序能存取您磁碟的範圍。
FileBrowser 已歸檔,安裝前請詳閱此說明
FileBrowser 是 filebrowser/filebrowser 專案,也是多數指南仍推薦的解決方案。其 README 開頭現已標註:
File Browser 已於 2026-09-01 歸檔。最後一個預定版本已經發布。未來將不再有任何版本更新、錯誤修復或安全性修復。
Apache 2.0 授權的程式碼仍可運作,但安全性修復已停止。對於此類軟體而言,這比其他軟體更為關鍵,因為該軟體的目的即是透過 HTTP 提供檔案系統的寫入存取權。
維護者已列出維持其運作的方式,無論您選擇何種工具,以下建議皆值得遵循:請勿將其直接暴露於網際網路,應將其置於執行 TLS (transport layer security) 終止並執行自身驗證機制的反向代理之後;保持指令執行功能(command runner)停用;並以非特權模式在容器中執行,僅掛載您打算提供存取的目錄。
該 README 中有一行內容比其餘部分更重要。其 Session 是獨立的 JWT (JSON web tokens),而非伺服器端的識別碼,因此無法撤銷。一旦 Session token 外洩,在過期前皆有效,且變更密碼亦無法使其失效。若您仍要使用 FileBrowser,前端的驗證層才是實際執行安全防護的關鍵。
FileBrowser Quantum:持續更新的分支版本
開發工作已轉移至分支版本 FileBrowser Quantum (gtsteffaniak/filebrowser),並以 gtstef/filebrowser 映像檔發布。它將設定方式重構為單一 config.yaml 檔案,取代了以往混合使用命令列旗標與資料庫設定的做法。官方建議的快速測試方式如下:
docker run -d \
-v $(pwd):/srv \
-p 80:80 \
gtstef/filebrowser:beta此指令會將當前目錄發布至 http://localhost,預設登入帳號為 admin / admin。在容器可從外部存取之前,請務必先修改預設密碼。
若要長期使用,請使用 Compose,掛載資料「目錄」而非單一資料庫檔案,並將連接埠綁定至 localhost:
services:
filebrowser:
image: gtstef/filebrowser:beta
user: "1000:1000"
volumes:
- /srv/files:/folder
- ./data:/home/filebrowser/data
ports:
- 127.0.0.1:8080:80
restart: unless-stopped設定檔位於 /home/filebrowser/data/config.yaml,資料庫則位於 /home/filebrowser/data/filebrowser.sqlite。2.0.0 版本變更了資料庫格式並會執行一次性遷移,這就是文件要求掛載目錄的原因:若僅掛載單一檔案,遷移程序將無法建立新檔案。config.yaml 內的路徑為容器內路徑,因此設定檔中的來源應填寫 /folder,而非 /srv/files。若路徑設定錯誤,系統會顯示空白檔案列表且不會報錯,因為該目錄在容器內確實不存在。
該專案發布了 latest 與 stable 版本,大小約 60 MB,內建 FFmpeg 以支援影片縮圖;另有 stable-slim 版本,大小約 15 MB,僅包含核心功能。以上數據為 2026 年 8 月安裝頁面所示。請鎖定您選擇的標籤(tag)。latest 會在未通知的情況下變更,若檔案管理員在容器執行期間變更設定格式,將會導致嚴重的維運問題。
在同類輕量級工具中,此專案功能最強大。它支援透過包含與排除規則管理多個來源,因此單一實例即可同時開放 /srv/media 與 /srv/docs 並設定不同的存取範圍。分享連結可設定過期時間,並支援匿名存取或限制特定使用者。驗證機制涵蓋 OIDC (OpenID Connect)、LDAP (lightweight directory access protocol)、密碼加雙重驗證,以及 Proxy header 模式。透過此 Proxy 模式,它能部署在 自架 Authentik 伺服器 的單一登入 (SSO) 機制後方,無須維護第二份使用者清單。
Filestash:整合現有儲存空間的統一介面
Filestash 的運作模式與眾不同。它是一個連接後端儲存的網頁前端,支援的後端種類繁多,包括 FTP、SFTP (SSH file transfer protocol)、S3、SMB、WebDAV、IPFS 等超過 20 種協定。當檔案並非存放在執行介面的伺服器上時,Filestash 是合適的解決方案。
mkdir -p /srv/filestash && cd /srv/filestash
curl -O https://downloads.filestash.app/latest/docker-compose.yml
docker compose up -d其映像檔為 machines/filestash:latest。開啟 http://your_domain:8334 後,首個畫面會要求設定管理員密碼。請務必立即設定,否則在設定完成前,任何連線至該連接埠的人皆可存取管理控制台。
在進行建置前,請先理解其身分驗證模型。Filestash 並未採用傳統意義上的使用者資料庫。憑證會以加密、驗證且僅限 HTTP (HTTP only) 的 Cookie 形式儲存在瀏覽器中;除非使用分享功能,否則伺服器端不會保留任何資訊。若使用分享功能,Filestash 會保留一份加密後的持久化憑證。這裡的「使用者」即為儲存帳號:身分驗證依賴後端(如 SFTP 帳號或 S3 金鑰),而非 Filestash 本身。
此設計簡潔,但有其代價。根據 2026 年 8 月的資訊,其定價頁面顯示免費自架版本採用 AGPL v3 (GNU Affero General Public License) 授權,限制最多 3 名使用者;若需使用 SSO (SAML、OIDC 及 LDAP) 與基於角色的存取控制 (RBAC),則需採用每月 50 美元起的付費自架方案。若您的規劃是「免費將 Filestash 整合至企業 SSO」,請務必在進行架構設計前查閱該頁面。
SFTPGo:兼具網頁介面的協定伺服器
SFTPGo 是此類軟體中功能最強大者,但常因錯誤的理由被推薦。它能透過 SFTP、HTTP/S、FTP/S 與 WebDAV 提供服務,後端支援本地檔案系統、加密本地檔案系統、S3 相容物件儲存、Google Cloud Storage、Azure Blob Storage 或其他 SFTP 伺服器。
官方提供二進位檔、Debian 與 Ubuntu 套件以及容器映像檔。目前的 APT 儲存庫來源與簽章金鑰可於 SFTPGo 文件的安裝頁面取得。使用容器部署是最快啟動的方式,請將 tag 替換為您需要的版本:
docker run --name some-sftpgo -p 8080:8080 -p 2022:2022 -d "drakkan/sftpgo:tag"SFTP 監聽 2022 埠,網頁介面則監聽 8080 埠。請務必將 /srv/sftpgo 掛載為 volume,否則當容器重建時,帳號與檔案將會消失,因為使用者家目錄預設位於 /srv/sftpgo/data/<username>。
此軟體包含兩個網頁介面,其差異常被多數教學忽略。WebAdmin 位於 /web/admin,用於管理用途:您可在此建立使用者、群組、虛擬資料夾與事件規則,並設定配額、頻寬限制及存取時間限制。WebClient 位於 /web/client,則是終端使用者的檢視介面,使用者可在此瀏覽檔案、變更個人憑證、設定雙重驗證及建立分享連結。
這些分享功能是本比較中最出色的。使用者可建立 HTTP/S 連結來分享檔案與資料夾,並能限制下載與上傳次數、設定分享密碼、限制來源 IP 位址,以及設定自動過期日期。
那麼為何要謹慎使用?因為其核心在於帳號模型與協定伺服器,而非單純的瀏覽體驗。當您需要為他人建立具備配額的真實帳號、需接收來自外部系統的 SFTP 或 FTPS 上傳,或是需要將同一個儲存桶掛載至多個使用者的家目錄時,請選擇 SFTPGo。虛擬資料夾功能可達成後者:將由本地磁碟、S3、GCS、Azure Blob、SFTP 或 HTTP 支援的資料夾掛載至多個帳號,並針對每個使用者在共享資料夾上設定獨立配額。若您僅是想透過 /srv/files 提供一個可瀏覽的頁面,這套系統顯得過於龐大。
還有兩點值得注意。社群版採用 AGPL-3.0 授權並附加額外條款,另有商業授權的企業版。開源版本內建 OIDC 登入功能,可將身分提供者(Identity Provider)的使用者對應至 SFTPGo 的管理員與使用者,適用於兩個網頁介面。您也可以透過 httpd 設定檔中的 enable_web_client 全域停用客戶端介面,或在特定使用者的拒絕協定清單中加入 HTTP,藉此針對個別使用者啟用或停用檔案管理功能。
Cloud Commander:雙視窗與終端機,專為個人設計
Cloud Commander 是一款採用 MIT 授權的 Node.js 檔案管理器,具備雙視窗介面、內建編輯器、控制台與終端機。請使用 npm i cloudcmd -g 進行全域安裝,或執行已發布的容器:
docker run -it --rm -v ~:/root -v /:/mnt/fs -w=/root -p 8000:8000 coderaiser/cloudcmd執行該指令前請先閱讀內容。-v /:/mnt/fs 會將整個主機檔案系統掛載至容器中,而範例中的 ~/.cloudcmd.json 則會發布 "root": "/"、"auth": false 與 "console": true。此組合意味著任何連線至 8000 埠的人,都能存取您的整個磁碟並取得伺服器上的指令控制台。這對筆記型電腦而言是合理的預設值,但對 VPS 來說則非常危險。
請縮小存取範圍。容器會讀取 /root/.cloudcmd.json,上述發布指令透過掛載您的家目錄來提供此檔案,因此請保留設定檔掛載並移除其餘部分:
docker run -d --name cloudcmd \
-v ~/.cloudcmd.json:/root/.cloudcmd.json \
-v /srv/files:/srv/files \
-w=/srv/files \
-p 127.0.0.1:8000:8000 \
coderaiser/cloudcmd在該設定檔中,將 "root" 設為 /srv/files,將 "auth" 設為 true 並搭配 "username" 與 "password",除非您確實需要瀏覽器 Shell 存取權,否則請將 "console" 與 "terminal" 設為 false。您也可以使用對應的指令列參數,包括 --root、--auth、--username、--password 與 --prefix。
請務必認清其定位。它僅提供一組憑證,沒有使用者權限隔離、沒有配額限制,也沒有分享連結功能。這是一款個人工具,因此請如上所述將其綁定至 localhost,並透過通道存取:
ssh -L 8000:127.0.0.1:8000 you@your-vps接著在您的本機開啟 http://127.0.0.1:8000。檔案管理器不會暴露於公開網路,唯一對外開放的僅有您已 在 VPS 上強化過 的 SSH daemon。
為什麼 Nextcloud 不適合這項特定工作
Nextcloud 是優秀的軟體,但它並非為此而生。它是一個協作平台:包含 PHP 應用程式、資料庫、背景工作、桌面同步客戶端以及應用程式商店。為了取得 /srv/files 的網頁檢視介面而執行它,對於這項小任務來說,涉及的組件過於繁雜,且存在明顯的屬性不符。Nextcloud 將檔案元數據儲存在資料庫資料表中,而非在每次請求時讀取目錄,因此透過 rsync 或 cron job 寫入的檔案,在掃描程序完成前,於介面中可能呈現隱形狀態,並伴隨 sudo -u www-data php occ files:scan --all。檔案管理器會在載入頁面時列出目錄內容,因此不會產生此類落差。
請將 Nextcloud 用於它擅長的領域:行事曆、聯絡人、同步,以及與預期使用桌面客戶端的使用者進行分享。在具備 Docker、TLS 與備份功能的 VPS 上部署 Nextcloud 一文涵蓋了該設定。若您已在執行 Nextcloud 且僅需檢視現有目錄,請啟用 External Storage 應用程式並就此打住。若部署第二個對同一磁碟擁有寫入權限的網頁應用程式,將會增加另一個需要修補安全漏洞的目標。
如何在不暴露整台伺服器的情況下執行服務
切勿將其指向 /。該處理程序可讀寫其使用者帳號能存取的所有內容,因此一旦工作階段權杖(session token)遭竊,攻擊者便能取得同等權限的檔案系統存取權。請僅提供單一目錄 /srv/files,並專門為此目的建立該目錄。
請以非 root 使用者身分執行,並僅掛載服務所需的目錄。在 Compose 中,這意味著使用 user: "1000:1000" 加上每個目錄一個綁定掛載(bind mount),並對其無需寫入的任何內容設定 :ro:
volumes:
- /srv/files:/folder
- /srv/media:/media:ro此變更通常會導致瀏覽功能正常,但上傳功能因 permission denied 而失敗,這是因為容器內的使用者 ID 在容器外並不擁有該目錄。請比較兩者:docker exec filebrowser id 會顯示容器內的使用者,ls -ln /srv/files 則顯示主機上的數值擁有者。請使用 sudo chown -R 1000:1000 /srv/files 修復此問題。這與 Docker 映像檔中的 PUID 與 PGID 所要解決的擁有權問題相同。
將發布的連接埠綁定至 localhost,即 127.0.0.1:8080:80 而非 8080:80。Docker 會在 ufw 之前寫入自己的 netfilter 規則,因此即使 ufw deny 8080 處於啟用狀態,直接發布的連接埠仍可從網際網路存取。請在前端放置反向代理以處理 TLS。若使用明文 HTTP,工作階段 Cookie 會在網路上以明文傳輸,而該 Cookie 等同於檔案系統的存取權。若您對 Compose 尚不熟悉,VPS 上的 Docker Compose 涵蓋了這些程式碼片段所假設的檔案配置。
當應用程式本身的驗證機制薄弱時,請增加一層驗證。對於單人使用的執行個體,在代理層設定 HTTP basic auth 即已足夠。若涉及多人使用,請使用 OIDC 或針對身分提供者(identity provider)進行 forward auth,以確保撤銷單一帳號時能同時撤銷所有存取權。
關閉額外功能。任何提供 shell、指令執行器或瀏覽器內終端機的檔案管理器,都等於向持有有效工作階段的任何人提供遠端程式碼執行(RCE)能力。FileBrowser 本身的建議是保持指令執行器停用,而 Cloud Commander 的範例設定檔則啟用了主控台。請根據需求主動決策,而非採用預設值。
最先出現的故障與常見錯誤訊息
listen tcp :80: bind: permission denied。 Linux 保留 1024 以下的連接埠供特權程序使用。FileBrowser Quantum 的說明文件設定使用 80 埠,這在容器內運作正常,但若以非特權使用者身分在主機執行二進位檔則會失敗。請在 config.yaml 設定 1024 以上的連接埠,並由反向代理伺服器負責處理 443 埠。
瀏覽功能正常但上傳失敗。 列出目錄內容需要 r-x,寫入目錄則需要 w。網頁介面僅會回報一般性錯誤,因此請優先檢查檔案系統權限,而非應用程式日誌。
413 Request Entity Too Large。 此錯誤來自 Nginx,而非檔案管理程式。預設的 client_max_body_size 為 1 MB,因此較大的上傳請求在抵達應用程式前,就會被代理層拒絕。請在 server 區塊中設定 client_max_body_size 4096m;,或設定 0 以停用此檢查。
上傳的檔案群組錯誤。 無論上層目錄設定為何,新檔案的擁有者皆為執行程序的該使用者,這會導致其他讀取相同目錄樹的服務發生錯誤。請為兩個服務設定共用群組,並使用 sudo chmod g+s /srv/files 對目錄設定 setgid 位元,使新檔案自動繼承該目錄的群組。
直接連線正常,但透過反向代理後失效。 應用程式若部署在子路徑下,必須明確告知其前綴路徑,才能正確產生連結。Cloud Commander 提供了 --prefix 參數來處理此需求。若應用程式無此選項,請為其配置獨立的子網域,並將根路徑代理至該服務。
該選擇哪一套自架檔案管理器?
- 若僅有一台 VPS、一兩個目錄,且需分享具備過期功能的連結,未來可能整合 SSO:請選擇 FileBrowser Quantum。
- 若檔案儲存於他處(如 S3 bucket、SFTP 主機或透過 SMB 掛載的 NAS),且希望透過單一網頁介面檢視:請選擇 Filestash(需注意免費層級限制)。
- 若需要為他人建立帳號、設定配額,並透過 SFTP 或 FTPS 上傳檔案:請選擇 SFTPGo,並將網頁客戶端視為附加功能,而非選擇它的主因。
- 若為個人工具,且內建編輯器與終端機,僅透過 SSH tunnel 存取且不對外公開:請選擇 Cloud Commander。
- 若已運行 Nextcloud 且有現存目錄需要開放:請使用 External Storage 應用程式,無需安裝任何新軟體。
無論選擇哪一套,部署方式的重要性遠高於軟體本身。請確保僅開放單一目錄、使用非 root 使用者執行、連接埠綁定至 localhost,並在前端加上驗證機制。以這種方式設定的檔案管理器是便利的工具;若將同樣的軟體指向 / 並使用共用密碼,它就等同於一個擁有精美介面的遠端 shell。
FAQ
在 2026 年執行 FileBrowser 仍然安全嗎?
上游 filebrowser/filebrowser 的 README 指出,File Browser 已於 2026-09-01 封存,後續將不再發布更新、錯誤修正或安全性修補。雖然程式碼仍可執行,但未修補且具備檔案系統寫入權限的軟體,其風險會隨時間增加。若您選擇繼續使用,請遵循專案建議:切勿直接暴露於網際網路、透過反向代理處理 TLS 與驗證、停用指令執行功能(command runner),並以非特權容器執行,僅掛載需服務的目錄。此外,請注意其工作階段(session)採用獨立的 JWT,而非伺服器端識別碼,因此無法撤銷;變更密碼亦無法使已發出的權杖失效。若為新安裝,請使用 gtstef/filebrowser 映像檔發布的 FileBrowser Quantum 分支,該專案目前持續開發中。
自架檔案管理器可以使用我現有的 SSO 嗎?
FileBrowser Quantum 支援 OIDC、LDAP 與代理標頭模式(proxy header mode),因此可部署於現有身分提供者後方,無需維護第二份使用者清單。SFTPGo 的 OpenID Connect 整合包含於開源版本中,可將身分提供者使用者對應至 SFTPGo 的管理員與使用者,適用於 WebAdmin 與 WebClient 介面。Filestash 則是例外:截至 2026 年 8 月,其定價頁面將 SSO(SAML、OIDC 與 LDAP)列入每月 50 美元起的付費自架方案,而免費方案則為 AGPL v3 授權,限制最多 3 名使用者。當應用程式完全不支援 SSO 時,替代方案是在反向代理層進行轉發驗證(forward authentication),這能保護登入頁面,但無法影響應用程式內部的權限控管。
這些軟體中哪一個提供會過期的分享連結?
SFTPGo 的實作最為完整。使用者可從 WebClient 建立 HTTP/S 連結,並限制下載與上傳次數、設定密碼、依來源 IP 位址限制存取,以及設定自動過期日期。FileBrowser Quantum 支援設定過期時間的分享功能,存取權限可設為匿名或限特定使用者,並可針對個別分享設定檢視、編輯與上傳權限。Filestash 亦具備分享功能,且它是唯一會在伺服器端保留儲存憑證加密副本的案例,因為即使在您的瀏覽器工作階段結束後,該連結仍須運作。Cloud Commander 則完全不提供分享連結功能。
如果我是唯一的使用者,將檔案管理器指向 / 是否安全?
不安全,且風險並非源於對您自身的信任。該處理程序對其使用者帳號可存取的任何路徑皆具備讀寫權限,因此任何進入該工作階段的途徑、遭竊的 Cookie、上傳處理程式中未修補的漏洞,或是重複使用的密碼,都可能導致 /etc、您的 SSH 金鑰以及所有服務資料目錄遭存取。請將掛載範圍限制在單一目錄:使用 /srv/files 而非 /。Cloud Commander 在此方面風險最高,因為其發布的 Docker 指令將主機根目錄掛載至 /mnt/fs,且範例設定將 "root": "/" 設為 "auth": false。在該容器監聽任何非 localhost 的位址前,請務必變更上述設定。