<mohammadrony>

FTP Server

Guide

Server Configuration

Install vsftpd

sudo apt install -y vsftpd

Start service

sudo systemctl enable --now vsftpd
sudo systemctl status vsftpd

Disable firewall

sudo systemctl disable --now ufw
# sudo ufw allow 20/tcp
# sudo ufw allow 21/tcp
# sudo ufw allow 5000:10000/tcp

Create admin user

sudo useradd -m -s /bin/bash admin
sudo passwd admin
# Password:
sudo chown admin:ftp /srv/ftp -R

Create read user

sudo useradd -m -s /bin/bash ftpuser
sudo passwd ftpuser
# Password:

Create config file backup

sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.orig
sudo vi /etc/vsftpd.conf

Update or uncomment in /etc/vsftpd.conf file

anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=0002
chroot_local_user=YES
chroot_list_enable=YES

Add in /etc/vsftpd.conf file

pasv_min_port=5000
pasv_max_port=10000
local_root=/srv/ftp
allow_writeable_chroot=YES

Create chroot file

sudo touch /etc/vsftpd.chroot_list

Add user in /etc/vsftpd.chroot_list file to access / files

Generate SSL certificate

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem

Update SSL configuration

sudo vi /etc/vsftpd.conf

Comment existing certificate

#rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
#rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
#ssl_enable=NO

Add new certificate

rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
require_ssl_reuse=NO
ssl_ciphers=HIGH

Restart vsftpd service

sudo systemctl restart vsftpd

Deny SSH Login

sudo tee -a /etc/ssh/sshd_config << EOF
DenyUsers admin ftpuser
EOF
sudo systemctl restart ssh