Howto: proftpd & proftpadmin installieren (Ubuntu 12.10)

Mit einer der bekanntesten FTP-Server dürfte der proftpd sein. Ich schreibe euch hier ein kleines Tutorial wie man diesen und den komfortablen Web-Admin installiert.
Schritt 1: Mysql Datenbank & Benutzer anlegen
Wie man einen User und dazugehörige Datenbank anlegt beschreibe ich jetzt nicht näher. Via phpmyadmin ist das ja schnell gemacht.
Nun die zwei Tabellen erzeugen. Ich habe die tables.sql etwas angepasst, da ich immer über SQL-Fehler gestolpert bin:

ERROR 1064 (42000) at line 5: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server versio n for the right syntax to use near 'TYPE=InnoDB' at line 6
ERROR 1067 (42000) at line 16: Invalid default value for 'uid'

Folgendes funktioniert bei mir:

CREATE TABLE `users` (
`id` smallint(2) NOT NULL auto_increment,
`userid` varchar(10) NOT NULL default '',
`uid` int(10) unsigned NOT NULL default '0',
`gid` int(10) unsigned NOT NULL default '0',
`passwd` varchar(255) NOT NULL default '',
`homedir` varchar(255) NOT NULL default '',
`comment` varchar(255) NOT NULL default '',
`disabled` int(10) unsigned NOT NULL default '0',
`shell` varchar(20) NOT NULL default '/sbin/nologin',
`email` varchar(255) NOT NULL default '',
`name` varchar(255) NOT NULL default '',
`ul_bytes` bigint(20) NOT NULL default '0',
`dl_bytes` bigint(20) NOT NULL default '0',
`login_count` bigint(20) NOT NULL default '0',
`dl_count` bigint(20) NOT NULL default '0',
`ul_count` bigint(20) NOT NULL default '0',
`last_login` datetime default NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM ;
CREATE TABLE `groups` (
`groupid` varchar(10) NOT NULL default '',
`gid` int(10) unsigned NOT NULL auto_increment,
`members` varchar(255) NOT NULL default '',
PRIMARY KEY (`gid`)
) ENGINE=MyISAM ;

Schritt 2: proftpd installieren
….weiterlesen.

apt-get install proftpd proftpd-mod-mysql

(Ich setzte mal voraus, dass schon der mysql-server sowie ein webserver mit php installiert ist.)
Bei der Installation werdet ihr gefragt wie proftpd starten soll. Ich nehme ihn als standalone.
Jetzt können wir schon mal einen Blick in die Konfig schauen:

vi /etc/proftpd/proftpd.conf

Folgende Einstellungen habe ich für mich erstmal angepasst:

UseIPv6 off
ServerName "meinftp.de"
DefaultRoot ~
RequireValidShell off
# Zusätzlich hinzufügen:
# Für proftpdadmin
SQLConnectInfo mysqlUSERNAME@localhost mysqlDATABASE password
SQLAuthenticate users groups
SQLAuthTypes Crypt Backend
SQLUserInfo users userid passwd uid gid homedir shell
SQLGroupInfo groups groupid gid members
SQLLog PASS logincount
SQLNamedQuery logincount UPDATE "login_count=login_count+1 WHERE userid='%u'" users
SQLLog PASS lastlogin
SQLNamedQuery lastlogin UPDATE "last_login=now() WHERE userid='%u'" users
SQLLog RETR dlbytescount
SQLNamedQuery dlbytescount UPDATE "dl_bytes=dl_bytes+%b WHERE userid='%u'" users
SQLLog RETR dlcount
SQLNamedQuery dlcount UPDATE "dl_count=dl_count+1 WHERE userid='%u'" users
SQLLog STOR ulbytescount
SQLNamedQuery ulbytescount UPDATE "ul_bytes=ul_bytes+%b WHERE userid='%u'" users
SQLLog STOR ulcount
SQLNamedQuery ulcount UPDATE "ul_count=ul_count+1 WHERE userid='%u'" users
SQLUserWhereClause "disabled!=1"

Nun noch die SQL Module auskommentieren, damit diese auch geladen werden:

vi /etc/proftpd/modules.conf
LoadModule mod_sql.c
LoadModule mod_sql_mysql.c

Schritt 3: proftpdadmin installieren

cd /tmp/
wget http://sourceforge.net/projects/proftpd-admin/files/latest/download?source=dlp
tar xzfv download

Entweder ihr legt euch eine extra Virtual Directory im apache an oder kopiert die Dateien irgendwo ins /var/www/ftpadmin.
Jetzt noch die proftpadmin Konfig-Datei anpassen und die Mysql-Zugangsdaten eintragen:

cp configs/config.php.example config.php
vi configs/config.php

Jetzt mal auf die Webseite des proftpadmin gehen. Die sollte ungefähr so aussehen:
proftpdadmin
Ihr könnt auch schon direkt eine neue Gruppe und anschließend einen User zum Testen anlegen.
Schritt 4: Testen ob proftpd startet:

/etc/init.d/proftp force-stop && /etc/init.d/proftp start

Hier läuft man evtl. auf einen Fehler bezüglich der OpenSSL Version. Da ich FTPS/TLS etc. nicht verwende habe ich mich nicht näher darum gekümmert. „Normales“ FTP funktioniert trotzdem 😉

root@ks397502:/var/log/proftpd# /etc/init.d/proftpd restart
* Stopping ftp server proftpd
* Starting ftp server proftpd server.de proftpd[12556]: mod_tls/2.4.3: compiled using OpenSSL version 'OpenSSL 1.0.1 14 Mar 2012' headers, but
server.de proftpd[12556]: mod_sftp/0.9.8: compiled using OpenSSL version 'OpenSSL 1.0.1 14 Mar 2012' headers, but
server.de proftpd[12556]: mod_tls_memcache/0.1: notice: unable to register 'memcache' SSL session cache: Memcache

Jetzt müsstet ihr euch mit eurem zuvor angelegtem User (via proftpadmin) einloggen können. Wenn nicht schaut ins proftpd-Log:

vi /var/log/proftpd/proftpd.log

Schritt 5: Absichern von FTP und weiteren Diensten via Fail2Ban
Ich würde jedem empfehlen seinen FTP gegen Angriffe zu schützen. Sehr einfach schafft Fail2Ban Abhilfe.
Ist simple und schnell installiert. Kann auch für weitere Dienste wie z.B. SSH etc. verwendet werden.

apt-get install fail2ban
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
vi /etc/fail2ban/jail.conf
[proftpd]
enabled = true
port = ftp,ftp-data,ftps,ftps-data
filter = proftpd
logpath = /var/log/proftpd/proftpd.log
maxretry = 3

Anschließend fail2ban neustarten:

/etc/init.d/fail2ban restart

Nachschauen welche Dienste geloggt werden:

root@server:/var/log# fail2ban-client status
Status
|- Number of jail: 2
`- Jail list:  proftpd, ssh

Eine ausführliche Erklärung zum fail2ban einrichten gibt es hier.

8 Gedanken zu „Howto: proftpd & proftpadmin installieren (Ubuntu 12.10)“

      • Hallo,
        ich habe alles unter /var/www/ und hab diesem Ordner die Rechte 775 gegeben.
        Bzgl. „bzw. dem Pfad wie in Proftpd angegeben“ – Welchen Pfad meinst du? Wo ist den dort ein Pfad angegeben?

        Antworten
        • Ja wenn du als Homeverzeichnis für deinen User (z.B. Test) /home/ftp/test/ muss dieser Benutzer Test auch owner, oder in der Gruppe der Besitzer von /home/ftp/test sein. Ich glaube da ist es sogar egal welche Rechte man auf den Ordner gesetzt hat.
          Beispiel was zum Beispiel bei mir testweise geht:
          User im proftpd angelegt – Main Group: root / Additional: Nogroup
          Home Verzeichnis ist /home/test/test/
          Home Verzeichnis Owner ist: proftpd & nogroup (chown proftpd:nogroup *)
          Ich schätze mal, es reicht auch aus, wenn die Main Group www-data, und du dein /var/www mit www-data Owner setzt.(Sofern das nicht schon ist)

          Antworten
          • Hatte den Server per SSH mit Root erstellt. Kenne mich noch nicht so gut aus, aber alle Benutzer sollen unter /var/www/ liegen.
            Also müsste ich die Gruppe, welche ich erstellt habe (Gruppenid: 1, Gruppenname: user) /var/www/ zuteilen?
            Wie kann ich den sowas?

          • Hallo,
            ich habe mich mal bisschen umgeschaut im Internet. Habe mal alle Rechte rekursiv auf 777 gesetzt, also auch öffentlich, dann ging es natürlich und hab gesehen, dass wenn ich per Filezilla was hochlade, dass diese Datei Besitzer 65533 und Gruppe ebenfalls 65533 ist. Ist das normal, obwohl ich dem User die user group zugeteilt habe per proftpdadmin?
            Gruß

  1. Danke für das Tutorial. Auch ich habe ein Problem. Ich kann auf alle Ordner zugreifen. Ich habe alles unter /www/virtual/domain.de gespeichert. Melde ich mich per FTP ein bin ich zwar im richtigen Ordner, habe auch für alles die Berechtigung, jedoch kann ich mich im /www/ zwischen verschiedenen Ordnern wechseln.

    Antworten
  2. Hallo Constey,
    kurze Anmerkung: fail2ban hat da anscheinend was geändert, die bevorzugte config-datei ist jetzt die .local – d.h. die Änderungen für ProFTPd müssen nicht in der jail.conf sondern in der jail.local gemacht werden.
    Danke für das Top-Tutorial!

    Antworten

Schreibe einen Kommentar

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.