FTP und WebDAV für euren Ubuntu-Server

server tutorial
Bisher unterstützt unser Server nur die Dateifreigabe per Samba fürs lokale Windows-Netzwerk, um aber Dateien auch übers Internet vom Server zu erreichen ist dieses Protokoll ein wenig ungeeignet. Deshalb folgen hier die Anleitungen für die Einrichtung eines FTP-Servers, sowie der Dateifreigabe per WebDAV. Als FTP-Server kommt vsftpd zum Einsatz, da er erstens sehr sicher und zweitens relativ einfach einzurichten ist. WebDAV, eine Erweiterung des HTTP-Protokolls, ist vor allem deshalb interessant, da man damit auch über das Internet wie mit einer lokalen Festplatte arbeiten kann.


FTP Server - vsftpd

Installation ganz einfach per sudo apt-get install vsftpd. Anschließend sorgen wir dafür das man sich nur Anmelden kann, wenn man einen Benutzernamen samt Passwort besitzt:
sudo nano /etc/vsftpd.conf
Dort suchen und ändern wir die Zeile
anonymous_enable=YES
zu
anonymous_enable=NO
und wir entfernen das '#' vor den Zeilen
local_enable=YES

chroot_local_user=YES

write_enable=YES

Das führt dazu das sich Anonyme Benutzer nicht mehr einloggen können, und lokal eingerichtete Benutzer eben dies tun zu können, aber nur auf ihre Home-Verzeichnisse beschränkt werden. Die letzte Zeile sorgt dafür das auch Dateien heraufgeladen werden können.

Einziges Problem an der Sache ist, das jetzt zwar alle Benutzer auf ihre Home-Verzeichnisse zugreifen können, das public-Verzeichnis aber per FTP nicht erreichbar ist. Aber wie es für jedes Problem mindestens eine Lösung gibt, gibt es auch hier eine. Wir nutzen dazu die Möglichkeit ein Verzeichnis einfach in ein anderes Verzeichnis zu mounten. Der passende Befehl dazu ist mount --bind /original/verzeichnis /neues/verzeichnis.

Dazu muss allerdings zuerst in jedem Benutzerverzeichnis ein neuer Ordner angelegt und der Ordner dann gemountet werden. Um das ganze etwas zu vereinfachen bedienen wir uns eines kleinen Shell-Skriptes, welches in allen Benutzer-Ordnern ein Verzeichnis public erzeugt und anschließend den Inhalt von /srv/public darin mountet (Ist zugegebener Maßen nicht der beste Programmierstil, aber es funktioniert Wink ).

Die Handhabung ist recht einfach:

Das Skript herunterladen
wget http://www.zeroathome.de/files/mount_public.sh

In den Ordner '/usr/local/bin' kopieren
sudo mv mount_public.sh /usr/local/bin/

Das Skript zum Startprozeß hinzufügen. Dazu editiern wir die Datei '/etc/rc.local' und fügen vor 'exit 0' diese Zeile ein:
/usr/local/bin/mount_public.sh
Um das ganze sofort zu aktivieren ist ein sudo /usr/local/bin/mount_public.sh
Fertig. Nun sollte nach dem Einloggen per FTP auf dem Server der Zugriff auf das 'public'-Verzeichnis möglich sein. Ausserdem wird bei jedem Startvorgang geprüft ob neue Benutzer-Verzeichnisse vorhanden sind und falls ja, der public-Ordner darin gemountet.

Optional: SSL-Verschlüsseltes FTP

Wer den FTP-Server über das Internet nutzen möchte, der sollte über eine Verschlüsselung nachdenken, denn theoretisch kann bei unverschlüsseltem Zugang jeder zum Beispiel das Passwort im Klartext mitlesen. Und es ist doch so einfach (wenn euer FTP-Client FTP über SSL unterstützt Wink ):

Zuerst das Zertifikat anlegen:

openssl req -new -x509 -days 1825 -keyout server.key -out server.crt wie beim Webserver mit einer Gültigkeit von 5 Jahren.
Hier sind wieder einige Angaben zu machen, bei 'Common Name' am besten den DynDNS-Hostnamen den ihr verwendet angeben.
Dann entfernen wir das Passwort vom Keyfile, damit vsftpd nicht danach fragen muss,
openssl rsa -in server.key -out server_clear.key
packen das ganze in eine handliche Datei,
cat server.crt server_clear.key > vsftpd.pem
kopieren das ganze an einen gut erreichbaren Ort,
sudo cp vsftpd.pem /etc/ssl/certs/
und ändern in der '/etc/vsftpd.conf' diese vier Zeilen:

