WFM es un administrador de archivos simple basado en la web. Puede usarlo como interfaz web para un cuadro NAS, servidor FTP, una "nube personal", sitio para compartir documentos o un CMS ligero. Permite realizar operaciones básicas de archivos y carpetas, como descargar, cargar, renombrar, mover, eliminar archivos y organizar la estructura del árbol de directorio. Los archivos de texto, como Markup, Markdown, Config, etc., se pueden editar directamente en el navegador. WFM también puede crear y abrir marcadores, enlaces y archivos de acceso directo, etc.

WFM es un servicio independiente con su propio servidor web. No hay necesidad de Apache, Nginx, PHP, etc. Se ejecuta directamente desde systemd , sysvinit , launchd , rc o Docker. TLS / SSL es compatible con la generación de certificados automáticos por Lets Cintpt / CertBot.
Al igual que Docker, Kubernetes, Hugo, etc. WFM está escrito en el lenguaje GO. El binario está estáticamente vinculado, totalmente independiente y tiene cero dependencias externas. Los iconos son emojis unicode. Los certificados de CA están integrados en el momento construido. No hay necesidad de Python, PHP, SQL, JavaScript, Node o cualquier otro hinchazón. Salidas WFM validadas HTML 4.01 sin JavaScript. Funciona en navegadores web modernos y heredados que regresan a Internet Explorer 1.x y Netscape 3.x.
WFM expone un árbol de directorio a través de la interfaz basada en la web. El método principal para especificar el directorio raíz es Chroot a través de -chroot=/dir Flag, o por su administrador de servicios. Por ejemplo, el archivo de servicio Systemd RootDirectory= Directiva. WFM no está destinado a usarse sin chroot.
Para algunos servicios como Docker, se debe utilizar un subdirectorio, esto puede especificarse mediante --prefix=/subdir:/ flag. Un subdirectorio no debe considerarse seguro y debe asumir que los usuarios pueden acceder a archivos por encima del prefijo hasta Chroot.
Al igual que cualquier otro servidor web, WFM inicia el proceso como root para vincular al puerto 80 o 443. Luego, siéntate a un usuario deseado especificado con -setuid=myuser . Del mismo modo, el WFM realiza Chroot en un directorio especificado con -chroot=/datadir . Aquí se proporciona un archivo de servicio de ejemplo.
Puede tener Systemd o WFM realizan chroot y setUid. Si está vinculando al puerto 80 (y/o 443), debe iniciar WFM como root.
Puede especificar Systemd User= aparte de Root si también usa RootDirectory= para chroot y usa puerto no privilegiado (por encima de 1024, por ejemplo, 8080), o su binario tiene un conjunto de capacidades adecuadas. Ejemplo aquí.
Para instalar el archivo de servicio WFM, copielo en /etc/systemd/system/wfm.service edite la configuración y ejecute:
$ sudo systemctl daemon-reload
$ sudo systemctl enable --now wfmAquí se proporciona un archivo de servicio de lanzamiento de ejemplo.
Docker Hub: tenox7/wfm:latest
Hola Mundo:
$ docker run -d -p 8080:8080 --user 1234:1234 -v /some/host/dir:/data tenox7/wfm:latest -prefix /data:/ Si no se usa el archivo de contraseña, es posible que también necesite agregar --nopass_rw .
Si no especifica --user en Docker Run, es posible que también necesite --allow_root , ya que WFM se ejecutará como ID de usuario 0 dentro del contenedor.
Implementación avanzada con contraseñas y autocert:
$ 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 ) La bandera -prefix toma dos directorios separados por un colon. El de la izquierda es un directorio del sistema de archivos, el de la derecha es la ruta HTTP. El FSDIR se ve afectado por la bandera -chroot . Si se enfrenta a algún directorio, por ejemplo -chroot /home/ubuntu/dir entonces el prefijo probablemente debería usar Root Dir de esa carpeta -prefix /:/ -que también es el valor predeterminado.
La parte httppath controla el sufijo URL, de forma predeterminada es / , sin embargo, puede moverla a una ruta diferente, por ejemplo, "/data" o "/wfm" con el flag -prefix=/:/httppath . Esto puede ser útil para ocultar la ubicación predeterminada o si enriquecer desde otro servicio como el proxy inverso.
En el futuro WFM debería admitir múltiples pares de prefijo.
No probado, pero necesitarías algo como esto:
wfm -addr 127.0.0.1:9000 -fastcgiPuede usar WFM como un servidor web seguro SSL / TLS / HTTPS con Lets Cintpt Auto Cert Manager. ACM obtendrá automáticamente el certificado SSL para su sitio, así como para el KeyPair.
Implementación de ejemplo con 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
La bandera -addr=:443 hace que WFM escuche en el puerto 443 para las solicitudes HTTPS. FLAG -acm_addr=:80 se usa para Auto Cert Manager para obtener el CERT y luego redirigir al puerto 443/HTTPS. Flag -acm_file=/var/cache/wfm-certs.json es donde se almacenan los certificados y las claves. Este archivo se abre antes de chroot. Como tal, se desea que WFM se inicie como root, luego SetUid y Chroot en su propio lugar en lugar de a través de Systemd/Launchd.
El -acm_host= es una bandera repetida que agrega hosts a una lista blanca. ACM solo obtendrá certificados para hosts con la lista blanca. Si su sitio WFM tiene múltiples nombres en DNS, debe agregarlos a la lista blanca.
Si el sitio HTTPS está expuesto externamente fuera de su firewall, a veces también desea tener un oyente HTTP local (no SSL). Para habilitar este uso -addr_extra=:8080 Flag.
La autenticación es realizada por HTTP Basic Auth (en el futuro se puede implementar una ventana de inicio de sesión personalizada). Si no se especifica ningún archivo de contraseña, o ningún usuarios presentes (en blanco) y no hay contraseñas codificadas presentes, WFM no solicitará nombre de usuario/contraseña. El modo sin autenticación será el modo de solo lectura (como un servidor web normal) a menos que especifique el indicador -nopass_rw .
Para habilitar la autenticación, especifique el archivo de contraseña a través de -passwd=/path/users.json Flag. Las contraseñas se leen en el inicio y, por lo tanto, se pueden colocar fuera del directorio Chroot. Las contraseñas también se pueden codificar en el binario en el tiempo de compilación, SE a continuación.
Los usuarios se pueden administrar utilizando una función Helper incorporada que brinda el archivo JSON de contraseña especificado.
Tenga en cuenta que cualquier cambio en el archivo de contraseña requiere reinicio del demonio WFM para entrar en vigencia. Esto se debe a que el archivo se lee una vez en el inicio antes de que se realice chroot(2) .
Cree un nuevo archivo de contraseña en blanco:
$ wfm -passwd=/path/users.json user newfileAgregar usuario:
$ wfm -passwd=/path/users.json user add myuser rwEliminar usuario:
$ wfm -passwd=/path/users.json user delete myuserCambiar la contraseña:
$ wfm -passwd=/path/users.json user passwd myuserEl archivo JSON se puede editar / administrar manualmente.
Se proporciona un archivo de ejemplo. El formato es una lista simple de usuarios con "usuarios", "sales", cuerdas "hash" y campo booleano "RW". El usuario se explica por sí mismo. La sal es una breve cadena aleatoria que se usa para hacer que las contraseñas sean más difíciles de romper. Puede ser cualquier cosa, pero debe ser diferente para cada usuario. También se debe pasar la misma sal al generar la contraseña. Hash es una cadena de contraseña hash salt +. RW Boolean especifica si el usuario solo ha leído o lee el acceso de escritura.
El archivo de contraseña también se puede codificar dentro del binario en el momento de la compilación. Esto puede ser útil en operaciones integradas. Para agregar usuarios codificados, agregue entradas a users var en auth.go
Los monitores de WFM fallan intentos de inicio de sesión del usuario y prohíben el usuario por un período de tiempo creciente con más intentos malos. Esto está habilitado de forma predeterminada. Puede deshabilitar este comportamiento con -f2b=false Flag. Además para fines de depuración, puede habilitar un prefijo donde la base de datos BAN se descargará por ejemplo -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 comenzó su vida alrededor de 1994 como un script CGI de Perl para el servidor CERN HTTPD. Se desarrolló para permitir registros de carga, volcados y otros datos de casos por ingenieros de soporte de campo, clientes, etc. a través de la web y como un delantero del servidor FTP. Más tarde se reescribió en lenguaje C, cuando se lanzaron CGIC Library y Apache Httpd. Hasta 2015 WFM ha sido una aplicación comercial de código cerrado utilizada para la gestión de documentos livianos y respaldada por algunos clientes. Desde entonces ha sido de origen abierto. En 2022, WFM se ha reescrito en GO como una aplicación independiente con un servidor web incorporado para escenarios de implementación más modernos.