Zum Inhalt springen

Sichere Synchronisation mit rsync unter Windows

  • Fabian Ziegler 
  • Zuletzt aktualisiert am
  • Lesezeit ca. 6 min.

rsync wird unter Linux-Systemen gerne zur Synchronisation oder zum Backup von Dateien verwendet. Hierbei besticht es durch einfache Verwendung und effiziente Nutzung der Bandbreite. Dank cygwin kann rsync auch unter Windows eingesetzt werden.

Linux-Werkzeuge unter Windows zu verwenden haben hierbei mehrere Vorteile gegenüber kommerziellen Synchronisations-Lösungen:

  • Keinerlei Lizenzkosten
  • Einsatz im heterogenen Netzwerk möglich
  • Meist gute Dokumentation
  • Oftmals existiert eine Vielzahl an Tools

Die Idee/Notwendigkeit rsync unter Windows zu verwenden entstand hierbei bei der Suche nach einer brauchbaren, aber kostengünstigen Lösung für eine Backupsystem für Windows.

Läuft rsync unter Windows kann somit ein Linux-Rechner als Backupsystem dienen. Die gespeicherten Daten könnten per Samba direkt wieder freigegeben werden, wodurch das Zurückspielen zur Kleinigkeit wird (vor allem im Vergleich zu Lösungen mit Bandlaufwerken).

Trotzdem soll der Artikel nicht primär beschreiben, wie rsnapshot unter Windows eingerichtet werden kann. Vielmehr soll eine allgemeine Anleitung zur Installation von rsync, geschützt durch einen OpenSSH-Server, entstehen. Am Ende des Artikels werden allerdings einige Besonderheiten gelistet, die in Kombination mit rsnapshot auftreten können.

cygwin installieren und konfigurieren

cygwin ist eine Nachbildung der Linux-API in einer DLL. Es bietet sich also an um beliebige Programme, die unter Linux funktionieren nach Windows zu portieren. Hierbei müssen Linux-Programme allerdings aus dem Quelltext neu übersetzt werden. cygwin bietet dementsprechend eine Sammlung aus fertigen Binärpaketen, die über einen Paketmanager installiert werden können. Auf der Homepage selbst gibt es den Paketmanager als setup.exe zum Download.

Pakete installieren

Paketauswahl: Führt man den Paketmanager aus startet ein grafisches Programm, welches durch die Installation führt. Soweit nicht augrund besonderer Inhernetkonfiguration o.ä. nötig können die Voreinstellungen problemlos übernommen werden. Bei der Auswahl des Mirrors (Choose Download Site) sollte ein Server in der Nähe gewählt werden, falls bekannt. Nachdem vom Mirror die Paketliste heruntergeladen wurde können gewünschte Programme gewählt werden.

In der Paketauswahl sind einige Basispakete vorausgewählt, weitere Pakete können beliebig hinzugefügt werden, Abhängigkeiten werden automatisch aufgelöst. Für den Einsatz von rsync hinter einem OpenSSH-Server sind genau diese beiden Pakete nötig. Beide können unter der Kategorie Net gefunden werden als openssh und rsync (bei openssh wird auch das Paket openssl mit ausgewählt). Für das Bearbeiten der Konfigurationsdateien kann zusätzlich ein Editor, zu finden unter Editors, installiert werden. Klickt man nun auf Weiter werden die gewählten Pakete, standardgemäß nach C:\cygwin, installiert. Abschließend fragt cygwin, ob es Verknüpfungen auf dem Desktop/im Startmenü erstellen soll. Um später eine Shell starten zu können sollte mindestens eine der beiden Auswahlmöglichkeiten aktiviert werden.

Benutzerkonten anlegen

Synchronisation der Benutzer/Gruppen: Um sich später per SSH auf dem Rechner einloggen zu können müssen die Benutzerkonten von Windows in der cygwin-Installation angelegt werden. Traditionell werden hierzu die dateien /etc/passwd und – für Gruppen – /etc/group verwendet. cygwin bietet zwei fertige Werkzeige um diese Dateien mit den unter Windows gespeicherten Daten abzugleichen.

Mit mkpasswd kann /etc/passwd erstellt werden, mkgroup erstellt entsprechend /etc/group. Um beide Dateien anzulegen muss die Shell gestartet werden. Dann kann mit mkpasswd -cl > /etc/passwd bzw. mkgroup -cl > /etc/group die Dateien erstellt werden.

Werden Änderungen an den Windows-Benutzern vorgenommen muss allerdings neu synchronisiert werden. Einzig das Passwort wird direkt aus WIndows verwendet.

Besonderheiten von cygwin

C:\ unter cygwin

Gerade im Bezug auf die Verzeichnisstruktur unterscheidet sich Windows stark von UNIX-Systemen. Werden unter UNIX alle Dateisysteme unter einer Wurzel / eingehängt benutzt Windows für jedes Laufwerk einen eigenen Buchstaben X:\. Um die Laufwerksbuchstaben von Windows auf die UNIX-API abbilten zu können werden Laufwerke von Windows in /cygdrive „“eingehängt““. C:\ wird also zu /cygdrive/c unter cygwin. Die Verzeichniswurzel ist in cygwin der Pfad in den cygwin installiert wurde, also normalerweise C:\cygwin.

Auch der Verzeichnistrenner (/ vs. \), die Dateirechte sowie die Möglichkeiten SetUID-Programme zu haben ist unterschiedlich, für den Einsatz von rsync im Ramen dieses Artikels aber nicht relevant.

OpenSSH einrichten

Um die Verbindung zum rsync-Server zu verschlüsseln und keine Klartextpasswörter zur Authentifizierung benutzen zu müssen soll OpenSSH verwendet werden. Gerade durch das Public-Key-Verfahren eignet es sich hervorragend um automatisierte rsync-Synchronisationen zu ermöglichen.

