FTP server: vsftpd

Có khá nhiều FTP server có thể chạy trên RPi, khác nhau về sự gọn nhẹ, hiệu quả, bảo mật và tính năng phong phú. Có thể kế đến các FTP server thường dùng như ftpd, tftpd, proftpd, pure-ftpd, vsftpd, wu-ftpd…

vsftpd gọn nhẹ, hiệu quả, cấu hình đơn giản… đủ dùng cho nhu cầu truyền/nhận file trên RPi.

Cài đặt

apt-get install vsftp

vsftpd cài đặt xong là chạy ngay. Chúng ta dừng vsftpd để cấu hình

/etc/init.d/vsftpd stop

Cấu hình vsftpd bằng cách thay đổi các tham số trong /etc/vsftpd.conf

Cấu hình chung

Cho phép vsftpd chạy standalone

listen=YES

Dùng địa chỉ IPv4

listen_ipv6=NO

Truy cập vô danh

Mặc định là không được phép truy cập vô danh. Cho phép truy cập vô danh bằng cách đặt

anonymous_enable=YES

Kiểm soát user truy cập FPT server

Mặc định, user Linux có thư mục home, có mật khẩu đều có thể truy cập FTP server. Chúng ta có thể cho phép local user được ghi vào FTP server

write_enable=YES

Có thể chỉ định một danh sách user được phép truy cập FTP server, bằng cách đặt

userlist_enable=YES
userlist_file=/etc/vsftpd.userlist
userlist_deny=NO

Sau đó tạo file /etc/vsftpd.userlist với mỗi dòng là một tên user được cho phép truy cập FTP server

Hoặc dùng firewall iptables để chặn các user không phải cùng mạng với FTP server (giả sử là 192.168.x.y)

sudo iptables -A INPUT ! --src 192.168.0.0/24 -p tcp --dport 21 -j DROP

Cô lập user

Đặt

chroot_local_user=YES

để chỉ định thư mục FTP gốc của user là thư mục home của họ. Tuy nhiên user có thể dùng ssh, getty… để truy cập đến toàn bộ hệ thống, vì vậy cần vô hiệu hóa shell của user.

usermod -s /bin/false
echo /bin/false >> /etc/shells

hay dùng tham số

check_shell=NO

Ngoài ra, cũng có thể đặt thư mục FTP gốc chung cho nhiều user

chroot_list_enable=YES
local_root=/FTP/ROOT/FOLDER

Sau đó tạo file /etc/vsftpd.chroot_list với mỗi dòng là một tên user được dùng thư mục trên như là gốc

SSL

Để tăng cường bảo mật, sử dụng ftps thay cho ftp. Chứng chỉ SSL có thể tự cấp bằng câu lệnh

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

hay dùng chứng chỉ do Let’s Encrypt cấp.

Thêm vào /etc/vsftpd.conf để cấu hình SSL

# enable TLS/SSL
ssl_enable=YES
# force client to use TLS when logging in
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

# specify SSL certificate/private key (Debian/Ubuntu)
# For CentOS/Fedora/RHEL, replace it with /etc/vsftpd/vsftpd.pem
rsa_cert_file=/etc/ssl/vsftpd.crt
rsa_private_key_file=/etc/ssl/private/vsftpd.key
#Let's Encrypt certificate
#rsa_cert_file=/etc/letsencrypt/live/your-domain/cert.pem
#rsa_private_key_file=/etc/letsencrypt/live/your-domain/privkey.pem

# define port range for passive mode connections
pasv_max_port=10110
pasv_min_port=10100

Nếu chúng ta đặt

force_local_data_ssl=NO
force_local_logins_ssl=NO

thì có thể kết nối với FTP server bằng ftp hay ftps tùy khả năng của FTP client.

Các chứng chỉ SSL như trên là tự cấp. Nếu dùng chứng chỉ của Let’s Encrypt thì khai báo

rsa_cert_file=/etc/letsencrypt/live/your_domain/cert.pem
rsa_private_key_file=/etc/letsencrypt/live/your_domain/privkey.pem

Khởi động lại vsftpd bằng câu lệnh

/etc/init.d/vsftpd restart

Đến đây, ftps vẫn có thể chưa chịu chạy nếu RPi có firewall. Dùng các câu lệnh sau đây để mở port nếu firewall là iptables

iptables -I INPUT -p tcp --dport 20 -j ACCEPT
iptables -I INPUT -p tcp --dport 21 -j ACCEPT
iptables -I INPUT -p tcp --dport 10100:10110 -j ACCEPT
# ufw
ufw allow 20/tcp
ufw allow 21/tcp
sudo ufw allow from any to any proto tcp port 10100:10110

Test ftps

  • FileZilla là một trình FTP client hỗ trợ SSL/TLS, chúng ta dùng để test vsftpd

Thiết lập kết nối tời RPi như trong hình

Bấm Connect sẽ kết nối với RPi.

  • curl
curl -1 -k -v --disable-epsv --ftp-skip-pasv-ip --ftp-ssl -T /tmp/test-file ftp://usr:pwd@ftp-ip

Chú thích

  • Đôi khi phải thêm user vào nhóm ftp,để có thể truy cập vào thư mục của ftp
usermod -a -G ftp userId
  • Ghi sai đường dẫn của các file certificate có thể khiến vsftpd hoat động không chính xác.
  • Vì lý do bảo mật, ftp server không cho phép thư mục FTP root của user có thuộc tính write (by others). Thư mục này có thể là home của user hay thư mục FTP root dùng chung. Nếu không có thuộc tính ghi (by others) thì FTP user không thể thực hiện bất cứ câu lệnh nào ghi lên FTP root, như upload file, tạo thư mục… qua giao thức ftp
  • Thêm option này vào /etc/vsftpd.conf để có thể ghi lên FTP root (có tác dụng với giao thức ftp)
allow_writeable_chroot=YES

Comments Off on FTP server: vsftpd

Filed under Software

Comments are closed.