ssl_enable=YES
force_local_data_ssl=NO
force_local_logins_ssl=NO
rsa_cert_file=/etc/ssl/certs/vsftpd.pem

vsftpd neu starten mit sudo /etc/init.d/vsftpd restart und fertig.
Achtung: In dieser Konfiguration sind sowohl Logins über SSL als auch unverschlüsselte möglich, falls ihr nur SSL-Logins zulassen wollt, setzt die beiden Variablen 'force_local_data_ssl' und 'force_local_logins_ssl' beide auf 'YES'.
Clients die FTP over SSL beherrschen sind zum Beispiel: Gftp, Filezilla, FireFTP (Firefox-Addon)...

WebDAV mit Apache

Eine weitere Möglichkeit Dateien im Netzwerk freizugeben stellt WebDAV dar, das passende Modul für den Apachen wird bereits bei seiner Installation mit auf die Platte gehoben und so müssen nur noch die Module geladen werden:
sudo a2enmod dav
sudo a2enmod dav_fs
danach ein sudo /etc/init.d/apache2 force-reload und es kann weitergehen:
Um für die Authentifizierung die Linux-Benutzerkonten zu benutzen fehlt noch ein Apache-Modul:
sudo apt-get install libapache2-mod-auth-pam
welches mit sudo a2enmod auth_pam eingebunden wird.
Wir legen als Beispiel lediglich eine Freigabe unseres public-Verzeichnisses an, dazu ist es nötig den Benutzer 'www-data' zur Gruppe 'users' hinzuzufügen um Schreibzugriff auf das Verzeichnis zu gewähren und zur Gruppe 'shadow' um den Zugriff auf die lokale Benutzerdatenbank zu ermöglichen.
sudo adduser www-data users
sudo adduser www-data shadow

