Wechseln zu: Navigation, Inhalt

Archiv für SSH

HowTo: OpenSSH-Server mit Cygwin unter Windows 7 installieren

Um auch unter Windows 7 die vielzähligen Möglichkeiten eines OpenSSH-Servers nutzen zu können, empfiehlt es sich, diesen mithilfe von Cygwin zu installieren. Danach stehen die bekannten Funktionen wie die verschlüsselte Verbindung zur Konsole eines entfernten Computers und Dateienübertragungen via SFTP zur Verfügung.

Cygwin Setup: Select Packages

Die Installation beginnt mit dem Herunterladen und Konfigurieren des Cygwin Setups, wobei unbedingt das Paket openssh ausgewählt werden muss. Alle weiteren Abhängigkeiten werden anschließend automatisch aufgelöst und installiert.

Nach dem Abschluss der Installation wird die Cygwin Bash Shell per Rechtsklick als Administrator ausgeführt. Mit dem Befehl ssh-host-config wir die Konfiguration gestartet, welche anschließend mittels Abfragen den Server einrichtet.

ssh-host-config
*** Query: Should privilege separation be used? (yes/no) yes
*** Query: new local account 'sshd'? (yes/no) yes
*** Query: (Say "no" if it is already installed as a service) (yes/no) yes
*** Query: Enter the value of CYGWIN for the daemon: []
*** Query: Do you want to use a different name? (yes/no) no
*** Query: Create new privileged user account 'cyg_server'? (yes/no) yes

Die Konfiguration des OpenSSH-Servers ist danach abgeschlossen und kann bei Bedarf später noch weiter verfeinert werden.

Dienste: Cygwin sshd

Um den sshd-Dienst zu starten gibt man entweder net start sshd oder cygrunsrv -S sshd in die Konsole ein. Alternativ kann man den Dienst auch wie jeden anderen in der Systemsteuerung starten. Nach einem Neustart geschieht dies automatisch.

Windows-Firewall

Damit SSH durch die Firewall erreichbar ist, sollte man abschließend in der Windows-Firewall mit erweiterter Sicherheit eine neue eingehende Regel anlegen, die für den TCP-Port 22 Verbindungen zulässt. Wer nicht möchte, dass der neu angelegte Benutzer cyg_server im Anmeldebildschirm erscheint, sollte noch diesen Schlüssel in die Registry importieren oder selbst dort anlegen.

Links

 


Inkrementelle Backups mit rsync unter Android

Mit Diensten wie AppBrain, kann man regelmäßig die Liste der installierten Apps unter Android synchronisieren, wird das Smartphone jedoch geklaut, sind die Daten auf der SD-Karte (Fotos, Musik, Videos) trotzdem weg. Um diesen Datenverlust zu vermeiden, ist es sinnvoll, regelmäßig Backups anzulegen, welche auf Grund der höheren Geschwindigkeit am Besten inkrementell sein sollten. Hierfür steht die App rsync backup for Android zur Verfügung.

rsync backup for Android 01

Nach der Installation, muss man in der App noch die benötigten Dateien herunterladen, bevor man anschließend das Schlüsselpaar generiert, mit dem später ein Login ohne Passwort am SSH-Server möglich ist.

rsync backup for Android 05

Die Schlüssel werden auf der SD-Karte unter /sdcard/dss_key und /sdcard/dss_key.pub abgelegt. Zudem hat man die Möglichkeit, sich den Public key zuzuschicken.

rsync backup for Android 06

Den OpenSSH-Server auf dem Server installieren, auf dem die Backups liegen sollen. Dies ist sowohl unter Ubuntu, als auch unter Windows möglich.

sudo apt-get install openssh-server

Man legt nun im Home-Verzeichnis des Benutzers, mit dem man sich später anmeldet, ein Verzeichnis mit dem Namen .ssh und darin die Datei authorized_keys, in die man den Public key anschließend einfügt.

mkdir ~/.ssh
vi ~/.ssh/authorized_keys

Falls sich in der Datei schon Schlüssel befinden sollten, kann man den Schlüssel einfach in eine neue Zeile kopieren. (Weitere Informationen zur Konfiguration des OpenSSH-Server)

rsync backup for Android 08

Anschließend legt man in rsync ein neues Profil an, in dem man alle wichtigen Informationen angibt.

Weitere Optionen

Eine der vielen möglichen Optionen ist, bestimmte Dateien oder Verzeichnisse aus der Sicherung auszuschließen.

Hierfür legt man auf der SD-Karte die Textdatei excludefile.txt an, in der man die auszuschließenden Ordner und Dateien angibt.

