Installation ProFTP

Installation

Zunächst installiert man den entsprechenden Port:

cd /usr/ports/ftp/proftpd
make install clean

Anschliessend die gewünschten Optionen auswählen. Eine Liste aller ProFTP Module gibt es hier.

       lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk
       x Options for proftpd 1.3.4a_1                                       x
       x lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk x
       x x[*] COPY             Include mod_copy                           x x
       x x[*] DEFLATE          Include mod_deflate                        x x
       x x[*] IFSESSION        Include mod_ifsession                      x x
       x x[*] IFVERSION        Include mod_ifversion                      x x
       x x[*] NLS              Use nls (builds mod_lang)                  x x
       x x[*] PCRE             Use pcre for regular expressions           x x
       x x[*] SFTP             Include mod_sftp                           x x
       x x[*] SQL              Include mod_sql                            x x
       x x[*] SQL_PASSWD       Include mod_sql_passwd (requires SQL)      x x
       x x[*] README           Include mod_readme                         x x
       x x[*] TLS              Include mod_tls                            x x
       x x[*] WRAP             Include mod_wrap2                          x x
       x x[*] WRAP_FILE        Include mod_wrap2_file (requires WRAP)     x x
       x mqqqqv(+)qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq31%qqqqqj x
       tqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqu
       x                   <  OK  >                                 x
       mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj

Dann brauchen wir noch das MySQL Modul

cd /usr/ports/databases/proftpd-mod_sql_mysql
make install clean

Sollte der MySQL-Client nicht installiert sein, so wird dies automatisch mitinstalliert. Nachdem die Installation abgeschlossen ist, müssen einige Änderungen am System durchgeführt werden.

Config

proftpd.conf

Anpassungen in der Config /usr/local/etc/proftpd.conf

TLS Verschlüsselung aktiveren

Dies ist optional, macht aber ganz klar Sinn 😉

mkdir /usr/local/etc/proftpd/ssl

Dann Zertifikat machen. Ich mach gleich eins für die nächsten 10 Jahre, da ich keine Lust habe, dies jedes Jahr zu erneuern 😉

 openssl req -new -x509 -days 3650 -nodes -out /usr/local/etc/proftpd/ssl/proftpd.cert.pem -keyout /usr/local/etc/proftpd/ssl/proftpd.key.pem

Hier ist nun wichtig, dass man bei Common Name den Hostnamen des Servers eingibt.

Country Name (2 letter code) [AU]:CH
State or Province Name (full name) [Some-State]:ZH
Locality Name (eg, city) []:Zürich
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Firma GmbH
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:hostname.example.com
Email Address []:info@example.com

Im Config File dann noch folgende Zeilen einfügen:

TLSEngine                  on
TLSLog                     /var/log/proftpd-tls.log
TLSProtocol                TLSv1
TLSOptions                 NoCertRequest NoSessionReuseRequired 
TLSRSACertificateFile      /usr/local/etc/proftpd/ssl/proftpd.cert.pem
TLSRSACertificateKeyFile   /usr/local/etc/proftpd/ssl/proftpd.key.pem
TLSVerifyClient            off
TLSRequired                on
AllowForeignAddress        on

Ausserdem den Port von default 21 auf 990 umstellen:

Port                            990

Dann ProFTP neu starten.

/usr/local/etc/rc.d/proftpd restart

Im FTP Client nun bei der Verschlüsselung „Explizites FTP über TLS fordern“ auswählen. Da wir die Option TLSRequired gesetzt haben, ist eine unverschlüsselte FTP Verbindung nicht mehr möglich. Ausserdem muss auch der Port 990 angegeben werden. Transfermodus ist Passiv.

Aktivieren der Module

Um zu sehen, welche Module per Default in ProFTP reinkompiliert sind, kann man diesen Befehl benutzen.

root@corky(/usr/local/etc)> proftpd -l
Compiled-in modules:
  mod_core.c
  mod_xfer.c
  mod_auth_unix.c
  mod_auth_file.c
  mod_auth.c
  mod_ls.c
  mod_log.c
  mod_site.c
  mod_delay.c
  mod_facts.c
  mod_dso.c
  mod_ident.c
  mod_auth_pam.c
  mod_lang.c

Alle zusätzlichen Module sind hier zu finden:

