js-home.org, 18.05.2012
 

nochmehr LDAP: FTP
2005-05-09Jürgen Schmitz
Unser LDAP-Server soll nun auch FTP-Zugang und -Geschwindigkeit regeln. PureFTP macht es einfach und möglich: einfach möglich.
1PureFTP installieren
2PureFTP Konfigurieren
 2.1 pure-ftpd.conf
 2.2 pureftp-ldap.conf
 2.3 inetd.conf
3LDAP einrichten
4FTP-Kennungen
 4.1 LDAP Besonderes
 4.2 Home Directory
5Nachwort und Impressum
 
1 PureFTP installieren
Nunja, das überlasse ich jedem selbst, wichtig ist dabei der LDAP-Support. Viele Distributionen bieten das bereits mit an. Ansonsten einfach selbst compilieren, sollte nicht so schwer sein (hoffe ich mal).
 
2 PureFTP Konfigurieren
PureFTP wird über die Datei /etc/pure-ftpd.conf konfigurieren - zumindest so in etwa. Tatsächlich werden die Werte daraus mit dem Befehl pure-config-args /etc/pure-ftpd.conf zu einer Befehlszeilenwurst gebaut.

Diese "Wurst" trägt man dann in der Konfiguration des inetd ein - achja, pureFTP starten wir über den inetd.

Aber stopp, LDAP fehlt noch und überhaupt werden jetzt erstmal einige Optionen im pure-ftpd.conf besprochen.

 
2.1 pure-ftpd.conf
Die meisten Optionen habe ich so gelassen, wie sie im Beispiel-File mitgeliefert wurden. Hier einige Optionen, die ich erwähnenswerte finde und zum Teil auch geändert habe. Alle anderen Optionen kann man bei Bedarf anpassen. Allerdings kann ein Teil später über LDAP gesetzt werden - individuell pro Kennung.

Teile aus pure-ftpd.conf
ChrootEveryone              no
Daemonize                   yes
AnonymousOnly               no
NoAnonymous                 yes
LDAPConfigFile              /etc/pureftp-ldap.conf


Wichtig: die Optionen PAMAuthentication und UnixAuthentication setzen wir nicht auf yes!

 
2.2 pureftp-ldap.conf
Im File pure-ftpd.conf ist uns eine Option "LDAPConfigFile" mit dem Wert "/etc/pureftp-ldap.conf" über den Weg gelaufen. Und wie man nun richtig vermuten kann, schreiben wir nun in diese Datei die Konfiguration zum Kontaktaufnahme zum LDAP-Server.

pureftp-ldap.conf
LDAPServer localhost
LDAPPort   389
LDAPBaseDN o=js-home.org
LDAPBindDN cn=Manager,o=js-home.org
LDAPBindPW JShome
LDAPDefaultUID 8002
LDAPDefaultGID 100


Server, Port, BaseDN, BindDN, Bind-Passwort muß man natürlich an die eigenen Gegebenheiten abpassen. Die UID und GID ist für diese Doku erstmal egal.

Speichern!
 
2.3 inetd.conf
So, nachdem wir jetzt die 2 Konfigurationen haben, erzeugen wir die besagte Befehlszeilenwurst daraus. Wichtig: Ändert man an der pure-ftpd.conf Datei etwas, so muß man diese Wurst immer neu erzeugen.
pure-config-args /etc/pure-ftpd.conf

Bei mir gibt das sowas:
pure-config-args Ausgabe, Zeilenumbuch wegen Lesbarkeit eingefügt
-c 50 -B -C 8 -D -E -f ftp -H -I 15 -l ldap:/etc/pureftp-ldap.conf 
-L 2000:8 -m 4 -s -U 133:022 -u 100 -w -i -g /var/run/pure-ftpd.pid -k 90 -Z


Diese Optionen müssen nun also bei jeder FTP-Verbindung dem ftpd übergeben werden. Das geschieht, wie gesagt, per inetd.

Es muß also eine Zeile in der /etc/inetd.conf ergänzt bzw. geändert werden:

Zeile in inetd.conf
ftp stream tcp nowait root /usr/sbin/tcpd pure-ftpd <Optionen>

An stelle der "<Optionen>" schreibt man nun die Ausgabe des Befehls pure-config-args.

Speichern, inetd zum Einlesen seiner Konfiguration bringen (SIGHUP).

Theoretisch sollte man jetzt schon per ftp zum Server connecten können. Aber der Login dürfte noch nicht klappen.
 
3 LDAP einrichten
Was nun noch fehlt sind Kennungen im LDAP, für die der PureFTP den Zugang erlaubt. Jeder Eintrag vom Typ "posixAccount" darf connecten. Das ist aber sehr unflexibel und zudem werden so nicht alle Möglichkeiten genutzt.

Wir benötigen deshalb das Schema "pureftpd.schema". Leider ist es nicht unbedingt immer bei Distributionen dabei. Aber das findet man auf der Homepage vom pureftpd (entweder im CVS oder im Source-File). Dieses kopieren wir noch /etc/openldap/schema zu den anderen Schemata.

