HOWTO: FTP server met PureFTPd
Inleiding
We gaan een FTP server opzetten met PureFTPd. Er zijn vele builds en vele platformen beschikbaar, maar deze howto gaat uit van de windows port, die je dan ook zult moeten downloaden en installeren.
Wellicht vraag je je af waarom ik PureFTPd neem en niet Bulletproof of Serv-U. De reden is heel is simpel - laatstgenoemden kennen geen full-functionaliteiten na het aflopen van de trial periode (BFTP kan zelfs helemaal niet meer gebruikt worden), wat natuurlijk eigenlijk wel de bedoeling is voor een server. Ook is het zo dat als je weet hoe je PureFTPd moet configgen dan kan je het ook op een ander platform (lees daarvoor gewoon het configuratiestuk).
Installeren
Installeer de ftp server (ja, dat moet...):
Fig. 1:
In deze howto wordt uitgegaan van C:\PureFTPd als locatie. Als je hem aanpast zul je uiteraard ook de filelocaties zoals ze in de howto staan moeten veranderen, maar dat spreekt voor zich.
Zoals je in README.windows kunt lezen, moet je een C:\cygwin dir maken. Aangezien er een fancy installer in de executable zit, is die map er al. Delete hem dus niet, mocht je niet weten waar deze vandaan komt. Let wel: in principe wil je iedereen chrooten, omdat er maar een user is (er is geen /etc/passwd equivalent voor windows), maar users kunnen wel in een pure-db database. Dit wordt uitgelegd.
------------------------ SERVER FILES ------------------------
All files managed by Pure-FTPd have their path relative to C:\CYGWIN .
It means that starting the server with :
pure-ftpd -lpuredb:/etc/pureftpd.pdb
Will read :
C:\CYGWIN\etc\pureftpd.pdb
It also applies to log files and users directories.
------------------------ ANONYMOUS FTP ------------------------
Files for anonymous FTP must be stored in a directory called :
C:\CYGWIN\FTP
(of course you can use the -e switch to disable anonymous FTP) .
Virtual hosting is supported as well. Files must be in :
C:\CYGWIN\PURE-FTPD\<ip>\
If you don't want anonymous users to upload files, use the -i switch.
Configureren
Open nu C:\PureFTPd en start voor de grap eens pure-ftpd.exe. Je zult niets behalve een klassiek cmd venster met knipperende cursor. Als je hiervan schrok en het bevreemdend en eng vind, zou ik overwegen of het slim is om door te gaan met pure-ftpd. Het is namelijk niet meer dan dit, en startup opties worden meegegeven met commandline switches. Als je nu README.txt opent zul je informatie vinden over hoe je met die switches moet werken, ik zal echter wel uitleggen hoe het allemaal werkt. Zorg wel dat je een commandprompt open hebt, en een ftp client bij de hand om de zaak te testen. Let op: switches zijn casesensitive!
Als je gewoon
pure-ftpd.exe
inklopt word er op alle ip adressen, alle NICs, en de standaard ftp poort (21) geluisterd, met IPv6 ondersteuning.
We kunnen nu ook het geheel aan een andere poort binden:
pure-ftpd.exe -S 110
Dit is wel een ietwat ongebruikelijke poort (SMTP), maar het kan. Voor gekke figuren werkt '-S smtp' in principe zelfs ook geloof ik.
Verder kun je ook aan een specifiek IP binden (handig als je meerdere IPs hebt):
pure-ftpd -S 10.10.10.1,
Let ook op de slotkomma! Deze is belangrijk, het is namelijk een afkorting van:
pure-ftpd.exe -S 10.10.10.1,21
Het moge duidelijk zijn hoe de -S switch werkt; "-S ip,port". In plaats van IP adressen kan je ook hostnames gebruiken.
Ook kun je het aantal concurrent connecties limiteren:
pure-ftpd.exe -c 10
Uiteraard kan dit ook met een willekeurig ander (positief, maar das logisch) getal. Switches kan je combineren door ze achter elkaar te zetten:
pure-ftpd.exe -S 10.10.10.1,30 -c 10
Het aantal concurrent sessies per IP kan je instellen met -C (de hoofdletter dus). ("-c 5 -C 2" is dus maximaal 5 sessies en maximaal twee per IP)
Je wilt natuurlijk graag graag anonymous users toestaan of niet. De meeste rigoureuze switches hiervoor zijn de volgende:
pure-ftpd.exe -E
pure-ftpd.exe -e
De laatste staat alleen anonymous toe (geen logins toegestaan), terwijl de eerste precies het tegenovergesteld doet (anonymous verboden).
De manier waarop switches werken moge duidelijk zijn, daarom volgt nu gewoon een lijst met alle relevante switches, gevolgd door enkele voorbeelden:
Switch | Resultaat |
-4 | IPv4 only |
-A | Iedereen gechroot |
-b | Compatibility voor broken clients/routers |
-c | maximum aantal clients, standaard 50 |
-C | Maximum aantal connecties per ip |
-e | Anonymous-only toegang tot FTP (geen login) |
-E | Geen anonymous, alleen login |
-G | Hernoemen van bestanden is verboden |
-i | Uploaden voor anonymous users is niet toegestaan |
-I | Idle-timeout in minuten, de standaard is 15. Bijvoorbeeld "-I 20". |
-k | Uploads worden verboden zodra de disk meer dan x procent vol is. Bijvoorbeeld "-k 90". |
-K | Users mogen wel resumen en uploaden, maar niet renamen en deleten. Dirs mogen wel verwijderd worden, mits ze leeg zijn. Overschrijven van bestaande bestanden is wel toegestaan (upload resumen). Wil je dit voorkomen gebruik dan -r (autorename). |
-L | Om cpu-hoggende DDoSen te voorkomen. Gebruik -L max_bestanden:max_dirs. Bij een ls commando worden niet meer dan x files weergeven, en bij ls -R wordt niet verder gegaan dan y mappen. Bijvoorbeeld "-L 300:2" voor 300 files en mapdiepte 2. |
-m | Downloaden is verboden voor anonymous users als de cpu usage groter is dan een zeker percentage. Bijvoorbeeld "-m 80". |
-M | Anonymous users mogen mappen maken |
-N | NAT mode, om active te forceren (ivm routers). Zie ook de uitleg in readme.txt |
-p | Stel de passive port range in. Gebruik "-p begin:einde", bijvoorbeeld "-p 40000:41000". |
-P | Forceer een bepaalde ip als reactie op PASV/EPSV/SPSV commando's. Als je achter een router zit zonder ftp masquerading, zet het lokale IP dan hier. |
-q | Ratio voor anonymous users, upload:download. |
-Q | Ratio voor alle users (login en anonymous), upload:download |
-r | Bestaande files worden nooit overschreven, maar hernoemd als xyz, xyz.1, xyz.2, ... |
-R | Blokkeer CHMOD om domme dingen van users te voorkomen |
-S | IP/Hostname en poort instellen. Gebruik IP/Host,poort. Voor poorten kunnen ook servicenamen gebruikt worden. |
-T | Snelheidslimitatie, upload:download is mogelijk om apart in te stellen. |
-t | Alias voor -T |
-V | Non-anonymous toegang vanaf alleen dit IP. |
-w | FXP voor users met login |
-W | FXP voor alle users, inclusief anonymous. Zie ook de grote en belangrijke waarschuwing in readme.txt |
-y | Aantal logins limiteren, in de vorm "maxusers:maxanonymous". "-y 3:20 -c 15 -C 5 -B" doet nu: totaal 15 sessies, 5 connecties van 1 IP, 3 connecties per user, 20 anonymous users maximaal. |
Beschouw nu de volgende code:
pure-ftpd.exe -S 10.10.10.1,13 -4 -A -E -T :200 -L 1000:5 -I 10 -k 76 -c 20 -C 2
Dit bind onze FTP dus op 10.10.10.1 en poort 13 met alleen IPv4 support (-4). Iedereen is gechroot (-A), er mogen alleen niet-anonymous users (-E) op en er kan met 200 kb/s gedownload worden (-T :200, de upload is niet ingesteld en is dus oneindig. hetzelfde kan dus met de download op oneindig, bijvoorbeeld 16:). Verder mogen er 1000 files tot 5 mappen diep gelist worden (-L 1000:5), is de maximum idle time 10 minuten (-I 10), kan er maximaal 76% van de disk gebruikt worden (-k 76) en tot slot mogen er 20 users inloggen (-c 20) met 2 connecties per IP (-C 2). Hopelijk verduidelijkt dit voorbeeld het gebruik van switches en de mogelijkheden enigszins.
Het is natuurlijk niet fijn om de hele tijd deze regel in te moeten tikken. Daarom is er pureftpd_start.bat, waar je deze regel in kunt zetten. Als nu pureftpd_start.bat wordt uitgevoerd worden al de ingesteld opties gebruikt. Ingelogde users kunnen gezien worden met pure-ftpwho.
Users aanmaken
Users worden aangemaakt met pure-pw. Zorg dat de mappen C:\cygwin\etc en C:\etc bestaan. Kortweg maak je een user met:
pure-pw useradd geert -d /home/geert
Vergeet niet dat /home/geert dus staat voor C:\cygwin\home\geert, en dat die map moet bestaan. Nu word je twee keer gevraagd om een password in te voeren, en nu heb je in principe een user gemaakt die gechroot is. Als je wilt dat de user volledige toegang heeft, kan je -D gebruiken. Omdat het niet praktisch is de hele tijd mappen te moeten aanmaken, kan het ook zo:
pure-pw useradd geert -j -d /home/geert
Nu wordt de map automatisch gemaakt zodra er wordt ingelogd door de user in kwestie.
Ben je niet blij een bepaalde instelling, dan kan je die wijzigen met usermod, welke precies hetzelfde werkt als useradd:
pure-pw usermod geert -d /boe
De homedirectory is nu veranderd. Alle instellingen die niet worden meegegeven aan usermod blijven hetzelfde.
Users worden verwijderd met pure-pw userdel <user>, en hun info kan opgevraagd worden met pure-pw show <user>. Als er /./ achter een homedir staat betekent dit dat de user gechroot word (al heeft dit op mijn windows configuratie kuren, zelfs als ik -A extra erbij gebruik).
Switches voor usermod en useradd zijn:
Switch | Resultaat |
-d | Chroot de user. De homedirectory wordt erachter geplakt, bijvoorbeeld "-d /test". |
-D | De user word niet gechroot, en de switch werkt hetzelfde als bij -d |
-j | Homedirectory word automatisch gemaakt bij het eerste inloggen. |
-z | Restrictie op tijden waarop ingelogd mag worden (24hr tijden). '-z 0900-1200' maakt dus dat de user mag inloggen tussen 9 en 12. Let wel: het gaat over het connecten. Als er eenmaal een sessie is kan deze wel na 1200 doorlopen. |
-y | Restrictie op maximum aantal sessies voor deze user |
-r | Blokkeer bepaalde IP's, bijvoorbeeld "-r 192.0.0.1/24". Meerdere entries worden gescheiden door een komma (zonder spatie erachter). |
-R | Alias voor -r |
-i | Hetzelfde als -r, maar dan voor toegestane IP's |
-I | Alias voor -i |
-t | Maximum download snelheid in kb/s ("-t 200") |
-T | Maximum upload snelheid in kb/s |
-n | Maximum aantal bestanden op server |
-N | Maximum aantal MB's op server |
Unix/Linux users word aangeraden README.VirtualUsers nog eens door te lezen, omdat er ook UID e.d. kunnen worden toegewezen.
Ook kent Pure-FTPd nog enkele leuke dingen zoals MySQL-authentication (users en passwords e.d. staan in een MySQL-db), maar dat ga ik niet behandelen. Lees README.MySQL op de homepage als je daar meer over wilt weten.
Veel succes met en plezier van je FTP server
Thanks to
Deze howto is geschreven door Geert-Jan, beter bekend als G33rt
Op- of aanmerkingen, en suggesties kunnen worden doorgegeven aan de SA moderators
Lijst met figuren
- Figuur 1: Installatie van PureFTPd
Inhoudsopgave
[ Voor 42% gewijzigd door elevator op 12-03-2004 17:38 ]