Om bestanden op een server op te slaan en daar ook weer te openen, werd in 1985 het op TCP/IP gebaseerde transportprotocol FTP (File Transfer Protocol) gedefinieerd in RFC 959. Het protocol staat op een applicatielaag en maakt het mogelijk om bestanden via de poorten 20 (clients) en 21 (server) uit te wisselen en te bewerken, en mappen aan te leggen, te bewerken en te lezen. Om deze client-server-structuur te gebruiken, dien je enkel in te loggen op een speciaal gebruikersaccount op de server.
Vooral voor webhosting zijn (beveiligde) FTP-servers daarom enorm populair. Met behulp van het transportprotocol en de passende client-software kun je de content van je project moeiteloos online uploaden en mapstructuren aanmaken. Als je je website bij een aanbieder host, stelt deze over het algemeen de benodigde serverapplicatie, inclusief inloggegevens, ter beschikking. Als je zelf verantwoordelijk bent voor webhosting en datatransfer, dan moet je zelf voor de passende hardware- en softwarestructuren zorgen. Wij leggen daarom in deze tutorial uit hoe je een eigen Ubuntu FTP-server opzet en waar je op moet letten.
Voordat je begint met de setup van je eigen FTP-server met Ubuntu, moet je de passende software vinden. Hiervoor beschikken Ubuntu-systemen over vsftpd – een eigen oplossing om pakketten te beheren die je alleen nog moet installeren. De open source-applicatie voor Unix-achtige systemen is gebaseerd op modules en componenten waarvan de compacte programmering kenmerkend is. Op deze manier waarborgt de Ubuntu vsftpd-server zelfs bij een groot aantal clients een uitstekend niveau van veiligheid en een stabiel prestatievermogen. Open de terminal om de applicatie te installeren en gebruik onderstaand commando:
sudo apt-get install vsftpd
Nadat je de software hebt geïnstalleerd, kun je de terminal sluiten en met de configuratie van de Ubuntu FTP-server beginnen. Hiervoor open je het configuratiebestand vsftpd.conf dat standaard in de map ‘etc’ te vinden is.
Je hebt een eenvoudige teksteditor nodig om het configuratiebestand van de FTP-server te kunnen openen en bewerken. Hiervoor beschikt Ubuntu over het programma gedit(GNOME-editor) dat al is geïnstalleerd, zodat je niet per se op zoek hoeft te gaan naar een eigen oplossing. De tekstinhoud kun je in twee soorten verdelen. Een regel die met een hekje (#) begint, wordt slechts als commentaar gezien en zal door de vsftpd-server worden genegeerd. Deze commentaren zijn ofwel verschillende instellingsmogelijkheden, ofwel gedeactiveerde functies. Regels die niet met een hekje beginnen, bevatten informatie die later door de server wordt geïnterpreteerd.
Er zijn geen algemene richtlijnen voor de manier waarop je de FTP-server verder opzet; de setup is afhankelijk van wat je als gebruiker verwacht van de FTP-server. Hierbij is het belangrijk dat je eerst naar de verschillende mogelijkheden kijkt. In de volgende alinea’s van deze Ubuntu FTP-server tutorial is daarom informatie te vinden over de verschillende configuratiemogelijkheden en functies.
Standaard is vsftpd zo geconfigureerd dat gebruikers zich alleen met een bepaald account kunnen aanmelden op de FTP-server. Je kunt echter ook als anonieme gebruiker inloggen, zonder je persoonlijke gegevens te moeten doorgeven. Zoek de regel ‘anonymous_enable=NO’ en vervang de parameter ‘NO’ door ‘YES’ om deze ongespecificeerde toegang te activeren:
anonymous_enable=YES
Bij standaardinstellingen zijn de rechten enorm beperkt als een gebruiker anoniem op een Ubuntu FTP-server inlogt. Het is bijvoorbeeld alleen mogelijk om bestanden te downloaden die alle gebruikers kunnen lezen (anon_world_readable_only=YES). Als je de parameter ‘YES’ door ‘NO’ vervangt, is het ook mogelijk andere bestanden te downloaden. Verder zijn onderstaande opties beschikbaar:
Als de FTP-server met het internet is verbonden, wordt het niet aangeraden om de rechten van anonieme gebruikers in dergelijke mate uit te breiden. Je riskeert daarmee namelijk dat je server door derden voor verkeerde doeleinden wordt gebruikt.
Als je wilt dat lokale gebruikers alleen toegang hebben tot de eigen home-map /home/username, kun je dit ook in vsftpd.conf vastleggen. De hiervoor benodigde regel is ‘chroot_local_user’, die standaard op ‘NO’ staat. Verander de regel zoals in onderstaand voorbeeld, zodat lokale gebruikers andere mappen niet kunnen openen:
chroot_local_user=YES
Om lokale gebruikers toegang te geven tot de FTP-server moet de regel ‘local-enable=YES’ geactiveerd zijn. Dit is standaard het geval. Als je niet wilt toestaan dat lokale gebruikers toegang hebben tot de Ubuntu FTP-server, moet je er enkel voor zorgen dat de regel als commentaar wordt gezien door een hekje aan het begin toe te voegen:
#local_enable=YES
Bij de standaardconfiguratie is gedefinieerd dat lokale en anonieme gebruikers FTP-commando’s niet kunnen gebruiken. De regel voor het globale schrijven ‘#write_enable=YES’ is namelijk gedeactiveerd. Als je wilt toestaan dat ingelogde gebruikers het systeem van de vsftpd-server kunnen aanpassen, moet je ervoor zorgen dat de instructie niet als commentaar wordt gezien:
write_enable=YES
In sommige situaties kan het nuttig zijn om bepaalde gebruikers geen toegang tot de FTP-server te geven of duidelijk te definiëren welke gebruikers zich kunnen aanmelden. Voor de eerste oplossing moet je aan het einde van het configuratiebestand onderstaande regel invoegen:
userlist_deny=YES
userlist_enable=YES
userlist_file=/etc/vsftpd.user_list
Met deze parameters krijgt de vsftpd-server de instructie om gebruikers die in het externe bestand vsftpd.user_list staan geen toegang te geven. Alle andere gebruikers kunnen zich in dit geval wel gewoon aanmelden.
Bij de tweede oplossing voeg je ‘NO’ toe aan de parameter ‘userlist_deny’. In dit geval kunnen alleen de gebruikers die in het bestand vsftpd.user_list staan zich aanmelden:
userlist_deny=NO
userlist_enable=YES
userlist_file=/etc/vsftpd.user_list
Bij alle twee de opties moet je een extern tekstbestand aanmaken en de betreffende gebruikers handmatig op de lijst zetten.
Optie | Standaard | Beschrijving |
---|---|---|
download_enable | YES | laat zien of downloads via de Ubuntu FTP-server mogelijk zijn |
ssl_enable | NO | biedt de mogelijkheid om een SSL-versleuteling voor de FTP-toegang te activeren |
anon_max_rate | bepaalt de maximale snelheid (in byte per seconde) voor anonieme gebruikers; 0 betekent dat er geen beperkingen zijn | |
local_max_rate | bepaalt de maximale snelheid (in byte per seconde) voor lokale gebruikers; 0 betekent dat er geen beperkingen zijn | |
max_clients | bepaalt het maximale aantal clients dat zich tegelijkertijd op de FTP-server kan aanmelden; 0 betekent dat er geen beperkingen zijn | |
anon_root | /home/ftp | map waar anonieme gebruikers automatisch naartoe worden verwezen |
log_ftp_protocol | NO | protocolleert alle FTP-aanvragen en FTP-antwoorden |
connect_timeout | 60 | definieert in seconden hoe lang het duurt voor de verbinding tussen server en client wordt onderbroken als er geen communicatie plaatsvindt |
ftpd_banner | welkomsttekst | |
guest_enable | NO | maakt het mogelijk om het anonieme gebruikersprofiel te activeren dat in guest_username is gedefinieerd |
guest_username | ftp | gebruikersnaam om anoniem in te loggen |
Een volledige lijst van alle opties kun je met het onderstaande commando via de terminal openen:
man vsftpd.conf
Heb je het configuratiebestand eenmaal naar jouw wensen aangepast, vergeet dan niet om het op te slaan. Je moet het systeem bovendien opnieuw opstarten, zodat de serverapplicatie de aanpassingen ook overneemt. Gebruik hiervoor onderstaand commando:
sudo etc/init.d/vsftpd restart
Als je de FTP-server tot nu toe nog niet hebt opgestart, kun je dit met het volgende terminal-commando doen:
sudo etc/init.d/vsftpd start
Nadat je je Ubuntu FTP-server hebt opgezet en opgestart, heb je een gebruikersaccount nodig om je te kunnen aanmelden. Voor ons voorbeeld gebruiken wij een account met de naam ‘user’ en het wachtwoord ‘password’.
sudo useradd -m user -s/usr/sbin/nologin
sudo passwd user
Vervolgens sta je een aanmelding via de nologin-shell toe, door aan het einde van het bestand /etc/shells onderstaande regel toe te voegen:
/usr/sbin/nologin
Het aangemaakte gebruikersaccount kun je nu inzetten om met een Ubuntu FTP-client verbinding te maken met de vsftpd-server. Een populaire oplossing, waarvan de pakketten standaard op Ubuntu beschikbaar zijn, is de platform-overschrijdende open source-applicatie FileZilla. Deze applicatie installeer je via de terminal:
sudo apt-get install filezilla
Open FileZilla en voeg een nieuwe verbinding met het passende bestand toe: onder ‘Host’ geef je het IP-adres van je Ubuntu FTP-server aan die – als je de instellingen niet hebt veranderd – op poort 21 op aanvragen wacht. Kies het File Transfer Protocol en zo mogelijk SFTP (Secure FTP) of FTP in plaats van TLS, omdat een eenvoudige FTP-verbinding via poort 21 onveilig kan zijn. In het veld ‘Logon Type’ kies je de mogelijkheid ‘Normal’. Voor ‘User’ en ‘Password’ heb je de login-data nodig van de eerder aangemaakte voorbeeldaccount. Door op ‘Connect’ te klikken, maak je verbinding met de server.
Als je een Ubuntu FTP-server hebt opgezet en bepaalde instellingen functioneren niet, dan kan dat verschillende redenen hebben. Het is bijvoorbeeld mogelijk dat je bent vergeten om de FTP-server opnieuw te starten of om het configuratiebestand op te slaan. Ook gebeurt het al snel dat typefouten in vsftpd.conf komen te staan; bijvoorbeeld een spatie op de verkeerde plaats. Eén van de meest voorkomende foutmeldingen met een geheel andere oorzaak is hieronder te vinden:
500 OOPS: vsftpd: refusing to run with writable root inside chroot ()
Deze melding kan verschijnen als je probeert verbinding te maken en geeft geen foutmelding, maar een veiligheidsfunctie aan. De achtergrond is een mogelijk veiligheidsprobleem van de glibc-bibliotheek (standaardbibliotheek onder Ubuntu in programmeertaal C), die gebruikers met schrijfrechten voor hun eigen root-map kunnen misbruiken. Er zijn twee manieren om het veiligheidsprobleem op te lossen:
1. Schrijfrechten in de root-map van de gebruiker verwijderen - Je kunt de schrijfrechten voor de eigen root-map van lokale gebruikers wegnemen, zodat zij alleen nog in submappen kunnen schrijven. Deze beperking lost het probleem ‘500 OOPS’ op, maar heeft ook nadelen als bestanden noodgedwongen in de root-map moeten worden geschreven. Het terminal-commando voor deze oplossing is:
chmod a-w /home/user
2. Schrijfrechten voor de root-map in vsftpd.conf toestaan - Als je ervan uitgaat dat degenen met schrijfrechten deze in geen geval zullen misbruiken, kun je in de Ubuntu FTP-server aangeven dat deze functie uitdrukkelijk is gewenst. Hiervoor moet je onderstaande regel in het configuratiebestand toevoegen:
allow_writeable_chroot=YES