WFM هو مدير الملفات البسيط القائم على الويب. يمكنك استخدامه كواجهة ويب لمربع NAS أو خادم FTP أو "سحابة شخصية" أو موقع لمشاركة المستندات أو CMS خفيفة الوزن. يسمح بإجراء عمليات الملفات والمجلدات الأساسية مثل التنزيل وتحميل وإعادة تسمية وتحريك وحذف الملفات وتنظيم بنية شجرة الدليل. يمكن تحرير الملفات النصية ، مثل Markup ، Markdown ، Config ، وما إلى ذلك مباشرة في المتصفح. يمكن لـ 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 ، العقدة أو أي ضربة أخرى. مخرجات WFM تم التحقق من صحة HTML 4.01 بدون JavaScript. إنه يعمل على كل من متصفحات الويب الحديثة والإرثية التي تعود إلى Internet Explorer 1.x و Netscape 3.x.
يعرض WFM شجرة دليل عبر واجهة على الويب. الطريقة الأساسية لتحديد الدليل الجذر هي chroot عبر -chroot=/dir flag ، أو بواسطة مدير الخدمة الخاص بك. على سبيل المثال SystemD خدمة ملف 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 كجذر.
يمكنك تحديد User= بخلاف الجذر إذا كنت تستخدم أيضًا 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 داخل الحاوية.
النشر المتقدم مع كلمات المرور و 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 /home/ubuntu/dir ، فمن المحتمل أن تستخدم البادئة فقط الجذر لهذا المجلد -prefix /:/ -الذي يحدث أيضًا أن يكون الافتراضي.
يتحكم جزء HTTPPATH في لاحقة عنوان URL ، بشكل افتراضي / ، ولكن يمكنك نقله إلى مسار مختلف على سبيل المثال "/البيانات" أو "/wfm" مع Flag -prefix=/:/httppath . قد يكون هذا مفيدًا لإخفاء الموقع الافتراضي أو إذا كان التوجيه من خدمة أخرى مثل الوكيل العكسي.
في المستقبل يجب أن يدعم WFM أزواج بادئة متعددة.
لم يتم تجربته ، لكنك ستحتاج إلى شيء مثل هذا:
wfm -addr 127.0.0.1:9000 -fastcgiيمكنك استخدام WFM كخادم ويب آمن SSL / TLS / HTTPS مع Encrypt Auto Cert Manager. ستحصل ACM تلقائيًا على شهادة SSL لموقعك وكذلك Keypair.
مثال على النشر مع 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 يستخدم لمدير CERT AUTO للحصول على CERT ثم إعادة توجيه إلى المنفذ 443/HTTPS. flag -acm_file=/var/cache/wfm-certs.json هي المكان الذي يتم فيه تخزين الشهادات والمفاتيح. يتم فتح هذا الملف قبل chroot. على هذا النحو ، من المطلوب أن تبدأ WFM كجذر ، ثم setuid و chroot بمفردها بدلاً من من خلال SystemD/LaunchD.
-acm_host= هو علامة متكررة تضيف المضيفين إلى القائمة البيضاء. ستحصل ACM فقط على شهادات للمضيفين ذوي القائمة البيضاء. إذا كان موقع WFM الخاص بك يحتوي على أسماء متعددة في DNS ، فيجب عليك إضافتها إلى القائمة البيضاء.
إذا تعرض موقع HTTPS خارجيًا خارج جدار الحماية الخاص بك ، فمن المطلوب أحيانًا الحصول على مستمع HTTP (غير SSL) المحلي أيضًا. لتمكين هذا الاستخدام -addr_extra=:8080 علامة.
يتم تنفيذ المصادقة بواسطة Auth HTTP Basic (في المستقبل قد يتم تنفيذ نافذة تسجيل الدخول المخصصة بدلاً من ذلك). إذا لم يتم تحديد ملف كلمة مرور ، أو لا يوجد مستخدمون موجودون فيه (فارغًا) ولا توجد كلمات مرور متشددين موجودة على WFM لن يطلب اسم المستخدم/كلمة المرور. سيكون وضع AUTH-AUTH بواسطة وضع القراءة فقط (مثل خادم الويب العادي) ما لم تحدد علامة -nopass_rw .
لتمكين المصادقة ، حدد ملف كلمة المرور عبر -passwd=/path/users.json . تتم قراءة كلمات المرور على بدء التشغيل وبالتالي يمكن وضعها خارج دليل 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 / إدارته يدويًا.
يتم توفير ملف مثال. التنسيق هو قائمة بسيطة من المستخدمين مع "المستخدم" ، "الملح" ، "Hash" سلاسل "RW" المنطقية. المستخدم هو التوضيح الذاتي. الملح عبارة عن سلسلة عشوائية قصيرة تستخدم لجعل كلمات المرور أكثر صعوبة. يمكن أن يكون أي شيء ولكن يجب أن يكون مختلفا لكل مستخدم. يجب أيضًا تمرير نفس الملح عند إنشاء كلمة المرور. التجزئة هي سلسلة كلمة مرور Salt +. يحدد RW Boolean ما إذا كان المستخدم قد قرأ فقط أو اقرأ الوصول إلى الكتابة.
يمكن أيضًا ترميز ملف كلمة المرور داخل الثنائي في وقت الترجمة. قد يكون هذا مفيدًا في العمليات المضمنة. لإضافة المستخدمين المتشددين إضافة إدخالات إلى users var في auth.go
فشلت شاشات WFM محاولات تسجيل الدخول إلى المستخدم وتحظر المستخدم لزيادة فترة من الوقت مع المزيد من المحاولات السيئة. يتم تمكين هذا بشكل افتراضي. يمكنك تعطيل هذا السلوك باستخدام -f2b=false . بالإضافة إلى أغراض تصحيح الأخطاء ، يمكنك تمكين بادئة حيث سيتم إلقاء قاعدة بيانات الحظر على سبيل المثال -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 كتطبيق مستقل مع خادم ويب مدمج لمزيد من سيناريوهات النشر الحديثة.