/sdcard/excludefile.txt
##rsyncsdcardexclude##
.android_secure
.bookmark_thumb
albumthumbs
Android/data
clockworkmod
DCIM/.thumbnails
download
dropbox
Evernote
LOST.DIR
MapDroyd
Movies
Music
nandroid
Pictures
Podcasts
rosie_scroll
tmp
WikiDroyd

rsync backup for Android 09

Mit der folgenden Option fügt man dies anschließend zum Profil hinzu

--exclude-from=/sdcard/excludefile.txt

Automatisierung der Datensicherung

Um die Datensicherung zu automatisieren, kann man in Tasker ein Profil anlegen, das die Ausführung übernimmt.

rsync backup for Android 13

Meine Konfiguration ist so eingestellt, dass sie jeden Tag um 2 Uhr, wenn das Smartphone aufgeladen wird und mit dem WLAN verbunden ist, rsync mit dem gewählten Profil ausführt.

Fotogalerie

Links


HowTo: OpenSSH-Server konfigurieren (mit Authentifizierung über öffentliche Schlüssel)

Bei SSH handelt es sich um ein Netzwerkprotokoll, mit dem über eine verschlüsselte Verbindung die Konsole eines entfernten Computers bedienen kann. Außerdem gibt es die Möglichkeit Port-Weiterleitungen einzurichten und über SFTP Dateien zu übertragen. Spätestens, wenn man einen Server betreibt wird man diese Vorteile zu schätzen wissen, sollte diesen aber auch absichern, damit Hacker erst gar keine Chance haben.

Ubuntu Home-Server

Login über einen anderen Benutzer

Zu aller Anfang sollte man den Login von root komplett verbieten. Dazu legt man zunächst einen neuen Benutzer unter Ubuntu an, mit dem man sich in Zukunft über SSH einloggt. Von diesem Zugang aus kann man dann immer noch mittels sudo su zum Superuser root werden. Man legt zuerst einen neuen Benutzer mit einem Benutzernamen und einem Kennwort an

sudo adduser benutzername
Geben Sie ein neues UNIX Passwort ein: benutzerpasswort
Geben Sie das neue UNIX Passwort erneut ein: benutzerpasswort
passwd: Kennwort erfolgreich geändert
Ändere Benutzerinformationen für benutzername
Geben Sie einen neuen Wert an oder ENTER für den Standardwert
	Name []: Benutzer Name
	Raumnummer []:
	Telefon geschäftlich []:
	Telefon privat []:
	Sonstiges []:
Sind die Informationen korrekt? [j/N] j

Da der neu angelegte Benutzer später den Befehl sudo ausführen soll, muss man ihn noch zur admin-Gruppe hinzufügen

sudo adduser benutzername admin

Nun sollte man sich einmal mit dem neuen Benutzer einloggen und testen, ob es auch geht. Hat alles geklappt, wird man root und bearbeitet die Konfigurationsdatei von sshd

sudo su
vi /etc/ssh/sshd_config

Die Zeile

PermitRootLogin yes

wird geändert zu

#PermitRootLogin yes
PermitRootLogin no

Dann wird die Datei abgespeichert und wieder geschlossen. Damit die Änderungen übernommen werden, muss entweder der komplette Rechner oder, was wesentlich praktischer ist, der ssh-Dienst neugestartet werden. Jetzt sollte man sich nicht mehr als root einloggen können.

Hinweis: Der ssh-Dienst erhält bestehende Verbindungen weiterhin aufrecht, selbst wenn er neu gestartet wurde. Man kann also zur Sicherheit die bestehende Verbindung geöffnet lassen, um im Notfall die Konfigurationsdatei noch erreichen zu können. Wenn alles geklappt hat, kann man die Verbindung schließen.

/etc/init.d/ssh restart

Ab jetzt kann man nur noch per

sudo su

zum Superuser werden.

Authentifizierung über öffentliche Schlüssel

Zunächst ein Schlüsselpaar (öffentlicher & privater Schlüssel) erstellt werden.

Erstellung eines Schlüsselpaares unter Windows mit Putty

Als Erstes startet man das Programm PuttyGen. Dann wählt man unter dem Punkt Parameters den Schlüsseltyp SSH2 DSA aus. Mit einem Klick auf Generate wird das Schlüsselpaar erzeugt. Da PuttyGen Mausbewegungen nutzt, um einen Zufälligkeitsfaktor zu generieren, muss man die Maus solange über die graue Fläche bewegen, bis der Balken 100% erreicht hat.
Als Key Comment sollte man eine Beschreibung des Schlüssels eingeben (z.B. benutzername@servername) und als Passphrase ein sicheres Kennwort für den privaten Schlüssel. Zum Schluss werden privater und öffentlicher Schlüssel abgespeichert.
Man loggt sich nun auf dem Server ein ohne root zu werden und erstellt im Home-Verzeichnis des Benutzers ein neues Verzeichnis mit dem Namen .ssh und darin eine neue Datei authorized_keys

