WFM เป็นตัวจัดการไฟล์บนเว็บที่เรียบง่าย คุณสามารถใช้เป็นเว็บอินเตอร์เฟสสำหรับกล่อง NAS, เซิร์ฟเวอร์ FTP, "คลาวด์ส่วนบุคคล", ไซต์การแชร์เอกสารหรือ CMS ที่มีน้ำหนักเบา ช่วยให้สามารถดำเนินการไฟล์พื้นฐานและโฟลเดอร์เช่นดาวน์โหลดอัปโหลดเปลี่ยนชื่อย้ายย้ายไฟล์และจัดระเบียบโครงสร้างต้นไม้ไดเรกทอรี ไฟล์ข้อความเช่นมาร์กอัป, markdown, config ฯลฯ สามารถแก้ไขได้โดยตรงในเบราว์เซอร์ WFM ยังสามารถสร้างและเปิดบุ๊กมาร์กลิงก์และไฟล์ทางลัด ฯลฯ

WFM เป็นบริการแบบสแตนด์อโลนที่มีเว็บเซิร์ฟเวอร์ของตัวเอง ไม่จำเป็นต้องใช้ Apache, Nginx, PHP ฯลฯ มันทำงานโดยตรงจาก systemd , sysvinit , launchd , rc หรือ Docker TLS / SSL ได้รับการสนับสนุนด้วยการสร้างใบรับรองอัตโนมัติโดยให้เข้ารหัส / certbot
เหมือนกับ Docker, Kubernetes, Hugo ฯลฯ WFM เขียนด้วยภาษา Go ไบนารีเชื่อมโยงกันแบบคงที่มีตัวเองอย่างเต็มที่และมีการพึ่งพาภายนอกเป็นศูนย์ ไอคอนคือ unicode emojis CA Certs ถูกฝังอยู่ในเวลาที่สมบูรณ์ ไม่จำเป็นต้องใช้ Python, PHP, SQL, JavaScript, Node หรือ Bloat อื่น ๆ WFM เอาต์พุตตรวจสอบความถูกต้อง HTML 4.01 โดยไม่มี JavaScript มันใช้งานได้ทั้งบนเว็บเบราว์เซอร์ที่ทันสมัยและดั้งเดิมกลับไปที่ Internet Explorer 1.x และ Netscape 3.x
WFM เปิดเผยแผนผังไดเรกทอรีผ่านอินเตอร์เฟสบนเว็บ วิธีการหลักในการระบุไดเรกทอรีรูทคือ chroot ผ่าน -chroot=/dir หรือโดยผู้จัดการบริการของคุณ ตัวอย่างเช่น SystemD Service File RootDirectory= Directive 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 เป็นรูท
คุณสามารถระบุ SystemD User= นอกเหนือจากรูทหากคุณใช้ RootDirectory= สำหรับ chroot และใช้พอร์ตที่ไม่ได้รับสิทธิพิเศษ (สูงกว่า 1024, เช่น 8080) หรือไบนารีของคุณมีความสามารถเพียงพอ ตัวอย่างที่นี่
ในการติดตั้งไฟล์บริการ wfm คัดลอกไปที่ /etc/systemd/system/wfm.service แก้ไขการกำหนดค่าและเรียกใช้:
$ sudo systemctl daemon-reload
$ sudo systemctl enable --now wfmตัวอย่างไฟล์บริการ Launchd มีให้ที่นี่
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 จะทำงานเป็น ID ผู้ใช้ 0 ภายในคอนเทนเนอร์
การปรับใช้ขั้นสูงด้วยรหัสผ่านและ 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 ) ธง -prefix ใช้สองไดเรกทอรีคั่นด้วยลำไส้ใหญ่ หนึ่งทางด้านซ้ายคือไดเรกทอรีระบบไฟล์หนึ่งทางด้านขวาคือเส้นทาง HTTP FSDIR ได้รับผลกระทบจากการตั้งค่าสถานะ -chroot หากคุณ chroot ไปยังไดเรกทอรีบางอย่างเช่น -chroot /home/ubuntu/dir ดังนั้นคำนำหน้าควรใช้รูท DIR ของโฟลเดอร์นั้น -prefix /:/ -ซึ่งก็เป็นค่าเริ่มต้น
ชิ้นส่วน HTTPPATH ควบคุมคำต่อท้าย URL โดยค่าเริ่มต้นคือ / อย่างไรก็ตามคุณสามารถย้ายไปยังเส้นทางอื่นเช่น "/data" หรือ "/wfm" ด้วย Flag -prefix=/:/httppath สิ่งนี้อาจเป็นประโยชน์สำหรับการซ่อนตำแหน่งเริ่มต้นหรือหากการกำหนดเส้นทางจากบริการอื่นเช่น Reverse Proxy
ในอนาคต 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 Manager เพื่อรับใบรับรองจากนั้นเปลี่ยนเส้นทางไปยังพอร์ต 443/HTTPS Flag -acm_file=/var/cache/wfm-certs.json เป็นที่ที่ใบรับรองและคีย์ถูกเก็บไว้ ไฟล์นี้เปิดก่อน chroot เช่นนี้จึงเป็นที่ต้องการสำหรับ WFM ที่จะเริ่มต้นเป็นรูทจากนั้น setuid และ chroot ด้วยตัวเองมากกว่าผ่าน SystemD/Launchd
-acm_host= เป็นธงซ้ำที่เพิ่มโฮสต์ให้กับ Whitelist ACM จะได้รับใบรับรองสำหรับโฮสต์ที่ได้รับการอนุญาตเท่านั้น หากไซต์ WFM ของคุณมีชื่อหลายชื่อใน DNS คุณต้องเพิ่มลงใน Whitelist
หากไซต์ HTTPS ถูกเปิดเผยภายนอกนอกไฟร์วอลล์ของคุณบางครั้งก็ต้องการที่จะมีผู้ฟัง HTTP (ไม่ใช่ SSL) ในท้องถิ่นเช่นกัน เพื่อเปิดใช้งานการใช้งานนี้ -addr_extra=:8080 Flag
การรับรองความถูกต้องดำเนินการโดย HTTP BASIC Auth (ในอนาคตหน้าต่างล็อกอินที่กำหนดเองอาจถูกนำไปใช้แทน) หากไม่มีการระบุไฟล์รหัสผ่านหรือไม่มีผู้ใช้อยู่ในนั้น (ว่าง) และไม่มีรหัสผ่าน hardcoded WFM จะไม่ขอชื่อผู้ใช้/รหัสผ่าน โหมด Auth-Less โดยจะเป็นโหมดอ่านอย่างเดียว (เช่นเว็บเซิร์ฟเวอร์ปกติ) เว้นแต่คุณจะระบุ -nopass_rw FLAG
ในการเปิดใช้งานการรับรองความถูกต้องให้ระบุไฟล์รหัสผ่านผ่าน -passwd=/path/users.json Flag รหัสผ่านถูกอ่านเมื่อเริ่มต้นและสามารถวางไว้นอกไดเรกทอรี Chroot รหัสผ่านยังสามารถใช้ hardcode ในไบนารีได้ในเวลาคอมไพล์, SE ด้านล่าง
ผู้ใช้สามารถจัดการได้โดยใช้ฟังก์ชั่นผู้ช่วยในตัวที่ให้บริการไฟล์รหัสผ่านที่ระบุ
โปรดทราบว่าการเปลี่ยนแปลงใด ๆ ในไฟล์รหัสผ่านจำเป็นต้องรีสตาร์ท WFM daemon เพื่อให้มีผล นี่เป็นเพราะไฟล์ถูกอ่านหนึ่งครั้งในการเริ่มต้นก่อนที่จะดำเนินการ 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 ระบุว่าผู้ใช้อ่านเท่านั้นหรืออ่านการเข้าถึงการเขียน
ไฟล์รหัสผ่านยังสามารถใช้ hardcoded ภายในไบนารีในเวลาคอมไพล์ สิ่งนี้อาจเป็นประโยชน์ในการดำเนินการในตัว ในการเพิ่มผู้ใช้ฮาร์ดโค้ดให้เพิ่มรายการลงใน users VAR ใน 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 Library และ Apache httpd ถูกปล่อยออกมา สูงสุดปี 2558 WFM เป็นแอปพลิเคชั่นเชิงพาณิชย์แบบปิดที่ใช้สำหรับการจัดการเอกสารที่มีน้ำหนักเบาและสนับสนุนโดยลูกค้าไม่กี่ราย มันได้รับการเปิดแหล่งที่มา ในปี 2022 WFM ได้รับการเขียนใหม่ใน GO เป็นแอปพลิเคชันแบบสแตนด์อโลนพร้อมเว็บเซิร์ฟเวอร์ในตัวสำหรับสถานการณ์การปรับใช้ที่ทันสมัยยิ่งขึ้น