WFM est un gestionnaire de fichiers simple basé sur le Web. Vous pouvez l'utiliser comme interface Web pour une boîte NAS, un serveur FTP, un "cloud personnel", un site de partage de documents ou un CMS léger. Il permet d'effectuer des opérations de base de fichiers et de dossiers telles que le téléchargement, le téléchargement, la renommée, le déplacement, la suppression des fichiers et l'organisation de la structure des arborescences du répertoire. Les fichiers texte, tels que le balisage, la marque, la configuration, etc. peuvent être modifiés directement dans le navigateur. WFM peut également créer et ouvrir des signets, des fichiers de liaison et de raccourci, etc.

WFM est un service autonome avec son propre serveur Web. Pas besoin d'Apache, Nginx, PHP, etc. Il fonctionne directement à partir de systemd , sysvinit , launchd , rc ou Docker. TLS / SSL est pris en charge avec la génération automatique de certificat par Lets Encrypt / Certbot.
Tout comme Docker, Kubernetes, Hugo, etc. WFM est écrit en langue go. Le binaire est lié statiquement, entièrement autonome et n'a aucune dépendance externe. Les icônes sont des emojis Unicode. Les certificats CA sont intégrés à l'heure construite. Pas besoin de Python, PHP, SQL, JavaScript, nœud ou tout autre ballonnement. Les sorties WFM ont validé HTML 4.01 sans JavaScript. Il fonctionne à la fois sur les navigateurs Web modernes et hérités qui remontent à Internet Explorer 1.x et Netscape 3.x.
WFM expose une arborescence de répertoire via une interface Web. La méthode principale de spécification du répertoire racine est le chroot via -chroot=/dir inducteur, ou par votre gestionnaire de services. Par exemple Systemd Service File RootDirectory= Directive. WFM n'est pas destiné à être utilisé sans chroot.
Pour certains services comme Docker, un sous-répertoire doit être utilisé, cela peut être spécifié par --prefix=/subdir:/ drapeau. Un sous-répertoire ne doit pas être considéré comme sécurisé et vous devez supposer que les utilisateurs peuvent accéder aux fichiers au-dessus du préfixe jusqu'à Chroot.
Comme tout autre serveur Web, WFM démarre le processus en tant que root pour se lier au port 80 ou 443. Ensuite, SETUID à un utilisateur souhaité spécifié avec -setuid=myuser . De même, le WFM effectue un chroot dans un répertoire spécifié avec -chroot=/datadir . Un exemple de fichier de service est fourni ici.
Vous pouvez avoir SystemD, soit WFM effectuer Chroot et SetUid. Si vous vous liez au port 80 (et / ou 443), vous devez démarrer WFM en tant que racine.
Vous pouvez spécifier Systemd User= Autre que root si vous utilisez également RootDirectory= pour chroot et utilisez un port non privilégié (supérieur à 1024, par exemple 8080), ou votre binaire a un ensemble de capacités adéquates. Exemple ici.
Pour installer le fichier de service WFM, copiez-le sur /etc/systemd/system/wfm.service modifiez la configuration et exécutez:
$ sudo systemctl daemon-reload
$ sudo systemctl enable --now wfmUn exemple de fichier de service Launchd est fourni ici.
Docker Hub: tenox7/wfm:latest
Bonjour le monde:
$ docker run -d -p 8080:8080 --user 1234:1234 -v /some/host/dir:/data tenox7/wfm:latest -prefix /data:/ Si vous n'utilisez pas de fichier de mot de passe, vous pouvez également avoir besoin d'ajout --nopass_rw .
Si vous ne spécifiez pas --user dans Docker Run, vous pouvez également avoir besoin --allow_root puisque WFM s'exécutera en tant qu'ID utilisateur 0 à l'intérieur du conteneur.
Déploiement avancé avec mots de passe et 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 ) Le drapeau -prefix prend deux répertoires séparés par un côlon. Celui à gauche est un répertoire de système de fichiers, celui à droite est le chemin HTTP. Le FSDIR est affecté par le drapeau -chroot . Si vous chroot dans un répertoire par exemple -chroot /home/ubuntu/dir le préfixe doit probablement utiliser le dir root de ce dossier -prefix /:/ - qui se trouve également être la valeur par défaut.
La pièce HTTPPATH contrôle le suffixe de l'URL, par défaut c'est / , mais vous pouvez le déplacer vers un chemin différent par exemple "/ data" ou "/ wfm" avec le drap -prefix=/:/httppath . Cela peut être utile pour cacher l'emplacement par défaut ou si le routage à partir d'un autre service comme le proxy inverse.
Dans le futur, WFM devrait prendre en charge plusieurs paires de préfixes.
Non testé, mais vous auriez besoin de quelque chose comme ceci:
wfm -addr 127.0.0.1:9000 -fastcgiVous pouvez utiliser WFM en tant que serveur Web sécurisé SSL / TLS / HTTPS avec LETS ECRYPT AUTO CERT Manager. ACM obtiendra automatiquement un certificat SSL pour votre site ainsi que pour la clé.
Exemple de déploiement avec 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
Le drapeau -addr=:443 fait que WFM écoute sur le port 443 pour les demandes HTTPS. Flag -acm_addr=:80 est utilisé pour le gestionnaire de certificat Auto pour obtenir le certificat, puis rediriger vers le port 443 / https. Flag -acm_file=/var/cache/wfm-certs.json est l'endroit où les certificats et les touches sont stockés. Ce fichier est ouvert avant le chroot. En tant que tel, il est souhaité que WFM soit démarré comme root, puis SetUid et Chroot seul plutôt que via SystemD / Launchd.
Le -acm_host= est un drapeau répété qui ajoute des hôtes à une liste blanche. ACM n'obtiendra que des certificats pour les hôtes de liste blanche. Si votre site WFM a plusieurs noms dans DNS, vous devez les ajouter à la liste blanche.
Si le site HTTPS est exposé à l'extérieur en dehors de votre pare-feu, il souhaitait parfois avoir un auditeur HTTP local (non-SSL). Pour activer cette utilisation -addr_extra=:8080 Flag.
L'authentification est effectuée par HTTP Basic Auth (à l'avenir, une fenêtre de connexion personnalisée peut être implémentée à la place). Si aucun fichier de mot de passe n'est spécifié, ou qu'aucun utilisateur ne présente (blanc) et qu'aucun mot de passe codé en dur n'est présent ne demandera pas le nom d'utilisateur / le mot de passe. Le mode sans autorité sera en mode en lecture seule (comme un serveur Web ordinaire) sauf si vous spécifiez -nopass_rw Flag.
Pour activer l'authentification, spécifiez le fichier de mot de passe via -passwd=/path/users.json inducteur. Les mots de passe sont lus au démarrage et peuvent donc être placés en dehors du répertoire Chroot. Les mots de passe peuvent également être codés en dur dans le binaire au moment de la compilation, SE ci-dessous.
Les utilisateurs peuvent être gérés à l'aide d'une fonction d'assistance intégrée qui services le fichier JSON de mot de passe spécifié.
Notez que toutes les modifications du fichier de mot de passe nécessitent le redémarrage de WFM Daemon pour prendre effet. En effet, le fichier est lu une fois au démarrage avant que chroot(2) ne soit effectué.
Créer un nouveau fichier de mot de passe vide:
$ wfm -passwd=/path/users.json user newfileAjouter un utilisateur:
$ wfm -passwd=/path/users.json user add myuser rwSupprimer l'utilisateur:
$ wfm -passwd=/path/users.json user delete myuserChanger le mot de passe:
$ wfm -passwd=/path/users.json user passwd myuserLe fichier JSON peut être modifié / géré manuellement.
Un exemple de fichier est fourni. Le format est une simple liste d'utilisateurs avec des chaînes "utilisateur", "sel", "hachage" et un champ booléen "RW". L'utilisateur est explicite. Le sel est une courte chaîne aléatoire utilisée pour rendre les mots de passe plus difficiles à casser. Cela peut être n'importe quoi, mais il doit être différent pour chaque utilisateur. Le même sel doit également être passé lors de la génération du mot de passe. Hash est une chaîne de mot de passe de sel hachée. RW Boolean spécifie si l'utilisateur a lu uniquement ou lire l'accès en écriture.
Le fichier de mot de passe peut également être codé en dur à l'intérieur du binaire au moment de la compilation. Cela peut être utile dans les opérations intégrées. Pour ajouter des utilisateurs codés en dur, ajoutez des entrées aux users var dans auth.go
WFM surveille les tentatives de connexion des utilisateurs échoués et interdit l'utilisateur pour augmenter la période de temps avec plus de mauvaises tentatives. Ceci est activé par défaut. Vous pouvez désactiver ce comportement avec -f2b=false drapeau. De plus, à des fins de débogage, vous pouvez activer un préfixe où la base de données Ban sera vide par exemple -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 a commencé sa vie vers 1994 en tant que script Perl CGI pour le serveur CERN HTTPD. Il a été développé pour permettre le téléchargement des journaux, des vidages et d'autres données de cas par les ingénieurs de support sur le terrain, les clients, etc. sur le Web et en tant que front-end au serveur FTP. Réécrit plus tard dans le langage C, lorsque la bibliothèque CGIC et l'APACH HTTPD ont été publiées. Jusqu'à 2015 WFM a été une application commerciale à source fermée utilisée pour la gestion des documents légères et soutenue par quelques clients. Il a depuis été ouvert. En 2022, WFM a été réécrit dans GO en tant qu'application autonome avec serveur Web intégré pour des scénarios de déploiement plus modernes.