# ll /usr/local/libexec/proftpd/
total 2140
drwxr-xr-x  2 root  wheel    1024 Mar 16 08:39 ./
drwxr-xr-x  4 root  wheel     512 Mar 16 08:03 ../
-rw-r--r--  1 root  wheel   20596 Mar 16 08:03 mod_copy.a
-rwxr-xr-x  1 root  wheel    1018 Mar 16 08:03 mod_copy.la*
-rwxr-xr-x  1 root  wheel   17016 Mar 16 08:03 mod_copy.so*
-rw-r--r--  1 root  wheel   26984 Mar 16 08:03 mod_deflate.a
-rwxr-xr-x  1 root  wheel    1043 Mar 16 08:03 mod_deflate.la*
-rwxr-xr-x  1 root  wheel   19848 Mar 16 08:03 mod_deflate.so*
-rw-r--r--  1 root  wheel   16922 Mar 16 08:03 mod_ifsession.a
-rwxr-xr-x  1 root  wheel    1053 Mar 16 08:03 mod_ifsession.la*
-rwxr-xr-x  1 root  wheel   15768 Mar 16 08:03 mod_ifsession.so*
-rw-r--r--  1 root  wheel    8722 Mar 16 08:03 mod_ifversion.a
-rwxr-xr-x  1 root  wheel    1053 Mar 16 08:03 mod_ifversion.la*
-rwxr-xr-x  1 root  wheel    9880 Mar 16 08:03 mod_ifversion.so*
-rw-r--r--  1 root  wheel    6830 Mar 16 08:03 mod_readme.a
-rwxr-xr-x  1 root  wheel    1032 Mar 16 08:03 mod_readme.la*
-rwxr-xr-x  1 root  wheel    8496 Mar 16 08:03 mod_readme.so*
-rw-r--r--  1 root  wheel  748154 Mar 16 08:03 mod_sftp.a
-rwxr-xr-x  1 root  wheel    1118 Mar 16 08:03 mod_sftp.la*
-rwxr-xr-x  1 root  wheel  370040 Mar 16 08:03 mod_sftp.so*
-rw-r--r--  1 root  wheel   16168 Mar 16 08:03 mod_sftp_sql.a
-rwxr-xr-x  1 root  wheel    1046 Mar 16 08:03 mod_sftp_sql.la*
-rwxr-xr-x  1 root  wheel   13848 Mar 16 08:03 mod_sftp_sql.so*
-rw-r--r--  1 root  wheel  151018 Mar 16 08:03 mod_sql.a
-rwxr-xr-x  1 root  wheel    1011 Mar 16 08:03 mod_sql.la*
-rwxr-xr-x  1 root  wheel   86552 Mar 16 08:03 mod_sql.so*
-rw-r--r--  1 root  wheel   31970 Mar 16 08:39 mod_sql_mysql.a
-rwxr-xr-x  1 root  wheel    1118 Mar 16 08:39 mod_sql_mysql.la*
-rwxr-xr-x  1 root  wheel   24416 Mar 16 08:39 mod_sql_mysql.so*
-rw-r--r--  1 root  wheel   26544 Mar 16 08:03 mod_sql_passwd.a
-rwxr-xr-x  1 root  wheel    1060 Mar 16 08:03 mod_sql_passwd.la*
-rwxr-xr-x  1 root  wheel   20440 Mar 16 08:03 mod_sql_passwd.so*
-rw-r--r--  1 root  wheel  198714 Mar 16 08:03 mod_tls.a
-rwxr-xr-x  1 root  wheel    1026 Mar 16 08:03 mod_tls.la*
-rwxr-xr-x  1 root  wheel  122168 Mar 16 08:03 mod_tls.so*
-rw-r--r--  1 root  wheel   39246 Mar 16 08:03 mod_wrap2.a
-rwxr-xr-x  1 root  wheel    1121 Mar 16 08:03 mod_wrap2.la*
-rwxr-xr-x  1 root  wheel   28400 Mar 16 08:03 mod_wrap2.so*
-rw-r--r--  1 root  wheel    8048 Mar 16 08:03 mod_wrap2_file.a
-rwxr-xr-x  1 root  wheel    1060 Mar 16 08:03 mod_wrap2_file.la*
-rwxr-xr-x  1 root  wheel    9040 Mar 16 08:03 mod_wrap2_file.so*

