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服务器,以实现更现代的部署方案。