Deze documentatie is verouderd door tijdgebrek, de engelse versie is up-to-date.


Gebruikt u daarom a.u.b. de Engelse versie.

PureFTPd Server onder FreeBSD

Dit document beschrijft een degelijke configuratie van een ftp server onder FreeBSD.

PureFTPD
Geschreven door M.Mastenbroek mei 2003 / Document versie 1.8.3 (Updated 12 September 2004)

Inhoud:

Voorwoord

Aan de hand van een aantal stappen leg ik uit hoe je onder FreeBSD een PureFTPd server kunt installeren en configureren. Ondanks de lengte van deze pagina is het installeren hiervan in een paar kleine stappen gerealiseerd. De werkelijke stappen die hierbij moeten worden uitgevoerd staan aangegeven in de grijze kaders.

Zelf heb ik inmiddels verscheidene ftp servers bekeken en uitgeprobeerd. Hiervan was voor mij uiteindelijk PureFTPd de beste keuze. De meest belangrijke eigenschappen van PureFTPd zijn als volgt:

*Tot op heden zijn er geen exploits van PureFTPd bekend (bron: http://packetstormsecurity.org)

Benodigdheden

*Deze kennis is niet noodzakelijk voor enkel PureFTPd, echter wordt er in dit document gebruik gemaakt van MySQL in combinatie met PureFTPd.

Stap 1 installatie van PureFTPd & MySQL.

Hier volgt de installatie handeling voor PureFTPd i.c.m. 'MySQL versie 4.0'.

Is er momenteel nog geen MySQL server (versie 3.23 of 4.0) geÔnstalleerd op je systeem dan kun je een MySQL server versie 4.0 als volgt installeren

Shell:
cd /usr/ports/databases/mysql40-server
make install clean

Na de installatie moet de MySQL server gestart worden.

Shell:
/usr/local/etc/rc.d/mysql-server.sh start

Installeer vervolgens PureFTPd op je systeem.

Shell:
cd /usr/ports/ftp/pure-ftpd
make -DWITH_MYSQL -DWITH_LANG=dutch install clean

Er kan natuurlijk ook voor 'MySQL versie 3.23' worden gekozen. Voor de verdere werking van PureFTPd zal dit geen verschil maken.

Stap 2 configuratie van MySQL.

Straks zullen zowel shell gebruikers als virtuele gebruikers kunnen inloggen op de ftp server. Om virtuele gebruikers mogelijk te maken wordt er gebruik gemaakt van een MySQL database genaamd 'ftpusers'. Deze database bevat 2 tabbellen. De eerste tabel genaamd 'admin' bevat ťťn of meerdere virtuele beheerders, deze beheerders kunnen straks via de web applicatie de virtuele ftp gebruiker beheren. Als je van deze optie geen gebruik wilt maken zal deze tabel niet verder worden gebruikt. De 2e tabel genaamd 'users' bevat de virtuele gebruikers die straks daadwerkelijk kunnen inloggen op de ftp server.

Het script script.mysql dat ik hiervoor heb geschreven kun je hier downloaden. Dit script voert de volgende acties uit:

Voer de volgende regel uit op de locatie waar je het script 'script.mysql' hebt gedownload. Vervang daarbij de tekst 'geheim' (zonder de letter p) voor het root wachtwoord van de MySQL server. Aan te raden is om eerst te controleren of het commando 'mysql -u root -pgeheim' foutloos verloopt. Let hierbij op dat er geen spatie staat tussen de letter p en het wachtwoord. Heeft de root gebruiker nog geen wachtwoord doordat b.v. zojuist de MySQL server voor het eerst is geÔnstalleerd dan kan de gehele optie '-pgeheim' worden weggelaten.

Shell:
mysql -u root -pgeheim < script.mysql

Wordt er na het uitvoeren van het zojuist genoemde commando geen verdere melding gedaan dan is het importeren geslaagd. Voer dit script geen 2e keer uit want dit zal onherroepelijk tot foutmeldingen leiden.

Stap 3 configuratie van PureFTPd.

Als eerst moet PureFTPd worden geconfigureerd d.m.v. een configuratie file.
Deze configuratie file kun je hier downloaden:

pureftpd-mysql.conf

Zet deze file in de '/usr/local/etc/' directory. Deze file is een aangepaste versie van het origineel dat te vinden is op de volgende locatie '/usr/local/etc/pureftpd-mysql.conf.sample'.

Download het shell script ftp.sh of neem het over van de tekst box hieronder. Dit shell script zorgt ervoor dat je straks met een simpele handeling je de ftp server kunt starten en stoppen. Tevens zal dit shell script (mede door zijn locatie) ervoor zorgen dat bij het opstarten van FreeBSD de ftp server wordt gestart.

Verplaats hiervoor het bestand ftp.sh naar de locatie '/usr/local/etc/rc.d/'.

Editor:
#!/bin/sh

# start
if [ "x$1" = "x" -o "x$1" = "xstart" ]; then
  /usr/local/sbin/pure-ftpd -O stats:/var/log/pureftpd.log -A -E -l mysql:/usr/local/etc/pureftpd-mysql.conf -l unix -w -B
# stop
elif [ "x$1" = "xstop" ]; then
  killall pure-ftpd
fi

Het kan (dusver voor mij een onbekende oorzaak) voorkomen dat de Ftp server start zonder fout meldingen maar vervolgens niet bereikbaar is. Neem hiervoor de regel '-S 192.168.0.1,21 ' op in regel nr. 5 van het ftp.sh shell script. Hierbij moet het ip-adres '192.168.0.1' worden vervangen door je eigen ip-adres. De uitvoer van regel 5 zal er als volgt uit kunnen zien:

Regel 5 (/usr/local/etc/rc.d/ftp.sh):
/usr/local/sbin/pure-ftpd -O stats:/var/log/pureftpd.log -A -E -l mysql:/usr/local/etc/pureftpd-mysql.conf -l unix -S 192.168.0.1,21 -w -B

Verder moet het execute bit op het script worden aangezet.

Editor:
chmod 755 /usr/local/etc/rc.d/ftp.sh

Stap 4 PureFTPd starten.

Het starten van de PureFTPd server gaat als volgt:

Shell:
/usr/local/etc/rc.d/ftp.sh start

En stoppen doe je met '/usr/local/etc/rc.d/ftp.sh stop' (zucht......)

Het is nu mogelijk om de virtuele gebruikers te beheren d.m.v. een MySQL cliŽnt. Hiervoor kun je de bij de MySQL server meegeleverde cliŽnt gebruiken die vanuit de shell kan worden gestart maar het is ook mogelijk om een grafische cliŽnt te installeren. Op de website van MySQL is voor Linux, FreeBSD en Windows een gratis grafische cliŽnt genaamd 'MySQLGUI' te downloaden. Deze grafische MySQL cliŽnt is in de port collection terug te vinden op de volgende locatie: '/usr/ports/databases/mysql-gui/'

Gebruikersbeheer voor PureFTPd versie 1.4.0 (optioneel)

Met dit php script is het mogelijk om op een gebruikersvriendelijk manier nieuwe virtuele ftp gebruikers aan te maken te muteren of te verwijderen.
Deze methode vereist wel een web server met php ondersteuning.

Download het bestand 'ftp_v1.4.0.tar.gz' en verplaats deze naar de www directory van je webserver. (De standaard www directory van Apache is '/usr/local/www/data/')
Pak vervolgens ftp_v1.4.0.tar.gz uit en edit het bestand config.php.

Shell:
tar -xvzf ftp_v1.4.0.tar.gz
vi ftp/config.php

Editor:
<?php
  $LANG = "English";                 // Language (Options are Dutch, English, Portuguese, Russian, Spanish,
                                     //           Korean, French, Hungarian, German, Turkish, Danish,
                                     //           Norwegian, Japanese, Chinese, Swedish, Polish or Italian )
  $LocationImages = "images";;       // Location of images
  $DBHost = "127.0.0.1";;            // Ip-address of MySQL server
                                     // (Donít change this if you are using the default database)
  $DBLogin = "ftp";;                 // Username of MySQL user
  $DBPassword = "tmppasswd";;        // Password of MySQL user
  $DBDatabase = "ftpusers";;         // Name of database
  $FTPAddress = "myipaddress.com:21"; // Domain name or ip-address of your ftp server

  ............
?>


Hierbij is het aanpassen van de variabele $FTPAddress in de eerste instantie voldoende.
Verder kan ervoor gekozen worden om de taal op Nederlands te zetten, zet hiervoor de variabele $LANG = "Dutch";

Het php script is nu te benaderen via 'http://mijnipadres.nl/ftp/' waarbij de tekst 'mijnipadres.nl' moet worden vervangen door je eigen domeinnaam of ip-adres. Inloggen gaat d.m.v. het wachtwoord 'tmppasswd'

De lay-out van de web applicatie ziet er als volgt uit:

Klik hier om te vergroten.   Klik hier om te vergroten.

 

Webbased pure-ftpwho (optioneel)

Als root gebruiker kun je ter alle tijde de status van je ftp server opvragen d.m.v. het 'pure-ftpwho' commando. Dit commando dat wordt meegeleverd bij de PureFTPd package. Dit programma heeft ook de mogelijkheid om een html output te genereren. Ideaal dus voor de cgi-bin directory van je webserver. Het probleem is echter dat dit programma alleen maar als root mag worden uitgevoerd. Voor dit probleem heb ik de volgende oplossing bedacht.

Let op: Bij de laatste versie van PureFTPd lijkt het er op dat het 'pure-ftpwho' commando niet meer werkt. Test dit commando als root gebruiker alvorens deze stap verder te doorlopen.

Maak het bestand 'ftpstatus.c' aan in de 'cgi-bin' directory van je webserver. (De standaard cgi-bin directory van Apache is '/usr/local/www/cgi-bin/')
Plaats in dit bestand de volgende inhoud.

Editor:
#include <stdlib.h>

int main(int argc, char *argv[])
{
  system("/usr/local/sbin/pure-ftpwho -c");
  return 0;
}

Vervolgens compileren en de rechten aanpassen.
Deze rechten zorgen ervoor dat het programma root rechten heeft ongeacht welke gebruiker het start.

Shell:
cc -Wall -o ftpstatus ftpstatus.c
chmod 755 ftpstatus
chmod ug+s ftpstatus

Het bestand ftpstatus.c kan hierna verwijderd worden. Als het goed is kan nu via het web de status van je ftp server worden opgevraagd door b.v.

http://mijnipadres.nl/cgi-bin/ftpstatus

Het resultaat hiervan kan er als volgt uitzien:

PIDAccountTimeStateFile nameRemote hostKbytesLocal host
69743machiel00:00 DL ms08010109en.exetoshiba 3584/183393 (2% - 398 KB/s) 11111.upc-h.chello.nl:21

F.A.Q.

Bronnen

http://www.bsdfreaks.nl/index.php/front_howto/53/80
Hier staat een HowTo over PureFTPd i.c.m. MySQL
http://www.pureftpd.org/
De originele website van de makers van PureFTPd.
http://www.bootsman.net/html/pureftp.html
Hier is een andere nederlands talige howto te vinden over PureFTPd.
http://www.solariz.de/Ffiledb/filedb.php?action=fileinfo&id=1
Een (ander) php script voor het beheren van PureFTPd gebruikers.
Dit Engelstalige script levert veel functionaliteit om je (mysql) PureFTPd gebruikers te beheren via een webbrowser.
http://www.sarnix.nl/pureftpd/index.php
Op deze pagina is een aangepast versie van het 'Gebruikersbeheer voor PureFTPd server' script te vinden. Daarnaast wordt het advies gegeven om het php script te beveiligen via .htaccess file van Apache. Met name voor de gevorderde FreeBSD gebruikers raad ik aan deze pagina eens te bezoeken.
http://www.google.com/bsd
En natuurlijk mijn favoriete zoekmachine www.google.com of www.google.com/bsd.

Back