Jedes Zertifikat besteht aus einem privaten und einen öffentlichen Key.
Die Dateinamen sollten so gewählt werden, das diese nachher durch diesen zugeordnet werden können.
Wir erstellen den privaten Key
openssl genrsa -out /pad/cert.key 1024
Anschließend erstellen wir aus dem privaten Key eine Zertifizierungsanforderungsdatei (csr)
openssl req -new -key /pad/cert.key -out /pad/cert.csr
Für die Erstellung der csr-Datei wird man nun gebeten einige Informationen auszufüllen.
Besonders wichtig ist die Angabe von:
Common Name (e.g. server FQDN or YOUR name) []:
Hier muss der komplette Domainname eingegeben werden, für den das Zertifikat gültig ist. Wenn die Domain mit www erreichbar ist, dann muss hier auch www im Domainnamen aufgeführt sein!
Für Testserver reicht hier auch ein localhost.
Nun erstellen wir das Zertifikat, die Gültigkeitsdauer gibt die Angabe in Tagen an.
openssl x509 -req -days 3650 -in /pad/cert.csr -signkey /pad/cert.key -out /pad/cert.crt
Hin und wieder möchte man ein Verzeichnis Online verfügbar machen, welches nicht für jedermann gedacht ist.
Da man dazu nun nicht unbedingt eine Authentifizierungs-Logik schreiben möchte kann man dies auch per .htacces Datei erledigen.
In der Regel kann dies jedes Webhosting-Paket, meist kann man dies dann irgendwo im Kundenbereich konfigurieren.
Hat man einen eigenen Server zu Verfügung, so kann man einfach eine Passwortdatei und eine .htaccess Datei im entsprechenden Verzeichnis anlegen.
Die Passwortdatei erstellen wir wie folgt
htpasswd -c %Datei% %User%
Im folgenden Dialog kann das Passwort eingegeben werden.
AuthType Basic
AuthName "Geschützter Bereich"
AuthUserFile %PasswortDatei%
require user %User%
Für die Kommunikation zweier Linux Server, z.B. ein Datenbackup mittels rsync, muss man sich zwangsläufig per SSH anmelden.
Hierfür empfiehlt es sich, einen Zugang per Zertifikat zu wählen. Zum einen ist es sehr komfortabel, zum anderen ist es auch viel sicherer. Zumindest wenn man in einen weiteren Schritt den Zugang per Passwort unterbindet bzw. ein sehr sicheres Passwort wählt.
Damit wir uns auf dem entfernten Server einloggen können, benötigen wir dort einen Benutzer der sich per SSH Anmelden darf. Dazu empfehle ich den Server wie folgt zu konfigurieren: Linux SSH Root Zugang verbieten.
Wenn diese Voraussetzung erfüllt sind, kann ich mich wie folgt verbinden.
ssh %EntfernterBenutzer%@%EntfernterServer%
Allerdings wird jetzt noch eine Passwort abgefragt.
Damit wir zukünftig kein Passwort mehr angeben müssen, erstellen wir ein Schlüsselpaar.
ssh-keygen
Nun müssen wir den Public Key auf den entfernten Server übertragen.
ssh-copy-id -i ~/.ssh/id_rsa.pub %EntfernterBenutzer%@%EntfernterServer%
# Sollte SSH nicht auf dem Standardport laufen, kann man die diesen wie folgt mit angeben
ssh-copy-id -i ~/.ssh/id_rsa.pub '-p %SSHPort% %EntfernterBenutzer%@%EntfernterServer%'
# Wenn ssh-copy-id nicht zur Verfügung steht, kann der Schlüssel auch per cat übertragen werden
cat ~/.ssh/*.pub | ssh %EntfernterBenutzer%@%EntfernterServer% 'cat>>.ssh/authorized_keys'
Nun können wir den passwortlosen Zugriff testen
ssh %EntfernterBenutzer%@%EntfernterServer%
Sollte es Probleme geben, können wir uns wie folgt Details zum Verbindungsaufbau anzeigen lassen.
ssh -v %EntfernterBenutzer%@%EntfernterServer%
Das alte Passwort kann man auf dem Zielserver wie folgt deaktivieren
passwd %EntfernterBenutzer% -d
In aller Regel erhaltet ihr von eurem Hoster ein vorgefertigtes Image. In meinen Fall ist es ein Debian 7.
Damit nicht jeder Zugang zu eurem Server erlangt, solltet ihr euch ausschließlich mit einem eigenen Benutzer per ssh anmelden. Eine Anmeldung mit dem Root-Benutzer solltet ihr verbieten. Die Root-Rechte erlangen wir in Zukunft erst nach einem Ummelden des Benutzers.
Als erstes installieren wir Sudo.
apt-get install sudo
Und OpenSSH-Server
apt-get install ssh
Nun legen wir eine Gruppe an, in der alle Benutzer Mitglied werden, welche sich am Server anmelden können.
addgroup ssh-users
Anschließend erstellen wir unseren Benutzer.
adduser %USERNAME%
Damit sich dieser per ssh anmelden kann, müssen wir den neuen Benutzer der Gruppe ssh-users hinzufügen.
adduser %USERNAME% ssh-users
Um später Root-Rechte zu erlangen benötigt dieser auch eine Mitglidschaft in der Gruppe sudo.
adduser %USERNAME% sudo
Jetzt konfigurieren wir ssh noch so, dass die Mitglieder der Gruppe ssh-users sich per ssh anmelden können.
vi /etc/ssh/sshd_config
# Zeile hinzufügen:
AllowGroups ssh-users
Nun starten wir den ssh-Dienst neu
/etc/init.d/ssh restart
Nun können wir mit einer weiteren putty-Session schon einmal den Loginvorgang des neues Users prüfen.
Nach dem erfolgreichen Login melden wir uns wie folgt zum root-Benutzer um:
sudo -i
Wenn das alles funktioniert hat, dann verbieten wir den direkten ssh-Zugang des Root Benutzers.
Dazu öffnen wir wieder die ssh-config und passen folgende Zeile an
vi /etc/ssh/sshd_config
# Root Login verbieten
PermitRootLogin yes
Auch nach dieser Änderung starten wir den ssh Dienst neu.
/etc/init.d/ssh restart
Nun ist es nicht mehr möglich sich als Root-Benutzer per ssh an der Konsole anzumelden.