Einführung
In diesem Tutorial wird erklärt, wie ein Ubuntu Server erstmals eingerichtet werden kann. Das beinhaltet Grundkonfigurationen, wie das Erstellen eines sudo-Benutzers und das Einrichten einer Firewall.
Voraussetzungen
- Grundlegende Kenntnisse über Hetzner Cloud
- Wir setzen voraus, dass Sie wissen was ein Server ist.
- Wir setzen voraus, dass Sie Ihre IP-Adresse und Ihre root-Login-Daten kennen.
- Kommandozeilen-Tool
Beispiel-Benennungen
- Benutzername: holu
- IPv4:
<10.0.0.1>
Beachten Sie, dass in allen Beispiel-Befehlen holu
mit dem eigenen Benutzernamen ersetzt werden muss und <10.0.0.1>
mit der eigenen IP-Adresse.
Schritt 1 - Mit dem Server verbinden
Verbinden Sie sich als root-Benutzer mit Ihrem Server.
$ ssh root@<10.0.0.1>
Beachten Sie, dass
<10.0.0.1>
mit der eigenen IP-Adresse ersetzt werden muss.
Sollte eine Warnung bezüglich host authenticity erscheinen, kann yes angegeben werden. Der SSH-Befehl wird den in der Warnung angegebenen Fingerprint in der ~/.ssh/known_hosts
-Datei speichern und in Zukunft automatisch erkennen.
Sollten Sie einen SSH-Key und kein Passwort angegeben haben, sind Sie automatisch mit dem Server verbunden. Ansonsten geben Sie nun bitte Ihr Passwort ein. Wenn Sie sich das erste Mal per root-Passwort auf Ihrem Server anmelden, werden Sie dazu aufgefordert Ihr Passwort zu ändern.
Schritt 2 - Neuen Benutzer erstellen
Im Linux-Umfeld haben Sie als root-Benutzer alle Administrationsrechte und können somit uneingeschränkt Änderungen an Ihrem Server vornehmen. Um ungewollte oder versehentliche Änderungen zu verhindern, empfehlen wir einen Benutzer mit sudo-Rechten zu erstellen. Dieser wird dieselben Rechte wie ein root-Benutzer besitzen, muss allerdings vor jeden administrativen Befehl ein sudo
setzen. Dies bietet eine Art Sicherheitsebene, die versehentliche Änderungen verhindern kann. Erstellen Sie also zunächst mit folgendem Befehl einen neuen Benutzer:
# adduser holu
Ersetzen Sie holu
mit einem eigenen Benutzernamen. Bestimmen Sie anschließend wie aufgefordert ein Passwort für den neu erstellten Benutzer. Optional können Sie noch Angaben zu Ihrer Person machen oder Sie überspringen die jeweiligen Felder mit ENTER
.
Sollten Sie sich Ihren Server mit anderen Personen teilen, können Sie mit dem adduser
-Befehl auch noch weitere Benutzer erstellen. Dadurch müssen Sie Ihre eigenen Zugangsdaten nicht mit anderen Benutzern teilen und nehmen diesen damit gleichzeitig jegliche Administrationsrechte. Für Ihren eigenen Benutzer können Sie die Administrationsrechte freischalten, indem Sie ihn wie im nächsten Schritt beschrieben der sudo-Gruppe hinzufügen.
Die von Ihnen hinzugefügten Benutzer können Sie sich jeder Zeit mit getent
anzeigen lassen. Wenn alles funktioniert hat, sollte an dieser Stelle nun auch der Benutzer angezeigt werden, den Sie eben erstellt haben.
# getent passwd {1000..60000} | cut -d: -f1
{1000..60000}
: Jeder Benutzer hat eine bestimmte ID, genannt UID. Im Linux-Umfeld sollte diese UID bei normalen Nutzern zwischen 1000 und 60000 liegen.cut -d: -f1
: Neben dem Benutzernamen kann man sich noch weitere Daten anzeigen lassen.Benutzername:Passwort:UID:GID:GECOS:Home:Shell
In unserem Fall genügt uns der Benutzername, weshalb wir den Output auf das erste Feld (f1) reduzieren.
Schritt 3 - Administrationsrechte vergeben
Um für administrative Befehle nicht jedes Mal Konto wechseln zu müssen, empfiehlt es sich, den neuen Benutzer einer sudo-Gruppe hinzuzufügen. Die entsprechenden Rechte dazu hat der root-Benutzer, über den Sie noch mit Ihrem Server verbunden sind. Führen Sie den folgenden Befehl aus, um den neu erstellten Benutzer der sudo-Gruppe hinzuzufügen:
# usermod -aG sudo holu
Beachten Sie, dass holu
mit dem eigenen Benutzernamen ersetzt werden muss, den Sie in Schritt 2 für Ihren neuen Benutzer festgelegt haben.
Benutzer, die der sudo-Gruppe hinzugefügt wurden, können Sie sich jeder Zeit mit getent
anzeigen lassen. Wenn alles funktioniert hat, sollte an dieser Stelle nun auch Ihr neuer Benutzer angezeigt werden.
# getent group sudo | cut -d: -f4
group sudo
: Diesmal sollen nur Benutzer angezeigt werden, die in der sudo-Gruppe sind.cut -d: -f4
: Neben dem Benutzernamen kann man sich noch weitere Daten anzeigen lassen.Gruppe:Passwort:GID:Benutzername(n)
In unserem Fall genügen uns die Namen alle Benutzer in dieser Gruppe, weshalb wir den Output auf das vierte Feld (f4) reduzieren.
Schritt 4 - Authentifizierung
Um eine Verbindung zum Server aufzubauen, kann entweder ein Passwort oder ein SSH-Key zur Authentifizierung genutzt werden. Der Vorteil eines SSH-Keys ist, dass er sicherer ist als beispielsweise ein Passwort. Im Tutorial SSH-Key einrichten wird genau erklärt, wie Sie sich einen SSH-Key erstellen und auf einem externen Gerät hinterlegen können. Sollten Sie bisher noch keinen Key besitzen, können Sie sich entweder nach dem oben verlinkten Tutorial richten oder Sie behalten Ihr Passwort und machen direkt mit dem nächsten Schritt weiter. Sollten Sie hingegen bereits einen SSH-Key besitzen, können Sie diesen jetzt für Ihren neuen Benutzer hinterlegen. Im oben genannten Tutorial werden dafür vier Möglichkeiten erklärt. Grundsätzlich können Sie entweder den SSH-Key von Ihrem lokalen Gerät beim neuen Benutzer auf dem Server hinterlegen oder Sie kopieren alle SSH-Keys, die bereits beim root-Benutzer hinterlegt wurden zum neuen Benutzer auf demselben Server.
-
Lokales Gerät
Da der SSH-Key beim Erstellen lokal gespeichert wird, müssen Sie sich für diesen Befehl entsprechend auf Ihrem lokalen Gerät befinden. Öffnen Sie dazu ein zweites Fenster in Ihrer Kommandozeile und nutzen Sie dort anschließend folgenden Befehl:
$ ssh-copy-id holu@<10.0.0.1>
Beachten Sie, dass auch hier wieder
holu
mit dem eigenen Benutzernamen ersetzt werden muss und<10.0.0.1>
mit der eigenen IP-Adresse.Wenn Sie auf Ihrem lokalen Gerät bereits mehrere SSH-Keys besitzen, sollte noch der Dateiname des SSH-Keys ergänzt werden, der beim neuen Benutzer hinterlegt werden soll:
$ ssh-copy-id -i ~/.ssh/id_<type>.pub holu@<10.0.0.1>
Beachten Sie, dass auch hier wieder
holu
mit dem eigenen Benutzernamen ersetzt werden muss und<10.0.0.1>
mit der eigenen IP-Adresse. Zusätzlich sollten Sie noch<type>
so anpassen, dass es dem Namen der Datei entspricht, in der Ihr Public SSH-Key gespeichert ist. Sollten Sie sich beim Namen nicht ganz sicher sein, können Sie sich mitls ~/.ssh
alle Dateien anzeigen lassen, die in dem SSH-Ordner enthalten sind. Eine Datei sollte entsprechendid_<type>.pub
heißen. Nachdem der SSH-Key beim neuen Benutzer hinterlegt wurde, können Sie das neue Kommandozeilenfenster schließen und wieder zum ersten Fenster wechseln auf dem Sie noch als root-Benutzer mit Ihrem Server verbunden sind. -
Root-Benutzer
Mit der oben gezeigten Variante wird lediglich in der
authorized_keys
-Datei des neuen Benutzers ein neuer SSH-Key hinzugefügt. Sollten Sie Ihren root-Benutzer schon länger verwenden und in Ihrem.ssh
-Ordner bereits mehr Daten gespeichert haben, die Sie gerne auch bei Ihrem neuen Benutzer hätten, können Sie auch den gesamten.ssh
-Ordner von Ihrem root-Benutzer zu Ihrem neuen Benutzer rüber kopieren. Nutzen Sie dazu folgenden Befehl:# rsync --archive --chown=holu:holu ~/.ssh /home/holu
Beachten Sie, dass auch hier wieder
holu
mit dem eigenen Benutzernamen ersetzt werden muss. Mit diesem Befehl wird auch automatisch der Eigentümer der Dateien angepasst. Achten Sie darauf, dass~/.ssh
nicht mit einem Schrägstrich endet, da sonst lediglich der Inhalt kopiert wird.~/.ssh/
Wenn Sie ausschließlich SSH-Keys zur Authentifizierung nutzen, können Sie die Passwort-Authentifizierung deaktivieren. Das bietet einen zusätzlichen Schutz, den Sie abschließend mit Schritt 7 einstellen können, nachdem der neue Benutzer fertig eingerichtet wurde.
Schritt 5 - Login mit dem neuen Benutzer testen
Nun können Sie testen, ob das Erstellen des neuen Benutzers und das Zuweisen der sudo-Rechte funktioniert hat. Öffnen Sie dazu zunächst ein zweites Kommandozeilenfenster. In Schritt 1 haben Sie sich bereits als root-Benutzer mit Ihrem Server verbunden. Vor dem @-Zeichen wird der Benutzer angegeben, über den man sich mit dem Server verbinden möchte. Anstelle von root
, kommt an diese Stelle daher diesmal der Benutzer, der in Schritt 2 erstellt wurde. In diesem Beispiel ist das der Benutzer holu
.
$ ssh holu@<10.0.0.1>
Beachten Sie, dass auch hier wieder holu
mit dem eigenen Benutzernamen ersetzt werden muss und <10.0.0.1>
mit der eigenen IP-Adresse.
Sobald Sie sich mit dem neuen Benutzer auf Ihrem Server angemeldet haben, können Sie die sudo-Rechte testen. Eine Übersicht über mögliche Befehle erhalten Sie mit dem Befehl man sudo
. Für unsere Testzwecke wechseln wir jetzt aber einfach mit dem su
-Befehl (substitute user) zu unserem root-Benutzer.
$ sudo su - root
Wenn Sie sudo
das erste Mal in der laufenden Sitzung verwenden oder die sudo-Rechte bereits länger nicht mehr verwendet haben, werden Sie nach Ihrem Benutzerpasswort gefragt. Wenn der Wechsel zum root-Benutzer funktioniert hat, können Sie nun wieder zu Ihrem neuen Benutzer zurück wechseln.
# exit
Schritt 6 - Firewall einrichten
Eine Firewall überwacht den Datenverkehr auf einem Server. Da eine Firewall somit eine gewisse Sicherheit für den Server bietet, ist es ratsam eine einzurichten. Sie können dazu unter anderem die Hetzner Cloud Firewall oder UFW (Uncomplicated Firewall) nutzen. Entscheiden Sie sich aber am besten vorher für eine der beiden Optionen, um zu verhindern, dass die festgelegten Regeln der beiden Firewalls später einmal im Widerspruch stehen.
Die Hetzner Cloud Firewall können Sie unkompliziert über die Benutzeroberfläche auf der Cloud Console oder über die API einrichten. Für unser Beispiel werden wir UFW nutzen. UFW ist eine Firewall, die standartmäßig bei Ubuntu enthalten ist.
Das Einrichten von UFW erfordert Administrationsrechte. Somit können Sie entweder den neu erstellten Benutzer mit sudo-Rechten verwenden oder den root-Benutzer. Sollten Sie den root-Benutzer verwenden, können Sie in den folgenden Befehlen das sudo
weglassen.
-
SSH-Verbindungen erlauben
Mit UFW ist es möglich Pakete nach Namen zu verwalten. Bereits installierte Pakete können Sie sich mit folgendem Befehl jeder Zeit anzeigen lassen:
$ sudo ufw app list
Als Output sollte bei Ihnen OpenSSH angezeigt werden:
Available applications: OpenSSH
Sobald Sie weitere Pakete auf Ihrem Server installieren, sollten auch diese in der Auflistung auftauchen. Dort gelistete Pakete sind nicht automatisch von der Firewall erlaubt. Sobald die Firewall aktiv ist, wird standardmäßig der gesamte eingehende Datenverkehr blockiert und der gesamte ausgehende Datenverkehr zugelassen. Wir sind über SSH mit dem Server verbunden. Um auch nach dem Aktivieren der Firewall noch Zugriff auf den Server zu bekommen, muss im folgendem Schritt OpenSSH, und damit SSH-Verbindungen, erlaubt werden.
$ sudo ufw allow OpenSSH
Der Output sollte in etwa so aussehen und damit bestätigen, dass die neue Regel übernommen wurde:
Rules updated Rules updated (v6)
-
Firewall aktivieren
Nun da OpenSSH erlaubt ist, kann die Firewall aktiviert werden:
$ sudo ufw enable
Sollte eine Warnung wie
Command may disrupt existing ssh connections
erscheinen, kanny
angeben werden. Das sollte keine Auswirkungen haben, da mit dem vorherigen Befehl bereits die Firewall-Regel festgelegt wurde, dass SSH-Verbindungen erlaubt sein sollen. -
Firewall-Status prüfen
Um zu prüfen, ob alles richtig funktioniert hat, können Sie sich abschließend noch den Status der Firewall anzeigen lassen.
$ sudo ufw status
Als Output sollte nun dastehen
active
und OpenSSH sollte alsALLOW
aufgeführt sein:Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6)
Schritt 7 - Root-Zugriff deaktivieren
Jeder Linux-Server hat einen root-Benutzer, was den Benutzer für Hacker zu einem beliebten Ziel macht. Aus Sicherheitsgründen empfiehlt es sich daher den Login über root zu sperren. Da die Verbindung über SSH aufgebaut wird, können Sie diese Einstellung in der SSH-Konfigurationsdatei bearbeiten. Ausschließlich root-Benutzer und Benutzer mit sudo-Rechten können diese Datei bearbeiten. Stellen Sie vorher also sicher, dass Sie auf Ihren neuen Benutzer Zugriff haben und dass auch die sudo-Rechte funktionieren. Andernfalls können Sie die Einstellung nie wieder rückgängig machen. Öffnen Sie die Datei mit nano
:
$ sudo nano /etc/ssh/sshd_config
Mit den Pfeiltasten können Sie innerhalb der Datei nach oben und unten navigieren.
-
Root-Login deaktivieren
Suchen Sie nach der
PermitRootLogin
-Zeile:PermitRootLogin no
Ändern Sie das yes in ein no und entfernen Sie das Hash-Symbol (#) am Anfang der Zeile, falls eines vorhanden ist.
-
Passwort-Authentifizierung deaktivieren
Sollten Sie einen SSH-Key besitzen und auch bei anderen Benutzern kein Passwort verwenden, können Sie nun auch die Passwort-Authentifizierung deaktivieren. Suchen Sie dazu nach der
PasswordAuthentication
-Zeile:PasswordAuthentication no
Entfernen Sie das Hash-Symbol (#) am Anfang der Zeile und ändern Sie das yes in ein no, falls nicht bereits no dasteht. Deaktivieren Sie die Passwort-Authentifizierung nicht, wenn Sie sich per Passwort auf Ihrem Server anmelden. Sonst können Sie sich künftig nicht mehr mit dem Server verbinden.
Sobald Sie fertig sind, können Sie die Datei mit CTRL
+X
schließen, mit Y
speichern und mit ENTER
bestätigen. Starten Sie anschließend SSH mit folgendem Befehl neu:
sudo systemctl restart sshd
Ab sofort ist es nicht mehr möglich sich als root-Benutzer oder mit einem Passwort auf diesem Server anzumelden. Mit Ihrem neuen Benutzer können Sie diese Einstellung über denselben Weg jederzeit rückgängig machen, indem Sie das no
wieder in ein yes
ändern. Denken Sie daran, dass Sie zum Öffnen der Datei ein sudo
vor den Befehl setzen müssen.
Ergebnis
In den vorangegangenen 7 Schritten haben Sie gelernt wie Sie einen neuen Benutzer erstellen, den neuen Benutzer der sudo-Gruppe hinzufügen, sich über den neuen Benutzer mit dem Server verbinden, eine erste Firewall einrichten und auf die OpenSSH Konfiguration zugreifen. Damit haben Sie schon mal eine solide Basis, auf der Sie künftig weiter aufbauen können. Als nächste Schritte können Sie beispielsweise die Firewall erweitern oder den SSH Dienst weiter absichern.