File Transfer Protocol har används under många år nu och är fortfarande ett vanligt protokoll för överföring av filer. Det är i sig ett komplicerat protokoll och för att sätta upp en ftp server behöver man förstå lite om hur klient och server kommunicerar. Ett vanligt fel är att man lyckas koppla upp och logga in, men sedan är det stopp - man kan inte lista filträdet på servern.
Man har att välja på att sätta upp ftp-trafiken med aktiv eller passiv överföring.
Aktiv överföring fungerar i regel bra hemma på LAN, där man kanske inte behöver brandväggar och routrar med NAT mellan klient och ftp server.
Däremot - för att det ska fungera utifrån Internet - genom router/brandvägg/NAT - kan man behöva köra ftp med passiv överföring.Detta blir i hög grad aktuellt om klienten befinner sig bakom en router/brandvägg. Då räcker det inte med att endast port 21 är öppen för inkommande trafik till ftpservern. Port 21 används för kontrolltrafiken och man måste ha minst en port till öppen - för datatrafiken. För denna väljs vanligen portar > 1024. Normalt öppnar man ett intervall av portar, om man vill att flera användare ska kunna köra samtidigt. Antalet portar bestämmer hur många sessioner som kan pågå samtidigt - dvs hur många användare som kan köra samtidigt.
Aktiv överföring
I routern/brandväggen öppnas port 21 för inkommande och port 20 för utgående trafik. I Ubuntus grundinstallation är alla portar öppna för utgående trafik så det ska inte vara något problem.
INKOMMANDE TRAFIK: Port 21 (TCP) --> serverns interna ipnr
UTGÅENDE TRAFIK: Serverns interna ipnr port 20 (TCP) --> Alla externa ip och portar.
Passiv överföring
I routern/brandväggen öppnas portarna 21 och ett portintervall för inkommande trafik till ftpservern. Dvs;
INKOMMANDE TRAFIK: Port 21 (TCP) --> serverns interna ipnr
INKOMMANDE TRAFIK: Portintervall (TCP) --> serverns interna ipnr
FTP server - VSFTPD
VSFTPD är en av de säkraste och snabbaste ftp-daemoner som finns att tillgå. Den saknar grafisk gränssnitt och alla inställningar görs i en konfigurationsfil. Denna är väl dokumenterad och är ganska enkel att sätta upp.
Denna HowTo visar hur man kan sätta upp vsftpd begränsat till användare, som har lokala konton på operativsystemet. Ett annat sätt är att skapa virtuella användare*, som inte kräver lokala konton på maskinen. Skapar man virtuella användare används en lösenordsfil eller mysql som stöd för autentiseringen.
Installera vsftpd
Kod: Markera allt
sudo apt-get install vsftpd
Kod: Markera allt
sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.orginal
Kod: Markera allt
gksudo gedit /etc/vsftpd.conf
listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
pasv_min_port=50505
pasv_max_port=50510
ftpd_banner=Välkommen till min ftpserver
chroot_local_user=YES
ls_recurse_enable=YES
secure_chroot_dir=/var/run/vsftpd
pam_service_name=vsftpd
Denna konfigurationsfil medför att endast lokala användare kan ftp:a till servern. De fångas i sina hemkataloger och kan inte komma åt något annat. De kan ladda upp filer i foldern.
Starta om vsftpd
Kod: Markera allt
sudo /etc/init.d/vsftpd restart
Öppna port 21 och i detta exempel portintervall 50505-50510 för inkommande trafik till maskinen (portforwarding). Verifiera att port 20 är öppen för utgående trafik från maskinen.
Pröva sedan att ftp:a med passiv så väl som aktiv överföring och se vad som fungerar bäst. FileZilla är en klient som rekommenderas. Under flik överföringsinställningar kan man välja överföringssätt.
Krypterad trafik
Med ovanstående konfigurationsfil sker all trafik i klartext. Man bör starkt överväga att skicka åtminstone login uppgifterna krypterade, då dessa är lokala kontona på maskinen. Skapa därför ett självsignerat 1-års certifikat och placera detta förslagsvis i /etc/ssl/vsftpd
För att skapa certifikatet krävs att openssl är installerat
Kod: Markera allt
sudo apt-get install openssl
Kod: Markera allt
sudo mkdir /etc/ssl/vsftpd
Kod: Markera allt
cd /etc/ssl/vsftpd
Kod: Markera allt
sudo openssl req -new -x509 -days 365 -nodes -out vsftpd.pem -keyout vsftpd.pem
## SSL - krypterad trafik
ssl_enable=YES
force_local_logins_ssl=NO
force_local_data_ssl=NO
rsa_cert_file=/etc/ssl/vsftpd/vsftpd.pem
Starta om vsftpd
Kod: Markera allt
sudo /etc/init.d/vsftpd restart
Alla ftp-klienter kan inte köra krypterad trafik. Tidigare nämnda FileZilla ger dock denna möjlighet. Vid Servertyp väljs FTPES.
Begränsa antalet lokala användare som kan köra ftp
Med grundfigurationen kan alla användare på maskinen köra ftp. Vill man begränsa denna möjlighet skapar man en användarlista.
Kod: Markera allt
sudo cat /dev/null > /etc/vsftpd.user_list
Kod: Markera allt
gksudo gedit /etc/vsftpd.user_list
userlist_enable=YES
userlist_file=/etc/vsftpd.user_list
Starta om vsftpd
Kod: Markera allt
sudo /etc/init.d/vsftpd restart
Vill man att någon användare ska kunna se hela filsystemet skapar man en chrootlista. Detta kan verka motsägelsefullt, men så länge det även står chroot_local_user=YES i konfigurationfilen är det användarna i chrootlistan som kan lämna HOME.
Skapa en tom vsftpd.chroot_list
Kod: Markera allt
sudo cat /dev/null > /etc/vsftpd.chroot_list
Kod: Markera allt
gksudo gedit /etc/vsftpd.chroot_list
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
Starta om vsftpd
Kod: Markera allt
sudo /etc/init.d/vsftpd restart
Detta kan man åstadkomma genom att montera önskad folder med -bind parametern.
Skapa en folder med namn et t.ex. ftpshare i hemfoldern.
Kod: Markera allt
mkdir /home/<användaren>/ftpshare
Kod: Markera allt
sudo mkdir /var/ftpcommon
Kod: Markera allt
sudo mount --bind /var/ftpcommon/ /home/<användaren>/ftpshare
Vill man permanenta denna montering läggs följande rad in i /etc/fstab
/var/ftpcommon /home/<användaren>/ftpshare none bind 0 0
Konfigurering av enskild användare
Ett kraftfullt verktyg är optionen user_config_dir. Med denna kan läggas en användarspecik konfigurationfil för respektive användare. Rader (optioner) i denna överrider motsvarande i den globala konfigurationsfilen. Dock kan inte alla optioner i den globala konfigurationsfilen användas i den specifika användarens konfigurationsfil .
Skapa en folder vsftpd_user_conf
Kod: Markera allt
sudo mkdir /etc/vsftpd_user_conf
Kod: Markera allt
sudo cat /dev/null > /etc/vsftpd_user_conf/<användaren>
Lägg sedan till nedanstående i konfigurationsfilen
user_config_dir=/etc/vsftpd_user_conf
Starta om vsftpd
Kod: Markera allt
sudo /etc/init.d/vsftpd restart
Med parametern "cmds_allowed=" kan man styra användarnas möjligheter att utföra åtgärder i filsystemet. Om man t.ex. vill att klienterna ska få lista filer, byta foldrar, tanka ned filer, använda passiv överföring och skicka lösenordet, kan raden se ut enligt:
cmds_allowed=USER,LIST,NLST,CWD,RETR,PORT,PASV,PASS,QUIT
En lista med ftp kommandon går att finna här; http://www.nsftools.com/tips/RawFTP.htm
Om raden for "cmds_allowed=" läggs in vsftpd.conf gäller den för samtliga användare. Vill man istället ha användarspecifika rader läggs de i /etc/vsftpd_user_conf/<användaren>, enligt avsnittet Konfigurering av enskild användare.
*)
VSFTPD med virtuella användare och lösenordfil
VSFTPD med virtuella användare och mysql