mkdir $HOME/.ssh
vi $HOME/.ssh/authorized_keys

Anschließend kopiert man den Inhalt aus dem Fenster im Bereich Public key for pasting ... in die erstellte Datei.
Wichtig: Der gesamte Inhalt muss in der ersten Zeile der Datei stehen. Danach werden noch die Rechte für die Datei gesetzt.

chmod g-w $HOME $HOME/.ssh $HOME/.ssh/authorized_keys

Um das Schlüsselpaar unter Putty zu verwenden läd man dort die gespeicherte Sitzung für den Server. Anschließend geht man in den Optionen zu "Connection" > "SSH" und wählt unter Preferred SSH Version den Eintrag 2 only aus. Unter "Connection" > "SSH" > "Auth" wählt man unter Private key file for authentication den entsprechenden privaten Schlüssel (Dateiendung: .ppk) aus. Unter "Options" > "Session" und speichert man die veränderten Einstellungen der Sitzung ab.
Beim Einloggen gibt man als Benutzer den Namen des Benutzers an, in dessen Home-Verzeichnis der öffentlichen Schlüssel gespeichert ist. Das zugehörige Passwort ist das bei der Erstellung des Schlüsselpaares angegebene (nicht das Passwort des Benutzers auf dem Server). Es dient nur dazu den privaten Schlüssel vor Missbrauch zu schützen.

Erstellung eines Schlüsselpaares unter Linux mit OpenSSH

Man öffnet eine Kommandozeile und erstellt ein neues DSA-Schlüsselpaar

ssh-keygen -d

Dabei wird man dazu aufgefordert einen Verzeichnisnamen anzugeben, in dem das Schlüsselpaar erstellt werden soll. Mit Eingabetaste bestätigt man den Standardwert. Anschließend muss das Kennwort eingegeben werden, das dazu dient den privaten Schlüssel vor Missbrauch zu schützen.
Im angegebenen Verzeichnis findet sich nun das neue Schlüsselpaar. Der private Schlüssel heißt id_dsa, der öffentliche id_dsa.pub. Man überträgt den öffentlichen Schlüssel ins Home-Verzeichnis auf dem Server. Dazu empfiehlt es sich eine verschlüsselte Übertragungstechnik wie SCP oder SFTP zu verwenden.

scp $HOME/.ssh/id_dsa.pub benutzername@192.168.178.150:id_dsa.pub

Als Nächstes wird der Schlüssel an die Datei authorized_keys im Verzeichnis .ssh angehängt und dem Server so als autorisierten Schlüssel übergeben. Man loggt sich dabei auf dem Server ein, ohne root zu werden

mkdir $HOME/.ssh
touch $HOME/.ssh/authorized_keys
cat $HOME/id_dsa.pub >> $HOME/.ssh/authorized_keys

Berechtigungen vergeben

chmod g-w $HOME $HOME/.ssh $HOME/.ssh/authorized_keys

Nun ist der Server konfiguriert und man kann eine Verbindung starten

mv $HOME/.ssh/id_dsa $HOME/.ssh/192.168.178.150-dsa
chmod g-r $HOME/.ssh/192.168.178.150-dsa
ssh 192.168.178.150 -p 22 -l benutzername -i $HOME/.ssh/192.168.178.150-dsa

Hat alles geklappt, können die Einstellungen in die eigene angepasste Client-Konfigurationsdatei (~/.ssh/config) eintragen werden

vi $HOME/.ssh/config
# Einstellungen für 192.168.178.150
Host homeserver
Hostname 192.168.178.150
IdentityFile2 /home/client-benutzername/.ssh/192.168.178.150-dsa
Port 22
PreferredAuthentications publickey
Protocol 2
User benutzername

Jetzt kann man sich ganz einfach mit dem Server verbinden

ssh homeserver

Laufzeitkonfiguration von ssh

In meiner Konfiguration habe ich einige Anpassungen zur Verbesserung der Sicherheit vorgenommen. Unter anderem verwende ich den Port 2222 anstatt den Standard-Port 22, damit Port-Scans ins Leere laufen.

# What ports, IPs and protocols we listen for
Port 2222

Außerdem soll nur das sichere SSH2 verwendet werden

