ProFTPD is als FTP server vergelijkbaar met andere populaire implementaties als vsftpd
, pure-ftpd
of wuftpd
, het protocol blijft immers steeds gelijk. Het allergrootste voordeel deze configuratie is dat de gebruikers virtueel zijn: de gebruikers bestaan alleen in MySQL maar hoeven niet als fysieke gebruikers op de server aanwezig te zijn. Daarnaast kun je de gebruikersnaam en het wachtwoord evenals de homedirectory zelf bepalen, wat deze configuratie heel flexibel maakt.
Met onderstaande handleiding kun je in een paar simpele stappen een snelle en betrouwbare FTP-server neerzetten.
Installatie van ProFTPD met Mysql back-end
Er wordt tijdend onderstaand stappenplan vanuit gegaan dat je al een werkende mysql-server
hebt geïnstalleerd.
-
Start allereerst met het installeren van de benodigde packages:
Kies tijdens het installeren voor de "standalone" installatie:
-
Download het bestand met de SQL voor de proFTPd-tabellen en voeg deze toe aan een bestaande of nieuwe database. Dit kan bijvoorbeeld op onderstaande manier:
-
Pas in het bestand
/etc/proftpd/proftpd.conf
het volgende regels aan (of uncomment deze): - In bovenstaande stap wordt de gebruiker en de groep
ftp-data
gedefinieerd, eventueel kun je hier een andere gebruiker voor kiezen - echter dient dit een gebruiker te zijn die fysiek in het systeem bestaat. Voer onderstaande opdrachten uit om de gebruiker en groep aan te maken:
-
Verplaats of verwijder het bestand
/etc/proftpd/sql.conf
en maak het opnieuw aan met de volgende inhoud:Pas in dit bestand de regel beginnend met SQLConnectInfo aan met de juiste gebruikersnaam, wachtwoord en database uit stap 2.
-
Schakel de benodigde modules in door de volgende regels te uncommenten in
/etc/proftpd/modules.conf
: -
Start als laatste de service opnieuw op:
Gebruikers toevoegen
-
Het toevoegen van een gebruiker gaat in zijn geheel via de database:
-
Allereerst dient de groep 'ftp-data' te worden toegevoegd aan de database (mits dat nog niet gebeurd is):
-
Vervolgens dient de gebruiker te worden toegevoegd aan de database (pas in onderstaande queries de vetgedruktde delen aan):
Versleutelde wachtwoorden
In bovenstaande configuratie worden wachtwoorden als PlainText
opgeslagen, handig wanneer een wachtwoord verloren raakt, maar absoluut onhandig wanneer een wachtwoord of je hele database op straat komt te liggen. De grootste uitdaging is dat de algoritmes die worden ondersteund door ProFTPD niet worden ondersteund door MySQL en vice-versa, CRYPT
uitgezonderd.
-
Pas de regel beginnend met
SQLAuthTypes
in/etc/proftpd/sql.conf
als volgt aan: -
Vervolgens kun je bestaande gebruikers aanpassen door gebruik te maken van mysql's ENCRYPT-functie:
Limieten instellen
Met onderstaande stappen zorg je dat elke gebruiker een maximale hoeveelheid schrijfruimte in zijn/haar FTP map heeft, ookwel Quota genoemd. Dit stuk is niet vereist voor een juiste werking van de FTP-server maar vaak wel handig.
-
Schakel de
QuotaEngine
in door aan/etc/proftpd/proftpd.conf
het volgende toe te voegen: -
Maak vervolgens een nieuw bestand
/etc/proftpd/sql_quota.conf
aan met de volgende inhoud: -
Schakel de benodigde modules in door de volgende regels uit te commenten in
/etc/proftpd/modules.conf
: -
Start als laatste de service opnieuw op:
-
Vervolgens kun je een schijfruimte limiet van 50MiB instellen voor een bepaalde gebruiker:
INSERT INTO proftpd_quota_limits SET user_name = 'gebruiker', ql_quota_type = 'user', ql_per_session = false, ql_limit_type = 'soft', ql_bytes_in_avail = 50 * POWER(2, 10);
ProFTPD samen met Apache - oplossing voor FTP rechtenprobleem
Doordat bestanden geuploadt door via de FTP server als gebruiker gelijkgesteld worden aan de gebruiker en groep die in de mysql database is ingesteld, kan het voorkomen dat Apache niet bij deze bestanden kan of de bestanden niet kan bewerken (dit kan bijvoorbeeld problemen opleveren bij het updaten van Wordpress). Dit kun je op twee manieren oplossen:
De gebruiker ftp-data toevoegen aan de groep www-data
Deze oplossing heeft mijn persoonlijke voorkeur. De bestanden worden op deze manier namelijk nog steeds als de ftp-gebruiker weggeschreven maar de groep www-data heeft wel de juiste rechten op deze bestanden. Voeg op onderstaande manier de gebruiker ftp-data
toe aan de groep www-data
:
De groep www-data toevoegen in ProFTPD
De tweede oplossing is het toevoegen van groep www-data
aan ProFTPD. Op deze manier wordt het bestand weggeschreven met als eigenaar de betreffende gebruiker, maar omdat deze gebruiker in de groep www-data
zit zijn de groepsrechten van deze groep op dat bestand van kracht. Zoek hervoor als eerste het unieke nummer van de groep op:
Voeg vervolgens de groep toe zoals bovenstaand beschreven. Wanneer de groep-id bijvoorbeeld 33 is, dan volgt daar onderstaande query uit:
Debuggen
Het debuggen van de configuratie gaat het gemakkelijkste en het snelst door de logs te volgen terwijl je in een apart venster (bijvoorbeeld via FileZilla) een FTP-verbinding maakt. In de logbestanden wordt meestal een duidelijke foutmelding gegeven waarmee de problemen opgelost kunnen worden. De 'algemene' fouten kun je terugvinden in het algemene logbestand voor ProFTPD:
Fouten die specifiek gerelateerd zijn aan de configuratie met mysql vindt je in het sql.log
:
Fouten die specifiek gerelateerd zijn aan de quota configuratie vindt je in het quota.log
:
ProFTPD service stopt vanzelf
In Ubuntu 14.04 (waarschijnlijk ook in andere Linux relases) komt het voor dat ProFTPD elke nacht vanzelf stopt. De Logrotate service ruimt dagelijks de logs op, waarbij de service opnieuw wordt gestart (zie /etc/logrotate.d/proftpd-basic
). Doordat bij het herstaren van de service het stoppen van ProFTPD te lang duurt wordt er geen nieuwe instance meer gestart. Om dit op te lossen kun je een "retry" parameter toevoegen aan de cronjob.
Zoek in het bestand /etc/init.d/proftpd
de volgende regel op:
En pas deze als volgt aan:
Conclusie
In een paar simpele stappen heb je een goed werkende en stabiele FTP server geïnstallerd. Doordat deze FTP server "standalone" is, is deze - behalve de mysql laag - niet afhankelijk van andere services en hoeft deze ook geen andere service te vertragen.
Ondanks dat deze methode een tamelijk veilige manier is om gebruikersgegevens op te slaan, is een FTP-server op zichzelf een beveiligingsriciso; doordat FTP door zo veel servers geaccepteerd wordt is het een veelvuldig misbruikt doelwit voor kwaadwillenden. Omdat het FTP-protocol niet perfect is adviseren we om ProFTPD zo veel mogelijk up to date te houden en indien mogelijk een firewall in te stellen en indien mogelijk Fail2ban toe te voegen.