Nun sieht man, dass die zusätzlichen Module, die wir Installiert haben nicht aufgeführt werden. Die muss man im Config File proftpd.conf aktivieren:

LoadModule mod_copy.c
LoadModule mod_deflate.c
LoadModule mod_ifsession.c
LoadModule mod_ifversion.c
LoadModule mod_sftp.c
LoadModule mod_sql.c
LoadModule mod_sql_passwd.c
LoadModule mod_readme.c
LoadModule mod_tls.c
LoadModule mod_wrap2.c
LoadModule mod_wrap2_file.c

Dann geht auch das SQL Login etc.

Erstellen einer MySQL Tabelle für Logins

Innerhalb der DB Corky_admin erstellen wir diese Table:

 CREATE TABLE `ftp_login` (
  `id` int(11) NOT NULL auto_increment,
  `username` varchar(30) NOT NULL default '',
  `password` varchar(30) NOT NULL default '',
  `uid` int(11) NOT NULL default '80',
  `gid` int(11) NOT NULL default '80',
  `homedir` varchar(60) NOT NULL default '',
  `count` int(11) NOT NULL default '0',
  `last_host` varchar(50) NOT NULL default '',
  `last_ip` varchar(20) NOT NULL default '',
  `last_login` timestamp(14) NOT NULL,
  `active` tinyint(4) NOT NULL default '1',
  `shell` varchar(250) NOT NULL default '/sbin/nologin',
  PRIMARY KEY  (`id`),
  KEY `id` (`id`),
  KEY `username` (`username`),
  KEY `homedir` (`homedir`)
 ) TYPE=MyISAM COMMENT='FTP Login Informations';

in der mysql DB noch Berechtigungen geben:

MySQL User erstellen:

 INSERT INTO `user` ( `Host` , `User` , `Password` , `Select_priv` , `Insert_priv` , `Update_priv` , 
 `Delete_priv` , `Create_priv` , `Drop_priv` , `Reload_priv` , `Shutdown_priv` , `Process_priv` , `File_priv` , 
 `Grant_priv` , `References_priv` , `Index_priv` , `Alter_priv` , `Show_db_priv` , `Super_priv` , 
 `Create_tmp_table_priv` , `Lock_tables_priv` , `Execute_priv` , `Repl_slave_priv` , `Repl_client_priv` , 
 `ssl_type` , `ssl_cipher` , `x509_issuer` , `x509_subject` , `max_questions` , `max_updates` , `max_connections`
 )
 VALUES (
 'localhost', 'ftp', PASSWORD( 'yourpass' ) , 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N',
 'N', 'N', 'N', 'N', 'N', 'N', 'N', '', '', '', '', '0', '0', '0'
 );

Berechtigungen:

 INSERT INTO `tables_priv` ( `Host` , `Db` , `User` , `Table_name` , `Grantor` , `Timestamp` , `Table_priv` , 
 `Column_priv` )
 VALUES (
 'localhost', 'Corky_admin', 'ftp', 'ftp_login', '', NOW( ) , 'Select', 'Select,Insert,Update'
 );

Nach Anpassungen an den den Berechtigungen sollte man entweder die Datenbank neu starten oder die forcieren, die Privilegien-Datenbank neu zu laden:

mysqladmin -u root -p flush-privileges 
Enter password:

PAM

PAM wird bei dieser Lösung nicht benötigt, da ProFTPD dies über das lokale mod_sql abwickelt.

/etc/rc.conf

Hinzufügen

#-----------------------------------------------#
#       FTP Server                              #
#-----------------------------------------------#
proftpd_enable="YES"

ProFTP starten

/usr/local/etc/rc.d/proftpd start

Probleme

Falls es beim starten Probleme gibt, im debug level starten:

/usr/local/sbin/proftpd -n -d 9 -c /usr/local/etc/proftpd.conf

-d 9 setzt den debug level auf 9 (ziemlich brauchbar)

-n verhindert, dass der Daemon in den Hintergrund geschoben wird

-c zeigt an, welches config-file benutzt werden sollte

Wenn man einfach nicht zu ProFTP connecten kann und es keine Fehlermeldungen gibt…

Dann wie oben beschrieben im debug Modus manuell starten:

/usr/local/etc/rc.d/proftpd stop
proftpd -n -d15

