Ubuntu ist eine der beliebtesten Linux-Distributionen. In diesem Artikel setzen wir einen nagelneuen Ubuntu Server 24.04 LTS auf und konfigurieren ihn so, dass eine Fernadministration per SSH möglich ist.
Einführung
Warum eigentlich Ubuntu? Ubuntu ist ein Fork des Debian-Systems und gilt momentan als die Linux-Distribution mit dem weltweit größten Marktanteil. Ubuntu ist recht einfach einzurichten und hat eine große und aktive Open Source-Community im Hintergrund. Also beste Voraussetzungen für ein neues Linux-System.
Ubuntu gibt es in den Varianten Cloud, Server, Containers, Desktop und IoT. Wir wollen einen Ubuntu Server aufsetzen.
Wir installieren bewusst die Version 24.04 LTS. Sie garantiert Support bis April 2029 (Das LTS steht für long-term support), während aktuellere Zwischenversionen in der Regel nur für wenige Monate mit Updates versorgt werden.
Beim Einrichten von Ubuntu gibt es zwei mögliche Ausgangsszenarien:
-
On Premises: Du möchtest Ubuntu auf deinem eigenen Server vor Ort installieren.
-
Cloud-basiert: Du möchtest Ubuntu bei einem Cloud-Provider installieren und nutzen.
Im ersten Fall liegt alles in Deiner Hand, im zweiten Fall triffst Du in der Regel auf ein vorkonfiguriertes Ubuntu-Image, dass Du dann komplett nach Deinen Vorstellungen anpassen kannst.
Wir behandeln in diesem Blog-Artikel nur den On Premises-Fall. Die Konfiguration eines Cloud-basierten Ubuntu Server unterscheidet sich vor allem in einem Punkt: Du hast keinen direkten Zugriff auf den Rechner, musst also von Anfang an per SSH mit Deinem Server kommunizieren. Die nötigen initialen Zugangsdaten bekommst Du von Deinem Cloud-Provider gestellt.
Womit wir auch schon beim nächsten Thema wären: SSH. Secure Shell (SSH) ist ein Netzwerkprotokoll zum sicheren Fernwarten von Netzwerkdiensten über ein unsicheres Netzwerk (z.B. das Internet). Typische Applikationen, die SSH unterstützen, sind Kommandozeilenwerkzeuge (z.B. Putty) sowie spezielle Administrationswerkzeuge (z.B. pgAdmin). SSH ist für viele Administratoren der präferierte Weg zum Fernwarten eines Linux-Servers. Da ein Ubuntu Server keine GUI besitzt, muss sowieso mit der Kommandozeile gearbeitet werden, SSH verlagert die Eingabe und Ausgabe lediglich auf Deinen lokalen Rechner.
Los geht’s
Die ersten Schritte:
-
Gehe auf die Webseite https://ubuntu.com/download/server und lade dir dort das aktuelle ISO-Abbild des Ubuntu Server 20.04 LTS herunter (Stand August 2024). Die Größe der ISO-Datei ca. 2,5 GB.
-
Erstelle einen bootfähigen USB-Stick mit dem eben heruntergeladenen ISO-Abbild. Es gibt zahlreiche freie Software-Tools dafür im Internet, ein schönes Open Source-Werkzeug wäre Rufus. Möchtest Du Dein Ubuntu virtualisieren, dann ist dies nicht notwendig, Du kannst in der Regel direkt die ISO-Datei verwenden.
-
Wie auch immer: Boote Deinen Computer mit Hilfe des USB-Stick oder aber starte eine neue virtuelle Maschine direkt von Deinem ISO-Abbild. In beiden Fällen erscheint zunächst der Boot Loader GRUB.
-
Bestätige die Standarduaswahl, um den Startbildschirm der Ubuntu-Installation anzuzeigen.
-
Wähle Deine präferierte Anzeigesprache aus. In unserem Fall haben wir uns für Englisch entschieden.
-
Jetzt wirst Du gefragt, ob Du das Installationsprogramm aktualisieren möchtest. Natürlich wollen wir das, wähle also
Update to the new installer
aus. -
Jetzt musst Du das Tastaturlayout auswählen. Arbeitest Du mit einer deutschen QWERTZ-Tastatur, dann wähle
German
aus. -
Jetzt musst Du den Installationstype auswählen. Die Minimized-Version ist hauptsächlich für eingebettete Geräte und Container-Virtualisierung gedacht. Wir belassen es also bei der Standardauswahl.
-
Ist Dein Ubuntu Server in einem Netzwerk mit aktivem DHCP-Dienst eingebunden, ist der Netzwerkadapter bereits vorkonfiguriert. Für eine statische Netzwerkadresse oder bei mehreren verfügbaren Netzwerkadaptern kannst Du die Vorgaben natürlich nach Deinen Wünschen abändern.
-
Sollte der Zugang zum Internet über einen Proxy Server laufen, dann must Du dessen Netzwerkadresse hier eintragen. Ansonsten einfach bestätigen.
-
Die Ubuntu-Distribution besteht aus einer Vielzahl von Software-Paketen, die regelmäßig aktualisiert werden. Diese Software-Pakete werden in einem öffentlichen Softwarearchiv hinterlegt. Das Master-Archiv für Ubuntu befindet sich unter http://archive.ubuntu.com/ubuntu. Um jedoch nicht von einem Archivort abhängig zu sein, existieren zahlreiche Kopien dieses Archivs im Internet. So eine Kopie nennt man Archive Mirror. Diese dienen dazu, einen möglichen Ausfall des Master-Archiv zu kompensieren, aber auch dazu, eine Lastverteilung herzustellen.
In unserem Fall ist der deutsche Country Mirror http://de.archive.ubuntu.com/ubuntu (also der zentrale Archive Mirror für Deutschland) voreingetragen. Genauso soll es sein, Du brauchst nur noch bestätigen.
-
Als nächstes muss der Speicerhplatz konfiguriert werden. Wir übernehmen die Vorgabe und erstellen eine große Partition, welche die gesamte Festplatte überspannen soll.
-
Es wird uns jetzt eine Zusammenfasung der Speicherplatzkonfigration angezeigt. Tatsächlich werden zwei Partitionen erstellt. Eine kleine Partition für den Bootloader und die eigentliche von uns gewünschte Partition. Der Bootloader ist das Bindeglied zwischen BIOS und Linux-Kernel, er ist u.a. dafür verantwortlich, den Linux-Kernel zu laden. Die Größe des Speicherplatzes kannst Du durch Auswahl des Befehls
[Reset]
bei Bedarf anpassen. -
Und jetzt geht auch schon gleich los. Mit der nächsten Bestätigung starten wir den Installationsprozess.
-
Während Ubuntu nun fleißig vor sich hin installiert, können wir weitere Fragen zu unserem Profil beantworten. Wir müssen einen Benutzer definieren, um uns später an unserem Ubuntu Server anmelden zu können. Unser Ubuntu Server muss auch einen Netzwerknamen bekommen. All diese Identifikationsmerkmale tragen wir auf der folgenden Bildschirmmaske ein.
-
Jetzt wirst Du gefragt, ob Du zu Ubuntu Pro upgraden möchtest. Nein, wollen wir nicht.
-
Über OpenSSH hatten wir schon gesprochen. Ja, wir wollen OpenSSH installieren, damit wir zukünftig unseren Ubuntu Server von einem anderen Rechner aus sicher administrieren können.
-
Wer möchte kann nun ein oder mehrere Snaps auswählen, die dann automatisch mitinstalliert werden. Ein Snap ist ein Softwarepaket bestehend aus einer Applikation und all Ihren Abhängigkeiten. Das wollen wir aber nicht, also lassen wir die Auswahl leer.
-
Die Installation ist fertig. Jetzt müssen wir unseren Ubuntu Server neu starten.
-
Nach dem Neustart blinkt uns die Eingabeaufforderung fröhlich an.
Unser Ubuntu Server läuft, super. Die nächsten Schritte dienen dazu, die Administration per SSH zu ermöglichen.
root, sudo und nano
Der root user ist unter Linux ein stets vorhandenes Benutzerkonto, das den Super-Administrator des Gesamtsystems repräsentiert. Er hat umfassende Rechte und kann auf alle Dateien, Daten und Kommandos zugreifen. Da der Benutzer root
damit automatisch die Zielscheibe Nr. 1 für jeden Hackerangriff ist, kann man sich unter Ubuntu standardmäßig nicht als root
anmelden. Man kann sich nur mit seinem persönlichen Konto anmelden (in unserem Fall also mit dem Benutzerkonto frank
, das wir im Zuge der Installation angelegt haben), das wesentlich weniger Rechte besitzt.
Möchte man administrative Aufgaben in Ubuntu übernehmen, so kann man sich mittels des Befehls sudo Administrationsrechte (root privileges) zuweisen lassen. Sudo ist eine Abkürzung für superuser do.
Probieren wir es aus:
-
Zunächst melde Dich mit dem Konto
frank
an. -
Jetzt wollen wir unseren Ubuntu Server auf den aktuellsten Stand bringen, d.h. wir wollen alle verfügbaren Updates installieren. Dazu tippe folgende Befehlskombination ein:
$ sudo apt update && sudo apt upgrade
-
Du wirst erneut aufgefordert, Dich zu authentifizieren. Anschließend beginnt Ubuntu damit, das System zu analysieren und listet Dir alle Packages auf, die erneuert werden müssen.
-
Du musst mit
Y
bestätigen, dass Ubuntu die notwendigen Packages herunterladen und installieren soll.
Was genau ist nun passiert?
Zum Aktualisieren des Systems benötigt man Administrationsrechte. Dazu haben wir den beiden Anweisungen apt update
und apt upgrade
jeweils den Befehl sudo
vorgesetzt. Er ermöglicht berechtigten Benutzern, in der Rolle eines Administrators zu agieren.
Berechtigt sind alle Benutzer, die in der Datei
/etc/sudoers
registriert sind. Diese Benutzer heißen deshalb auch sudoers. Das Konto frank
wurde bei der Installation automatisch in dieser Datei registriert. Andernfalls hätten wir ja keine Chance, unser Ubuntu zu administrieren.
Man muss sich übrigens nicht bei jedem sudo
-Befehl neu authentifizieren. Nach dem ersten Mal wird man die nächsten 15 Minuten nicht erneut nach seinem Kennwort gefragt.
Zum Editieren von Konfigurationsdateien benötigen wir einen Texteditor. Mir gefällt der Texteditor Nano am besten. Er ist unter Ubuntu 24.04 bereits vorinstalliert.
OpenSSH-Server unter Ubuntu
Installation
Der OpenSSH-Server sollte in unserem Fall bereits vorhanden sein, wir hatten ihn ja während der Installation von Ubuntu explizit ausgewählt.
Falls wir die Auswahl in der ganzen Aufregung doch übersehen haben, können wir den OpenSSH-Server wie folgt nachinstalliert:
-
Tippe ein:
$ sudo apt install openssh-server
-
Unmittelbar danach sollte man testen, ob der SSH-Dienst aktiv ist:
$ sudo systemctl status ssh
-
Ist die Antwort negativ, kann man ihn manuell aktivieren:
$ sudo systemctl enable ssh $ sudo systemctl start ssh
Key Fingerprints
SSH läuft jetzt. Tippe den folgenden Befehl ein:
$ ssh-keygen -l -f <(ssh-keyscan gagarin24)
Dir werden alle öffentlichen Key Fingerprints (Schlüssel-Fingerabdrücke) des OpenSSH-Servers aufgelistet.
Beim Erstzugriff eines OpenSSH-Clients wird Dir ebenfalls ein Key Fingerprint angezeigt, und Du wirst gefragt, ob es sich beim angefragten Computer auch wirklich um den gewünschten SSH-Server handelt. Um diese Frage zu beantworten, muss der ausgewiesene Key Fingerprint mit einem der hier aufgelisteten Key Fingerprints übereinstimmen.
Dein Ubuntu Server ist jetzt bereit und kann auf SSH-Anfragen antworten. Bitte achte darauf, dass bei Einsatz einer Firewall der TCP-Port 22 freigeschaltet ist.
OpenSSH-Client unter Windows 11
Der OpenSSH-Client unter Windows 10 (ab Version 1803) ist standardmäßig installiert und kann sofort genutzt werden. Genau das machen wir jetzt auch und versuchen unseren soeben aufgesetzten Ubuntu Server per SSH zu erreichen.
Wir gehen dabei von folgender Konfiguration aus (alles nur Beispieldaten, die es real so nicht gibt):
Server:
- DNS-Name: gagarin24
- Benutzername des Administrators: frank
Client:
- DNS-Name: myhost
- Benutzername: frank
Authentifizierung mit Kennwort
Öffne auf Deinem Windows-Rechner die Windows-Kommandozeile und tippe folgendes ein:
ssh frank@gagarin24
Beim ersten Start wird der Key Fingerprint des Servers angezeigt, und Du wirst gefragt, ob Du dich wirklich mit diesem Server verbinden möchtest.
The authenticity of host 'gagarin24 (192.168.226.128)' can't be established.
ECDSA key fingerprint is SHA256:RtXIK/85GVUFmrbgxdToTPrd3rt2++AQIYdlOwY4ycQ.
Are you sure you want to continue connecting (yes/no)?
Du solltest zunächst überprüfen, ob der angezeigte Key Fingerprint auch wirklich von Deinem Server stammt (siehe Abschnitt “Key Fingerprints”). Bestätige anschließend mit yes
und der Server wird in die lokale Liste der bekannten Rechner eingetragen. Diese Abfrage siehst Du nur beim aller ersten Zugriff auf Deinen Ubuntu Server.
Anschließend wirst Du nach dem Kennwort des Benutzers frank
auf dem Server gagarin24
gefragt. Tippe es ein und Du hast Fernzugriff auf Deinen Server.
Der OpenSSH-Client speichert die Liste der bekannten Rechner (Known Hosts) in einer Textdatei. Du kannst Sie Dir mit folgendem Befehl anzeigen lassen:
notepad "%USERPROFILE%\.ssh\known_hosts"
Authentifizierung mit SSH-Schlüssel
Hierbei musst Du einmalig ein Schlüsselpaar mit einem privaten und einem öffentlichen Schlüssel generieren. Der öffentliche Schlüssel wird auf dem SSH-Server hinterlegt, der private Schlüssel bleibt auf Deinem lokalen Rechner. Die Authentifizierung erfolgt nun durch das Versenden eines mit dem öffentlichen Schlüssel kodierten Datenpakets vom SSH-Server zum SSH-Client, der dieses mit seinem privaten Schlüssel wieder dekodieren muss. Ist die Dekodierung erfolgreich, bist Du authentifiziert.
Ein Schlüsselpaar erzeugen
Öffne auf Deinem Windows-Rechner die Windows-Kommandozeile und tippe folgendes ein:
cd %USERPROFILE%\.ssh\
ssh-keygen -t ed25519
Du bekommst folgende Meldung angezeigt:/
Generating public/private ed25519 key pair.
Enter file in which to save the key (C:\Users\frank/.ssh/id_ed25519):
Bestätige mit der Eingabetaste
.
Jetzt wirst Du gefragt, ob Du ein Kennwort zum Absichern Deines privaten Schlüssels definieren möchtest. Dies ist dringend zu empfehlen.
Enter passphrase (empty for no passphrase):
Das einmal eingegebene Kennwort musst Du zur Sicherheit noch einmal wiederholen:
Enter same passphrase again:
Jetzt wird ein neues Schlüsselpaar generiert und eine Meldung wie diese erscheint in Deiner Kommandozeile:
Your identification has been saved in C:\Users\frank/.ssh/id_ed25519.
Your public key has been saved in C:\Users\frank/.ssh/id_ed25519.pub.
The key fingerprint is:
SHA256:7KMZvJiITZ+HbOyqjNPV5AeC5As2GSZES5baxy1NIe4 myhost@Frank
The key's randomart image is:
+--[ED25519 256]--+
|E ..o=*o.+o |
|. .oo+oo... |
|.... o=.. |
| o+. o = |
|o .oo ooS. |
|* ...+o oo |
|oo.. o+o+o |
| . o+o+o |
| .o.. |
+----[SHA256]-----+
Die Meldung bedeutet, dass in der Datei C:\Users\frank\.ssh\id_ed25519
der private Schlüssel und in der Datei C:\Users\frank\.ssh\id_ed25519.pub
der öffentliche Schlüssel gespeichert wurde.
Wir haben hier bewusst einen Ed25519-Schlüssel erzeugt. Dieser wird momentan als sicherster Schlüsseltyp für OpenSSH empfohlen. Standardmäßig (also ohne Type-Option) erzeugt ssh-keygen
einen RSA-Schlüssel.
Den öffentlichen Schlüssel verteilen
Der private Schlüssel ist privat und darf unter keinen Umständen veröffentlicht werden. Der öffentliche Schlüssel muss jedoch Deinem Ubuntu Server bekanntgemacht werden. Dazu musst Du die Datei
C:\Users\frank\.ssh\id_ed25519.pub
von Deinem lokalen Windows-Computer kopieren und auf Deinem Ubuntu Server unter dem neuen Pfad
~/.ssh/authorized_keys
ablegen (Achtung: Zieldatei hat keine Dateiendung).
Der folgende ziemlich lange und komplizierte Kommandozeilenbefehl hilft Dir dabei:
ssh frank@gagarin24 "umask 077; test -d .ssh || mkdir .ssh ; cat >> .ssh/authorized_keys || exit 1" < C:\Users\frank\.ssh\id_ed25519.pub
Diese Befehlsorgie erstellt zunächst eine SSH-Verbindung zu Deinem Ubuntu Server (Kennwort-Authentifizierung). Dann wird überprüft, ob der Ordner ~/.ssh
bereits existiert. Falls nicht, wird er angelegt. Zu guter Letzt wird der Inhalt der Datei id_ed25519.pub
übertragen und als Datei unter dem Namen authorized_keys
gespeichert. Achtung: Eine eventuell vorhandene Datei mit gleichem Namen würde dabei überschrieben werden.
Testen
Öffne auf Deinem Windows-Rechner die Windows-Kommandozeile und tippe folgendes ein:
ssh frank@gagarin24
Du wirst nun nach dem Kennwort Deines privaten Schlüssels gefragt.
Enter passphrase for key 'C:\Users\frank/.ssh/id_ed25519':
Tippe es ein, und Du hast Fernzugriff auf Deinen Ubuntu Server.
Kennwort-Authentifizierung unterbinden
Tippe folgenden Befehl ein:
$ sudo nano /etc/ssh/sshd_config
Dir wird nun der Inhalt der Datei sshd_config
im Texteditor Nano angezeigt. Diese enthält alle Konfigurationsparamter für den OpenSSH-Server unter Ubuntu.
Bei einer Authentifizierung per SSH-Schlüssel sollte die Authentifizierung per Kennwort unterbunden werden. Andernfalls läuft der sicherheitstechnische Vorteil des SSH-Schlüssels ins Leere. Daher ändere die Zeile
PasswordAuthentication yes
ab in
PasswordAuthentication no
Speichere die Konfigurationsdatei (Drücke dazu die Tastenkombination Strg+^+X
und anschließend Y
) und starte den OpenSSH-Serverdienst neu. Tippe dazu folgenden Befehl ein:
$ sudo systemctl restart ssh
Kennwort oder SSH Schlüssel?
Die meisten Tutorials empfehlen den SSH-Schlüssel als sicherste Alternative. Bei dieser Methode verlässt der SSH-Schlüssel nicht Deinen Rechner, kann also weder abgefangen noch durch einen Brute-Force-Angriff erraten werden. Dies setzt allerdings voraus, dass Dein Client-Computer abgesichert ist und auch bei einem Diebstahl nicht sofort geknackt werden kann, denn der private SSH-Schlüssel ist dort dauerhaft gespeichert. Es wird daher dringend empfohlen, den privaten SSH-Schlüssel mit einem starken Kennwort zu schützen.
Weitere Benutzer hinzufügen
Wir wollen nun weiteren Benutzern den Zugriff auf unseren Ubuntu-Server ermöglichen. Dabei gehen wir davon aus, dass nur eine Anmeldung per SSH-Schlüssel erlaubt ist.
Als Beispiel legen wir nun einen neuen Benutzer matthias
an:
-
Tippe folgenden Befehl ein:
$ sudo adduser matthias
Im Zuge dieses Befehls musst Du ein initiales Kennwort für
matthias
definieren und weitere Fragen zum Profil des Benutzers beantworten. -
Erstelle das folgende Verzeichnis:
$ sudo mkdir ~matthias/.ssh
-
Öffne den Texteditor nano wie folgt:
$ nano ~matthias/.ssh/authorized_keys
Kopiere den öffentlichen SSH-Schlüssel des Benutzers
matthias
in den Texteditor und speichere die Datei. Wir haben jetzt seinen öffentlichen SSH-Schlüssel hinterlegt. -
Übertrage die Dateirechte an den Benutzer
matthias
:$ sudo chown -R matthias:matthias ~matthias/.ssh $ sudo chmod 700 ~matthias/.ssh $ sudo chmod 600 ~matthias/.ssh/authorized_keys
-
Zum Schluss markieren wir das Kennwort als abgelaufen, um eine Änderung des Kennworts zu erzwingen
$ sudo passwd matthias -e
So, fertig. Lass dem Benutzer matthias
sein initiales Kennwort auf einem sicheren Weg zukommen.
Dieser kann sich jetzt mit seinem privaten SSH-Schlüssel an unserem Ubuntu-Server anmelden. Da sein Kennwort abgelaufen ist, wird er unmittelbar nach erfolgreicher Anmeldung aufgefordert, es neu zu vergeben. Dazu benötigt er einmalig das initiale Kennwort.
Soll der Benutzer matthias
auch volle Administrationsrechte bekommen, dann tippe folgendes ein:
$ sudo usermod -aG sudo matthias
Möchtest Du den Benutzer matthias
wieder loswerden, tippe folgendes ein:
$ sudo deluser matthias
Noch Fragen?
Ein Mini-FAQ:
-
Warum ist die Ordnerstruktur (
/home
,/etc
,/usr
usw.) unter Linux so wie sie ist?Die Ordnerhierarchie des Dateisystems unter Linux ist standardisiert. Einen umfassenden Überblick bietet die Spezifikation Filesystem Hierarchy Standard der Linux Foundation.
-
Wie kann ich mein eigenes Kennwort ändern?
$ passwd
-
Wie kann ich das Kennwort für
root
ändern?$ sudo passwd root
-
Wie kann ich meinen Benutzernamen nachträglich ändern?
$ sudo usermod -l francois frank
-
Wie deaktiviere ich die Anmeldung per SSH für
root
?$ sudo nano /etc/ssh/sshd_config
Dort den Parameter
PermitRootLogin
aufno
setzen. Dann den SSH-Server neu starten:$ sudo systemctl restart ssh.service
-
Was sollte ich beim Einsatz von SSH noch beachten?
Der Blog-Artikel OpenSSH absichern gibt Dir Tipps, wie Du die Standardkonfiguration von OpenSSH unter Ubuntu Server weiter absichern kannst.
-
Wie starte ich meinen Ubuntu Server neu?
$ sudo reboot
-
Wie fahre ich meinen Ubuntu Server herunter?
$ sudo poweroff
-
Mal was ohne
sudo
?$ lsb_release -a
Gibt die aktuelle Version Deines Ubuntu Servers aus.
-
Wie melde ich mich wieder ab?
$ exit
Deine aktuelle SSH-Sitzung wird also beendet.
Fazit
Ubuntu Server 24.04 LTS ist nun installiert und Du kannst ihn per SSH fernwarten. Jetzt liegt es an Dir, weitere Dienste zu installieren, um Deinen Ubuntu Server produktiv werden zu lassen.