Linux-Server einrichten: Ubuntu 24.04 von Null auf sicher

Ein VPS ist in zwei Minuten gebucht. Ubuntu 24.04 LTS ausgewählt, Root-Passwort gesetzt, fertig. Aber genau hier fangen die Fehler an, die Monate später zu Einbrüchen, Datenverlust oder nächtlichen Notfall-Sessions führen. Diese Anleitung zeigt dir, wie du einen frischen Ubuntu-Server so einrichtest, dass er von Anfang an sicher, reproduzierbar und wartbar ist.

System aktualisieren — sofort

Die erste SSH-Verbindung zum neuen Server führt immer über den Root-Benutzer. Das ist der einzige Moment, in dem du dich als Root anmelden solltest — danach nie wieder. Aber bevor du irgendetwas anderes tust, aktualisierst du das System. Ubuntu-Images bei Hostern sind oft Wochen alt, und in der Zwischenzeit wurden Sicherheitslücken geschlossen, die dein Server noch hat.

ssh root@[SERVER-IP]
apt update && apt upgrade -y

Das apt update holt die aktuelle Paketliste, apt upgrade installiert alle verfügbaren Updates. Das -y bestätigt automatisch — bei einem frischen System gibt es keinen Grund, jedes Paket einzeln zu prüfen. Dieser Schritt ist nicht optional. Ein ungepatchter Server im Internet ist wie eine offene Haustür in einer belebten Straße.

Zeitzone und Locale setzen

Klingt nach Nebensache, ist es aber nicht. Falsche Zeitzonen führen zu verwirrenden Log-Einträgen, falschen Cron-Zeiten und Timestamps in Datenbanken, die nicht zur Realität passen. Wenn du um 3 Uhr nachts einen Fehler debuggst und die Logs in UTC sind, kostet dich das Zeit, die du nicht hast.

timedatectl set-timezone Europe/Berlin
locale-gen de_DE.UTF-8
update-locale LANG=de_DE.UTF-8

Die Locale beeinflusst, wie Sortierungen, Datumsformate und Zeichensätze verarbeitet werden. Für einen Server in Deutschland ist de_DE.UTF-8 die richtige Wahl. UTF-8 stellt sicher, dass Umlaute, Sonderzeichen und internationale Zeichen korrekt verarbeitet werden — wichtig für jede Webanwendung, die mit Benutzereingaben arbeitet.

Einen eigenen Benutzer anlegen

Root ist der mächtigste Benutzer auf einem Linux-System. Genau deshalb solltest du ihn nicht für den täglichen Betrieb verwenden. Ein Tippfehler als Root kann das gesamte System zerstören — ein rm -rf / statt rm -rf ./ ist schneller passiert, als man denkt. Außerdem ist root der erste Benutzername, den Angreifer bei Brute-Force-Attacken durchprobieren.

adduser [dein-benutzer]
usermod -aG sudo [dein-benutzer]

Der neue Benutzer bekommt über die sudo-Gruppe die Möglichkeit, bei Bedarf administrative Befehle auszuführen — aber eben nur bei Bedarf, mit expliziter Bestätigung durch das eigene Passwort. Das ist das Prinzip der geringsten Berechtigung, und es ist einer der ältesten Sicherheitsgrundsätze in der IT.

SSH-Keys statt Passwort

Passwort-Authentifizierung per SSH ist ein Relikt aus einer Zeit, in der Brute-Force-Angriffe noch selten waren. Heute probieren automatisierte Bots tausende Passwort-Kombinationen pro Stunde an jedem öffentlich erreichbaren SSH-Port. Die Lösung sind SSH-Keys — asymmetrische Schlüsselpaare, bei denen der private Schlüssel niemals den eigenen Rechner verlässt.

Auf deinem lokalen Rechner generierst du ein Schlüsselpaar. Dabei verwende ich bewusst Ed25519 statt RSA. Ed25519 ist moderner, schneller und produziert kürzere Schlüssel bei gleicher oder besserer Sicherheit. RSA braucht mindestens 3072 Bit, um als sicher zu gelten — Ed25519 erreicht das gleiche Niveau mit 256 Bit.