# use ssh2 only
Protocol 2
# HostKeys for protocol version 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key

Ein Benutzer hat nur 30 Sekunden Zeit, um sich einzuloggen. Ansonsten wird die Verbindung abgebrochen. Es kann sich zudem immer nur ein Benutzer gleichzeitig einloggen.

# Authentication:
LoginGraceTime 30
# allow one login at a time
MaxStartups 1
#PermitRootLogin yes
PermitRootLogin no
AllowUsers benutzername
StrictModes yes

Die Client-Konfiguration (z.B. in Putty oder der Konfigurationsdatei für OpenSSH) muss natürlich daraufhin noch angepasst werden.
Meine aktuelle Konfiguration als Beispiel (Download):

# Package generated configuration file
# See the sshd(8) manpage for details

# What ports, IPs and protocols we listen for
Port 2222
# Use these options to restrict which interfaces/protocols sshd will bind to
#ListenAddress ::
#ListenAddress 0.0.0.0
# use ssh2 only
Protocol 2
# HostKeys for protocol version 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
#Privilege Separation is turned on for security
UsePrivilegeSeparation yes

# Lifetime and size of ephemeral version 1 server key
KeyRegenerationInterval 3600
ServerKeyBits 768

# Authentication:
LoginGraceTime 30
# allow one login at a time
MaxStartups 1
#PermitRootLogin yes
PermitRootLogin no
AllowUsers benutzername
StrictModes yes

# enable pubkey authentication
PubkeyAuthentication yes
#AuthorizedKeysFile     %h/.ssh/authorized_keys

# disable other authentications
RSAAuthentication no

PrintMotd no
KeepAlive yes

# Don't read the user's ~/.rhosts and ~/.shosts files
IgnoreRhosts yes
# For this to work you will also need host keys in /etc/ssh_known_hosts
RhostsRSAAuthentication no
# similar for protocol version 2
HostbasedAuthentication no
# Uncomment if you don't trust ~/.ssh/known_hosts for RhostsRSAAuthentication
IgnoreUserKnownHosts yes

# To enable empty passwords, change to yes (NOT RECOMMENDED)
PermitEmptyPasswords no

# Change to yes to enable challenge-response passwords (beware issues with
# some PAM modules and threads)
ChallengeResponseAuthentication no

# Change to no to disable tunnelled clear text passwords
PasswordAuthentication no 

# Kerberos options
KerberosAuthentication no
#KerberosGetAFSToken no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes

# GSSAPI options
#GSSAPIAuthentication no
#GSSAPICleanupCredentials yes

X11Forwarding yes
X11DisplayOffset 10
PrintMotd no
PrintLastLog yes
TCPKeepAlive yes
#UseLogin no

#MaxStartups 10:30:60
#Banner /etc/issue.net

# Allow client to pass locale environment variables
AcceptEnv LANG LC_*

# enable sftp subsystem Subsystem
Subsystem sftp /usr/lib/openssh/sftp-server

# logging
SyslogFacility AUTH
LogLevel INFO

UsePAM yes
/etc/init.d/ssh restart

Die Konfiguration von sshd ist nun abgeschlossen.

SSH Begrüßungsnachricht ändern

Wer nicht daran interessiert ist, bei jedem Login darüber aufgeklärt zu werden, dass die Ubuntu-Entwickler für keinerlei Schaden haften, der kann in der Datei /etc/motd eine eigene Begrüßungsnachricht angeben oder den Inhalt einfach löschen. Dort steht nämlich, was dem Benutzer nach dem Login via ssh angezeigt wird.

sudo vi /etc/motd
Linux NetServer 2.6.24-19-generic #1 SMP Wed Aug 20 22:56:21 UTC 2008 i686

Links


HowTo: Home-Server auf Basis von Ubuntu (mit RAID 5)

Ubuntu Home-Server

Ich werde in diesem und den folgenden Artikeln meine Erfahrungen mit der Einrichtung Home-Servers auf Ubuntu-Basis beschreiben.

Natürlich gibt es ähnliche Lösungen schon fertig zu kaufen. Jedoch steht bei der Installation und anschließenden Verwaltung eines solchen Servers auch der Spaß im Vordergrund. Selbst, wenn die Installation sicher nicht immer einfach war und mich sicher so manchen Nerv gekostet. Ich hoffe, dass dieses HowTo gleichzeitig Anregung und Unterstützung für ähnliche Projekte ist und den Installationsaufwand reduziert. Ein weiterer Vorteil ist die hohe Flexibilität und die nahezu unbegrenzte Erweiterbarkeit.

Weiterlesen »