Grundkonfiguration

sshd_config im vim

Um OpenSSH verwenden zu müssen müssen Host-Schlüssel erstellt werden. Mit dem Befehl ssh-host-config kann dieser erstellt werden. Gleichzeitig wird hierbei eine Grundkonfiguration geschrieben. Die Frage nach privilege separation kann im Normalfall mit no beantwortet werden.

Konfiguration anpassen

Um später OpenSSH möglichst sicher zu bekommen sollten bestimmte Konfigurationseinstellungen vorgenommen werden. Hierzu wird die Datei /etc/sshd_config bzw. C:\cygwin\etc\sshd_config bearbeitet. Die folgenden Einstellungen sollten geändert/geprüft werden (Hinweis: es handelt sich hierbei um keine vollständige Konfigurationsdatei):

# Keine SSH Version 1 zulassen, da unsicher Protocol 2 # Login mit Passwort verbieten, Public-Key wird verwendet PasswordAuthentication no # Leere Passworte verbieten PermitEmptyPasswords no

Logins mit Public-Key-Authentifizierung

Um später beim Login auf dem OpenSSH kein Passwort zu benötigen, sich aber trotzdem authentifizieren zu müssen kommt einer Public-Key-Authentifizierung zum Einsatz. Statt einem Passwort wird hierbei der öffentliche Teil eines Schlüssels auf dem OpenSSH-Server hinterlegt. Mithilfe des privaten Teils kann sich später ein Benutzer authentifizieren.

Um einen Schlüssel zu generieren kommt ssh-keygen zum Einsatz, der Aufruf von ssh-keygen -t dsa -b 1024 erzeugt einen 1024-Bit-DSA-Schlüssel (Bei der Frage nach einem Passwort einfach Enter drücken). Dieser wird, soweit nicht anders angegeben, unter ~/.ssh/id_dsa gespeichert, der öffentliche Teil unter ~/.ssh/id_dsa.pub. Um sich auf dem Windowsrechner später passwortlos einloggen zu können muss der öffentliche Teil des Schlüssels auf den Windowsrechner kopiert werden. Am einfachsten wird hierzu in der cygwin-Shell der Schlüssel mithilfe eines Editors in die Datei ~/.ssh/authorized_keys geschrieben. Ist kein Editor installiert kann der Schlüssel unter C:\cygwin\home\USERNAME\.ssh\authorized_keys gespeichert werden.

Nachdem der öffentliche Teil des Schlüssels kopiert wurde sollte ein passwortloser Login möglich sein. Davor muss der OpenSSH-Server unter Windows allerdings noch gestartet werden.

OpenSSH als Windows-Dienst einrichten

sshd als Windows-Dienst

Damit OpenSSH beim Starten von Windows geladen wird muss es als Windows-Dienst eingerichtet werden. cygwin bietet hierfür ein einfaches Werkzeug genannt cygrunsrc. Hiermit lassen sich WIndows-Dienste hinzufügen und löschen, aber auch starten/stoppen. Um OpenSSH als Windows-Dienst hinzuzufügen wird der Befehl cygrunsrv -I sshd -p /usr/sbin/sshd -a "-D" verwendet. In Zukunft wird nun OpenSSH beim Booten direkt mitgestartet. Hierbei wird /usr/sbin/sshd mit dem Parameter -D gestartet, was zur Folge hat, dass sshd nicht von selbst aus zum Daemon wird. Nur so kann der Dienst von Windows aus gestartet/-stoppt und der Status ermittelt werden. Mit cygrunsrv -R sshd kann der Dienst wieder entfernt werden.

cygrunsrv bietet grundsätzlich auch Optionen um den Dienst zu stoppen (cygrunsrv -E sshd) und neu zu starten (cygrunsrv -S sshd).

Ist OpenSSH nun gestartet, so kann man sich passwortlos mithilfe des Public-Key-Verfahrens einloggen. Ein einfaches ssh $servername sollte nun zum Login genügen.

rsync auf localhost über OpenSSH

rsync benutzen

Läuft OpenSSH ist es ein einfaches rsync zu verwenden. Unterschiede gibt es nahezu keine, rsync kann also wie gewohnt benutzt werden. Einzig die ungewohnten Pfade und Benutzer/Rechte können für Verwirrung sorgen.

Ruft man nun also rsync -vr $servername:$pfadname . auf wird rsync wie gewohnt die Dateien kopieren.

rsnapshot unter Windows

Unter Linux kann rsync mithilfe des Scripts rsnapshot dazu verwenden möglichst effektiv komfortable Backups zu erstellen. Läuft OpenSSH/rsync unter Windows ergeben sich nahezu keine Unterschiede.

Probleme bereitete im Test allerdings /cygdrive. Da die Zugriffsrechte auf dieses Verzeichnis r-xr-xr-x sind können Dateien im Verzeichnis nicht ohne Änderung der Rechte gelöscht werden. Läuft rsnapshot unter einem Benutzeraccount bricht das Script dementsprechend ab, wenn die ersten Backupstufen aus dem backup fallen sollen (ältestes Backup eines Intervalls wird gelöscht). Da die Windows Benutzerrechte in dem Fall meistens sowieso nciht gebraucht werden (und die Umsetzung in UNIX-Rechte außerst fraglich ist) kann man dieses Problem einfach umschiffen. Werden unter rsync_short_args statt -a die Optionen -rlt angegeben werden keine Benutzer/Gruppen und Rechte mehr kopiert. Somit kann rsnapshot die Verzeichnisse wieder problemlos entfernen.

Fabian Ziegler
Letzte Artikel von Fabian Ziegler (Alle anzeigen)