FTPSERVER MED LOKALA ANVÄNDARE

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 > 1023. 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


VSFTPD MED LOKALA ANVÄNDARE

VSFTPD är en av de säkraste och snabbaste ftp-daemoner som finns att tillgå. Den saknar grafisk gränssnitt och de flesta inställningarna görs i en konfigurationsfil. Denna är väl dokumenterad och vsftpd är ganska enkel att sätta upp.

Detta avsnitt visar hur man kan sätta upp vsftpd begränsat till användare, som har lokala konton på operativsystemet. Detta kan vara lämpligt för hemmaservern, om man inte har alltför många användare och att man känner personerna i fråga. 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:
sudo apt-get install vsftpd
Byt namn på vsftpd.conf
Kod:
sudo mv /etc/vsftpd.conf /etc/vsftpd.conf.orginal
Skapa en ny vsftpd.conf
Kod:
sudo nano /etc/vsftpd.conf
Klistra in nedanstående rader och spara filen.

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=63200
pasv_max_port=63204
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 sin hemkatalog.

Starta om vsftpd
Kod:
sudo /etc/init.d/vsftpd restart
Brandvägg/router

Öppna port 21 samt i detta exempel portintervall 63200-63204 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. En annan klient är gftp.

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 konton på maskinen. Vi skapar ett eget certifikat/nyckel för vsftpd

Kod:
sudo mkdir /etc/ssl/vsftpd
Kod:
cd /etc/ssl/vsftpd
Vid Common name skriv in din domän/subdomän om du har någon sådan. Om inte - använd maskinnamnet.
Kod:
sudo openssl req -new -x509 -days 365 -nodes -out vsftpd.pem -keyout vsftpd.pem
Öppna sedan konfigurationsfilen och lägg till raderna nedan.
Kod:
sudo nano /etc/vsftpd.conf
## 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:
sudo /etc/init.d/vsftpd restart
Användarna har nu fått möjlighet att köra krypterad trafik (på frivillig grund). Vill vi göra det tvingande att t.ex. kryptera loginuppgifterna skriver vi in YES, dvs force_local_logins_ssl=YES.

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. Skriv in och spara de användarnamn som ska ha behörighet att köra ftp.
Kod:
sudo nano /etc/vsftpd.user_list
Öppna
Kod:
sudo nano /etc/vsftpd.conf
Lägg till raderna:

userlist_enable=YES
userlist_file=/etc/vsftpd.user_list

Starta om vsftpd
Kod:
sudo /etc/init.d/vsftpd restart
Ge möjlighet för användare att lämna sitt HOME

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.

Skriv in och spara de användarnamn som ska ha behörighet att lämna sitt HOME.
Kod:
sudo nano /etc/vsftpd.chroot_list
Öppna
Kod:
sudo nano /etc/vsftpd.conf
Lägg till:

chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list

Starta om vsftpd
Kod:
sudo /etc/init.d/vsftpd restart
Ge möjlighet för de fångade användarna att se folder som finns utanför HOME

Detta kan man åstadkomma genom att montera önskad folder med -bind parametern.

Skapa en folder med namnet t.ex. ftpshare i hemfoldern.
Kod:
sudo mkdir /home/<användaren>/ftpshare
Skapa ytterligare en folder i t.ex. /var/ med namnet ftpcommon
Kod:
sudo mkdir /var/ftpcommon
Montera därefter med -bind parametern
Kod:
sudo mount --bind /var/ftpcommon/ /home/<användaren>/ftpshare
Nu kommer filerna i folder /ftpcommon/ att synas i användarens HOME folder.

Vill man permanenta denna montering läggs följande rad in i /etc/fstab

Öppna
Kod:
sudo nano /etc/fstab
Lägg till

/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:
sudo mkdir /etc/vsftpd_user_conf
Skapa en tom fil med namnet för användaren. Skriv in och spara önskade specifika optioner för användaren.
Kod:
sudo nano /etc/vsftpd_user_conf/<användaren>
Öppna
Kod:
sudo nano /etc/vsftpd.conf
Lägg till raden

user_config_dir=/etc/vsftpd_user_conf

Starta om vsftpd
Kod:
sudo /etc/init.d/vsftpd restart
Ställa in tillåtna ftp kommandon för klienterna

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,PAS S,QUIT
Se "Mer att läsa:" för fler ftp kommandon.

Om raden for "cmds_allowed=" läggs in vsftpd.conf gäller den globalt för samtliga användare. Vill man istället ha användarspecifika rader läggs de i /etc/vsftpd_user_conf/<användaren>, enligt Konfigurering av enskild användare.

Mer att läsa:
http://vsftpd.beasts.org
http://vsftpd.beasts.org/vsftpd_conf.html
http://www.nsftools.com/tips/RawFTP.htm