# Auf deinem lokalen Rechner
ssh-keygen -t ed25519 -C "[dein-benutzer]@[deine-domain.de]"

Den öffentlichen Schlüssel kopierst du auf den Server. Das geht am einfachsten mit ssh-copy-id, das den Key direkt an die richtige Stelle legt und die Berechtigungen korrekt setzt.

ssh-copy-id -i ~/.ssh/id_ed25519.pub [dein-benutzer]@[SERVER-IP]

Teste jetzt, ob die Anmeldung mit dem Key funktioniert, bevor du die Passwort-Anmeldung deaktivierst. Wenn der Key nicht funktioniert und du das Passwort schon abgeschaltet hast, sperrst du dich selbst aus.

ssh [dein-benutzer]@[SERVER-IP]

Passwort-Authentifizierung und Root-Login deaktivieren

Sobald die Key-Authentifizierung funktioniert, schaltest du die Passwort-Anmeldung ab. Damit wird jeder Brute-Force-Angriff auf Passwörter wirkungslos — es gibt schlicht keinen Passwort-Mechanismus mehr, den man angreifen könnte.

sudo nano /etc/ssh/sshd_config

Folgende Einstellungen änderst du oder fügst sie hinzu:

PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
ChallengeResponseAuthentication no

PermitRootLogin no verhindert, dass sich jemand direkt als Root anmelden kann — auch nicht mit einem gültigen Key. Der Root-Account bleibt nutzbar, aber nur über sudo von deinem eigenen Benutzer aus. Das ist kein Komfort-Feature, sondern eine harte Sicherheitsmaßnahme.

sudo systemctl restart sshd

Öffne jetzt ein zweites Terminal und teste die Anmeldung, bevor du das aktuelle schließt. Wenn etwas schiefgegangen ist, hast du noch eine aktive Session, über die du den Fehler korrigieren kannst.

Grundlegende Pakete installieren

Ein frisches Ubuntu bringt das Nötigste mit, aber für die tägliche Arbeit fehlen ein paar Werkzeuge. Diese Pakete installiere ich auf jedem Server, weil sie früher oder später gebraucht werden — und weil es einfacher ist, sie von Anfang an da zu haben, als sie mitten in einer Debugging-Session nachzuinstallieren.

sudo apt install -y \
  curl wget git unzip htop \
  software-properties-common \
  apt-transport-https ca-certificates \
  gnupg lsb-release

htop ist ein interaktiver Prozessmonitor, der dir auf einen Blick zeigt, was auf dem Server passiert. curl und wget brauchst du für Downloads und API-Abfragen. git für Versionskontrolle — selbst wenn du auf dem Server nicht entwickelst, wirst du Konfigurationsdateien versionieren wollen. Die restlichen Pakete sind Voraussetzungen für Repositories, die du später hinzufügen wirst — etwa für nginx, PHP oder MariaDB.

Automatische Sicherheitsupdates

Sicherheitslücken werden nicht nach deinem Zeitplan veröffentlicht. Zwischen der Veröffentlichung eines Patches und dem ersten Exploit vergehen manchmal nur Stunden. Deshalb sollte dein Server kritische Updates automatisch installieren — ohne dass du daran denken musst.

sudo apt install -y unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades

Ubuntu installiert damit automatisch Sicherheitsupdates aus den offiziellen Repositories. Normale Paket-Updates — also neue Versionen von Software — werden nicht automatisch eingespielt. Das ist die richtige Balance: Sicherheit automatisch, Feature-Updates manuell und kontrolliert.

Der Server ist bereit

Dein VPS ist jetzt aktuell, hat einen eigenen Benutzer mit sudo-Rechten, akzeptiert nur noch Key-Authentifizierung und installiert Sicherheitsupdates automatisch. Das ist kein übertriebener Aufwand — das ist das absolute Minimum, bevor du irgendeinen Dienst darauf installierst. Im nächsten Schritt schützt du den Server mit einer Firewall und Fail2Ban vor den unvermeidlichen Angriffsversuchen aus dem Netz.

Die gezeigten Code-Beispiele dienen zur Veranschaulichung. Nutzung auf eigene Verantwortung. Mehr dazu