Jetzt sieht man gleich live die Output Messages. Im letzten Fall sah man so die Fehler

80.74.159.5 (127.0.0.1[127.0.0.1]) - dispatching LOG_CMD command 'PASS (hidden)' to mod_sql
80.74.159.5 (127.0.0.1[127.0.0.1]) - mod_sql/4.2.4: unrecoverable backend error: (1142) UPDATE command denied to user 'ftp'@'localhost' for table 'ftp_login'
80.74.159.5 (127.0.0.1[127.0.0.1]) - mod_sql/4.2.4: check the SQLLogFile for more details

Also MySQL Table die Berechtigungen anpassen. Fehler behoben.

Es gibt noch die Möglichkeit per trace.log zu debuggen. Dort ist der Fehler jedoch nicht angezeigt worden. Einfach noch für den Fall dass ich es trotzdem mal damit versuchen möchte:

vi /usr/local/etc/proftpd.conf
TraceLog        /var/log/ftp_trace.log
Trace DEFAULT:10

ProFTP restarten und tracelog beobachten. Weitere Infos über Tracing von ProFTP

Bleibt beim Transfer hängen

Client bleibt hängen entweder direkt nach dem Login (Verzeichnis konnte nicht angezeigt werden) oder wenn man ein File rüberschieben möchte…

Filezilla Logfile (versuch Verzeichnis anzuzeigen):

Antwort:	227 Entering Passive Mode (80,74,159,5,201,12).
Befehl:	LIST -a
Antwort:	200 PORT command successful
Fehler:	Verzeichnisinhalt konnte nicht empfangen werden
Status:	Empfange Verzeichnisinhalt...
Befehl:	CWD /doc/
Fehler:	Verbindung vom Server geschlossen
Fehler:	Verzeichnisinhalt konnte nicht empfangen werden

Filezilla Logfile (versuch Datei zu transferieren):

Befehl:	TYPE A
Antwort:	250 CWD command successful
Befehl:	PASV
Antwort:	200 Type set to A
Befehl:	PORT 192,168,1,102,12,215
Antwort:	227 Entering Passive Mode (80,74,159,5,203,150).
Befehl:	STOR loggedIn.html
Antwort:	200 PORT command successful
Fehler:	Dateitransfer fehlgeschlagen
Status:	Starte Upload von H:\test\index.html
Status:	Empfange Verzeichnisinhalt...
Befehl:	TYPE I
Antwort:	425 Unable to build data connection: Connection refused

Auf dem Server ist dann jeweils immer (bzw. nicht immer, das Problem tritt randommässig auf) Schluss, sobald in den Passive Mode gewechselt wurde.

Nun ist es so, dass im Passive Modus theoretisch die Ports

1024 - 65535

benutzt werden könnten. Das Beste ist allerdings, die Passiven Ports etwas zu reduzieren

vi /usr/local/etc/proftpd.conf

machen wir mal folgende Ports (falls Zeile nicht existiert, hinzufügen):

PassivePorts 51000 52000

Nun ProFTP restarten. Ab sofort sollten nur noch die Ports in dieser Range benutzt werden. Das kann man so erkennen:

227 Entering Passive Mode (80,74,159,5,200,168).

Hier wird Port 51368 benutzt. Diese Zahl wird so berechnet: Die ersten 4 Zahlen sind die IP Adresse des Servers (80,74,159,5). Die letzten beiden Zahlen beschreiben den Port: (200*256)+168 = 51368 Weitere Infos sonst auch hier: http://wiki.filezilla-project.org/Network_Configuration

Sollte es nun immernoch Probleme geben, IPFW mal restarten.

/etc/rc.d/ipfw restart

Eventuell die Passiven Ports im ipfw eintragen, sollte es weiterhin Verbindungsprobleme geben. Ipfw hab ich mal testweise das eingetragen, aber ich glaube, das funktioniert noch nicht so…

vi /etc/ipfw.corky 
# ftp passive mode added by sunci
add 23010 allow tcp from any to me 51000-52000 in setup keep-state

Das hab ich bisher über IPFW gefunden, aber noch nichts konkretes angepasst:

[snip]

# FTP
ipfw add allow tcp from any to any 20
ipfw add allow tcp from any to any 21
ipfw add allow tcp from any to any 1024-65000 keep-state
You can just write a rule (stateful or not, as you choose) to permit outgoing connections either to the high range ports, or more generally to any port:

