Good to Know Database

CentOS 5: vsftpd mit MySQL-Benutzerdatenbank


1. Einleitung

Auf dieser Seite wird beschrieben, wie Sie den vsftpd als FTP-Server mit virtuellen FTP-Benutzern einrichten können. Die Benutzer-Accounts werden dabei in einer MySQL-Datenbank gespeichert und können somit komfortabel verwaltet werden.

2. MySQL installieren und konfigurieren

Der MySQL-Server ist im RPM-Paket mysql-server enthalten, welches Sie wie folgt installieren.

[root@centos5 ~]# yum install mysql-server

Nach der Installation starten Sie den MySQL-Daemon.

[root@centos5 ~]# service mysqld start

Aus Sicherheitsgründen sollten Sie jetzt für den MySQL-Benutzer root ein Passwort vergeben. Dazu führen Sie die folgenden Befehle aus. Anstelle von secret in den einfachen Hochkommas geben Sie das gewünschte Passwort an. Beim Aufruf des zweiten Befehls müssen Sie bereits das zuvor vergebene MySQL-Passwort eingeben. Deshalb wurde die Option -p beim zweiten Befehl hinzugefügt, wodurch die Passwort-Eingabe angezeigt wird.

[root@centos5 ~]# mysqladmin -u root password 'secret'
[root@centos5 ~]# mysqladmin -u root -h centos5 password 'secret' -p
Enter password: secret

Damit der MySQL-Daemon beim Systemstart automatisch gestartet wird, solten Sie noch den folgenden Befehl ausführen.

[root@centos5 ~]# chkconfig mysqld on

3. Benutzerdatenbank anlegen

Um die Benutzerdatenbank für vsftpd anlegen zu können, starten Sie die MySQL-Konsole und melden sich als root mit dem entsprechenden MySQL-Passwort an.

[root@centos5 ~]# mysql -u root -p
Enter password: secret
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 24
Server version: 5.0.77 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>

Zuerst erstellen Sie eine neue Datenbank mit dem Namen system.

mysql> create database if not exists system;
Query OK, 1 row affected (0.00 sec)

Wechseln Sie zur Datenbank system.

mysql> use system;
Database changed

Erstellen Sie hier die Tabelle ftpusers, in welcher später die Zugangsdaten der einzelnen FTP-Benutzern gespeichert werden.

mysql> CREATE TABLE `ftpusers` (
    ->   `id` int(11) NOT NULL auto_increment,
    ->   `username` varchar(100) NOT NULL default '',
    ->   `password` varchar(100) NOT NULL default '',
    ->   `realname` varchar(100) NOT NULL default '',
    ->   PRIMARY KEY (`id`)
    -> );
Query OK, 0 rows affected (0.10 sec)

Tragen Sie anschließend gleich einen Benutzer (hier georg) mit einem Passwort (hier secret) ein, welchen Sie für die späteren Funktionstests verwenden können.

mysql> INSERT INTO ftpusers (`username`, `password`, `realname`) VALUES ('georg', ENCRYPT('secret'), 'Georg Kainzbauer');
Query OK, 1 row affected (0.00 sec)

Hinweis: Das Passwort wird hier mit der MySQL-Funktion ENCRYPT() verschlüsselt und erst danach in der Datenbank abgelegt. Dies hat den Vorteil, dass die Passwörter nicht im Klartext gespeichert werden.

Damit die Pluggable Authentication Modules (PAM) später auf die Benutzerdatenbank zugreifen können, legen Sie einen weiteren MySQL-Benutzer (hier ftp) mit einem Passwort (hier secret) an.

mysql> create user 'ftp'@'localhost' identified by 'secret';
Query OK, 0 rows affected (0.00 sec)

Damit der MySQL-Benutzer ftp auf die Tabelle ftpusers lesend zugreifen kann, führen Sie noch den folgenden Befehl aus.

mysql> grant SELECT on system.ftpusers to 'ftp'@'localhost';
Query OK, 0 rows affected (0.00 sec)

Wenn Sie soweit alles ausgeführt haben können Sie die MySQL-Konsole beenden.

mysql> quit
Bye

4. vsftpd installieren und konfigurieren

Mit dem folgenden Befehl installieren Sie das Pakete vsftpd.

[root@centos5 ~]# yum install vsftpd

Die Konfiguration des vsftpd finden Sie in der /etc/vsftpd/vsftpd.conf.

[root@centos5 ~]# vi /etc/vsftpd/vsftpd.conf

Ändern Sie die Konfigurationsdatei so ab, dass die folgenden Direktiven enthalten sind.

anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
listen=YES
pam_service_name=vsftpd.virtual
userlist_enable=YES
tcp_wrappers=YES
virtual_use_local_privs=YES
guest_enable=YES
guest_username=ftp
user_sub_token=$USER
local_root=/home/vftp/$USER
chroot_local_user=YES
hide_ids=YES

5. Heimatverzeichnisse für die virtuellen FTP-Benutzer erstellen

Mit dem folgenden Befehl erstellen Sie für jeden virtuellen FTP-Benutzer ein eigenes Heimatverzeichnisse.

[root@centos5 ~]# mkdir -p /home/vftp/georg

Nach dem Anlegen eines neuen Heimatverzeichnisses müssen Sie den Besitzer, die Gruppe und gegebenenfalls die Zugriffsberechtigungen des neuen Heimatverzeichnisses anpassen.

[root@centos5 ~]# chown -R ftp:ftp /home/vftp/
[root@centos5 ~]# find /home/vftp -type d -exec chmod 0700 {} \;

6. PAM konfigurieren

Die Authentifizierung der virtuellen FTP-Benutzern erfolgt mit Hilfe der Pluggable Authentication Modules (PAM). Damit die Benutzeraccounts aus der MySQL-Datenbank entnommen werden können, müssen Sie das Paket pam_mysql installieren.

