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.
|
|
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:
- Makkelijk te configureren.
- Goed inzicht van actuele status van ftp server.
- Makkelijk te onderhouden.
- Ondersteuning van zowel virtuele gebruikers als shell gebruikers.
- Ondersteuning van chroot en fxp.
- Systematiek anti-warez
- Mogelijkheid to bandbreedte beperking.
- Mogelijkheid voor het instellen van quoata's.
- PureFTPd is een zeer veilige ftp server *
*Tot op heden zijn er geen exploits van PureFTPd bekend (bron: http://packetstormsecurity.org)
Benodigdheden |
 |
- FreeBSD 4.x of hoger
- Basis kennis van Unix en een root shell
- Basis kennis van MySQL *
*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:
- Maakt een MySQL gebruiker genaamd ftp aan met
het wachtwoord 'tmppasswd'
- Maakt de database ftpusers aan.
- Maakt de 2 tabellen 'users' & 'admin'
aan.
- Vult zowel de tabel 'users' als 'admin' met een tijdelijke gebruiker,
beide hebben het wachtwoord 'tmppasswd'
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:
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:
| PID | Account | Time | State | File name | Remote host | Kbytes | Local host |
| 69743 | machiel | 00:00 | DL | ms08010109en.exe | toshiba |
3584/183393 (2% - 398 KB/s) |
11111.upc-h.chello.nl:21 |
 |
F.A.Q. |
- Ik heb op mijn FreeBSD server ook een firewall moet ik deze nu aanpassen?
Dit is natuurlijk helemaal afhankelijk van je huidige configuratie. Maar als
je de volgende 3 regels opneemt in je firewall zou in zowel de active als
passive mode van je ftp server goed moeten werken.
Firewall config:
ipfw add allow tcp from any 20,21 to any out
ipfw add allow tcp from any to any 20,21 in
ipfw add pass tcp from any to any setup
|
- Mijn FXP ondersteuning werkt lokaal wel maar niet via internet?
Waarschijnlijk heeft dit te maken met je firewall configuratie i.c.m.
je natd proces. Zorg ervoor dat de volgende 2 regels eerder in je firewall
zijn opgenomen dan je natd regels.
Firewall config voor FXP:
ipfw add allow tcp from any 20,21 to any out
ipfw add allow tcp from any to any 20,21 in
|
De natd firewall regels zien er ongeveer na uitvoering van 'ipfw show' zo uit:
'divert 8668 ip from any to any via xl0'
- Hoe kan ik het wachtwoord van de mysql gebruiker 'ftp' veranderen?
Log in bij MySQL onder root b.v. 'mysql -u root -p' en voer het volgende
commando uit waarbij je je eigen wachtwoord hebt aangegeven.
Shell:
mysql -u root -p
set password for ftp@"127.0.0.1" = Password('nieuwwachtwoord');
flush privileges;
|
Let hierbij op dat zowel het php script als wel de config file van PureFTPd
van dit wachtwoord gebruik maken.
- Hoe kan ik het wachtwoord van de web based Administrator veranderen?
Deze staat vermeld in de tabel gebruikers. In deze tabel kun je meerdere gebruikers
aanpassen en toevoegen. Alle gebruikers hebben overgens het zelfde recht op
het aanpassen van de virtuele ftp gebruikers. Het wachtwoord veranderen van de standaard
Administrator gaat als volgd. Ook hierbij moet je eerst je eigen nieuwe wachtwoord
bepalen.
Shell:
mysql -u root -p
update ftpusers.admin set Password=md5("nieuwwachtwoord") where Username="Administrator";
|
- Kan ik met deze methode ook quota's instellen?
Ja je kunt zowel het aantal files als de grote van de totale hoeveelheid files per gebruiker limiteren.
Hiervoor moet PureFTPd worden gecompileerd met de optie 'virtual quotas support',
gelukkig heeft FreeBSD dit standaard al voor je gedaan.
In de tabel 'users' van de database 'ftpusers' worden de gegevens per gebruiker opgeslagen.
Ieder eigenschap van een gebruiker wordt in een daarvoor bestemde kolom opgeslagen.
Zo bestaat er de kolom ‘Dir’ waarin de home directory wordt aangegeven,
en is er een kolom ‘User’ waar de gebruikersnaam wordt opgeslagen.
Afhankelijk van welke opties je wilt gebruiken zou je in de MySQL tabel 'users' 1 a 2 extra kolommen moeten opnemen.
Deze 2 kolommen zijn echter al in het verleden opgenomen in de tabel en zijn dus reeds aanwezig.
Deze instelling zijn echter niet opgenomen in de configuratie file '/usr/local/etc/pureftpd-mysql.conf' van PureFTPd.
De kolomnamen en hun betekenis moeten nu nog worden opgenomen in deze configuratie file.
Ik geef je om je op weg te helpen één voorbeeld:
Bij een limitatie van het totaal aantal mb's per gebruiker zouden de volgende regels aan de configuratie file moeten worden toegevoegd.
vi /usr/local/etc/pureftpd-mysql.conf:
# Optional : query to get the maximal disk usage (virtual quotas)
# The number should be in Megabytes.
# Pure-FTPd must have been compiled with virtual quotas support.
MySQLGetQTASZ SELECT QuotaSize FROM users WHERE User="\L"
|
Overige voorbeelden kun je vinden in een configuratie voorbeeld van PureFTPd,
deze is in de directory '/usr/local/etc/pureftpd-mysql.conf.sample' terug te vinden.
P.s. De ‘Gebruikersbeheer voor PureFTPd server’ ondersteund deze quota opties niet.
- Hoe kan ik mijn MySQL database veranderen, verwijderen of upgraden?
Een eenduidig antwoord op deze vraag is niet te geven, wat je hiervoor nodig zult hebben
is kennis van MySQL en SQL. Als je MySQL of SQL wilt leren dan is er op internet voldoende
informatie te vinden over dit onderwerp. Maar ik zal je een eindje op weg proberen
te helpen. Voor die gene die een voorgaande versie van de database / web applicatie
hebben en deze willen upgraden zullen deze voorbeelden goed van pas komen.
Een back-up maken van tabellen structuur inclusief data van de database 'ftpusers' naar een MySQLscript.
Shell:
mysqldump -h localhost -uroot -pgeheim ftpusers > databasebackup.mysql
|
Vervang de tekst 'geheim' voor je eigen wachtwoord.
Verwijder de MySQL gebruiker 'ftp' en de database 'ftpusers'.
Shell:
mysql -u root -p
drop database ftpusers;
delete from mysql.user where User='ftp';
flush privileges;
|
Maak de MySQL gebruiker 'ftp' aan en creëer een database genaamd 'ftpusers'.
Shell:
mysql -u root -p
INSERT INTO mysql.user (Host, User, Password, Select_priv, Insert_priv, Update_priv, Delete_priv, Create_priv, Drop_priv, Reload_priv, Shutdown_priv, Process_priv, File_priv, Grant_priv, References_priv, Index_priv, Alter_priv) VALUES('127.0.0.1','ftp',PASSWORD('tmppasswd'),'Y','Y','Y','Y','N','N','N','N','N','N','N','N','N','N');
flush privileges;
create database ftpusers;
|
In Stap 2 van dit document is een voorbeeld te vinden hoe je een MySQL script kan importeren.
- De installatie van MySQL geeft een foutmelding over de hostname?
Een veel voorkomende fout bij de installatie van MySQL is het ontbreken van een juiste hostname.
De installatie procedure wordt hierbij afgebroken en de volgende foutmelding verschijnt.
...
Sorry, the host '???????' could not be looked up.
Please configure the 'hostname' command to return a correct hostname.
If you want to solve this at a later stage, restart this script with
the --force option
*** Error code 1
...
Om dit probleem op te lossen moet eerst worden gekeken welke hostname er momenteel in gebruik is.
Dit kan gedaan worden door het commando 'hostname' uit te voeren.
De uitvoer van dit commando geeft vervolgens de hostname weer.
Is dit niet het geval dan zal een hostname opgegeven moeten worden.
Dit kan gedaan worden door achter het commando hostname, een nieuwe hostname op te geven.
Als voorbeeld nemen we de naam server.
Shell:
Het is vervolgens aan te raden (wanneer dit nog niet gedaan is ) om de regel
hostname="server" op te nemen in het bestand '/etc/rc.conf'.
Als de hostname bekend is moet deze het ip-adres van de huidige computer toegewezen krijgen.
Dit kan gedaan worden in het bestand '/etc/hosts'.
Wanneer het ip-adres van de huidige computer 192.168.0.1 is en de hostname
server' moet de volgende regel opgenomen worden.
vi /etc/hosts:
Controleer vervolgens of deze stappen juist zij uitgevoerd door het volgende commando uit te voeren.
Shell:
Vervolgens kan de installatie van de MySQL server worden voortgezet.
- Wanneer ik de PureFTPd server probeer te starten krijg ik een 421 error?
Controleer of de foutmelding bij het starten van de PureFTPd server overeenkomt met de volgende regel:
421 Unknown authentication method: mysql:/usr/local/etc/pureftpd-mysql.conf
Wanneer dit het geval is dan staat het onomstotelijk vast dat de optie
'-DWITH_MYSQL' niet is meegenomen bij de installatie van PureFTPd.
Om dit probleem op te lossen zal de PureFTPd server opnieuw moeten worden geïnstalleerd.
Afhankelijk van de snelheid van het systeem kan dit in ongeveer 5 min gerealiseerd zijn.
De reden van deze fout kan een verkeerde port upgrade zijn.
Wanneer een nieuwe versie van PureFTPd wordt opgenomen in de portcollection wordt vaak het programma
portupgrade gebruikt om de huidige software te updaten.
Dit programma weet echter niet dat de vorige versie van PureFTPd is gebouwd met de optie
'-DWITH_MYSQL'.
Neem om dit probleem voortaan te voorkomen de regel ' 'ftp/pure-ftpd*' => '-DWITH_MYSQL' ' op
in het configuratie bestand '/usr/local/etc/pkgtools.conf'.
Dit moet vervolgens gedaan worden in de array 'MAKE_ARGS'.
In het vervolg zal portupgrade weten welke argumenten moeten worden gebruikt bij het bouwen van PureFTPd.
Waarschijnlijk is bij de 1e installatie van PureFTPd dit ook gedaan met de optie
'-DWITH_LANG=dutch',
ook deze optie kan worden toegevoegd in dit configuratie bestand.
Wanneer de array MAKE_ARGS nog leeg is zal deze na het toevoegen van de zojuist genoemde argumenten
er als volgt uitzien.
vi /usr/local/etc/pkgtools.conf:
MAKE_ARGS = {
'ftp/pure-ftpd*' => '-DWITH_MYSQL -DWITH_LANG=dutch',
}
|
- Hoe installeer ik PureFTPd onder Linux?
Het installeren van een PureFTPd package kan per Linux distributie verschillen.
Daarbij hebben veel Linux PureFTPd packages niet de benodigde MySQL ondersteuning opgenomen.
Naast het gebruik van packages is het ook mogelijk om PureFTPd te installeren door de source code te downloaden.
Vervolgens moet de source code op de juiste manier worden gecompileerd en moet het resultaat hiervan worden geïnstalleerd.
Dit alles kan gedaan worden door de volgende handelingen op te volgen.
Download de laatste versie van PureFTPd, deze is te vinden op de volgende locatie.
ftp://ftp.pureftpd.org/pub/pure-ftpd/releases/
Pak het bestand vervolgens uit en compileer en installeer de software:
Shell:
./configure --with-everything --with-paranoidmsg --with-virtualchroot --with-tls --with-largefile --with-mysql --with-language="dutch"
make
make install
|
Wanneer deze handelingen succesvol zijn verlopen is hierbij PureFTPd geïnstalleerd op het systeem.
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