WFM은 간단한 웹 기반 파일 관리자입니다. NAS 박스, FTP 서버, "개인 클라우드", 문서 공유 사이트 또는 가벼운 CMS 용 웹 인터페이스로 사용할 수 있습니다. 다운로드, 업로드, 이름 바꾸기, 이동, 파일 삭제 및 디렉토리 트리 구조와 같은 기본 파일 및 폴더 작업을 수행 할 수 있습니다. 마크 업, 마크 다운, 구성 등과 같은 텍스트 파일은 브라우저에서 직접 편집 할 수 있습니다. WFM은 또한 책갈피, 링크 및 바로 가기 파일을 생성하고 열 수 있습니다.

WFM은 자체 웹 서버를 갖춘 독립형 서비스입니다. Apache, Nginx, PHP 등이 필요하지 않습니다. systemd , sysvinit , launchd , rc 또는 Docker에서 직접 실행됩니다. TLS / SSL은 Lets Encrypt / Certbot에 의해 자동 인증서 생성으로 지원됩니다.
Docker, Kubernetes, Hugo 등과 마찬가지로 WFM은 GO 언어로 작성됩니다. 이진은 정적으로 연결되어 있고 완전히 자체적으로 포함되어 있으며 외부 의존성이 없습니다. 아이콘은 유니 코드 이모티콘입니다. CA CERT는 건축 시간에 내장되어 있습니다. Python, Php, SQL, JavaScript, 노드 또는 기타 부풀어 갈 필요가 없습니다. WFM 출력은 JavaScript없이 HTML 4.01을 검증했습니다. Internet Explorer 1.X 및 NetScape 3.X로 돌아가는 최신 및 레거시 웹 브라우저에서 작동합니다.
WFM은 웹 기반 인터페이스를 통해 디렉토리 트리를 노출시킵니다. 루트 디렉토리를 지정하는 주요 방법은 -chroot=/dir flag 또는 서비스 관리자를 통해 chroot입니다. 예를 들어 SystemD 서비스 파일 RootDirectory= Directive입니다. WFM은 chroot없이 사용되지 않습니다.
Docker와 같은 일부 서비스의 경우 하위 디렉토리를 사용해야합니다. 이는 --prefix=/subdir:/ flag로 지정할 수 있습니다. 하위 디렉토리는 안전한 것으로 간주되어서는 안되며 사용자가 접두사 위의 파일에 chroot까지 액세스 할 수 있다고 가정해야합니다.
다른 웹 서버와 마찬가지로 WFM은 프로세스를 root 로 시작하여 포트 80 또는 443에 바인딩 한 다음 -setuid=myuser 로 지정된 원하는 사용자에게 setuid를 시작합니다. 마찬가지로 WFM은 -chroot=/datadir 로 지정된 디렉토리에 chroot를 수행합니다. 예제 서비스 파일이 여기에 제공됩니다.
SystemD 또는 WFM이 chroot 및 setUid를 수행 할 수 있습니다. 포트 80 (및/또는 443)에 바인딩하는 경우 루트로 WFM을 시작해야합니다.
chroot에 RootDirectory= 사용하고 비 권한이없는 포트 (1024 이상, 8080 이상)를 사용하거나 이진에 적절한 기능이 설정되어있는 경우 root 이외의 SystemD User= 지정할 수 있습니다. 여기에 예.
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 추가해야 할 수도 있습니다.
Docker Run에 --user 지정하지 않으면 WFM이 컨테이너 내부에서 사용자 ID 0으로 실행되므로 --allow_root 도 필요할 수도 있습니다.
비밀번호 및 자동 점을 통한 고급 배포 :
$ 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 같은 디렉토리에 chroot하는 경우 접두사는 아마도 해당 폴더의 루트 dir -prefix /:/ -를 사용해야합니다.
httppath 부분은 URL 접미사를 제어합니다. 기본적으로 / 그러나 플래그 -prefix=/:/httppath 사용하여 "/data"또는 "/wfm"과 같은 다른 경로로 이동할 수 있습니다. 이는 기본 위치를 숨기거나 리버스 프록시와 같은 다른 서비스에서 라우팅하는 데 유용 할 수 있습니다.
향후 WFM은 여러 접두사 쌍을 지원해야합니다.
테스트되지 않았지만 다음과 같은 것이 필요합니다.
wfm -addr 127.0.0.1:9000 -fastcgiWFM을 SSL / TLS / HTTPS 보안 웹 서버로 사용할 수 있습니다. ACM은 귀하의 사이트 및 Kyypair에 대한 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 HTTPS 요청에 대해 포트 443에서 WFM을 듣게합니다. FLAG -acm_addr=:80 은 자동 인증서 관리자에게 인증서를 얻은 다음 포트 443/HTTPS로 리디렉션합니다. 플래그 -acm_file=/var/cache/wfm-certs.json 인증서와 키가 저장되는 곳입니다. 이 파일은 chroot 전에 열립니다. 따라서 WFM을 루트로 시작한 다음 SystemD/Lunchd를 통해서보다는 SetUid 및 Chroot가 시작되기를 원합니다.
-acm_host= 는 화이트리스트에 호스트를 추가하는 반복 플래그입니다. ACM은 화이트리스트 호스트에 대한 인증서 만 얻습니다. WFM 사이트에 DNS에 여러 이름이있는 경우 화이트리스트에 추가해야합니다.
HTTPS 사이트가 방화벽 외부에서 외부에서 노출되면 때때로 로컬 HTTP (비 SSL) 리스너도 갖고 싶어합니다. 이 사용 -addr_extra=:8080 플래그를 활성화합니다.
인증은 HTTP Basic Auth에 의해 수행됩니다 (향후 사용자 정의 로그인 창이 대신 구현 될 수 있음). 비밀번호 파일이 지정되지 않았거나 IT에있는 사용자가없는 경우 (빈) 및 하드 코딩 된 암호가없는 경우 WFM은 사용자 이름/비밀번호를 요구하지 않습니다. -nopass_rw 플래그를 지정하지 않는 한 일반 웹 서버와 같은 인증 모드 (일반 웹 서버와 같은).
인증을 활성화하려면 -passwd=/path/users.json flag를 통해 비밀번호 파일을 지정하십시오. 비밀번호는 스타트 업에서 읽으므로 Chroot 디렉토리 외부에 배치 할 수 있습니다. 암호는 컴파일 시간에 이진에 하드 코딩 될 수도 있습니다.
지정된 비밀번호 JSON 파일에 서비스를 제공하는 내장 헬퍼 기능을 사용하여 사용자를 관리 할 수 있습니다.
비밀번호 파일의 변경 사항은 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 myuserJSON 파일은 수동으로 편집 / 관리 할 수 있습니다.
예제 파일이 제공됩니다. 형식은 "사용자", "소금", "해시"문자열 및 "RW"부울 필드가있는 간단한 사용자 목록입니다. 사용자는 자기 설명입니다. 소금은 암호를 갈라지기 어렵게 만드는 데 사용되는 짧은 임의의 문자열입니다. 그것은 무엇이든 할 수 있지만 모든 사용자마다 달라야합니다. 암호를 생성 할 때도 동일한 소금을 전달해야합니다. 해시는 해시 소금 + 비밀번호 문자열입니다. RW 부울 사용자가 읽기 전용 또는 쓰기 액세스를 읽었는지 지정합니다.
암호 파일은 컴파일 시간에 바이너리 내부에서 하드 코딩 될 수도 있습니다. 이것은 임베디드 작업에 유용 할 수 있습니다. 하드 코딩 된 사용자를 추가하려면 auth.go 의 users var에 항목을 추가합니다.
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은 CERN HTTPD 서버의 PERL CGI 스크립트로 1994 년경에 수명을 시작했습니다. 웹을 통해 현장 지원 엔지니어, 고객 등의 로그, 덤프 및 기타 사례 데이터를 업로드하고 FTP 서버의 프론트 엔드로 개발되었습니다. CGIC 라이브러리와 Apache HTTPD가 출시 될 때 나중에 C 언어로 다시 작성되었습니다. 2015 년까지 WFM은 가벼운 문서 관리에 사용되는 폐쇄 소스 상용 애플리케이션으로 일부 고객이 지원했습니다. 그 이후로 공개되었습니다. 2022 년에 WFM은보다 최신 배포 시나리오를위한 내장 웹 서버를 갖춘 독립형 애플리케이션으로 GO에서 다시 작성되었습니다.