PureFTPd-mysql installeren

Bronpagina vanaf http://www.howtoforge.com

Vandaag gaan we een database gestuurde ftp-server aanmaken. Ik had hier mijn twijfels over, zoveel gebruikers ga ik niet hebben. De server gaat namelijk gebruikt worden voor mijzelf en een enkeling waar ik data voor wil hebben staan. Meer dan 10 gebruikers gaan er zeker niet komen, ik twijfel er al aan of ik er 5 ga halen. Henk van de Kamer heeft me echter overgehaald. Voor ftp wil je om beveiligingstechnische redenen geen echte gebruikers aanmaken. Een goed punt dus.

Goed, om te beginnen eerst maar de pakketten ophalen en installeren. Dit doe ik met aptitude. Met de forward slash (/) gaan we zoeken naar pureftpd-mysql. Deze selecteren we en met de toets g kijken we wat er allemaal voor geinstalleerd moet worden. Dit zijn de pakketten pureftpd-mysql en pureftpd-common. Deze installeren we dus met nog een druk op de g, daarna verlaten we aptitude.

Vervolgens maken we een groep en een gebruiker aan voor de ftp-server:

Arkon:~# groupadd -g 2001 ftpgroupArkon:~
# useradd -u 2001 -s /bin/false -d /bin/null -c "pureftpd user" -g ftpgroup ftpuser

Vervolgens maken we de database aan waarmee we de ftp-server kunnen beheren:

CREATE DATABASE pureftpd;GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO 'pureftpd'@'localhost' IDENTIFIED BY 'ftpdpass';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO 'pureftpd'@'localhost.localdomain' IDENTIFIED BY 'ftpdpass';
FLUSH PRIVILEGES;

CREATE TABLE ftpd (User varchar(16) NOT NULL default '',
status enum('0','1') NOT NULL default '0',
Password varchar(64) NOT NULL default '',
Uid varchar(11) NOT NULL default '-1',
Gid varchar(11) NOT NULL default '-1',
Dir varchar(128) NOT NULL default '',
ULBandwidth smallint(5) NOT NULL default '0',
DLBandwidth smallint(5) NOT NULL default '0',
comment tinytext NOT NULL,
ipaccess varchar(15) NOT NULL default '*',
QuotaSize smallint(5) NOT NULL default '0',
QuotaFiles int(11) NOT NULL default 0,
PRIMARY KEY (User),
UNIQUE KEY User (User)) TYPE=MyISAM

Vervang het wachtwoord ‘ftpdpass’ door je eigen wachtwoord, dit moet 2 keer. Ik vraag me af of we de 2e gebruiker (pureftpd@localhost.localdomain) wel nodig hebben.

Vervolgens gaan we het configuratiebestand aanmaken:

Arkon:~# cp /etc/pure-ftpd/db/mysql.conf /etc/pure-ftpd/db/mysql.conf.orig
Arkon:~# cat /dev/null > /etc/pure-ftpd/db/mysql.conf
Arkon:~# nano /etc/pure-ftpd/db/mysql.conf

Het origineel heb ik gecopieerd naar een backup bestand. Vervolgens het schoonvegen van het origineel en het bewerken ervan. Geeft dit bestand de volgende inhoud:

MYSQLSocket      /var/run/mysqld/mysqld.sock
#MYSQLServer     localhost
#MYSQLPort       3306
MYSQLUser       pureftpd
MYSQLPassword   ftpdpass
MYSQLDatabase   pureftpd
#MYSQLCrypt md5, cleartext, crypt() or password() - md5 is VERY RECOMMENDABLE uppon cleartext
MYSQLCrypt      md5
MYSQLGetPW      SELECT Password FROM ftpd WHERE User="\L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MYSQLGetUID     SELECT Uid FROM ftpd WHERE User="\L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MYSQLGetGID     SELECT Gid FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MYSQLGetDir     SELECT Dir FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MySQLGetBandwidthUL SELECT ULBandwidth FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MySQLGetBandwidthDL SELECT DLBandwidth FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MySQLGetQTASZ   SELECT QuotaSize FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MySQLGetQTAFS   SELECT QuotaFiles FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")

Vervang uiteraard hier ook het wachtwoord in de regel die begint met: MYSQLUser

Vervolgens zorgen we door het aanmaken van 2 bestanden met enkel het woordje “yes” dat iedere user in een chroot zit en dat er bij het aanmaken van een user automagisch een homedirectory aangemaakt wordt:

Arkon:~# echo "yes" > /etc/pure-ftpd/conf/ChrootEveryone
Arkon:~# echo "yes" > /etc/pure-ftpd/conf/CreateHomeDir

Verander in /etc/default/pure-ftpd-common de regel STANDALONE_OR_INETD naar standalone:

# Configuration for pure-ftpd
# (this file is sourced by /bin/sh, edit accordingly)
# STANDALONE_OR_INETD
# valid values are "standalone" and "inetd".
# Any change here overrides the setting in debconf.
STANDALONE_OR_INETD=standalone

# VIRTUALCHROOT:
# whether to use binary with virtualchroot support
# valid values are "true" or "false"
# Any change here overrides the setting in debconf.VIRTUALCHROOT=false

# UPLOADSCRIPT: if this is set and the daemon is run in standalone mode,
# pure-uploadscript will also be run to spawn the program given below
# for handling uploads. see /usr/share/doc/pure-ftpd/README.gz or# pure-uploadscript(8)

# example: UPLOADSCRIPT=/usr/local/sbin/uploadhandler.plUPLOADSCRIPT=

# if set, pure-uploadscript will spawn $UPLOADSCRIPT running as the
# given uid and gidUPLOADUID=UPLOADGID=

In /etc/initd.conf zetten we een comment teken (#) voor de regel die begint met ftp

En vervolgens (her)starten we inetd en pure-ftpd-mysql:

Arkon:~# /etc/init.d/openbsd-inetd restart
Restarting internet superserver: inetd* Not starting internet superserver: no services enabled.
Arkon:~# /etc/init.d/pure-ftpd-mysql restart
Restarting ftp server: Running: /usr/sbin/pure-ftpd-mysql -l mysql:/etc/pure-ftpd/db/mysql.conf -l pam -O clf:/var/log/pure-ftpd/transfer.log -u 1000 -j -A -E -B

Ik heb inetd niet draaien, maar mocht je dat wel hebben dan is de uitvoer bij u anders.

Vervolgens kun je met phpmyadmin de tabel met gebruikers vullen.

De volgende velden kun je invullen:

  • User: de naam van de gebruiker
  • status: 0 of 1, bij nul is het account gedeactiveerd
  • Password: lijkt me duidelijk, denk er wel om dat je de MD5 functie gebruikt!
  • UID: het gebruikersid wat we voor de ftp gebruiker hebben aangemaakt (2001)
  • GID: het groepsid wat we voor de ftp groep hebben aangemaakt (2001)
  • Dir: de homedirectory die we meegeven. Als deze niet bestaat dan wordt die aangemaakt.
  • ULBandwidth: uploadlimiet in KB/sec
  • DLBandwidth: downloadlimiet in KB/sec
  • comment: mocht je nog commentaar hebben bij de gebruiker
  • ipaccess: hiermee kun je gebruikers vastzetten qua toegang via 1 of meerdere ip adressen.
  • QuotaSize: Hoeveel ruimte de gebruiker in MB gebruiken mag.
  • QuotaFiles: Aantal bestanden dat de gebruiker op de FTP server mag hebben.

Geef een reactie