SFTP / SSH Server unter Windows einrichten mit Cygwin | Step by Step
Als erstes müssen wir Cygwin herunterladen und auf dem Windows System installieren.
Quelle: https://cygwin.com/setup.exe
INFOs über Cygwin
Mit Cygwin [ˈsɪɡwɪn] lassen sich Programme, die üblicherweise unter POSIX-Systemen wie GNU/Linux, BSD und Unix laufen, auf Microsoft Windows portieren. Es ist eine Kompatibilitätsschicht, die die Unix-API für verschiedene Versionen von Microsoft Windows zur Verfügung stellt, auf deren Basis eine Vielzahl von Programmen aus der Unix-Welt unter Microsoft Windows übersetzt werden können.
Mittels Cygwin portierte Programme laufen unter Windows NT, Windows 2000, Windows XP, Windows Vista, Windows Server 2003 und seit Version 1.7 auch unter Windows 7 und Windows Server 2008. Berichten zufolge ist für einen erfolgreichen Betrieb unter Windows 8 eine manuelle Korrektur der Konfiguration erforderlich. In älteren Versionen laufen auch Programme unter Windows 9x.
Cygwin wurde ursprünglich von der Firma Cygnus Solutions programmiert und seit deren Übernahme durch die Softwarefirma Red Hat erfolgt dort die Weiterentwicklung.
https://www.redhat.com/services/custom/cygwin/
Quelle: https://de.wikipedia.org/wiki/Cygwin
Hier die Kategorie NET auswählen
Paket openssh (bin) auswählen
Nach der Installation können wir die Cygwin Konsole starten
Mit ssh-host-config starten wir die Konfiguration des Systems
- Should privilege seperation be used? yes
- new local account ‘sshd’ ? yes
- Do you want to install sshd as a service ? yes
- Enter the value of CYGWIN for the daemon: [] ntsec
- Do you want to use a different name ? no
- Create new privileged user account ‘cyg_server’ ? yes
- Passwort vergeben
- sshd Dienst starten mit net start sshd
Cygwin und der SSH Dienst ist nun fertig installiert und gestartet.
Alternativ können wir die Cygwin Shell auch innerhalb der Windows Command Shell
ausführen. Hierzu einfach in der Windows Command Shell ins Cygwin bin Verzeichnis wechseln und sich über ssh username@hostname anmelden.
Im angelegten Cygwin Verzeichnis und hier im etc Verzeichnis befindet sich die Datei passwd. In dieser werden unter Unix die Benutzer gespeichert. Wenn wir diese Datei öffnen, sehen wir, dass bei der Installation von Cygwin schon die lokalen Benutzer vom Windows System in diese Datei importiert wurden.
Wenn wir nun nachträglich unter Windows einen Benutzer anlegen der ebenfalls in der Cygwin Umgebung berechtigt werden soll, so müssen wir diesen noch hinzufügen.
Im folgenden Beispiel wollen wir einen User für den SFTP Zugriff anlegen der sich später dann per SFTP auf eine Netzwerkfreigabe auf dem Windows System verbinden kann.
Zuerst auf dem Windows System einen Benutzer erstellen
Als erstes müssen wir nun unter Cygwin den lokal angelegten Windows User sftp01 in die passwd Datei importieren mit
- mkpasswd -u sftp01 -l >> /etc/passwd
(-u für User | -l für lokalen Benutzer | -d für Domänen Benutzer | >> für Eintrag in passwd Datei ergänzen | > für passwd Datei überschreiben)
Wir könnten auch alternativ mit
- mkpasswd -l > /etc/passwd
(alle angelegten Benutzer auf dem Windows System in die passwd Datei importieren und die vorhandenen Einträge überschreiben) - mkgroup -l > /etc/group
(alle lokalen Gruppen im Windows System in die Gruppendatei unter Cygwin bzw. Unix importieren und die vorhandene überschreiben)
Anschließend können wir uns mit dem angelegten User per ssh an der Konsole anmelden.
- ssh sftp01@brainweb01
Da wir beim ersten Login den öffentlichen Schlüssel vom Cygwin OpenSSH Paket noch nicht auf unserem Rechner abgelegt haben, erscheint die Meldung, dass die Identitiät des Servers unbekannt ist.
Zum erfolgreichen Verbinden müssen wir hier mit yes bestätigen.
Anschließend wird das home Verzeichnis für den User erstellt.
Ab sofort ist es möglich von einem entfernten Rechner über putty sich direkt per ssh auf die Cygwin Unix Shell zu verbinden.
Auch per SFTP kann ich mich ab sofort mit dem System verbinden.
In diesem Beispiel verwenden ich den FTP Client FileZilla. Als Protokoll hier das SFTP Protokoll auswählen. Je nach Version von Cygwin, openssl, FileZilla kann es vorkommen, dass der Zugriff
auf Windows UNC Shares mit FileZilla Probleme bereitet und dieser anstelle auf die
UNC Pfade mit //Share versucht auf Unix Pfade mit /Share zuzugreifen. Mit WinSCP oder SecureFX hatte ich hier noch keine Probleme.
Bei POSIX-konformen Betriebssystemen wird der UNC Pfad mit //Share ansellte von \Share angegeben. Es funktioniert jedoch auch im Windows UNC Format, jedoch erscheint folgende Meldung nach dem Login wenn das Home Verzeichnis auf ein Windows UNC Share verweist:
Beim Zugriff werden wir nun immer mit dem angelegten Home Verzeichnis verbunden. Möchten wir aber mit einer Netzwerkfreigabe verbunden werden, so müssen wir die passwd Datei im Verzeichnis /etc noch anpassen.
Hier suchen wir die Zeile mit unserem angelegten Benutzer und überschreiben am Ende den Pfad
des Homeverzeichnis mit dem UNC Pfad (POSIX-konform) der gewünschten Netzwerkfreigabe.
Beispiel:
sftp01:unused:1013:513:sftp01,U-BRAINWEB01sftp01,S-1-5-21-357073478-4224919887-655416145-1013://brainweb01/FTP ROOT
Im folgenden werden noch die benötigten Schritte zur Authentifizierung ohne Kennwort und mit Public und Private Key beschrieben.
Als erstes müssen wie die Schlüsselpaare erzeugen. Hierzu mit dem angemeldeten User
der später auch für den Zugriff verwendet wird folgenden Befehl ausführen:
ssh-user-config
Jetzt wird jeweils gefragt was für Schlüssel (also RSA, DSA, usw. verschiedene Verschlüsselungsverfahren) angelegt werden sollen.
Im Homeverzeichnis sollte jetzt ein .ssh Ordner zu finden sein, wo die Schlüsselpaare abgelegt sind! Der .ssh Ordner ist ein versteckter Ordner und kann mit dem Listbefehl ls –la angezeigt werden!
Dann kann man über cd .ssh in den Ordner wechseln und mit ls –l die Schlüsselpaare anzeigen lassen. Da wir jedoch unser Home Verzeichnis auf eine Windows Freigabe gesetzt haben, finden wir den .ssh Ordner mit den Schlüsselpaaren in dieser Freigabe.
Die *.pub sind die Public Keys welche in der authorized_keys Datei aufgeführt werden und dadurch Zugriff auf den Server bzw. dieses Verzeichnisses über die dort aufgelisteten Schlüssel ermöglichen.
Die Dateien ohne *.pub sind die privaten Keys welche für die Verbindung der Clients für den Zugriff auf das System verwendet werden.
Wenn wir also die RSA Verschlüsselung verwenden möchte, dann müssen wir die Datei id_rsa auf den Client kopieren und für die Verbindung verwenden.
Wenn nun Jemand Zugriff auf den Server benötigt und jedoch sein eigenes Schlüsselpaar verwenden möchte, so muss lediglich der eigene öffentliche Schlüssel in die Datei authorized_keys ergänzt werden.
Für die Verwendung in Putty muss der Key erst noch mit PuttyGen konvertiert werden.
Anschließend kann der Schlüssel dann für die Authentifizierung verwendet werden.
Logging des SSHD (OpenSSH Daemon) Subsystem SFTP aktivieren
Zuerst müssen wir das Paket syslog-ng im Zweig Admin nachträglich installieren über das Cygwin Setup.
Nach der Installation die Cygwin Konsole als Admin ausführen und die Konfiguration über den Befehl: /bin/syslog-ng-config ausführen.
Abfrage ob syslog-ng als Dienst installiert werden soll mit yes beantworten und danach den
Dienst mit net start syslog-ng starten.
Damit SFTP (Subsystem sftp) Ereignisse protokolliert müssen noch folgende Änderungen in der Datei /etc/sshd_config vorgenommen werden:
Unter https://www.openbsd.org/cgi-bin/man.cgi/OpenBSD-current/man5/sshd_config.5?query=sshd_config sind die verschiedenen Level erläutert.
Abschließend noch den Logging Daemon neu starten mit cygrunsrv -S syslog-ng und den SSHD Dienst neu starten mit:
net stop sshd
net start sshd
Ab sofort protokolliert das Subsystem SFTP alles in der Datei /var/log/messages
Verwenden eines Domain Account als Service Account für den CYGWIN sshd Dienst
Als erstes einen Domänen Account erstellen, bsp. DOMAINsvcCygwin. Dieses Konto muss in die lokale Administrator Gruppe des Servers auf dem Cygwin läuft.
Anschließend diesen User wieder über mkpasswd und mkgroup in Cygwin importieren.
mkpasswd -u svcCygwin -d >> /etc/passwd
(nicht im Format DOMAINusername sondern nur den username!!!!, in der PASSWD wird die Domäne dann automatisch durch den Schalter -d hinzugefügt, generell in der Cygwin Shell nur den username dann für den Domänenuser immer angeben!)
mkgroup -l > /etc/group
In der Local Security Policy des Servers auf dem Cygwin läuft folgende Berechtigungen dem Domänen Account svcCygwin gewähren.
Adjust memory quotas for a process
Act as part of the operating system (SeTcbPrivilege) Create a token object (SeCreateTokenPrivilege) Replace a process level token (SeAssignPrimaryTokenPrivilege)
https://cygwin.com/faq/
Anschließend müssen wir noch den Besitz folgender Verzeichnisse und Dateien für den neuen Domänen Service Account svcCygwin übernehmen
$ cygrunsrv --stop sshd $ chown [domain_user] /var/log/sshd.log $ chown -R [domain_user] /var/empty $ chown [domain_user] /etc/ssh*
Zuletzt noch in der Dienste Konsole unter Windows dem Dienst CYGWIN sshd den neuen Domänen Service Account als Logon Account hinterlegen und fertig.
Links
Setting up a Cygwin OpenSSH Server for Windows Domains on a TADDM Gateway Server
Cygwin wieder deinstallieren
- Alle Cygrun Dienste stoppen und deinstallieren über die cygrunsrv.exe im /bin Verzeichnis von Cygwin
- Alle Cygwin Prozesse beenden
- Löschen des Cygwin root Verzeichnis
- Löschen aller Cygwin shortcuts
- Löschen des Registry Schlüssels SoftwareCygwin