All Projects → bolcom → Unftp

bolcom / Unftp

Licence: other
A FTP(S) server with a couple of twists written in Rust. Follow and talk to us on https://t.me/unftp

Programming Languages

rust
11053 projects

Projects that are alternatives of or similar to Unftp

Davos
Web-based FTP automation for Linux servers.
Stars: ✭ 90 (-34.31%)
Mutual labels:  server, ftp
Ftp Srv
📮 Modern FTP Server
Stars: ✭ 253 (+84.67%)
Mutual labels:  server, ftp
Stocazzo
Stocazzo As A Service
Stars: ✭ 129 (-5.84%)
Mutual labels:  server
Pesocket
A C# Network Library.
Stars: ✭ 134 (-2.19%)
Mutual labels:  server
Jstp
Fast RPC for browser and Node.js based on TCP, WebSocket, and MDSF
Stars: ✭ 132 (-3.65%)
Mutual labels:  server
Armor
Uncomplicated, modern HTTP server
Stars: ✭ 1,629 (+1089.05%)
Mutual labels:  server
Dark Fantasy Hack Tool
DDOS Tool: To take down small websites with HTTP FLOOD. Port scanner: To know the open ports of a site. FTP Password Cracker: To hack file system of websites.. Banner Grabber: To get the service or software running on a port. (After knowing the software running google for its vulnerabilities.) Web Spider: For gathering web application hacking information. Email scraper: To get all emails related to a webpage IMDB Rating: Easy way to access the movie database. Both .exe(compressed as zip) and .py versions are available in files.
Stars: ✭ 131 (-4.38%)
Mutual labels:  ftp
Vscode Deploy Reloaded
Recoded version of Visual Studio Code extension 'vs-deploy', which provides commands to deploy files to one or more destinations.
Stars: ✭ 129 (-5.84%)
Mutual labels:  ftp
Sonic
🦔 Fast, lightweight & schema-less search backend. An alternative to Elasticsearch that runs on a few MBs of RAM.
Stars: ✭ 12,347 (+8912.41%)
Mutual labels:  server
Spreadsheet server
A python server harnessing the calculational ability of LibreOffice Calc (thanks to 'pyoo'). It provides 'instant' access to the cell ranges of a set of spreadsheets.
Stars: ✭ 132 (-3.65%)
Mutual labels:  server
See
Simple and fast web server
Stars: ✭ 135 (-1.46%)
Mutual labels:  server
Health
Laravel Health Panel
Stars: ✭ 1,774 (+1194.89%)
Mutual labels:  server
Ardb
A redis protocol compatible nosql, it support multiple storage engines as backend like Google's LevelDB, Facebook's RocksDB, OpenLDAP's LMDB, PerconaFT, WiredTiger, ForestDB.
Stars: ✭ 1,707 (+1145.99%)
Mutual labels:  server
Luna
A highly scalable and efficient Runescape server. Targets revision #317
Stars: ✭ 133 (-2.92%)
Mutual labels:  server
Nano
Lightweight, facility, high performance golang based game server framework
Stars: ✭ 1,888 (+1278.1%)
Mutual labels:  server
Hrconvert2
A self-hosted, drag-and-drop, & nosql file conversion server that supports 62x file formats.
Stars: ✭ 132 (-3.65%)
Mutual labels:  server
Old
每天大红包 · 旧版(不再维护,仅供参考)
Stars: ✭ 1,611 (+1075.91%)
Mutual labels:  server
Compose Server Side
Experiment with server side rendering using compose and ktor
Stars: ✭ 131 (-4.38%)
Mutual labels:  server
Practical Server Side Swift
Vapor 4 code samples for the Practical Server Side Swift book
Stars: ✭ 133 (-2.92%)
Mutual labels:  server
Fluentftp
An FTP and FTPS client for .NET & .NET Standard, optimized for speed. Provides extensive FTP commands, File uploads/downloads, SSL/TLS connections, Automatic directory listing parsing, File hashing/checksums, File permissions/CHMOD, FTP proxies, FXP support, UTF-8 support, Async/await support, Powershell support and more. Written entirely in C#,…
Stars: ✭ 1,943 (+1318.25%)
Mutual labels:  ftp

unFTP

Crate Version Build Status Docker Pulls Follow on Telegram

When you need to FTP, but don't want to.

logo

unFTP is a FTP(S) server written in Rust and built on top of libunftp and the Tokio asynchronous run-time. It is unlike your normal FTP server in that it provides:

  • Configurable Authentication (e.g. Anonymous, PAM or a JSON file).
  • Configurable storage back-ends (e.g. GCS or filesystem)
  • An HTTP server with health endpoints for use for example in Kubernetes for readiness and liveness probes.
  • Integration with Prometheus for monitoring.
  • A proxy protocol mode for use behind proxies like HA Proxy and Nginx.
  • Structured logging and the ability to ship logs to a Redis instance.

With unFTP, you can present RFC compliant FTP(S) to the outside world while freeing yourself to use modern APIs and techniques on the inside of your perimeter.

Installation

Binaries

Precompiled binaries for unFTP are available for Linux and macOS. On Linux you can choose between a statically linked image (no PAM integration) or a dynamically linked image with PAM integration:

  • unftp_x86_64-apple-darwin - macOS
  • unftp_x86_64-unknown-linux-musl - Linux statically linked, no PAM support.
  • unftp_x86_64-unknown-linux-gnu - Dynamically linked with PAM support.

