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:
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.
Hat super geklappt, doch bekomme immer die Fehlermeldung: 550 Permission denied.
Kann keine Dateien hinzufügen oder löschen..
Hast du mal die Berechtigungen deines Homeverzeichnis – bzw. dem Pfad wie in Proftpd angegeben gecheckt?
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?
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)
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ß
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.
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!