PureFTPd med MySQL, TLS, Quata, Throttling og Ratios
Sikkerhed først.
Pure-FTPd er aktivt supportet, or er designet med sikkerhed i tankerne. Koden bliver altid efterredigeret eftersom nye sårbarheder bliver diskuteret.
I modsætning til andre populære FTP servere, er der ikke fundet nogle root huller siden den første version blev lanceret.
Serveren kan køre med seperate privilegier for paranoid sikkerhed. Det kan endda køre 100% non-root, med dets indbygget chroot() emulation og virtuelle kontoer.
Overførsler af ikke krypterede kodeord, kan blive afværget: Pure-FTPd har indbygget support for SSL/TLS kryptering, ved at bruge OpenSSL libs.
Pure-FTPd snakker dit sprog.
Alle server beskeder er oversat til Engelsk, Tysk, Romænsk, Fransk, Polsk, Spansk, Dansk, Hollandsk, Italiensk, Svensk, Norsk, Russisk, Kinesisk, Tyrkisk samt mange flere.
Det hjælpder dine brugere til at forstå diagnoser, selvom engelsk ikke er det primære sprog.
Alle beskeder er i forskellige filer, og kan nemt blive oversat til et nyt sprog eller ændret.
Et perfekt valgt for nybegyndere.
Begyndere kan installere en Pure-FTPd server på 5 minutter. Det kan være så simpelt som at installere pakken, skrive "pure-ftpd &" og.... det er det hele. Så kører serveren, og klienterne kan begynde at forbinde sig til serveren.
Der er ingen grund til at læse en lang og komplex konfigurations fil, hvor mulige fejl kan have sikkerhedsmæssige og troværdige konsekvenser. Pure-FTPd bruger simple kommando parametre for at aktivere de forskellige indstillinger.
Du kan begrænse antallet af brugere, begrænse deres båndbredde for at forhindre din linie bliver overbelastet, gemme systemfiler og lave upload/download forhold. Tilfældige beskeder kan blive vist ved login og når brugere går ind i mapper. Du kan også forhindre at din disk bliver fyldt op, ved at bruge den indbygget funktion der tilladere dig at pure-ftpd kun bruger en hvis procentdel af disken.
FXP (server-to-server) protokollen er også indbygget. Den kan være brugbar for alle brugere eller kun autoriserede folk.
Crackere bruger almindelig brute-force programmer, for at få adgang til skjulte mapper. Pure-FTPd beskytter også mod dette. Anononym adgang er sikker pr. standard. F.eks. kan klienter ikke læse .dot filer (.bash_history, .htacces) uden du specifikt tillader dette.
Og for at se, hvem der gør hvad, viser "pure-ftpwho" kommandoen en tabel med aktive sessioner, hvor meget båndbredde der er taget af hver bruger, hvilke filer de henter eller uploader, hvor de kommer fra og andet.
Jeg har en firewall?
Hvis du sidder bag en firewall, skal du åbne for følgende porte indadtil, efter behov. Standard kører ftp på port 21, ftp data port på 20, samt passive porte på 1400 til 1500.
Hvad har vi brug for?
Du skal have følgende Debian pakker installeret, dette er Woody pakker.
- mysql-client
- libmysqlclient14-dev
- mysql-server
- mysql-common
- openssl
- libssl-dev
- bzip2
- wget
- phpmyadmin (ikke et krav, men stærkt anbefalet)
Derudover skal du hente den nyeste version af PureFTPd på: ftp://ftp.pureftpd.org/pub/pure-ftpd/releases/
Vi har her valgt at bruge: pure-ftpd-1.0.20.tar.bz2
Oprette databasen, og tabeller
Vi går ud fra, at du allerede kender til MySQL, og derfor behøver vi ikke forklare, hvordan du opretter databasen, og andet. (Husk at logge ind som root i MySQL)
Inden du kan starte med at oprette databasen og tabeller, skal oprette en bruger kaldet "pureftpd" i mysql. Denne bruger skal ingen rettigheder have til andre databaser. Derefter genstarter du din mysql server.
Følgende kode er til oprettelse af hele Pure-FTPd mysql system. Jeg skal her gøre opmærksom på, at der i bunden skal rettes lidt i koden, da kodeordet for "pureftpd" brugeren skal indsættes i SQL syntaksen.
create database ftpdb;
use ftpdb;
DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
`id` int(128) NOT NULL auto_increment,
`username` varchar(128) NOT NULL default '',
`password` varchar(255) NOT NULL default '',
`homedir` varchar(128) NOT NULL default '/home/pureftpd/root/',
`QuotaFiles` varchar(255) NOT NULL default '',
`QuotaSize` varchar(255) NOT NULL default '',
`ULRatio` varchar(255) NOT NULL default '',
`DLRatio` varchar(255) NOT NULL default '',
`ULBandwidth` varchar(255) NOT NULL default '',
`DLBandwidth` varchar(255) NOT NULL default '',
`disabled` int(1) NOT NULL default '0',
PRIMARY KEY (`id`),
UNIQUE KEY `id` (`id`),
UNIQUE KEY `username` (`username`),
KEY `id_2` (`id`),
KEY `username_2` (`username`)
) TYPE=MyISAM;
GRANT SELECT, UPDATE, INSERT, DELETE
ON ftpdb.*
TO pureftpd@localhost
IDENTIFIED BY 'kodeord';
Husk at ændre "kodeord" oven for, til dit eget kodeord, da du oprettede brugeren.
Oprette en bruger til Pure-FTPd i systemet
Alle de virtuelle brugere, skal også have deres egen mappe på systemet. Du tænker sikkert nu: "Jamen, skal jeg så til ind og oprette en mappe hver gang, jeg opretter en konti?". Svaret er nej. Dette klarer Pure-FTPd nemlig helt selv. Når man har oprettet en konti i MySQL databasen, og logger ind første kan, vil den automatisk oprette mappen, hvis den ikke allerede eksisterer.
Derfor, skal vi have tilføjet en bruger i vores system, som har rettigheder til dette:
groupadd -g 2000 pureftpd
useradd -g pureftpd -u 2000 pureftpd
Læg her mærke til, at giver Pure-FTPd brugeren user-id 2000, samt gruppen "pureftpd" group-id 2000. Dette skal vi senere bruge, når vi skal indtaste data i mysql databasen.
Installation af Pure-FTPd
Først starter vi med at downloade kilden til Pure-FTPd, dette skal gøres som root:
cd /root/
wget 'ftp://ftp.pureftpd.org/pub/pure-ftpd/releases/pure-ftpd-1.0.20.tar.bz2'
Når dette er gjort, pakker vi filen ud, samt kompiler og installere pureftpd:
tar -jxvf pure-ftpd-1.0.20.tar.bz2
cd pure-ftpd-1.0.20
./configure --with-cookie --with-diraliases --with-ftpwho --with-mysql --with-peruserlimits --with-quotas --with-ratios --with-throttling --with-virtualchroot --with-virtualhosts --with-boring --with-tls
make install-strip
Opsætning af certifikater:
mkdir -p /etc/ssl/private
openssl req -x509 -nodes -newkey rsa:1024 -keyout \
/etc/ssl/private/pure-ftpd.pem \
-out /etc/ssl/private/pure-ftpd.pem
chmod 600 /etc/ssl/private/*.pem
Viola!, Pure-FTPd er nu installeret på dit system, under /usr/local/sbin/.
Ønsker du at installere Pure-FTPd med et andet sprog, kan du bruge: --with-language=danish. Jeg anbefaler man læser: http://www.pureftpd.org/README.
Konfiguration af Pure-FTPd
Jeg har her valgt, at lade et start/stop script styre vores ftp server, så derfor skal vi have sat vores script program op.
Vi åbner /etc/init.d/pureftpd, og i tilføjer:
#!/bin/bash
##### EDIT THIS
PASSIVEMODEPORTS="40000:50000"
INTERFACE="ppp0"
##### STOP
DAEMON="/usr/local/sbin/pure-ftpd"
IP=`ifconfig ${INTERFACE} | grep inet | cut -d : -f 2 | cut -d \ -f 1`
ARGS="-S 21 -b -d -H -i -c 10 -B -D -A -j -Z -w -E -I 2 -C 2 -k 95 -Y 1 -l mysql:/etc/pureftpd-mysql.conf -p ${PASSIVEMODEPORTS} -P ${IP}"
case "$1" in
start)
echo -n "Starting ftp server:"
echo -n " PureFTPd"
start-stop-daemon --start --quiet --exec ${DAEMON} -- ${ARGS}
echo "."
;;
stop)
echo -n "Stopping ftp server:"
echo -n " PureFTPd"
start-stop-daemon --stop --quiet --exec ${DAEMON} -- ${ARGS}
echo "."
;;
reload | restart)
echo -n "Restarting ftp server:"
echo -n " PureFTPd"
start-stop-daemon --stop --quiet --exec ${DAEMON} -- ${ARGS}
sleep 2
start-stop-daemon --start --quiet --exec ${DAEMON} -- ${ARGS}
echo "."
;;
*)
echo;
echo -e " << PureFTPd Starter 1.0.0 >> ";
echo;
echo "USAGE: /etc/init.d/pureftpd [option]"; echo;
echo "START Brings up the ftp server";
echo "STOP Brings down the ftp server completely";
echo "RELOAD|RESTART Brings the ftp server down and then up again";
echo;
esac
exit 0
Inden scriptet kan køres, skal det gøres eksekverbar. Dette gøres ved at skrive: chmod +x /etc/init.d/pureftpd
Jeg vil ikke komme nærmere ind på de overnævnte kommandoer, samt deres betydning. Alt dette kan findes og læses om, på PureFTPd's egen hjemmeside www.pureftpd.org - Læs README under Documentation
Til sidst skal vi have oprettet filen, der giver Pure-FTPd adgang til MySQL. Vi opretter /etc/pureftpd-mysql.conf, med nano:
nano /etc/pureftpd-mysql.conf
# /etc/pureftpd-mysql.conf
MYSQLServer localhost
MYSQLPort 3306
MYSQLSocket /var/run/mysqld/mysqld.sock
MYSQLUser pureftpd
MYSQLPassword *******
MYSQLDatabase ftpdb
MYSQLCrypt any
MYSQLDefaultUID 2000
MYSQLDefaultGID 2000
MYSQLGetPW SELECT Password FROM users WHERE username="\L" AND disabled <> "1"
MYSQLGetDir SELECT homedir FROM users WHERE username="\L"
MySQLGetQTAFS SELECT QuotaFiles FROM users WHERE username="\L"
MySQLGetQTASZ SELECT QuotaSize FROM users WHERE username="\L"
MySQLGetRatioUL SELECT ULRatio FROM users WHERE username="\L"
MySQLGetRatioDL SELECT DLRatio FROM users WHERE username="\L"
MySQLGetBandwidthUL SELECT ULBandwidth FROM users WHERE username="\L"
MySQLGetBandwidthDL SELECT DLBandwidth FROM users WHERE username="\L"
# End of file
chmod 600 /etc/pureftpd-mysql.conf
Her skal du huske at ændre kodeord for mysql brugeren.
Starte Pure-FTPd
For at starte eller genstarte Pure-FTPd skriver du:
/etc/init.d/pureftpd restart
Krypteret forbindelse
Serveren skulle understørre krypteret TLS forbindelser
Indtaste data i MySQL databasen
Oprette konti
Du udfylde felterne i users tabellen. Jeg vil her kort beskrive, hvad de forskellige felter er og betyder.
- username = brugernavn til login
- password = brugerens kodeord, du skal her bruge encrypt() funktionen i mysql til at kryptere koden med
- homedir = skal være stien til "hjemmet". I vores tilfælde her "/home/pureftpd/root/"
- QuotaFiles = max antal tilladte filer i brugerens mappe
- QuotaSize = max størrelse på tilladt brug af harddisk plads (i mb)
- ULRatio og DLRatio = Sætter ratio på. F.eks ULRatio = 1 og DLRatio = 2, vil lave ratio 1:2, dvs i upload for 2 downloads.
- ULBandwidth = Tilladt brug i kb, af linien. F.eks. 30, vil sige at brugeren max kan bruge 30 kb/sec af linien.
- DLBandwidth = Det samme som ULBandwidth, dog gælder dette for download ;)
- disabled = om kontoen er suspenderet eller ej. Hvis denne er 1, kan brugeren ikke logge ind på sin konti. Vedkommende vil blive afvist af serveren.
Din ftp system er nu klar, til at tage i brug. Tillykke.


Sidst opdateret: 21-09-2006