To install with Curl:

Linux (static, no PAM):

curl -L https://github.com/bolcom/unFTP/releases/download/v0.12.6/unftp_x86_64-unknown-linux-musl \
  | sudo tee /usr/local/bin/unftp > /dev/null && sudo chmod +x /usr/local/bin/unftp

Linux (dynamic with PAM support):

curl -L https://github.com/bolcom/unFTP/releases/download/v0.12.6/unftp_x86_64-unknown-linux-gnu \
  | sudo tee /usr/local/bin/unftp > /dev/null && sudo chmod +x /usr/local/bin/unftp

macOS:

curl -L https://github.com/bolcom/unFTP/releases/download/v0.12.6/unftp_x86_64-apple-darwin \
  | sudo tee /usr/local/bin/unftp > /dev/null && sudo chmod +x /usr/local/bin/unftp

From Source

You'll need Rust 1.45 (including cargo) or higher to build unFTP. Then:

cargo install unftp

and find unftp in ~/.cargo/bin/unftp. You may want to add ~/.cargo/bin to your PATH if you haven't done so. The above merely creates the binary there, it won't start it as a service at the moment.

Features

unFTP offers optional features in its Cargo.toml:

  • cloud_storage: enables the Google Cloud Storage (GCS) storage backend
  • jsonfile_auth: enables the JSON file authentication module
  • pam_auth: enables the PAM authentication module
  • rest_auth: enables the REST authentication module

Usage

Both command line arguments and environment variables are available in unFTP. To show a list of available program arguments:

unftp --help

To run with default settings:

unftp

Example running an instance with a filesystem back-end and custom port:

unftp \
  --root-dir=/home/unftp/data \
  --bind-address=0.0.0.0:2121 \
  --passive-ports=50000-51000 \
  -vv

With FTPS enabled:

# Generate keypair
openssl req \
   -x509 \
   -newkey rsa:2048 \
   -nodes \
   -keyout unftp.key \
   -out unftp.crt \
   -days 3650 \
   -subj '/CN=www.myunftp.domain/O=My Company Name LTD./C=NL'

# Run, pointing to cert and key and require TLS on the control channel
unftp \
  --root-dir=/home/unftp/data \
  --ftps-certs-file=/home/unftp/unftp.crt \
  --ftps-key-file=/home/unftp/unftp.key \
  --ftps-required-on-control-channel=all

Enabling the Prometheus exporter on (http://../metrics), binding to port 8080:

unftp \
  --bind-address=0.0.0.0:2121 \
  --bind-address-http=0.0.0.0:8080 \
  --root-dir=/home/unftp/data

Run with the GCS (Google Cloud Storage) back-end:

unftp \
  --sbe-type=gcs \
  --sbe-gcs-bucket=mybucket \
  --sbe-gcs-key-file=file

Run behind a proxy in proxy protocol mode:

unftp \
    --proxy-external-control-port=2121

Run sending logs to a Redis list:

unftp \
    --log-redis-host=2121 \
    --log-redis-key=logs-key \
    --log-redis-port=6379

Authenticate with credentials stored in a JSON file:

Create a credentials file (e.g. credentials.json):

[
  {
    "username": "alice",
    "password": "12345678"
  },
  {
    "username": "bob",
    "password": "secret"
  }
]
unftp \
    --auth-type=json \
    --auth-json-path=credentials.json

Docker image

The project contains templated Dockerfiles . To get a list of available commands, run:

make help

We offer 3 different options for building an unFTP docker image:

  • scratch: builds the binary in rust:slim and deploys in a FROM scratch image. The unFTP binary is statically linked using musl libc.
  • alpine (default): builds in rust:slim and deploy in alpine. This image is built with musl instead of a full-blown libc. The unFTP binary is statically linked using musl libc.
  • alpine-debug: same images as alpine but using the debug build of unftp and adds tools like lftp and CurlFtpFS while also running as root.

To build the alpine docker image:

make docker-image-alpine

Alternatively you can download pre-made images from docker hub:

docker pull bolcom/unftp:v0.12.1-alpine

Example running it:

docker run \
  -e ROOT_DIR=/ \
  -e UNFTP_LOG_LEVEL=info \
  -e UNFTP_FTPS_CERTS_FILE='/unftp.crt' \
  -e UNFTP_FTPS_KEY_FILE='/unftp.key' \
  -e UNFTP_PASSIVE_PORTS=50000-50005 \
  -e UNFTP_SBE_TYPE=gcs \
  -e UNFTP_SBE_GCS_BUCKET=the-bucket-name \
  -e UNFTP_SBE_GCS_KEY_FILE=/key.json \
  -p 2121:2121 \
  -p 50000:50000 \
  -p 50001:50001 \
  -p 50002:50002 \
  -p 50003:50003 \
  -p 50004:50004 \
  -p 50005:50005 \
  -p 8080:8080 \
  -v /Users/xxx/unftp/unftp.key:/unftp.key  \
  -v /Users/xxx/unftp/unftp.crt:/unftp.crt \
  -v /Users/xxx/unftp/the-key.json:/key.json \
  -ti \
  bolcom/unftp:v0.12.1-alpine

Getting help and staying informed

Support is given on a best effort basis. You are welcome to engage us on the discussions page or create a Github issue.

You can also follow news and talk to us on Telegram

License

You're free to use, modify and distribute this software under the terms of the Apache-2.0 license.

See also

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].