A free (BSD), secure, production-quality and standard-conformant FTP server.
424

Pure-FTPd is a free (BSD), secure, production-quality and standard-conformant FTP server. It doesn't provide useless bells and whistles, but focuses on efficiency and ease of use. It provides simple answers to common needs, plus unique useful features for personal users as well as hosting providers.
services:
pure-ftpd:
image: easypi/pure-ftpd
volumes:
- ./data/etc:/etc/pure-ftpd
- ./data/ssl:/etc/ssl/private
- ./data/var:/home/ftpuser
- ./data/log:/var/log/pure-ftpd
network_mode: host
privileged: true
$ cd ~/fig/pure-ftpd/
$ mkdir -p data/{etc,ssl,var,log}
$ cd data/ssl/
$ openssl req -x509 -nodes -days 365 -newkey rsa:2048 -sha256 \
-subj "/CN=localhost" \
-keyout pure-ftpd.pem \
-out pure-ftpd.pem \
-outform PEM
$ cd ../../
$ docker-compose up -d
$ docker-compose exec pure-ftpd sh
>>> pure-pw useradd kev -u ftpuser -d /home/ftpuser/kev -t 1024 -T 1024 -y 1 -m
# Password: ******
# Enter it again: ******
>>> pure-pw list
>>> pure-pw show kev
>>> pure-pw passwd kev -m
>>> pure-pw userdel kev -m
>>> pure-ftpwho -n
>>> exit
$ tree -F
├── docker-compose.yml
└── data/
├── var/
│ └── kev/
│ └── file.txt
├── log/
│ └── pureftpd.log
├── ssl/
│ └── pure-ftpd.pem
└── etc/
├── pureftpd.passwd
└── pureftpd.pdb
It only works in LAN environment
$ ftp remote-server
Name: kev
Password: ******
ftp> !touch file.txt
ftp> !ls
ftp> put file.txt
ftp> !rm file.txt
ftp> get file.txt
ftp> del file.txt
ftp> ls
ftp> bye
Please config firewall according to PassivePortRange (-p first:last -P address).
$ curl -u kev:****** -T file.txt ftp://remote-server/
curl: (7) Failed to connect to remote-server:21 via remote-server:20015 after 5801 ms: Could not connect to server
To fix this issue:
-p 20000:20099 -P x.x.x.x and expose these ports to hostnetwork_mode: hostUpdate docker-compose.yml
services:
pure-ftpd:
image: easypi/pure-ftpd
command: ["-A", "-E", "-H", "-j", "-Y3"]
$ curl -k --ssl-reqd -u kev:****** ftp://remote-server/file.txt
Update docker-compose.yml
services:
pure-ftpd:
image: easypi/pure-ftpd
command: ["-A", "-E", "-H", "-j", "-Y3", "-a21"]
$ docker-compose exec pure-ftpd sh
>>> cat /etc/groups
>>> getent group 21
>>> pure-pw useradd admin -u ftpuser -g 21 -D /home/ftpuser/admin -m
# Password: ******
# Enter it again: ******
>>> exit
$ cat ~/.lftprc
set ssl:ca-file ~/fig/pure-ftpd/data/ssl/pure-ftpd.pem
$ lftp -u admin,***** localhost
>>> ls
>>> pwd
ftp://admin:******@localhost/%2Fhome/ftpuser/admin
>>> debug 3
>>> cat -b ../kev/file.txt
>>> bye
Content type
Image
Digest
sha256:e5c54bf41…
Size
4 MB
Last updated
11 days ago
docker pull easypi/pure-ftpd