Skip to content

FTP-Server für GeoNetwork

Linux GeoNetwork ist ein Server für Metadaten von Geodaten. Also Daten die beschreiben was in Geodaten drin ist, wo die Informationen her kommen, was man damit machen darf und vielleicht auch noch wie gut sie sind.

Vor allem natürlich, auf welches Gebiet sie sich beziehen, denn man will ja später mit dem GeoNetwork räumlich suchen können. Also ein Gebiet auf der Karte auswählen und nicht nur nach einen Stichwort suchen müssen.

Um die Daten anzubieten bringt GeoNetwork den GeoServer mit, der zu ziemlich alle gängigen Formate an Geodaten von Shape bis GeoTIFF verwerten und einheitlich als WMS und WFS in allen Karten-Projektionen ausliefern kann, damit man sich die Daten komfortabel in das GIS-Programm eigener Wahl als Layer ziehen kann.

Für die eingetragenen Benutzer des GeoNetwork-Knoten ist es aber auch praktisch, die Geodaten selbst auf den Server hochladen zu können. Dafür bietet sich FTP an, ein Protokoll fast so alt wie das Internet selbst und älter als die meisten seiner Benutzer.

Ich stand vor der Aufgabenstellung, nun dem GeoNetwork noch einen FTP-Server zur Seite zu stellen. So ein FTP-Server ist schnell installiert, die Benutzer des GeoNetwork sollten sich auch dort mit dem selben Namen und Passwort einloggen können.

Glücklicherweise ist der proftpd so flexibel, dass er sich auch gegenüber einem SQL-Server authentifizieren kann. Dazu werden Benutzer und Gruppen in zwei Tabellen gehalten. Die Gruppen hab ich mir erspart und die Tabelle nur entsprechend dem Howto angelegt und leer gelassen:

CREATE TABLE ftpgroups (
groupname character varying(30) NOT NULL,
gid integer NOT NULL,
members character varying(255)
)


Für die Benutzer war der erste Plan, die Tabelle anzulegen und einen Trigger zu definieren, der bei Insert/Update auch die Tabelle ftpusers aktualisiert. Mit einer Abfrage gehts aber noch einfacher und vor allem klappt das auch bei einfachen Datenbank-Systemen:

CREATE OR REPLACE VIEW ftpusers AS
SELECT users.id AS pkid, users.username AS userid, users.password AS passwd, 10000+users.id AS uid, NULL::integer AS gid, NULL::text AS homedir, NULL::text AS shell
FROM users;


Wie man leicht erkennen kann wird das SHA1-verschlüsselte Passwort aus der Benutzertabelle des Geonetwork in die Tabelle der FTP-Benutzer gespiegelt, die Benutzer-ID ist der Primärschlüssel plus 10000 (möglicherweise will man hier auch NULL angeben um die Vorgabe der Konfiguration verwenden zu lassen).

Eine passende Konfigurationsdatei für den proftpd lädt nun nur noch die notwendigen Module und weist den FTP-Server an nur noch den Daten aus den Tabellen zu glauben. Die Defaults für UID und GID sind meiner Installation openSUSE 12.1 entnommen und müssen bei Bedarf angepasst werden.

ServerName "CarBioCial FTP Server"
ServerType standalone
DefaultServer on
Port 21
PassivePorts 49152 65534
DebugLevel 0
SystemLog /var/log/proftpd/proftpd.log
UseIPv6 off
Umask 022
MaxInstances 30
User ftp
Group ftp
LogFormat default "%h %l %u %t \"%r\" %s %b"
LogFormat auth "%v [%P] %h %t \"%r\" %s"
LogFormat write "%h %l %u %t \"%r\" %s %b"
LoadModule mod_sql.c
LoadModule mod_sql_postgres.c
LoadModule mod_sql_passwd.c
AuthOrder mod_sql.c
RootLogin off
AuthPAM off
DefaultRoot ~
RequireValidShell off
SQLBackend postgres
SQLAuthenticate on
SQLEngine on
SQLAuthenticate users*
SQLPasswordEngine on
SQLPasswordEncoding hex
SQLAuthTypes SHA1
SQLConnectInfo geonetwork@localhost geonetwork geopasswd
SQLDefaultUID 40
SQLDefaultGID 49
SQLDefaultHomedir /data/ftp
SQLUserInfo ftpusers userid passwd uid NULL NULL NULL
SQLGroupInfo ftpgroups groupname gid members
SQLUserWhereClause true
SQLNegativeCache off
SQLLogFile /var/log/proftpd/proftpd-sql.log


Danach noch den FTP-Server neu starten und die Benutzer können sich mit ihrem universellen GDI-Passwort einloggen und dies auch im GeoNetwork selbst ändern. Diese wäre mit LDAP nicht möglich gewesen, denn GeoNetwork kann sich nicht an den LDAP-Server binden, sondern nur die Anmeldung darüber durchführen lassen.

Noch ein letzter Tipp: Was hier gebaut wurde geht auch mit so ziemlich jeder Web-Anwendung, die Benutzer in einer SQL-Datenbank speichert. Man kann also genau so einfach ein Forum oder ein Blog mit einem FTP-Server erweitern.

Trackbacks

No Trackbacks

Comments

Display comments as Linear | Threaded

No comments

Add Comment

Enclosing asterisks marks text as bold (*word*), underscore are made via _word_.
Standard emoticons like :-) and ;-) are converted to images.
Form options
tweetbackcheck