WFM - это простой веб -диспетчер. Вы можете использовать его в качестве веб -интерфейса для блока NAS, FTP -сервера, «личного облака», сайта обмена документами или легкого CMS. Он позволяет выполнять основные операции файлов и папок, такие как загрузка, загрузка, переименование, перемещение, удаление файлов и организовывание структуры дерева каталогов. Текстовые файлы, такие как разметка, разметка, конфигурация и т. Д., Можно отредактировать непосредственно в браузере. WFM также может создавать и открывать закладки, ссылки и ярлыки и т. Д.

WFM - это отдельная служба с собственным веб -сервером. Нет необходимости в Apache, Nginx, PHP и т. Д. Он работает непосредственно из systemd , sysvinit , launchd , rc или Docker. TLS / SSL поддерживается автоматическим генерацией сертификатов от Lets Encrypt / Certbot.
Так же, как Docker, Kubernetes, Hugo и т. Д. WFM написан на языке GO. Двоичный файл статически связан, полностью самостоялся и имеет нулевые внешние зависимости. Значки - это смайлики Unicode. CA Certs встроены в построенное время. Нет необходимости в Python, PHP, SQL, JavaScript, Node или любого другого раздувания. WFM выводит проверку HTML 4.01 без JavaScript. Он работает как в современных, так и в унаследованных веб -браузерах, возвращающихся в Internet Explorer 1.x и Netscape 3.x.
WFM разоблачает дерево каталогов через веб -интерфейс. Основным методом определения корневого каталога является chroot через -chroot=/dir -флаг, или вашим менеджером услуг. Например, файл Systemd Service RootDirectory= Директива. WFM не предназначен для использования без chroot.
Для некоторых услуг, таких как Docker, необходимо использовать подкаталог, это может быть указано --prefix=/subdir:/ flag. Подкаталог не должен считаться безопасным, и вы должны предположить, что пользователи могут получить доступ к файлам выше префикса до Chroot.
Как и любой другой веб -сервер, WFM запускает процесс как root , чтобы привязать к порту 80 или 443. Затем SETUID для желаемого пользователя, указанного с -setuid=myuser . Точно так же WFM выполняет Chroot в каталог, указанный с -chroot=/datadir . Пример файла службы представлен здесь.
Вы можете иметь либо SystemD, либо WFM выполнить Chroot и SetUID. Если вы привязываете к порту 80 (и/или 443), вам необходимо запустить WFM как root.
Вы можете указать SystemD User= кроме root, если вы также используете RootDirectory= для chroot и использовать не привилегированный порт (выше 1024, например, 8080), или ваш двоичный файл имеет достаточные возможности. Пример здесь.
Чтобы установить файл службы 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 .
Если вы не указаете --user в Docker Run, вам также может понадобиться --allow_root так как WFM будет работать как идентификатор пользователя 0 внутри контейнера.
Расширенное развертывание с паролями и автоконтролем:
$ 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 в какой -то каталог, например -chroot /home/ubuntu/dir то префикс, вероятно, должен просто использовать Root Dir из этой папки -prefix /:/ -который также оказался по умолчанию.
Часть HTTPPATH управляет суффиксом URL, по умолчанию это / , однако вы можете переместить его в другой путь, например, «/DATA» или «/WFM» с флага -prefix=/:/httppath . Это может быть полезно для сокрытия местоположения по умолчанию или в случае маршрутизации из другой службы, такой как обратный прокси.
В будущем WFM должен поддерживать несколько пар префиксов.
Непроверенный, но вам понадобится что -то вроде этого:
wfm -addr 127.0.0.1:9000 -fastcgiВы можете использовать WFM в качестве веб -сервера SSL / TLS / HTTPS с 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 используется для менеджера Auto Cert для получения сертификата, а затем перенаправить на порт 443/https. Flag -acm_file=/var/cache/wfm-certs.json -это место, где хранятся сертификаты и ключи. Этот файл открыт перед Chroot. Таким образом, для WFM желательно, чтобы WFM начался как root, а затем SETUID и Chroot самостоятельно, а не через SystemD/LaunchD.
-acm_host= -это повторный флаг, который добавляет хост в белый список. ACM получит только сертификаты для хостов белых списков. Если на вашем сайте WFM есть несколько имен в DNS, вам нужно добавить их в белый список.
Если сайт HTTPS выявляется снаружи вашего брандмауэра, иногда желательно иметь местного слушателя HTTP (не-SSL). Чтобы включить это использование -addr_extra=:8080 флаг.
Аутентификация выполняется HTTP Basic Auth (в будущем вместо этого может быть реализовано окно входа в систему). Если файл пароля не указан, или никаких пользователей, не присутствующих в нем (пустым), и никаких жестких паролей не присутствует, WFM не будет запрашивать имя пользователя/пароль. Режим Auth-Wrong By будет режим только для чтения (например, обычный веб-сервер), если вы не указаете флаг -nopass_rw .
Чтобы включить аутентификацию, укажите файл пароля через -passwd=/path/users.json flag. Пароли читаются при запуске и, следовательно, могут быть размещены за пределами каталога Chroot. Пароли также могут быть жестко кодированы в двоичном файле во время компиляции, SE ниже.
Пользователи могут управляться с помощью встроенной вспомогательной функции, которая обслуживает указанный файл JSON пароля.
Обратите внимание, что любые изменения в файле пароля требуют перезапуска Daemon 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 указывает, есть ли пользователь только для чтения или прочитать доступ к записи.
Файл пароля также может быть жестко кодирован внутри двоичного файла во время компиляции. Это может быть полезно в встроенных операциях. Чтобы добавить в жестко -кодируемые пользователи добавить записи в users var in auth.go
WFM мониторирует неудачные попытки входа в систему пользователя и запрещает пользователю в течение увеличения периода времени с более плохими попытками. Это включено по умолчанию. Вы можете отключить это поведение с помощью -f2b=false Flag. Кроме того, для целей отладки вы можете включить префикс, где база данных 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 году как сценарий Perl CGI для сервера CERN HTTPD. Он был разработан, чтобы разрешить загрузку журналов, дамп и другие данные о регистрации инженерами по вспомогательной поддержке, клиентам и т. Д. По веб -сети и в качестве переднего конца FTP -сервера. Позже переписано на языке C, когда были выпущены библиотека CGIC и Apache HTTPD. До 2015 года WFM является коммерческим приложением с закрытым исходным кодом, используемым для управления легким документом и поддерживаемого несколькими клиентами. С тех пор он был открытым. В 2022 году WFM был переписан в Go как автономное приложение со встроенным веб-сервером для более современных сценариев развертывания.