Um sicheren Zugang zu unseren Daten zu erhalten verpassen wir dem Server noch eine hübsche Verschlüsselung per SSL. Dazu erzeugen wir zuerst das Zertifikat (normalerweise muss man diese käuflich erwerben, aber für den Hausgebrauch geht es auch so:
sudo apache2-ssl-certificate -days 1825 erzeugt ein Zertifikat das 5 Jahre gültig ist (liegt in /etc/apache2/ssl/apache.pem).
Dazu müssen noch ein paar Angaben gemacht werden, die alle bis auf eine egal sind. Nicht egal ist die Vorletzte, dort sollte der Name eures Servers stehen den ihr im Netzwerk verwendet um darauf zuzugreifen.

Country Name (2 letter code) [GB]:DE
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:Gotham City
Organization Name (eg, company; recommended) []:zerocom
Organizational Unit Name (eg, section) []:
server name (eg. ssl.domain.tld; required!!!) []:server
Email Address []:zero@zeroathome.de

Dann kopieren wir die aktuelle Apache-Konfiguration,
sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/ssl

In den ersten beiden Zeilen der ssl-Datei sollte es heißen:

NameVirtualHost *:443
<VirtualHost *:443>

Am Ende der Datei, aber vor der Zeile </Virtualhost> sollte das hier stehen:

SSLEngine On
SSLCertificateFile /etc/apache2/ssl/apache.pem
Alias /dav "/srv/public/"
<Directory "/srv/public/">
DAV on
Options +Indexes
AuthType Basic
AuthName "WebDAV Verzeichnis"
AuthPAM_Enabled On
AuthPAM_FallThrough Off
Require valid-user
SSLRequireSSL
</Directory>

Anschließend fügt man den SSL-Port noch der Konfiguration hinzu mit
echo "Listen 443" | sudo tee -a /etc/apache2/ports.conf

Nach einem Apache-Neustart mit sudo /etc/init.d/apache2 force-reload sollte dann die normale Website sowohl über http://[serveradresse], als auch über https://[serveradresse] erreichbar sein, das WebDAV-Verzeichnis aber nur über die SSL-Verschlüsselte Verbindung. Über die Adresse 'https://[serveradresse]/dav' ist nun das public-Verzeichnis im Netzwerk aufzurufen. Das sollte unter allen gängigen Betriebsystemen (Linux, BSD, MacOS, Windows ab 98) möglich sein.

Ich bin auch gerne bereit auf Wünsche den Server betreffend einzugehen, was möchtet ihr gerne auf eurem Server haben? Welcher Dienst darf in keinem Netzwerk fehlen? Ab in die Kommentare damit!

Teil 1:

Installation des Grundsystems mit grafischer Oberfläche - Xubuntu 6.06

Teil 2:

Grundeinrichtung des Systems - Netzwerk, Updates, Midnight Commander, SSH-Server

Teil 3:

Samba - Dateiserver unter Linux

Teil 4:

LAMP - Linux-Apach-MySQL-PHP

Teil 5:

Web-Anwendungen für den Server - Jinzora und Torrentflux-b4rt

Teil 6:

FTP und WebDAV für euren Ubuntu-Server

Teil 7:

Mailserver mit Postfix, Dovecot und Getmail

21 Gedanken zu „FTP und WebDAV für euren Ubuntu-Server

  1. Basti

    Schönes Tutorial! Mit Webdav wollt ich eh mal was machen. Habe bisher immer die Standardindizes von Apache und co. verwendet.

  2. Steiner

    Was hälst du von einem Tut für WAKE ON LAN und VNC?

    Server ist ja für Neulinge gedacht, also macht VNC einiges leichter! Server in die Abestellkammer ohne Display und Tastatur und gut is…
    WAKE ON LAN ist cool, wenn der Server nicht die ganze Zeit laufen soll, wegen Stromkosten etc.

    Gute Idee? Würde mich persönlich auch drüber freuen!

  3. zero

    Wak-on-lan ok, werd ich demnächst mal aufgreifen…aber VNC?? Sag mal ehrlich, was kannst du über VNC erledigen, was über ssh nicht geht?? Wenn du mir einen richtig guten Grund nennst denk ich drüber nach…

  4. Steiner

    Ja natürlich lässt sich über ssh alles gut erledigen! Aber jemand, der nicht so sehr mit ssh vertraut ist und z.B. mal eben schnell eine Freigabe erstellen möchte, kann das besser über vnc als immer die Befehle für Datei-Freigaben rauszusuchen(Rechte etc…)!

  5. zero

    Selbst wenn ich erst nen Zettel aus der untersten Schublade kramen muss, bin ich auf der Konsole immer noch schneller, als wenn ich das über GUI mache…und nein, ich habe nie einen Schreibmaschinenkurs besucht 😉
    Zudem bleibt die Konfiguration sauber und genau so wie du sie haben willst und nicht wie das Programm das gerne möchte, was im Übrigen die Fehlersuche erheblich erleichtert falls doch mal was nicht stimmt.
    Einspruch abgewiesen! 🙂

  6. Steiner

    Ja alles klar! Jedem seine Meinung!
    Ich bleib dabei, der erste Server, der je im Leben von einem aus dem Windows-Lager kommenden User, der nicht so viel Erfahrung hat, per GUI administreirt werden kann, ist einfach komfortabler!

    Ich dachte darum geht es im Prinzip auch bei deinem Tut!

    Aber wie gesagt, du hast vlt nicht den Sinn für einige Fehler oder Fragen, die neue Linux-User haben! Du bist zu sehr in der Materie und hast vlt zu viel Know-How, um dir vorstellen zu können, dass es so evtl doch einfacher wäre!

  7. zero

    Ich weis nur eins: Wenn ich am Anfang weniger oft auf die GUI gesetzt hätte, wäre ich heute um einiges schlauer was Linux anbetrifft.
    Aber gut…ich werd demnächst mal ein paar Zeilen zu VNC schreiben, aber ich denke nicht im Rahmen des Server-Tutorials (das ich im übrigen eh gerade umbaue wg. Ubuntu 8.04 uvm…)

  8. Sven

    Ein DC-Server Tut wäre auch mal nicht schlecht…
    Wenn dafür mal zwischendrin Zeit ist.

  9. Georg

    Das Turorial ist ziemlich gut, aber …

    1) du solltest alle Teile durchgehend verlinken, denn nur in Teil 3 sind noch alle folgenden Teile vorhanden.

    2) würde ich mich über einen Printserver-Teil freuen. Klar, krieg ich auch selber irgendwie hin, aber ich finde, dass du eine sehr angenehme Schreibe hast. Also bitte weitermachen 🙂

  10. zero

    @ Georg
    Danke erstmal für den Kommentar! Dann Entschuldigung für die späte Antwort 🙂

    Hab die Verlinkungen mal Aktualisiert (das sind so die Dinge für die man gerne mal zu faul ist)

    Print-Server wäre eine Idee, würde ich aber wenn dann in den neuen Guide integrieren wollen, wofür ich leider im Moment nicht die Zeit habe. Verweisen kann ich dich evtl auf meinen PDF-Printserver-Artikel (http://www.zeroathome.de/wordpress/pdf-netzwerk-drucker-unter-linux-mit-cups-pdf/) oder auf das ubuntuusers.de Wiki wo cups auch behandelt wird.
    Falls ich doch demnächst dazu kommen sollte nochmal ein wenig schreiberisch tätig zu werden, erfährst du es allerings als erster!

  11. sascha

    Hallo, super anleitungen hier!!!

    Wie wärs denn mit einem VDR Server???
    Das würde mich sehr interessieren!

  12. Robert

    Hallo Zero,
    Sehr schönes Tutorial, sowas habe ich schon lange gesucht. Hab immer damit gekämpft. Endlich!
    Mich würde noch interessieren wie man einen SVN-Server mit WebDAV über https:// einrichtet. Aber hab jetzt mal genug zu tun! 🙂
    Lg,
    Robert

  13. Uwe

    Hallo Zero,

    sehr schönes Tutorial. Leider ist für mich an folgender Stelle Schluss:

    „sudo apache2-ssl-certificate -days 1825 erzeugt ein Zertifikat das 5 Jahre gültig ist (liegt in /etc/apache2/ssl/apache.pem)“

    Grund: „sudo: apache2-ssl-certificate: command not found“

    Weiterhin: unter /etc/apche2/ gibt es keinen Unterordner Namens „ssl“
    Installiert habe ich ubuntu 10.04 Server lts.

    Eine Suche via Google brachte mich jetzt auch nicht wirklich weiter, openSSL ist installiert, womöglich wird der Apache bei Ubuntu nicht mehr mit SSL kompiliert.

    Ich gebe zu, ich bin noch ein Newbie (Neudeutsch), aber lernen möchte ich das schon. Auch wenn ich bereits 49 Jahre alt bin.
    Kannst Du mir einen Tipp geben, wie ich hier weiterkomme?

    Danke und Gruß
    Uwe

  14. Uwe

    vielen Dank für die Info. Ich werde mich am Wochenende mal daran setzen und versuchen, ob ich damit weiterkomme.

    Viele Grüße

    Uwe

  15. Uwe

    so, nun funktioniert WebDAV mit SSL. Vielen Dank nochmal für die Unterstützung.
    Super Tutorial.

    Viele Grüße

    Uwe

  16. Rüdiger

    Hallo,
    klasse Anleitungen postest Du 🙂

    Vielen Dank 🙂

    Das Script für vsftpd befindet sich leider nicht mehr auf deinem Server, oder es ist umgezogen.
    http://www.zeroathome.de/files/mount_public.sh

    Wäre es bitte möglich, dies wieder online zu stellen?
    Dankeschön

    Das PDF für den Server-Guide ist klasse. Damit habe ich meinen Server aufgesetzt 🙂

    Ist es nicht auch möglich, daß User mit Admin-Rechten per FTP auf den kompletten Rechner zugreifen kann?
    Ich habe auf meinem Server über FTP nur Zugriff auf das Home-Verzeichnis 🙁

    Vielen Dank für die tollen Anleitungen 🙂

  17. Markus

    Danke für den guide!
    hab nur ein Problem: SSL will einfach nicht laufen. Habs mit Ubuntu 10.04 und 10.10 probiert.
    Immer kommt die Fehlermeldung im Firefox „SSL hat einen Eintrag erhalten, der die maximal erlaubte Länge überschritten hat.
    (Fehlercode: ssl_error_rx_record_too_long)

    Hast du eine Idee, was ich falsch mache?

  18. Markus

    hat sich erledigt 🙂
    zu guter letzt hat:
    sudo a2ensite ssl
    sudo /etc/init.d/apache2 force-reload
    für abhilfe gesorgt.

    danke für diesen tollen guide. Markus

Kommentare sind geschlossen.