Dann müssen wir dem LDAP-Server das noch bekannt geben, am einfachsten in die slapd.conf die Zeile
include         /etc/openldap/schema/pureftpd.schema

eintragen und den LDAP-Server neu starten.
 
4 FTP-Kennungen
Auch hier hilft uns der in anderen Beschreibungen erwähnte phpLDAPadmin weiter.

Wir legen erstmal eine Hierarchie für unsere FTP-Kennungen an. Theoretisch hätten wir die auch in die LDAPBaseDN eintragen müssen - aber das hat bei mir nicht richtig geklappt; das beideutet leider auch, daß jeder posixAccount per Default zum FTP-Server connecten kann. Solange wir das aber von Anfang an beachten und nicht gleich die ganze NIS-Tabelle ins LDAP importieren, sollte das gehen (außerdem fehlt dazu ja noch die Doku hier - wird sie wohl auch für immer, NIS brauch ich nun wirklich nicht).

Gut, legen wir eine kleine Hierarchie an:
Eine "Organizational Unit" (ou) z.B. mit dem Namen "users".
Das ergibt also nun ein Objekt "ou=users,o=js-home.org". Natürlich kann man die FTP-Kennungen auch in die für den Apachen erzeugte Hierarchie oder sogar ins Adressbuch aufnehmen.

In dieser Unit erzeugen wir nun einen "posixAccout" (endlich, phpLDAPadmin nennt ihn "User Account"). Der braucht einen User name, ein Passwort, ein Home Directory, eine UID Number und eine Group.
  • User name ist die Login-Kennung
  • Passwort ist das Zugangspasswort, ich speichere die immer im Klartext ab
  • Home Directory ist das Home des Users, dazu sage ich später mehr, erstmal sollte ein typische /home/loginname reichen.
  • UID Number wäre die UID aus der /etc/passwd, die brauchen wir hier aber nicht, da wir mit der LDAPDefaultUID arbeiten. Läßt man das weg, sollte hier eine sinnvolle UID rein, die zur System paßt. Wenn nicht, muß irgendeine Zahl rein (aber nicht 0!!).
  • Group wäre eine Unix-Group. Die müßte man aber im LDAP haben, denn darauf bezieht sie sich - haben wir nicht, also irgendeinen Wert nehmen.


Ist das angelegt, sollte man jetzt mit dieser Kennung per ftp connecten können.
 
4.1 LDAP Besonderes
Nun geht aber noch mehr, das war ja auch der Sinn des ganzen (neben der Möglichkeit, FTP-Zugang auf bestimmte Kennungen einzuschränken bzw. unabhängig vom Unix zu ermöglichen).

Dem eben erzeugen Login muß nun das Schema "PureFTPdUser" hinzugefügt werden.

Damit können nun Attribute für PureFTP dem Login zugeteilt werden. Diese beginnen alle mit "FTP", also z.B. "FTPDownloadBandwidth". Die meisten sind selbsterklärend oder ansonsten in der pureftp-Doku beschrieben. Einzig "FTPStatus" ist eine Beachtung wert:

Über diesen kann man einen Login für FTP sperren. Dazu muß das Attribut mit dem Wert "disabled" gefüllt werden. Alle anderen Werte, auch gar keiner, erlauben ein Login!
 
4.2 Home Directory
Weiter oben wurde kurz erwähnt, daß mit dem Home Directory noch mehr möglich ist. Man kann nämlich ein Change Root damit bewirken.

Gibt man ein normales Verzeichnis an, z.B. /home/ftpuser, dann darf der User ganz normal per FTP im System rumlaufen, also auch in andere Verzeichnisse außerdem seines Homes wechseln wie z.B. /etc oder /bin.

Alernativ kann man für jeden User getrennt ein Change Root bewirken. Dann kann der User sein Home nicht mehr verlassen und nur Verzeichnisse in seinem Home besuchen. Dazu muß man nur ein "/./" dem Home-Verzeichnis-Eintrag anhängen:
/home/ftpuser/./
 
5 Nachwort und Impressum
So, ich hoffe, das hat etwas geholfen. Im Forum gibts Raum für Fragen und Diskussionen - bitte nur dort. eMails sind natürlich willkommen, bei Fragen werde ich jedoch jeden bitten, diese im Forum zu stellen, damit auch andere Leute, die auf das Stoßen, schnell zur Lösung finden.

Inzwischen gibts auch weitere Text, um den aufgebauten LDAP-Server für weitere Funktionen zu nutzen. Einfach mal in der Wissensbasis stöbern!

© 2005 js-home.org, alle Rechte liegen beim Autor; Kopien, auch auszugsweise, nur mit Genehmigung; Verlinkung bitte immer nur auf das Inhaltsverzeichnis.

Achja, wer mag, darf mal auf einiger der Banner klicken - am besten mal jedes ;-) und wer weiß, vielleicht kauft man ja dort dann was...




All actions are logged, copyright © JS