WFM adalah manajer file berbasis web yang sederhana. Anda dapat menggunakannya sebagai antarmuka web untuk kotak NAS, server FTP, "cloud pribadi", situs berbagi dokumen atau CMS ringan. Ini memungkinkan untuk melakukan operasi file dan folder dasar seperti unduhan, unggah, ganti nama, pindahkan, hapus file, dan atur struktur pohon direktori. File teks, seperti markup, markdown, config, dll dapat diedit langsung di browser. WFM juga dapat membuat dan membuka bookmark, tautan dan file pintasan, dll.

WFM adalah layanan mandiri dengan server webnya sendiri. Tidak perlu untuk Apache, Nginx, PHP, dll. Ini berjalan langsung dari systemd , sysvinit , launchd , rc atau Docker. TLS / SSL didukung dengan pembuatan sertifikat otomatis oleh Lets Encrypt / Certbot.
Sama seperti Docker, Kubernetes, Hugo, dll. WFM ditulis dalam bahasa Go. Biner terkait secara statis, sepenuhnya mandiri dan tidak memiliki dependensi eksternal. Ikon adalah emoji Unicode. CA sertifikat tertanam pada waktu yang dibangun. Tidak perlu Python, PHP, SQL, JavaScript, Node atau Bloat lainnya. Output WFM divalidasi HTML 4.01 tanpa JavaScript. Ini bekerja pada browser web modern dan warisan yang akan kembali ke Internet Explorer 1.x dan Netscape 3.x.
WFM memperlihatkan pohon direktori melalui antarmuka berbasis web. Metode utama menentukan direktori root adalah chroot via -chroot=/dir bendera, atau oleh manajer layanan Anda. Misalnya file layanan SystemD RootDirectory= directive. WFM tidak dimaksudkan untuk digunakan tanpa chroot.
Untuk beberapa layanan seperti Docker, subdirektori harus digunakan, ini dapat ditentukan oleh --prefix=/subdir:/ flag. Subdirektori tidak boleh dianggap aman dan Anda harus menganggap pengguna dapat mengakses file di atas awalan hingga chroot.
Seperti server web lainnya, WFM memulai proses sebagai root untuk mengikat ke port 80 atau 443. Kemudian setuid ke pengguna yang diinginkan yang ditentukan dengan -setuid=myuser . Demikian pula WFM melakukan chroot ke direktori yang ditentukan dengan -chroot=/datadir . Contoh file layanan disediakan di sini.
Anda dapat memiliki SystemD, atau WFM melakukan chroot dan setuid. Jika Anda mengikat ke port 80 (dan/atau 443), Anda harus memulai WFM sebagai root.
Anda dapat menentukan SystemD User= selain root jika Anda juga menggunakan RootDirectory= untuk chroot dan menggunakan port yang tidak istimewa (di atas 1024, mis. 8080), atau biner Anda memiliki kemampuan yang memadai. Contoh di sini.
Untuk menginstal file layanan WFM, salin ke /etc/systemd/system/wfm.service mengedit konfigurasi dan jalankan:
$ sudo systemctl daemon-reload
$ sudo systemctl enable --now wfmContoh file layanan peluncuran disediakan di sini.
Hub Docker: tenox7/wfm:latest
Halo Dunia:
$ docker run -d -p 8080:8080 --user 1234:1234 -v /some/host/dir:/data tenox7/wfm:latest -prefix /data:/ Jika tidak menggunakan file kata sandi, Anda juga perlu menambahkan --nopass_rw .
Jika Anda tidak menentukan --user di Docker Run, Anda mungkin juga memerlukan --allow_root karena WFM akan berjalan sebagai ID Pengguna 0 di dalam wadah.
Penempatan lanjutan dengan kata sandi dan 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 ) Bendera -prefix mengambil dua direktori yang dipisahkan oleh usus besar. Yang di sebelah kiri adalah direktori sistem file, yang di sebelah kanan adalah jalur http. FSDIR dipengaruhi oleh bendera -chroot . Jika Anda chroot ke beberapa direktori misalnya -chroot /home/ubuntu/dir maka awalan mungkin hanya harus menggunakan root dir folder -prefix /:/ -yang juga merupakan default.
Bagian httpath mengontrol akhiran URL, secara default itu / , namun Anda dapat memindahkannya ke jalur yang berbeda misalnya "/data" atau "/wfm" dengan flag -prefix=/:/httppath . Ini mungkin berguna untuk menyembunyikan lokasi default atau jika perutean dari layanan lain seperti proxy terbalik.
Di masa depan WFM harus mendukung beberapa pasangan awalan.
Belum teruji, tetapi Anda akan membutuhkan sesuatu seperti ini:
wfm -addr 127.0.0.1:9000 -fastcgiAnda dapat menggunakan WFM sebagai SSL / TLS / HTTPS Secure Web Server dengan Lets Encrypt Auto Cert Manager. ACM akan secara otomatis mendapatkan sertifikat SSL untuk situs Anda dan juga tombol.
Contoh Penyebaran dengan 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
Bendera -addr=:443 membuat WFM mendengarkan di port 443 untuk permintaan https. Bendera -acm_addr=:80 digunakan untuk Manajer Sertifikat Otomatis untuk mendapatkan sertifikat dan kemudian mengalihkan ke Port 443/https. Flag -acm_file=/var/cache/wfm-certs.json adalah tempat sertifikat dan kunci disimpan. File ini dibuka sebelum chroot. Karena itu, WFM diinginkan untuk dimulai sebagai root, kemudian setuid dan chroot sendiri daripada melalui SystemD/Launchd.
-acm_host= adalah bendera berulang yang menambahkan host ke daftar putih. ACM hanya akan mendapatkan sertifikat untuk host yang masuk daftar putih. Jika situs WFM Anda memiliki banyak nama di DNS, Anda perlu menambahkannya ke daftar putih.
Jika situs HTTPS terpapar secara eksternal di luar firewall Anda yang kadang-kadang diinginkan untuk memiliki pendengar HTTP (non-SSL) lokal juga. Untuk mengaktifkan penggunaan ini -addr_extra=:8080 Bendera.
Otentikasi dilakukan oleh HTTP Basic Auth (di masa depan jendela login khusus dapat diimplementasikan sebagai gantinya). Jika tidak ada file kata sandi yang ditentukan, atau tidak ada pengguna yang ada di dalamnya (kosong) dan tidak ada kata sandi hardcoded yang ada WFM tidak akan meminta nama pengguna/kata sandi. Mode auth-less by akan berupa mode baca-saja (seperti server web biasa) kecuali Anda menentukan bendera -nopass_rw .
Untuk mengaktifkan otentikasi, tentukan file kata sandi melalui -passwd=/path/users.json flag. Kata sandi dibaca pada startup dan karenanya dapat ditempatkan di luar direktori chroot. Kata sandi juga dapat dihardik dalam biner pada waktu kompilasi, SE di bawah ini.
Pengguna dapat dikelola menggunakan fungsi helper bawaan yang melayani file JSON kata sandi yang ditentukan.
Perhatikan bahwa setiap perubahan pada file kata sandi memerlukan restart daemon WFM agar berlaku. Ini karena file dibaca sekali saat startup sebelum chroot(2) dilakukan.
Buat file kata sandi kosong baru:
$ wfm -passwd=/path/users.json user newfileTambahkan Pengguna:
$ wfm -passwd=/path/users.json user add myuser rwHapus Pengguna:
$ wfm -passwd=/path/users.json user delete myuserUbah Kata Sandi:
$ wfm -passwd=/path/users.json user passwd myuserFile JSON dapat diedit / dikelola secara manual.
Contoh file disediakan. Formatnya adalah daftar pengguna sederhana dengan "pengguna", "garam", "hash" dan bidang boolean "RW". Pengguna penjelasan diri. Salt adalah string acak pendek yang digunakan untuk membuat kata sandi lebih sulit untuk retak. Ini bisa apa saja tetapi harus berbeda untuk setiap pengguna. Garam yang sama juga harus dilewati saat menghasilkan kata sandi. Hash adalah string kata sandi garam + hash. RW Boolean Menentukan apakah pengguna hanya membaca atau membaca akses menulis.
File Kata Sandi juga dapat di -hardcoded di dalam biner pada waktu kompilasi. Ini mungkin berguna dalam operasi tertanam. Untuk menambahkan pengguna hardcoded menambahkan entri ke users var di auth.go
WFM memantau upaya login pengguna yang gagal dan melarang pengguna untuk meningkatkan periode waktu dengan upaya yang lebih buruk. Ini diaktifkan secara default. Anda dapat menonaktifkan perilaku ini dengan -f2b=false . Selain itu untuk tujuan debugging Anda dapat mengaktifkan awalan di mana basis data Ban akan dibuang misalnya -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 memulai kehidupannya sekitar tahun 1994 sebagai skrip Perl CGI untuk server CERN HTTPD. Itu dikembangkan untuk memungkinkan pengunggahan log, dumps dan data kasus lainnya oleh insinyur pendukung lapangan, pelanggan, dll. Di atas web dan sebagai ujung depan ke server FTP. Kemudian ditulis ulang dalam bahasa C, ketika CGIC Library dan Apache httpd dirilis. Hingga 2015 WFM telah menjadi aplikasi komersial sumber tertutup yang digunakan untuk manajemen dokumen ringan dan didukung oleh beberapa pelanggan. Sejak itu telah bersumber terbuka. Pada tahun 2022 WFM telah ditulis ulang di Go sebagai aplikasi yang berdiri sendiri dengan server web bawaan untuk skenario penyebaran yang lebih modern.