Secure FTP szerver
A minap próbálkoztam összerakni egy FTP szervert TLS támogatással Debian Etch x64 alatt. Ugye nem kell taglalnom, hogy milyen előnyökkel jár egy FTP szerver, ha képesek vagyunk titkosított kapcsolaton keresztül catlakozni és adatokat mozgatni közte és a gépünk között :) ? Első körben a proftpd-vel próbálkoztam, ami része a Debian Etc disztribúciónak. Sok sikerrel nem jártam, mert sem Total Commander-rel (tudom, tudom ....) sem a FileZilla 3.3.1 kliensekkel nem tudtam csatlakozni. Kis google használat után megtaláltam, hogy a proftpd Etch-ben található verziójában van némi TLS bug. Ajánlották, hogy használjam az 1.3.2c verziót. Letöltötem, lefordítottam tls támogatással, de a helyzet változatlan. Ez után jött a következő kiszemelt FTP szerver szoftver, a vsftpd. Ennek fordítását, telepítését és konfigurálását írom le röviden.
1. Töltsük le és tömörítsük ki a vsftpd-t (a cikk írásakor a 2.2.2-es verzió a legfrisebb)
# wget ftp://vsftpd.beasts.org/users/cevans/vsftpd-2.2.2.tar.gz
# gunzip -c vsftpd-2.2.2.tar.gz | tar xfp -
# cd vsftpd-2.2.2
Szerkeszteni kell a builddefs.h fájlt, hogy tls támogatással forduljon le a vsftpd.
# cat builddefs.h
#ifndef VSF_BUILDDEFS_H
#define VSF_BUILDDEFS_H
#undef VSF_BUILD_TCPWRAPPERS
#define VSF_BUILD_PAM
#define VSF_BUILD_SSL
#endif /* VSF_BUILDDEFS_H */
Fordítsuk le a vsftpd-t
# make
Ha a fordítás sikeres, meg is találjuk a vsftpd binárisát az adott könyvtárban.
# file vsftpd
vsftpd: ELF 64-bit LSB executable, AMD x86-64, version 1 (SYSV), for GNU/Linux 2.6.0, dynamically linked (uses shared libs), for GNU/Linux 2.6.0, stripped
Ellenőrizzük, hogy a nobody felhasználó létezik -e:
# id nobody
uid=65534(nobody) gid=65534(nogroup) groups=65534(nogroup)
Hozzuk létre a /usr/share/empty könyvtárat
# sudo mkdir /usr/share/empty
Másoljuk a binárist, man oldalakat és a konfigurációs állományt a megfelelő helyekre
# sudo cp vsftpd /usr/local/sbin/vsftpd
# sudo cp vsftpd.conf.5 /usr/local/man/man5
# sudo cp vsftpd.8 /usr/local/man/man8
# sudo cp vsftpd.conf /etc
Az én vsftpd.conf fájlom így fest:
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
#anon_upload_enable=NO
#anon_mkdir_write_enable=YES
dirmessage_enable=NO
xferlog_enable=YES
connect_from_port_20=NO
#chown_uploads=YES
#chown_username=whoever
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
idle_session_timeout=600
data_connection_timeout=120
nopriv_user=nobody
#async_abor_enable=YES
#ascii_upload_enable=YES
#ascii_download_enable=YES
ftpd_banner=Welcome to FTP server
#deny_email_enable=YES
#banned_email_file=/etc/vsftpd.banned_emails
chroot_local_user=YES
chroot_list_enable=NO
#chroot_list_file=/etc/vsftpd.chroot_list
#ls_recurse_enable=YES
listen=YES
listen_ipv6=NO
ssl_enable=YES
dual_log_enable=YES
force_local_data_ssl=YES
session_support=YES
listen_port=2120
background=YES
pasv_min_port=50000
pasv_max_port=50100
Ebben a konfigurációban a szolgáltatás a 2120-as porton fog figyelni és a passzív kapcsolatoknál a 50000-50100 port tartományban fog kommunikálni. Ezért ezeket a portokat engedélyezni kell a tűzfalunkban. A 2120-ast befele a port tartományt befele és kifele is. Alapértelmezetten a vsftpd a tanusítványt és a privát kulcsot a /usr/share/ssl/certs/vsftpd.pem helyen fogja keresni. Nálam ebben a fájlban van a privát kulcs és a self-signed certification. Ezt kézzel le kell generálnod. Biztonsági okokból a fájl legyen a root tulajdona és csak neki legyen rá írási és olvasási joga!
# chown root:root vsftpd.pem
# chmod 600 vsftpd.pem
Ezzel meg is volnánk. Egyszerűen indítsuk el a vsftpd-t.
# /usr/local/sbin/vsftpd
# ps aux | grep vsftp
root 13475 0.0 0.0 14268 740 ? Ss 07:32 0:00 /usr/local/sbin/vsftpd
Ezek után a FileZilla klienssel már tudunk is csatlakozni. A Cím mezőbe ftpes://IP:2120 (nem elírás az ftpes!) Ezek után már az adatkapcsolatunk is titkosított az FTP szerver és a kliens között.