Linux Tool der Woche: CurlFtpFS

Die Aufgabe gehört zum Alltag jedes Webdesigners: Dateien einer Seite werden einzeln oder auch als komplettes Projekt auf einen Webserver geladen. Dazu wird auch heute noch in den allermeisten Fällen FTP verwendet, das File Transfer Protocol. Einige Webdesignpakete wie Dreamweaver oder Quanta bieten dazu eine Projektverwaltung, die selbst feststellt, welche Dateien lokal verändert wurden und diese transferiert. Andere Editoren bieten diese praktische Funktionen nicht, also muss das «hochladen» der Dateien mit einem eigenen FTP-Programm erledigt werden. Besonders beliebt ist Filezilla! Es ist ausgereift, zuverlässig, schnell und steht für verschiedene Plattformen zur Verfügung. Mit wenigen Klicks ist die Verbindung zum Server hergestellt und der Ordner mit den zu transferierenden Dateien ausgewählt. Ähnlich wie Webbrowser bietet Filezilla Lesezeichen, die das Speichern aller Verbindungsdaten ermöglichen. Wer tagtäglich mit verschiedenen Webprojekten zu tun hat, weiss wie wertvoll diese Funktion ist!

Bleiben wir noch einem Moment bei Filezilla: soll eine Datei editiert werden, die auf eimem Webserber abgelegt ist, erlaubt Filezilla sogar eine Art «Remote Edit»: die Datei wird dabei automatisch in einen temporären Ordner kopiert und mit einem wählbaren Editor geöffnet. Sobald die Datei gespeichert oder der Editor beendet wird, fragt Filezilla, ob die veränderte Datei wieder zurück auf den Server verschoben werden soll. Alle diese Aufgaben erledigt Filezilla schnell und sicher, das soll noch einmal betont werden, bevor es weitergeht. Ich möchte nämliche jetzt auf eine Eigenschaft eingehen, die bei jedem UNIX System zu finden ist. Es geht um das «Einhängen» (mount) von externen, resp. entfernten Dateisystemen in das lokale Dateisysstem des eigenen Rechners. Linux kann mit einem entsprechend konfigurierten Kernel die verschiedensten (eigentlich alle) Dateisysteme einbinden: SMB/Samba, NFS (SUN), Platten mit NTFS oder VFAT, SCSI, etc. Warum nicht auch FTP? Das praktisch daran wäre, dass die entfernten Dateien in einem lokalen Verzeichnis wie gewohnt bearbeitet werden könnten. Das Synchronisieren mit dem FTP-Server würde im Hintergrund vom Dateisystem-Treiber erledigt.

Und genau solche Programme gibt es – mehrere sogar. Im folgenden soll eines der einfachsten davon als Linux Tool der Woche vorgestellt werden: CurlFtpFS. CurlFtpFS ist ein Dateisystem-Treiber, der zahlreiche Funktionen bietet, aber dennoch durch seine Einfachheit besticht. CurlFtpFS kann sogar mehrere FTP Ordner an verschiedenen Stellen im eigenen Verzeichnisbaum auf der lokalen Festplatte einbinden. Ein vorgängiges Anpassen der fstab Datei ist nicht erforderlich. CurlFtpFS unterstützt ferner SSLv3 und TLSv1 für sichere Verbindungen, sowie HTTP Tunneling. Wenn die Verbindung zum Server abbricht, wird sie von CurlFtpFS automatisch wiederhergestellt!

Nach der Installation kann CurlFtpFS one weitere Vorbereitung genutzt werden. Das folgende Kommando macht die Dateien eines Servers im lokalen Verzeichnis /mnt/ftp verfügbar:

# curlftpfs -o allow_other user:password@ftp.server.com /mnt/ftp

Wichtig: das funktioniert nur mit root Rechten. Ein einfacher Weg, um das Tool auch als User verwenden zu können, besteht darin, sudo zu verwenden. Wenn CurlFtpFS keine Fehler meldet können nun die Dateien des Servers mit allen zur Verfügung stehenden Tools editiert werden. Zum Bearbeiten einer Datei mit vi wird einfach folgendes eingegeben:

# vi /mnt/ftp/index.html

Und um eine Datei auf den Server zu kopieren genügt folgendes:

# cp /home/bstocker/news.php /mnt/ftp/

CurlFtpFS kennt eine Myriade an Kommandozeilen Optionen, die in der Manpage vorbildlich dokumentiert sind. Einige wenige davon sollen im folgende vorgestellt werden:

Um sicherzustellen, dass Dateien problemlos auch ohne root Rechte verwendet werden können, kann die folgende Option mitgegeben werden: -o allow_other. Wird diese Option weggelassen, kann nur der Benutzer auf die Dateien zugreifen, der curlftpfs ausgeführt hat (hier root). allow_other ist praktisch, wenn CurlFtpFS als root ausgeführt wurde, denn nun können auch andere Benutzer auf das «gemountete» Verzeichnis zugreifen. Um die Dateien einem bestimmten Benutzer zuzuweisen, können zusätzlich die beiden folgenden Schalter genutzt werden: -o uid=nnna und -o gid=nnn. Um die UID (User ID), resp. GID (Gruppen ID) eines Benutzers herauszufinden, kann folgendes Kommando verwendet werden:

id -u
id -g

Ein weiteres Problem ist die Tatsache, dass das Passwort für die FTP-Verbindung in der Kommandozeile mitgegeben wird. Damit taucht es auch in der Prozessliste auf und wird im History der Shell gespeichert. Besser ist es, die Verbindungsdaten in einer geschützten Datei abzulegen. Für CurlFtpFS wird dazu im Stammverzeichnis eine Datei .netrc erstellt und mit dem Kommando chmod 600 .netrc vor neugierigen Blicken geschützt. Die Verbindungsdaten eines Servers werden nun wie folgt in dieser Datei gespeichert:

machine ftp.server.com
login ftpuser
password bigbird

Nun können Benutzer und Passwort bei der Verbindung weggelassen werden: curlftpfs -o …ftp.server.com /mnt/ftp.

Wie wird CurlFtpFS wieder deaktiviert, resp. ein Mount wieder entfernt. Ein einfacher Weg besteht darin, das umount Kommando zu verwenden. Dieses akzeptiert als Argument ein Device File (was wir nicht haben) oder das Verzeichnis, das als Mountpoint diente. Also geben wir als root ein: umount /mnt/ftp.

Wie zuverlässig ist CurlFtpFS? Beim Zugriff auf einen FTP-Server können schliesslich alle möglichen Dinge schief laufen. Ich habe CurlFtpFS mehrere Wochen intensiv für ein Projekte genutzt und mehrere FTP-Verzeichnisse eingebunden. Eine Störung gab es nur einmal, aber da lag das Problem nicht bei CurlFtpFS – der Server verschwand einfach infolge eines Netzwerkausfalles! CurlFtpFS ist ein sehr praktische Lösung, wenn oft mit FTP gearbeitet wird und wenn auf umfangreiche Software wie der Gnome Filesystem Erweiterungen verzichtet werden soll.

Wichtige Ergänzung: CurlFtpFS kann auch ohne root Rechte verwendet werden, wenn die betroffenen Benutzer der Gruppe fuse zugewiesen werden. Siehe hier. Auf meinem Arch Linux hat dies leider nicht richtig funktioniert, deshalb habe ich hier den Umweg über sudo/root vorgeschlagen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.