WFM是一個簡單的基於Web的文件管理器。您可以將其用作NAS框,FTP服務器,“個人云”,文檔共享站點或輕量級CMS的Web接口。它允許執行基本文件和文件夾操作,例如下載,上傳,重命名,移動,刪除文件並組織目錄樹結構。可以在瀏覽器中直接編輯文本文件,例如標記,標記,配置等。 WFM還可以創建和打開書籤,鏈接和快捷鍵文件等。

WFM是具有自己的Web服務器的獨立服務。它不需要Apache,Nginx,PHP等。它直接從systemd , sysvinit , launchd , rc或Docker運行。 Lets Genterpt / certbot支持TLS / SSL自動證書生成。
就像Docker,Kubernetes,Hugo等一樣,WFM用GO語言寫。二進制是靜態鏈接的,完全自我包含並且外部依賴性為零。圖標是Unicode表情符號。 CA證書在建造時間嵌入。無需Python,PHP,SQL,JavaScript,節點或任何其他膨脹。 WFM在沒有JavaScript的情況下輸出經過驗證的HTML 4.01。它在現代和舊的網絡瀏覽器上都可以返回Internet Explorer 1.x和Netscape 3.x。
WFM通過基於Web的接口公開目錄樹。指定根目錄的主要方法是通過-chroot=/dir flag或您的服務管理器Chroot。例如,SystemD服務文件RootDirectory=指令。 WFM不打算在沒有Chroot的情況下使用。
對於像Docker這樣的某些服務,必須使用子目錄,可以通過--prefix=/subdir:/ flag指定。子目錄不應被視為安全,您應該假設用戶可以訪問Chroot前綴上方的文件。
像任何其他Web服務器一樣,WFM以root啟動該過程,以綁定到端口80或443。然後將其設置為使用-setuid=myuser指定的所需用戶。同樣,WFM執行Chroot對以-chroot=/datadir指定的目錄。這裡提供了一個示例服務文件。
您可以擁有SystemD,也可以執行Chroot和setuid。如果您要綁定到端口80(和/或443),則需要啟動WFM作為根。
如果您還使用RootDirectory= for Chroot並使用非特權端口(例如1024,例如8080),則可以指定Systemd User= root = root,或者您的二進制端口設置了足夠的功能。示例在這裡。
要安裝WFM服務文件,將其複製到/etc/systemd/system/wfm.service編輯配置並運行:
$ sudo systemctl daemon-reload
$ sudo systemctl enable --now wfm此處提供了一個示例啟動服務文件。
Docker Hub: tenox7/wfm:latest
你好世界:
$ docker run -d -p 8080:8080 --user 1234:1234 -v /some/host/dir:/data tenox7/wfm:latest -prefix /data:/如果不使用密碼文件,則可能需要添加--nopass_rw 。
如果您在Docker Run中未指定--user ,則可能需要--allow_root ,因為WFM將在容器內部作為用戶ID 0作為用戶ID運行。
帶有密碼的高級部署並自動部署:
$ docker run -d
--restart=always
-p 80:8080
-p 443:8443
-v /some/host/datadir:/data
-v /some/dir/wfmpasswd.json:/etc/wfmusers.json
tenox7/wfm:latest
-passwd /etc/wfmusers.json
-addr :8443
-acm_addr :8080
-acm_host www.snakeoil.com
-chroot /data
-setuid $( id -u ) : $( id -g ) -prefix標誌採用兩個由結腸隔開的目錄。左側的一個是文件系統目錄,右側的一個是http路徑。 FSDIR受-chroot標誌的影響。例如,如果您可以使用某些目錄,例如-chroot /home/ubuntu/dir ,則前綴可能只需使用該文件夾-prefix /:/ --的root dir,這也恰好是默認值。
HTTPPATH部件控制URL後綴,默認情況下它是/ ,但是您可以將其移至其他路徑,例如“/data”或“/wfm”,帶有flag -prefix=/:/httppath 。這對於隱藏默認位置或從其他服務(例如反向代理)進行路由可能很有用。
將來WFM應支持多個前綴對。
未經測試,但是您需要這樣的東西:
wfm -addr 127.0.0.1:9000 -fastcgi您可以將WFM用作SSL / TLS / HTTPS安全的Web服務器,並使用Lets Encrypt Auto Cert Manager。 ACM將自動為您的網站以及鍵盤獲得SSL證書。
使用SSL部署示例:
ExecStart=/usr/local/sbin/wfm
-passwd=/usr/local/etc/wfmpasswd.json
-chroot=/var/www/html
-setuid=user
-addr=:443
-acm_addr=:80
-acm_file=/var/cache/wfm-certs.json
-acm_host=www.snakeoil.com
標誌-addr=:443使WFM在端口443上收聽HTTPS請求。 flag -acm_addr=:80用於自動證書管理器以獲取證書,然後重定向到端口443/https。 flag -acm_file=/var/cache/wfm-certs.json是存儲證書和密鑰的地方。該文件在Chroot之前打開。因此,希望WFM以root的形式啟動,然後是setUID和Chroot,而不是通過SystemD/啟動。
-acm_host=是一個重複的標誌,將主機添加到白名單中。 ACM只能獲得白名單主機的證書。如果您的WFM網站在DNS中具有多個名稱,則需要將它們添加到白名單中。
如果HTTPS網站在防火牆外部外部暴露在外部,則有時還希望有一個本地的HTTP(非SSL)偵聽器。要啟用此使用-addr_extra=:8080標誌。
身份驗證由HTTP Basic Auth執行(將來可以實現自定義登錄窗口)。如果未指定密碼文件,也沒有存在的用戶(空白)並且沒有硬編碼的密碼,則wfm不會要求使用用戶名/密碼。除非您指定-nopass_rw標誌,否則無驗證模式將是僅讀取模式(例如常規的Web服務器)。
要啟用身份驗證,請通過-passwd=/path/users.json標誌指定密碼文件。密碼在啟動上讀取,因此可以放置在Chroot目錄之外。密碼也可以在二進製文件中進行硬編碼,在下面的SE。
可以使用內置的助手函數來管理用戶,該功能為指定的密碼JSON文件提供服務。
請注意,密碼文件的任何更改都需要重新啟動WFM守護程序才能生效。這是因為在執行chroot(2)之前,在啟動之前讀取文件。
創建新的空白密碼文件:
$ wfm -passwd=/path/users.json user newfile添加用戶:
$ wfm -passwd=/path/users.json user add myuser rw刪除用戶:
$ wfm -passwd=/path/users.json user delete myuser更改密碼:
$ wfm -passwd=/path/users.json user passwd myuser可以手動編輯 /管理JSON文件。
提供了一個示例文件。格式是一個簡單的用戶列表,其中包含“用戶”,“鹽”,“哈希”字符串和“ RW”布爾字段。用戶是自我解釋的。鹽是一個簡短的隨機字符串,用於使密碼更難破解。它可以是任何東西,但每個用戶都必須有所不同。生成密碼時,也必須通過相同的鹽。哈希是鹽 +密碼字符串。 RW Boolean指定用戶僅讀取或讀取寫訪問。
密碼文件也可以在編譯時在二進制中進行硬編碼。這在嵌入式操作中可能很有用。要添加硬編碼的用戶將條目添加到auth.go中的users var。
WFM監視器失敗的用戶登錄嘗試,並禁止用戶增加一段時間的時間,而更多的不良嘗試。默認情況下啟用了這一點。您可以使用-f2b=false標誌禁用此行為。此外,出於調試目的,您可以啟用一個前綴,其中將傾倒BAN數據庫,例如-f2b_dump=/dumpf2b 。
Usage of wfm:
-about_runtime
Display runtime info in About Dialog (default true)
-acm_addr string
autocert manager listen address, eg: :80
-acm_file string
autocert cache, eg: /var/cache/wfm-acme.json
-acm_host value
autocert manager allowed hostname (multi)
-addr string
Listen address, eg: :443 (default ":8080")
-addr_extra string
Extra non-TLS listener address, eg: :8081
-allow_root
allow to run as uid=0/root without setuid
-cache_ctl string
HTTP Header Cache Control (default "no-cache")
-chroot string
Directory to chroot to
-f2b
ban ip addresses on user/pass failures (default true)
-f2b_dump string
enable f2b dump at this prefix, eg. /f2bdump (default no)
-favicon string
custom favicon file, empty use default
-form_maxmem int
maximum memory used for form parsing, increase for large uploads (default 10485760)
-list_archive_contents
list contents of archives (expensive!)
-logfile string
Log file name (default stdout)
-nopass_rw
allow read-write access if there is no password file
-passwd string
wfm password file, eg: /usr/local/etc/wfmpw.json
-prefix string
Prefix for WFM access, /fsdir:/httppath eg.: /var/files:/myfiles (default "/:/")
-proto string
tcp, tcp4, tcp6, etc (default "tcp")
-rate_limit int
rate limit for upload/download in MB/s, 0 no limit
-robots
allow robots
-setuid string
Username or uid:gid pair to setuid to
-show_dot
show dot files and folders
-site_name string
local site name to display (default "WFM")
-txt_le string
default line endings when editing text files (default "LF")
WFM在1994年左右作為CERN HTTPD服務器的PERL CGI腳本開始了生命。它的開發是為了允許通過網絡上的現場支持工程師,客戶等上傳日誌,轉儲和其他案例數據,作為FTP服務器的前端。後來用C語言重寫,當CGIC庫和Apache HTTPD發佈時。截至2015年,WFM一直是用於輕量級文檔管理的封閉源商業應用程序,並得到了一些客戶的支持。此後,它是開源的。在2022年,WFM已在GO中作為獨立應用程序進行了重寫,該應用程序具有內置的Web服務器,以實現更現代的部署方案。