Wer große Datenmengen und/oder wertvolle Daten speichern möchte, der hat sich bestimmt schon mal Gedanken darüber gemacht, was passiert, wenn mal eine Festplatte ausfällt oder einmal der Rechner streikt. Neben Lösungen wie RAID-Systemen (also mehreren verbundenen Festplatten im Computer) gibt es auch Netzwerk Lösungen. Dazu gehört zum Beispiel das Protokoll rsync
, FTP
und SSH
, sowie das Dateisystem NFS
.
Hier wird nun beschrieben wie man einen rsync Server mit Hilfe von SSH und NFS aufsetzt. Zudem zeige ich noch, wie man einen FTP Server gleich mit einrichtet.
Inhaltsverzeichnis
Was ist das alles?
Hier eine kleine Liste der obigen Protokolle und Dateisysteme mit einer kleinen Beschreibung:
rsync
– Steht für remote synchronisation Protokoll zum übertragen und synchronisieren von Dateien über ein Netzwerk, bzw. auf dem lokalen Rechner.FTP
– Steht für File Transfere Protocoll und ist einigen bestimmt über den FTP-Server geläufig. Mit ihm kann man einfach Dateien auf Servern hoch- oder herunterladen.SSH
– Steht für Secure Shell und bietet die Möglichkeit auf einem Computer ohne Bildschirm und Eingabemöglichkeiten trotzdem Dinge zu tun. Dabei wird über das Netzwerk eine remote-console geöffnet.NFS
– Steht für Network File System und ermöglicht es ein Netzlaufwerk (sog. Freigabe) unter Linux einzurichten. Man kann dann einen Ordner auf dem Server wie eine Festplatte behandeln und bequem damit arbeiten.
Vorraussetzungen für einen Server
Allgemein sollte man immer aktuelle Software verwenden (sofern man kein Windows benutzt), als OS z.B. die aktuellste Distribution und immer gleich Updates installieren. Die Hardware, wie ein Netzwerk, ein lauffähiger Computer, etc. sollte man natürlich auch haben. Zur Software komme später, hier erst mal die Hardware.
Hardware
In dieser Anleitung benutze ich eine virtuelle Maschine (über VirtualBox) mit einem Kern (@3,4GHz, jedoch auf 40% Auslastung begrenzt). Zum Einsatz kommen außerdem sagenhafte 512MB RAM, sowie immense 9MB Grafikspeicher. Als Hauptspeicher müssen gigantische 20GB Festplattenspeicher (nur für Debian sind 5GB ausreichend) her halten.
Wer also seinen alten Commodore auspackt kann damit schon einiges machen 😛 Im Ernst: Man braucht keine High-End-Maschine für einen kleinen Heimserver. Ein alter Laptop oder Papas alter Rechner reicht vollkommen aus.
Ich selbst benutze als physische Hardware ein 60€ Mainboard mit integriertem Intel Atom (dual-core@1,6GHz). Man braucht wirklich kaum Leistung und sollte für Längere Einsätze eine stromsparende Variante suchen.
Zum Einsatz kommen außerdem 2GB DDR2 RAM (wie man oben sehen kann braucht man nur 512MB) eine 160GB HDD (SATA; Kapazität nach Bedarf). Optional (z.B. zur Installation) auch ein CD/DVD Laufwerk.
Insgesamt verbraucht das System weniger als 40Watt. Mit einem RaspberryPi, BananaPi oder sonstigen Einplatinen Computern kann das natürlich unterboten werden.
Die groben Vorraussetzungen:
- CPU mit geringer Leistung (Dual-Core ist mehr als ausreichend)
- 512MB bis 1GB RAM (je nach Dekstop-Umgebung und sonstigen laufenden Anwendungen)
- <10GB Festplattenspeicher für das Linux-System
- keine extra Grafikkarte notwendig, wenn es einen integrierten/OnBoard Grafikchip gibt (der reicht vollkommen aus)
- ggf. extra Festplatte (für große Backups ratsam)
Debian – Das Betriebssystem
Zum Einsatz kommt in dieser Anleitung Debian in Version 8 (aktuell im Juli 2015), sowie die Programme (s.u.), die in den offiziellen Paketquellen verfügbar sind. Auch an rsync, SSH, etc. sollte man – auf Grund immer mal wieder auftauchender Sicherheitslücken – immer die aktuellste Version installiert haben (auch wenn es nur im lokalen Netzwerk ist).
Da ich Debian nutze, kann ich bequem per apt-get install
von den offiziellen Paketquellen installieren. Bei anderen Systemen muss man ggf. yum
, pacman
oder eine andere Paketverwaltung nehmen.
Warum Debian?
Persönlich bin ich mit Debian basierenden Systemen (Ubuntu, LinuxMint, etc.) vertraut und mit der Stabilität sehr zufrieden. Allgemein ist die Wahl des Betriebssystems aber frei (wer jedoch bereits Ubuntu oder LinuxMint nutzt, wird sich bei Debian schnell zurecht finden).
Installation
Debian kann man sich direkt von debian.org herunterladen und z.B. auf eine CD/DVD brennen oder einen bootfähigen USB-Stick erstellen. Bei der Installation kann man gleich SSH und einen Web-Server (apache) installieren, jedoch zeige ich hier auch die manuelle Installation.
Als Desktopumgebung kann man am besten XFCE oder LXDE nehmen, da diese sehr Ressourcenschonend sind (sowohl auf der HDD als auch auf CPU und RAM).
sudo – Ich root du nichts
Wenn sudo nicht von Anfang an verfügbar ist, kann man es ganz einfach installieren:
su |
Um sudo
zu aktivieren (für z.B. sudo apt-get install
) einfach folgende zwei Befehle eingeben:
su adduser deinBenutzername sudo |
Danach einmal abmelden und wieder anmelden (oder ggf. neu starten) und Befehle mit sudo ...
funktionieren.
SSH Server
Mit SSH kann man ein Terminal/eine Shell aufmachen ohne direkt am Computer/Server zu sitzen. Dies ermöglicht es bequem vom Hauptrechner aus auf dem Server zu arbeiten (ähnlich wie bei TeamViewer o.Ä. nur mit einem Terminal).
Zudem werden wir später über SSH Backups erstellen, was mit rsync ein Kinderspiel ist.
Installation
Für SSH braucht man einmal das Paket ssh
selbst und den openssh-server
:
sudo apt-get install ssh openssh-server |
Normalerweise sollte nun der Dienst bei jedem starten des Servers automatisch mit gestartet werden. Nach der Installation ist auch kein Neustart erforderlich.
Nun kann man ganz einfach im Terminal per remote auf den Server zugreifen:
ssh benutzername@192.168.x.y |
Statt der IP kann man auch den Namen des Rechners, also z.B. Debian-Server, nehmen.
Beim ersten verbinden wird man zudem informiert, dass Schlüssel ausgetauscht werden. Einfach bestätigen und los geht’s.
SSH unter Windows
Wer ab sofort lieber unter Windows arbeiten möchte, kann sich putty angucken, damit kann man SSH Verbindungen von Windows aus aufbauen. Zum testen von rsync und NFS ist jedoch Linux zu empfehlen.
FTP Server
Als nächstes kommt der FTP-Server für einfachen und bequemen Datenaustausch. Der Vorteil gegenüber SSH oder rsync ist, dass es FTP-Clients wie Sand am Meer gibt. Man kann also von jedem Betriebssystem aus (selbst vom Android-Handy aus) Dateien hoch- oder herunterladen.
Installation
Als Server nehmen wir proftpd, eine mächtige und relativ (!) einfach zu konfigurierende Software.
Einfach wieder per apt-get
installieren:
sudo apt-get install proftpd-basic |
Man wird während der Installation nach dem Betriebsmodus gefragt. Inetd
eignet sich hier ganz gut, da wir einen Heimserver aufsetzen, auf dem (wahrscheinlich) kaum was los sein wird.
Konfiguration
Alle wichtigen Einstellungen befinden sich in der Datei /etc/proftpd/proftpd.conf
. Dort kann man z.B. den ServerName
, die WelcomeMessage
, Benutzerrichtlinien, etc. festlegen.
Wichtiger Hinweis
Erlauben sie es NIEMALS, dass sich der Benutzer root
einloggen kann, das ist ein immenses Sicherheitsrisiko!
Benutzerverwaltung
Normalerweise kann man sich schon jetzt direkt mit seinem Benutzerkonto (welches man während der Installation von Debian angelegt hat) einloggen. Darüber hinaus kann man entweder einen neuen Benutzer anlegen und diesen verwenden, oder virtuelle Benutzer anlegen, die nur für proftpd nutzbar sind. Dies hat den Vorteil einer einfachen Verwaltung und man muss sich keine Gedanken um andere Dienste machen.
Einstellungen anpassen
Wenn also ein neuer Benutzer nur den FTP-Dienst nutzen können soll, fügt man folgende Zeilen in die proftpd.conf
ein, bzw. ändern sie:
# for vortual users: DefaultRoot ~ AuthOrder mod_auth_file.c mod_auth_unix.c AuthUserFile /etc/proftpd/ftpd.passwd AuthGroupFile /etc/proftpd/ftpd.group AuthPAM off RequireValidShell off |
Benutzer anlegen
Einen neuen Benutzer kann man mit Hilfe von ftpasswd
anlegen. Dabei muss man im Ordner /ect/proftpd/
sein, damit die Dateien auch dort erstellt werden.
Einfach folgendes kopieren und fertig:
cd /etc/proftpd |
Mit uid
(User-ID) wird eine eindeutige Nummer für den Benutzer festgelegt, wählen sie also immer nur eine pro Benutzer. Der /pfad/zum/home/ordner
ist der Ordner, in dem der neue Benutzer arbeiten darf. Man kann sich also einfach einen neuen erstellen und diesen dann verwenden.
Man wird nach ausführen des Befehls zudem nach einem Passwort gefragt.
Benutzer einer Gruppe hinzufügen
Damit der Benutzer sich auch einloggen kann, muss man ihm einer Gruppe hinzufügen. Dies geht ebenfalls über ftpasswd
und auch hier muss man in /etc/proftpd
sein:
sudo ftpasswd --group --name=gruppenname --gid=1002 --member=benutzername |
Wenn keine Gruppe mit dem Namen gruppenname existiert, wird eine neue angelegt. Auch hier muss die gid
(GroupID) eine eindeutige Nummer sein.
Nun kann sich der Benutzer mit dem gegebenen Passwort anmelden.
Passwort ändern
Das Passwort eines Benutzers kann man ganz einfach wie folgt ändern:
sudo ftpasswd --passwd --change-password --name benutzername |
NFS Freigabe
NFS ist ein Dateisystem, welches es erlaubt unter Linux Netzlaufwerke (sog. Freigaben) einzurichten. Bei Windows geht das ja quasi out-of-the-box, unter Linux muss man dann NFS benutzen.
Installation
Für NFS gibt es die Pakete nfs-common
und nfs-kernel-server
, welche man ganz einfach installieren kann:
sudo apt-get install nfs-common nfs-kernel-server |
Konfiguration
Wenn man keinen speziellen Ordner (z.B. /var/www
) hat, den man als Freigabe verwenden möchte, so sollte man sich einen speziellen Ordner erstellen und
die Rechte anpassen:
mkdir /pfad/zum/ordner |
In der Datei /etc/exports
kann man dann eintragen welche Ordner von welchem Rechner/welcher IP aus erreichbar sein soll, wie die Rechte sind und was an Optionen genutzt werden.
Üblicherweise reichen folgende Optionen:
rw
– Benutzer darf lesen und schreiben (ro
– nur lesen)async
– Asynchroner Datentransfer (schneller aber unsicherer gegenüber Ausfällen/Abstürzen)sync
– Synchroner Transfer (etwas langsamer, dafür sicherer)
Man kann nun z.B. folgenden Eintrag in die /etc/exports
Datei machen:
/pfad/zum/ordner 192.168.1.42(rw,async) |
Der Rechner mit der 192.168.1.42
darf nun im Ordner /pfad/zum/ordner
lesen und schreiben.
Um die Einstellungen an den NFS-Server weiter zu reichen, muss man noch folgenden Befehl ausführen:
sudo exportfs -ra |
Danach muss man ggf. Neustarten, damit der nfs-kernel-server
Dienst alles korrekt einliest und zur Verfügung stellt. Man kann ihn jedoch auch per sudo service nfs-kernel-server restart
neu starten.
Benutzern (mounten)
Man kann nun die Freigabe fast wie ein normales Laufwerk über den mount
Befehl verwenden. Dabei muss man lediglich die IP angeben, eine Authentifizierung ist nicht notwendig, da vom Server ja eine spezielle IP ausgewählt wurde.
sudo mount 192.168.1.43:/pfad/zum/ordner /media/net |
Man muss lediglich den Pfad zum Ordner aus der /etc/exports
Datei angeben und natürlich den Ordner, in den gemounted werden soll (üblicherweise erstellt man einen eigenen Ordner unter /media/
, z.B. /media/net
).
Mit dem Dateibrowser deiner Wahl kann man nun die Freigabe benutzen. Mit dem Terminal natürlich auch.
rsync Server
Rsync ist ein Protokoll zum schnellen, einfachen und sicheren Übertragen von z.B. Backups.
Installation Konfiguration
Die Installation geht einfach per:
sudo apt-get install rsync |
Backup erstellen (per SSH)
Über SSH kann man ganz einfach Backups über eine verschlüsselte Verbindung senden.
Dazu einfach rsync mit folgenden Parametern aufrufen:
rsync -av --delete /lokale/quelle -e ssh benutzername@192.168.1.43:/backup/ordner |
Dabei sind die Parameter -av
und -e
besonders wichtig:
-a
– Vereint die ParameterrlptgoD
und behält Meta-Daten der Dateien bei-v
– Zeigt alle ausgeführten Schritte an--delete
– Löscht Dateien vom Server, die nicht mehr im lokalen Verzeichnis enthalten sind-e
– Ermöglicht eine Verbindung über eine Shell (SSH)ssh
– Nutzt SSH als Verbindung--progress
– Zeigt an, wie weitrsync
mit einer Datei ist (nützlich bei großen Dateien um Fortschritt anzuzeigen)
Backup erstellen (per NFS)
Auch per NFS kann man rsync Backups erstellen. Dazu muss man natürlich erst mal NFS Freigabe mounten (s.o.).
Danach kann man ganz einfach rsync wie gerade benutzen:
rsync -av --delete /lokale/quelle /media/net |
Statt /media/net
muss natürlich der Pfad angegeben werden, in dem die Freigabe gemounted wurde.