ipfw add allow tcp from ${myip} to any 49152-65535 keep-state out xmit ${oif}

${myip} is your local IP address range, and ${oif} is
the outward facing ethernet interface on your firewall: eg. fxp0, rl1)

hope this will help you.

und das: http://www.omnigroup.com/mailman/archive/macosx-admin/2004-March/045902.html

Fehlermeldungen

getaddrinfo ‚ftp.example.com‘ error: hostname nor servname provided, or not known

Starting proftpd.
 - getaddrinfo 'ftp.example.com' error: hostname nor servname provided, or not known

Grundsätzlich ist dieser Fehler normal und nix schlimmes. Der FTP Server funktioniert deswegen trotzdem.

Ev. Lösung: Checke /etc/hosts. Wahrscheinlich hat es dort einen falschen Eintrag drin.

ProFTPD terminating (signal 11)

Die MySQL Library wurde falsch verlinkt. Wenn man make macht und danach ein grep nach mysql, sieht man, dass er

/usr/local/lib/mysql

verlinkt statt

/usr/local/lib

Dachte, das gehe so…

root@corky(/usr/ports/ftp/proftpd-mysql)> make CONFIGURE_ARGS+=--with-libraries=/usr/local/lib

Aber es funktioniert nicht!! So wird mysql nicht kompiliert…. hab’s jetzt so gemacht.

vi work/proftpd-1.3.3d/config.h

und habe einfach die beiden zeilen lib/mysql mit lib ersetzt.

ok, nochmals versuchen. erstemal alles sauber löschen:

make deinstall
make clean
make rmconfig

nun konfigurieren.

make

jetzt in allen files lib/mysql ersetzen

grep -l "lib/mysql" *  

Make.rules Make.rules.bak config.h config.log config.status proftpd

ok, geht immernoch nicht. es liegt glaub ich nicht an der library… denn die wurde anscheindne trotzdem korrekt verlinkt. muss den fehler noch suchen.

Lösung

Das Problem lag an MySQL. Nach einem Upgrade des MySQL Clients funktionierte es wieder. Der alte Port hatte anscheinend einen Bug, der in der neuen Version behoben wurde.

Alarm clock: 14

Nach einem MySQL Server Upgrade hat ProFTP immer 1-2 Sekunden nach der ersten Connection abgebrochen bzw. den Prozess gekillt. Mit der Debug Option ergab der letzte Output „Alarm clock: 14“.

Um das Problem zu lösen, muss man einfach ProFTP neu kompilieren. Anscheinend hatte einfach eine Library nach dem MySQL Server Upgrade Probleme.

cd /usr/ports/ftp/proftpd
make deinstall
make reinstal

GnuTLS error -110: The TLS connection was non-properly terminated.

Im Config File noch folgende Zeile einfügen, dann klappts:

AllowForeignAddress        on

dispatching LOG_CMD_ERR command ‚MLSD‘ to mod_fact

Verzeichnisinhalt konnte nicht angezeigt werden. Nach der Aktivierung von TLS hat dies nicht mehr geklappt. Die Lösung war, im FTP Client den Transfermodus von Aktiv in Passiv zu wechseln.

ProFTP Alternativen

Falls es wieder mal zu (unlösbaren) Problemen kommen sollte und man einen Alternativen FTP Server benötigt, wäre vsftp ev. eine gute Option

/usr/ports/ftp/vsftpd

mysql auth:

  • andre
    #1 geschrieben von andre vor 3 Jahren

    Leider ist es nicht möglich die Config-Dateien zu sehen.

    (Es wird nach einem Login gefragt)

    Ist das gewollt?

    LG

    • Teslina
      #2 geschrieben von Teslina vor 3 Jahren

      Danke für Deinen Hinweis 🙂 Sorry, hab Deinen Kommentar irgendwie übersehen. Das Config File ist nun verfügbar – auch wenn Du es wohl inzwischen nicht mehr brauchst 😉

  • *

    Du kannst diese HTML tags verwenden: <a> <abbr> <acronym> <b> <blockquote> <cite> <code> <del> <em> <i> <q> <s> <strike> <strong>

  • Kommentar-Feed für diesen Beitrag
nach oben