|
Es kann für Hoster durchaus sinnvoll sein, nicht jedem User ein eigenes Systemkonto zuzuteilen. Dieser Artikel zeigt Ihnen, wie Sie virtuelle FTP User in einer MySQL Datenbank speichern und diese dem System via PAM zur Verfügung stellen. Der FTP Server ist in diesem Fall vsftpd.
1.) Vorarbeiten
Als erstes wird folgender Ordner angelegt: /etc/vsftpd/vsftpd_user_conf
Weiterhin muss ein User vsftpd angelegt werden. ('adduser vsftpd') Der User braucht keine Shell und kein
Login. Dieser User benutzen wir später als Wirt für die virtuellen FTP-User.
2.) Datenbank anlegen
Nun wird eine Datenbank erstellt in welcher die virtuellen FTP Konten verwaltet werden sollen. User des Programms isp4you können diesen Punkt überspringen ab Version 2.0 sind die entsprechenden MySQL Tablespaces bereits angelegt. Zu finden in der Datenbank isp4you mit den Namen passwd und passwd_logs
-- -- Table structure for table `passwd` --
CREATE TABLE `passwd` ( `id` int(11) NOT NULL auto_increment, `dom_id` int(11) default NULL, `username` char(255) default NULL, `passwd` char(80) default NULL, `rootdir` char(255) default NULL, `status` char(1) NOT NULL default 'A', PRIMARY KEY (`id`) ) ENGINE=MyISAM;
-- -- Table structure for table `passwd_logs` --
DROP TABLE IF EXISTS `passwd_logs`; CREATE TABLE `passwd_logs` ( `id` int(11) NOT NULL auto_increment, `msg` char(255) default NULL, `user` char(255) default NULL, `pid` char(255) default NULL, `host` char(255) default NULL, `rhost` char(255) default NULL, `logtime` char(255) default NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM;
3.)
Nun in den Ordner /etc/pam.d wechslen. Hier sollte als erstes eine Kopie der Datei vsftpd erstellt werden.
cd /etc/pam.d/ cp vspftpd vsftpd_orig
In die Datei vsftpd werden die folgenden Zeilen zugefügt:
|
auth required pam_mysql.so user=<DB_USER> passwd=<DB_PASS> host=localhost db=isp4you table=passwd usercolumn=username passwdcolumn=passwd statcolumn=status crypt=3 sqllog=1 logtable=passwd_logs logmsgcolumn=msg logusercolumn=user logpidcolumn=pid loghostcolumn=host logrhostcolumn=rhost logtimecolumn=logtime
account required pam_mysql.so user=<DB_USER> passwd=<DB_PASS> host=localhost db=isp4you table=passwd usercolumn=username passwdcolumn=passwd statcolumn=status crypt=3 sqllog=1 logtable=passwd_logs logmsgcolumn=msg logusercolumn=user logpidcolumn=pid loghostcolumn=host logrhostcolumn=rhost logtimecolumn=logtime
|
Die Funktion sqllog=1 kann unter Umständen auf die Dauer eine sehr große MySQl Datenbank produzieren. Wer auf das Logging in der MySQL Datenbank verzichten möchte entfernt die Einträge ab sqllog=1
|
auth required pam_mysql.so user=<DB_USER> passwd=<DB_PASS> host=localhost db=isp4you table=passwd usercolumn=username passwdcolumn=passwd statcolumn=status crypt=3
account required pam_mysql.so user=<DB_USER> passwd=<DB_PASS> host=localhost db=isp4you table=passwd usercolumn=username passwdcolumn=passwd statcolumn=status crypt=3
|
Beschreibung der Variablen in den Tag`s:
user = Dies ist der Datenbank Benutzer, der Zugriff auf die DB isp4you hat passwd= Dies ist das zugehörige Passwort zu dem Datenbank Benutzer der Zugriff auf die DB isp4you hat host= Der Host auf dem sich die Datenbank befindet. db= Der Name der Datenbank indem die virtuellen FTP User gespeichert werden.
Da PAM ein sehr ausgefeiltes Programm ist, kann Ihre vsftpd Konfiguration unter Umständen andere Anpassungen benötigen, insbesondere wenn Sie weiterhin mit der /etc/passwd arbeiten möchten und die MySQL Datenbank nur als zusätzliche Option gelten soll muss die pam Datei anders konfiguriert werden. Statt auth required kann optional auch auth sufficient verwendet werden.
Um das Auslesen aus der MySQL Datenbank zu erzwingen, können alle unnötigen Einträge aus der vsftpd pam Datei entfernt werden. Bsp:
|
#%PAM-1.0 session optional pam_keyinit.so force revoke auth required pam_mysql.so user=<DB_USER> passwd=<DB_PASS> host=localhost db=isp4you table=passwd usercolumn=username passwdcolumn=passwd statcolumn=status crypt=3
account required pam_mysql.so user=<DB_USER> passwd=<DB_PASS> host=localhost db=isp4you table=passwd usercolumn=username passwdcolumn=passwd statcolumn=status crypt=3
|
4.) Installieren des Moduls PAM-mysql
Damit PAM gegen die MySQL Datenbank laufen kann, muss das Modul pam-mysql installiert werden.
Fedora Core: 'yum install pam_mysql' Debian und Ubuntu: 'apt-get install libpam-mysql'
Sollte Ihr Betriebssystem pam-mysql nicht im Repository vorhalten, müssen Sie es selbst kompilieren und installieren. Dazu besorgen Sie sich die Quellen von pam-mysql.sourceforge.net
Ein Blick in der Ordner /lib/security gibt Auskunft, ob das Modul bereits vorhanden ist. In diesem Ordner muss die Datei pam_mysql.so vorhanden sein.
5.) Passwörter
In unserem Beispiel verwenden wir dio Option 'crypt=3'. Das bedeutet, die Passwörter müssen MD5 verschlüsselt in der Datenbank present sein. Damit das Programm isp4you oder auch andere Perl Programme MD5 verschlüsseln können muss das CPAN Modul 'Digest::MD5 ' vorhanden sein.
6.) /etc/vsftpd/vsftpd.conf anpassen
Damit vsftpd mit virtuellen Usern arbeiten kann, muss die Datei vsftpd.conf wie folgt angepasst werden, in dem wir am Ende der Konfigurationsdatei folgendes zufügen:
pam_service_name=vsftpd nopriv_user=vsftpd guest_enable=YES guest_username=vsftpd #local_root=/home/httpd/www.$USER user_sub_token=$USER virtual_use_local_privs=YES user_config_dir=/etc/vsftpd/vsftpd_user_conf
Wenn pam_service_name und nopriv_user = vsftpd ist muss auch ein solcher Benutzer auf dem System existieren. Alternativ kann man auch statt vsftpd ftp verwenden. Der User ftp ist auf nahezu allen Distributionen bereits vorhanden. Siehe Punkt 1 Vorarbeiten.
Anschliessend den vsftpd Server neu starten.
7.) Die User in /etc/vsftpd/vsftpd_user_conf/
In dem Ordner /etc/vsftpd/vsftpd_user_conf/ werden die User und deren Zugriffrechte verwaltet. Legen Sie in dem Ordner eine neue Datei mit dem Namen des FTP User an. Die Datei muss so heissen, wie der virtuelle FTP User auch heisst, damit VSFTPD den User finden und zuordnen kann.
Beispielkonfiguration:
guest_username=test.de write_enable=YES local_root=/var/www/www.test.de/html
Dabei ist local_root das Heimatverzeichnis der FTP Users.
8.) Bezugsquellen und Links:
- Das PAM MYSQL Modul - PAM Howto - Digest::MD5 Perl Modul
Stand: August 2010 |