FTP User anlegen:
Homeverzeichnis liegt bei
/var/ftp/ftpuser
Zuerst müssen die Verzeichnisse anglegt werden:
mkdir /var/ftp/
mkdir /var/ftp/ftpuser
Standardmässig sind Lokale User logins erlaubt. Um nun den lokalen Benutzer am IPFire anzulegen, gebt folgendes in der Konsole ein
useradd ftpuser -d /var/ftp/ftpuser -s /bin/false
Passwort für den Benutzer legt man mit:
passwd ftpuser
echo ftpuser /etc/vsftpd.user_list
Am ende den vsftpd wieder starten mit:
/etc/init.d/vsftpd start
Um vsftpd die Möglichkeit zu SSL verschlüsseltem Transfer zu geben, braucht man zuerst ein SSL Zertifikat. Ich beschreibe das anhand eines selbst-signierten Zertifikats, was zwar nicht taugt, um die Echtheit des Kommunikationspartners zu bestätigen, aber dafür gratis ist.
Alle Beispiele beziehen sich auf RedHat Enterprise Linux 4 oder seine Derivate Tao 4 und CentOS 4.
Erst erstellt man das Zertifikat und den Schluessel
openssl req -new -x509 -days 365 -keyout praxis.key -out praxis.crt
Danach entfernt man die Passphrase vom Schlüssel, damit vsftpd ohne Passworteingabe starten kann
openssl rsa -in praxis.key -out praxis_clear.key
Und zuletzt gibt man sowohl das Zertifikat, als auch den Schlüssel in eine Datei, auf die vsftpd zugreifen kann:
cat praxis.crt praxis_clear.key /usr/share/ssl/certs/vsftpd.pem
Um das Zertifikat auch zu verwenden muss man nur noch folgende Zeilen in die
/etc/vsftpd/vsftpd.conf
einfuegen:
ssl_enable=YES
force_local_data_ssl=NO
force_local_logins_ssl=NO
rsa_cert_file=/usr/share/ssl/certs/vsftpd.pem
Die beiden force_...=NO
sind nötig, damit auch Clients zum FTP verbinden können, die kein SSL beherrschen. Wenn man das verhindern und nur verschlüsselten Datenverkehr ermöglichen will, braucht man nur beide auf „YES“ zu setzen.
Fehlermeldung in FileZilla
Die FTP-Verbindung wurde mit folgender Meldung von FileZilla abgebrochen:
1. Befehl: AUTH TLS
2. Antwort: 234 Proceed with negotiation.
3. Status: Initialisiere TLS…
4. Fehler: GnuTLS error -12: A TLS fatal alert has been received.
5. Fehler: Herstellen der Verbindung zum Server fehlgeschlagen
6. Status: Nächsten Versuch abwarten…
Lösung des Problems
Die Lösung bei den von mir verwendeten VSFTP unter Debian war im Filezilla-Forum recht schnell gefunden. In der Konfigurationsdatei von VSFTP lässt sich durch einen zusätzlichen Schalter die Verschlüsselung auf HIGH setzen und somit auch die Sicherheitsmaßgabe von FileZilla erfüllen.
sudo mcedit /etc/vsftpd.conf
# kryptographischen Algorithmus festlegen
ssl_ciphers=HIGH
Datei: /etc/vsftpd.conf
# Default config for vsftpd on ipfire
## Run in daemon mode
background=YES
listen=YES
#
## User to run daemon as
nopriv_user=vsftpd
#
## Ftp ports
pasv_min_port=2000
pasv_max_port=2020
connect_from_port_20=YES
listen_port=21
#
## SSL
ssl_enable=YES
# If not forced edit to NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
rsa_cert_file=/etc/vsftpd.pem
require_ssl_reuse=NO
#
## Timeout
idle_session_timeout=600
data_connection_timeout=120
#
## Information messages
ftpd_banner=Welcome on ftp.ipfire.org
dirmessage_enable=YES
#
## Allow local user access?
local_enable=YES
write_enable=YES
local_umask=022
# Chown
#chown_uploads=YES
#chown_username=whoever
# Chroot
chroot_local_user=YES
#chroot_list_enable=YES
secure_chroot_dir=/var/ftp/empty
#
## Anonymous login?
#anonymous_enable=YES
#anon_upload_enable=YES
#anon_mkdir_write_enable=YES
#
## Logging
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
#
## Timeout
idle_session_timeout=600
data_connection_timeout=120
#
## Preferences
#async_abor_enable=YES
#ascii_upload_enable=YES
#ascii_download_enable=YES
ls_recurse_enable=YES
#
## Userlist
userlist_deny=NO
userlist_enable=YES
userlist_file=/etc/vsftpd.user_list
#
## Max. failed logins
max_login_fails=3
#
# kryptographischen Algorithmus festlegen
ssl_ciphers=HIGH