ProFTPd mit mySQL-Anbindung auf Ubuntu einsetzen
ProFTPd ist einer der meistgenutzten FTP-Server auf Ubuntu-Systemen. Aus der Dose kann er jedoch nur mit Systembenutzern umgehen, was mitunter einen recht großen Pflegeaufwand mit sich bringt.
Daher erfreut sich die MySQL-basierte Variante großer Beliebtheit.
Noch einfacher in der Bedienung wird es, wenn man dem ProFTPd gleich die GID und UID des Webservers (meistens Apache2) übergibt, sodass die Dateirechte von Anfang an stimmen.
Die Installation ist mit wenigen Schritten durchgeführt:
Schritt 1: Die benötigten Pakete installieren
sudo apt-get install proftpd-basic proftpd-mod-mysql
Schritt 2: Apassungen in /etc/proftpd/proftpd.conf
I.d.R. verlangt ProFTPd Systembenutzer, diese Abhängigkeit muss aufgelöst und ProFTPd der Umgang mit MySQL beigebracht werden.
Dazu müssen die folgenden Zeilen in der mitgelieferten Konfiguration einkommentiert werden.
DefaultRoot ~ Include /etc/proftpd/sql.conf RequireValidShell off # SQLMinID legt die kleinste mögliche ID fest. Um ProFTPd mit dem Apache2 zu verknüpfen und dessen GID und UID meistens "33" lautete, muss dieser Wert # explizit definiert werden, Standard = 999. Ohne diesen Eintrag wären Uploads und Änderungen nicht möglich das sie zu Fehlern in der Berechtitigung führen würden und nur # über ein chmod 777 umgangen werden könnten SQLMinID 33
Schritt 3: Die Datenbank vorbereiten
Man legt nun eine MySQL-Datenbank an, z.B. “proftpd”
CREATE DATABASE `proftp` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
In dieser Datenbank werden zwei Tabellen angelegt, eine für die Benutzergruppen, eine für die Benutzer selbst
CREATE TABLE IF NOT EXISTS `ftpgroup` ( `groupname` varchar(16) NOT NULL DEFAULT '', `gid` smallint(6) NOT NULL DEFAULT '33', `members` varchar(16) NOT NULL DEFAULT '', KEY `groupname` (`groupname`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='ProFTP Benutzergruppen';
CREATE TABLE IF NOT EXISTS `ftpuser` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `userid` varchar(32) NOT NULL DEFAULT '', `passwd` varchar(32) NOT NULL DEFAULT '', `uid` smallint(6) NOT NULL DEFAULT '33', `gid` smallint(6) NOT NULL DEFAULT '33', `homedir` varchar(255) NOT NULL DEFAULT '', `shell` varchar(16) NOT NULL DEFAULT '/sbin/nologin', `count` int(11) NOT NULL DEFAULT '0', `accessed` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `modified` timestamp NULL DEFAULT '0000-00-00 00:00:00', PRIMARY KEY (`id`), UNIQUE KEY `userid` (`userid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='ProFTP user table' AUTO_INCREMENT=3 ;
Sinnvollerweise definiert man für die soeben angelegte Datenbank einen exklusiven Benutzer, z.B. “proftpd”
Schritt 4: Module in ProFTPd einbinden
In /etc/proftpd/modules.conf müssen nun die folgenden Zeilen einkommentiert werden
LoadModule mod_sql.c LoadModule mod_sql_mysql.c
Schritt 5: ProFTPd die Kommunikation mit MySQL beibringen
In der Modulkonfiguration /etc/proftpd/sql.conf (diese enthält bei einer Installation aus dem Repository schon jede Menge auskommentierte Einträge, die man getrost ignorieren kann) werden nun innerhalb des Abschnitts
SQLBackend mysql SQLAuthTypes Crypt SQLConnectInfo [Datenbankname]@localhost [Benutzername] [Passwort] SQLUserInfo ftpuser userid passwd uid gid homedir shell SQLGroupInfo ftpgroup groupname gid members # Den Zeitpunkt des letzten Logins aktualisieren SQLLog PASS updatecount SQLNamedQuery updatecount UPDATE "count=count+1, accessed=now() WHERE userid='%u'" ftpuser SQLLog STOR,DELE modified SQLNamedQuery modified UPDATE "modified=now() WHERE userid='%u'" ftpuser
Schritt 6: Benutzer anlegen
Die beiden Tabellen mit einer Benutzergruppe und einem Benutzer füllen (hier am Beispiel des Benutzers www-data für den Apache2).
INSERT INTO `ftpgroup` (`groupname`, `gid`, `members`) VALUES ('www-data', 33, 'www-data');
INSERT INTO `ftpuser` (`id`, `userid`, `passwd`, `uid`, `gid`, `homedir`, `shell`, `count`, `accessed`, `modified`) VALUES ('', 'ftpuser', ENCRYPT('password'), 33, 3, '/var/www/default/', '/sbin/nologin', 0, '', '');
Damit kann sich der Benutzer “ftpuser” nun mit dem Passwort “password” anmelden und erhält Zugriff auf /var/www/default/ und dessen Unterverzeichnisse.
Schritt 7: ProFTPd neu starten
sudo /etc/init.d/proftpd restart
Sollte ProFTPd nicht neu starten, kann man es mithilfe von
proftpd -nd6
manuell starten. So erhält man Debug-Informationen die einem bei der Ursachenforschung helfen können.
Ansonsten sind auch die Einträge im ProFTPd-Log unter
/var/log/proftpd/proftpd.log
mitunter sehr hilfreich.