[root@centos5 ~]# yum install pam_mysql

Als nächstes erstellen Sie die Konfigurationsdatei /etc/pam.d/vsftpd.virtual.

[root@centos5 ~]# vi /etc/pam.d/vsftpd.virtual

Fügen Sie hier die folgenden Zeilen ein.

#%PAM-1.0
auth       required     pam_mysql.so user=ftp passwd=secret host=localhost db=system table=ftpusers usercolumn=username passwdcolumn=password crypt=1
account    required     pam_mysql.so user=ftp passwd=secret host=localhost db=system table=ftpusers usercolumn=username passwdcolumn=password crypt=1

Falls Sie andere Werte beim Erstellen der MySQL-Datenbank (hier system), der Benutzertabelle (hier ftpusers) oder einen anderen MySQL-Benutzer (hier ftp mit secret als Passwort) verwenden wollen, müssen Sie die entsprechenden Angaben anpassen.

Hinweis: Sollten Sie aus welchem Grund auch immer die Passwörter im Klartext in der Datenbank abspeichern, müssen Sie die Option crypt auf den Wert 0 setzen.

7. SELinux konfigurieren

Bei CentOS 5 ist standardmäßig SELinux (Security Enhanced Linux) aktiviert und läuft im Enforcing Modus. Falls Sie SELinux nicht deaktivert haben (siehe SELinux: SELinux deaktivieren) oder im Permissive Modus betreiben (siehe SELinux: SELinux-Betriebsmodus ändern), müssen Sie SELinux entsprechend konfigurieren.

Damit der vsftpd auf die Heimatverzeichnisse der virtuellen FTP-Benutzer zugreifen darf, müssen Sie ftp_home_dir aktivieren.

[root@centos5 ~]# setsebool -P ftp_home_dir=1

Da die virtuellen Benutzer vom vsftpd auf einen Gast-Benutzer gemappt werden und dieser als anonymer Benutzer behandelt wird, müssen Sie den anonymen FTP-Benutzern das Schreiben erlauben.

[root@centos5 ~]# setsebool -P allow_ftpd_anon_write=1

Des Weiteren müssen Sie den Security Context der Heimatverzeichnisse wie folgt anpassen.

[root@centos5 ~]# chcon -t public_content_rw_t /home/vftp/

Damit SELinux die Zugriffe auf die MySQL-Datenbank erlaubt, muss ftpd_connect_db noch aktiviert werden.

[root@centos5 ~]# setsebool -P ftpd_connect_db=1

8. Firewall konfigurieren

Bevor Sie den FTP-Server starten und eine Verbindung zu ihm aufbauen können, müssen Sie den TCP-Port 21 in der Firewall öffnen. Erstellen Sie wie folgt die notwenige Firewall-Regel.

[root@centos5 ~]# iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT

Speichern Sie die erstellte Firewall-Regel anschließend mit dem folgenden Befehl dauerhaft in die /etc/sysconfig/iptables.

[root@centos5 ~]# service iptables save

Anschließend müssen Sie noch eine Änderung an der /etc/sysconfig/iptables-config vornehmen.

[root@centos5 ~]# vi /etc/sysconfig/iptables-config

Suchen Sie hier den Eintrag IPTABLES_MODULES und erweitern diesen um das Modul ip_conntrack_ftp. Die einzelnen Module werden durch ein Leerzeichen getrennt angegeben. Sollte der Eintrag IPTABLES_MODULES noch nicht existieren, fügen Sie die folgende Zeile in die Konfigurationsdatei ein.

IPTABLES_MODULES="ip_conntrack_ftp"

Starten Sie anschließend iptables neu.

[root@centos5 ~]# service iptables restart

9. vsftpd starten

Wenn Sie alle bisher beschriebenen Schritte durchgeführt haben, starten Sie den vsftpd.

[root@centos5 ~]# service vsftpd start

Damit der vsftpd beim Systemstart automatisch gestartet wird, sollten Sie diesen in den entsprechenden Runlevels aktivieren.

[root@centos5 ~]# chkconfig vsftpd on

10. Authentifizierung testen

Um sicherzustellen, dass die Authentifizierung mit Hilfe von PAM und MySQL funktioniert, sollten Sie einen kurzen Test durchführen. Stellen Sie eine Verbindung zum FTP-Daemon her und melden sich mit einem FTP-Account an. Wenn die Authentifizierung erfolgreich war können Sie die Verbindung wieder beenden.

[root@centos5 ~]# ftp localhost
Connected to centos.
220 (vsFTPd 2.0.5)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (localhost:root): georg
331 Please specify the password.
Password: secret
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> quit
221 Goodbye.

11. Fehlersuche

Falls wider erwartens Probleme auftreten, sollten Sie die Logdateien /var/log/secure und /var/log/audit/audit.log auf Fehlermeldungen überprüfen.

[root@centos5 ~]# tail -f /var/log/secure

[root@centos5 ~]# tail -f /var/log/audit/audit.log

12. Weiterführende Tutorials

vsftpd: FTP-Benutzer in einer chroot-Umgebung einsperren
vsftpd: FTP-Daemon an ein Netzwerkinterface binden
vsftpd: FTP-Verbindungen mit TLS verschlüsseln
vsftpd: IPv4 und IPv6 aktivieren


Dieser Eintrag wurde am 11.09.2010 erstellt und zuletzt am 24.01.2016 bearbeitet.

Direkter Link zu dieser Seite: http://www.gtkdb.de/index_33_1062.html

[ Zur Startseite ]   [ Zur Kategorie ]


Valid XHTML 1.0 Transitional Valid CSS Valid Atom 1.0

© 2004-2018 by Georg Kainzbauer