Jeder neue Server fragt früh oder spät nach seiner Identität: Wer bin ich (Hostname), welche Sprache und Zeichenkodierung benutze ich (Locale), in welcher Zeitzone befinde ich mich? Frisch ausgelieferte VPS-Installationen bringen meist Defaults mit, die nicht zum tatsächlichen Use Case passen — localhost.localdomain als Hostname, C.UTF-8 oder POSIX als Locale, UTC als Zeitzone. Dieser Artikel zeigt, wie du Hostname mit FQDN korrekt setzt, eine sinnvolle Locale wählst, die Zeitzone sauber konfigurierst und Zeit per chrony oder systemd-timesyncd automatisch synchron hältst.
Warum diese drei Themen früh setzen?
Auf den ersten Blick wirken Hostname, Locale und Zeitzone wie Kosmetik — der Server läuft auch mit localhost und POSIX. In der Praxis hängen aber überraschend viele Dinge daran:
- Logs bekommen Zeitstempel basierend auf der Zeitzone des Servers. Wer Logs zwischen mehreren Servern korrelieren muss, braucht entweder identische Zeitzonen oder konsistent UTC. Locale beeinflusst zusätzlich, wie Datums- und Zahlenformate in Logs aussehen.
- TLS-Zertifikate prüfen Gültigkeit über die System-Zeit. Eine falsche Uhr lässt Zertifikate als „noch nicht gültig” oder „abgelaufen” erscheinen — und das Setup bricht subtil und schwer zu diagnostizieren.
- Mail-Versand scheitert, wenn der Mailserver des Empfängers den Hostnamen nicht korrekt auflösen kann oder die Uhr abdriftet (DKIM-Signaturen, SPF-Checks, ratelimits).
- Cron-Jobs laufen zu falschen Zeiten, wenn die Zeitzone nicht stimmt — das Backup-Job, der laut Crontab um 03:00 Uhr starten soll, läuft dann eben um 02:00 oder 05:00 lokaler Zeit.
- Anwendungen lesen
LANG/LC_*-Variablen für Sortierreihenfolgen (ävorboder hinterz?), Datumsausgaben und Fehlermeldungen.
Daher gehören diese drei Einstellungen früh in den Bootstrap — am besten direkt nach Benutzer-/SSH-Setup und vor der ersten echten Anwendung.
Hostname und FQDN setzen
Linux unterscheidet zwei Konzepte beim Server-Namen:
- Hostname (kurz) — der Eigenname des Servers, z. B.
webserver01. Wird in Shell-Prompts, Logs und Mail-Headern angezeigt. - FQDN (Fully Qualified Domain Name) — Hostname plus Domain, z. B.
webserver01.mydomain.com. Wird in Mail-Versand, TLS-Zertifikaten und überall dort genutzt, wo ein eindeutiger Bezug zum Server in einem größeren Netz wichtig ist.
Den aktuellen Stand abfragen:
hostnamectlAusgabe (Auszug):
Static hostname: webserver01
Pretty hostname: WebServer 01
Icon name: computer-vm
Chassis: vm
Machine ID: a1b2c3d4...
Boot ID: e5f6g7h8...
Operating System: Debian GNU/Linux 13 (trixie)
Kernel: Linux 6.6.20-amd64
Architecture: x86-64Den Hostnamen setzen — der Static hostname ist der entscheidende Wert, der dauerhaft persistiert (in /etc/hostname geschrieben):
sudo hostnamectl set-hostname webserver01Die Änderung greift sofort — neu öffnen einer Shell zeigt den neuen Prompt. Ein Reboot ist nicht nötig.
Hostname-Konventionen. Der Hostname darf nur ASCII-Buchstaben (a–z, A–Z), Ziffern und Bindestriche enthalten, keine Leerzeichen oder Unterstriche. Er muss mit einem Buchstaben oder einer Ziffer beginnen, nicht mit einem Bindestrich. Maximale Länge: 64 Zeichen. Sinnvoll: kurz, sprechend, ohne Versionsnummern (
webserver01stattweb-prod-2026-q2).
/etc/hosts korrekt eintragen
Damit der Server seinen eigenen FQDN auch ohne externe DNS-Abfrage auflösen kann, gehört ein Eintrag in /etc/hosts:
sudo nano /etc/hostsSinnvolle Inhalte:
127.0.0.1 localhost
127.0.1.1 webserver01.mydomain.com webserver01
# IPv6
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allroutersDer entscheidende Eintrag ist die zweite Zeile: 127.0.1.1 (Debian-Konvention, alternativ die echte öffentliche IP) gefolgt von erst dem FQDN, dann dem kurzen Hostnamen. Diese Reihenfolge ist wichtig — hostname --fqdn liest die erste Spalte rechts der IP und nimmt diesen als FQDN. Wer nur den kurzen Namen einträgt, bekommt hostname --fqdn mit dem kurzen Namen zurückgemeldet, was viele Tools verwirrt.
Verifikation:
hostname # erwartet: webserver01
hostname --fqdn # erwartet: webserver01.mydomain.com
hostname --domain # erwartet: mydomain.comWenn hostname --fqdn etwas anderes liefert als erwartet, stimmt die Reihenfolge in /etc/hosts nicht.
127.0.0.1vs.127.0.1.1— Debian/Ubuntu nutzen historisch127.0.1.1für den eigenen FQDN, weil127.0.0.1fürlocalhostreserviert ist. Wichtig ist, dass eine Loopback-Zeile den FQDN trägt; ob das auf 127.0.0.1 oder 127.0.1.1 passiert, ist Konvention. Auf RHEL-Familie ist 127.0.0.1 mit dem FQDN üblicher.
Locale konfigurieren
Die Locale definiert, in welcher Sprache, mit welcher Zeichenkodierung, mit welchem Datumsformat, mit welchen Sortierreihenfolgen das System arbeitet. Frisch installierte VPS bringen oft C, POSIX oder C.UTF-8 mit — das funktioniert technisch, ist aber für Anwendungen suboptimal:
- Sortierreihenfolge ist ASCII-basiert (
Zvora). - Tools wie
manzeigen Inhalte in englisch — was meistens gewollt ist, aber bewusst entschieden gehört. - Zeichenkodierung ist im Idealfall UTF-8, nicht alle Defaults sind das.
Aktuellen Stand abfragen:
localeErwartete Form: LANG=de_DE.UTF-8, LC_*=de_DE.UTF-8. Wenn alle Variablen leer oder auf C stehen, ist Aufräumen angesagt.
Auf Debian/Ubuntu: Locales sind als Pakete vorhanden, müssen aber kompiliert werden, bevor sie nutzbar sind.
sudo dpkg-reconfigure localesIm Auswahl-Menü die gewünschten Locales markieren — typisch de_DE.UTF-8 UTF-8 und en_US.UTF-8 UTF-8. Beim folgenden Schritt wird die System-Default-Locale gewählt. Nicht-interaktive Variante:
sudo locale-gen de_DE.UTF-8 en_US.UTF-8
sudo update-locale LANG=de_DE.UTF-8Auf RHEL-Familie: Locales werden über glibc-langpack-*-Pakete installiert.
sudo dnf install glibc-langpack-de glibc-langpack-en -y
sudo localectl set-locale LANG=de_DE.UTF-8Die Änderung greift für neue Login-Sessions. Bestehende SSH-Sessions behalten ihre alte Locale, bis man sich neu einloggt. Test:
# In neuer Session
echo "Größe: ÄÖÜ" # erwartet: korrekte Umlaute
date # in deutscher Locale: deutsche Wochentage
sort < /etc/passwd # erwartet: locale-konforme SortierungEnglische oder deutsche Locale? Auf Servern, die Logs an externe Stellen weitergeben oder mit englischsprachigen Tools arbeiten (Monitoring-Software, Cloud-Provider-Konsolen, Stack-Exchange-Suchen), ist
en_US.UTF-8oft die pragmatischere Wahl — Fehlermeldungen sind dann englisch und googlebar. Auf rein lokal genutzten Maschinen istde_DE.UTF-8natürlicher. Beide Varianten sind legitim, die Entscheidung sollte bewusst sein.
Zeitzone setzen
Die Zeitzone steuert, wie der Kernel UTC-Zeit als lokale Zeit darstellt — gespeichert wird intern immer UTC, die Umrechnung ist eine Anzeige-Frage. Aktuellen Stand prüfen:
timedatectlAusgabe (Auszug):
Local time: Mi 2026-05-08 14:23:45 CEST
Universal time: Mi 2026-05-08 12:23:45 UTC
RTC time: Mi 2026-05-08 12:23:45
Time zone: Europe/Berlin (CEST, +0200)
System clock synchronized: yes
NTP service: active
RTC in local TZ: noVerfügbare Zonen anzeigen und passende setzen:
timedatectl list-timezones | grep Europe
sudo timedatectl set-timezone Europe/BerlinWelche Zeitzone wählen? Es gibt zwei sinnvolle Strategien:
- Lokale Zeitzone (z. B.
Europe/Berlin) — Logs sind in „natürlicher Zeit”, was beim Debugging während Geschäftszeiten praktisch ist. Cron-Jobs laufen zu menschlich nachvollziehbaren Uhrzeiten. - UTC — Logs sind zeitzonen-frei und korrelierbar zwischen Servern in verschiedenen Regionen. Sommerzeit-/Winterzeit-Wechsel verursachen keine Doppelung oder Lücken in Logs.
Auf Single-Server-Setups ist die lokale Zeitzone meistens die bessere Wahl. Auf Multi-Server-Setups, wo Logs zentral aggregiert werden, ist UTC die saubere Lösung.
RTC in local TZ: noist die richtige Einstellung für Linux-Server. Die Hardware-Uhr (RTC) sollte UTC enthalten, der Kernel rechnet auf die lokale Zeitzone um. Bei Dual-Boot mit Windows kann es Konflikte geben — auf reinen Linux-Servern aber kein Thema.
Zeit-Synchronisation: chrony oder systemd-timesyncd
Eine korrekt eingestellte Zeitzone allein bringt nichts, wenn die Server-Uhr abdriftet. Hardware-Uhren laufen je nach Qualität ein paar Sekunden bis Minuten pro Monat schief — auf VPS-Systemen typischerweise weniger, weil der Hypervisor regelmäßig nachstellt, aber verlassen sollte man sich darauf nicht. Zwei Tools dominieren das Feld:
- systemd-timesyncd — leichtgewichtig, in systemd integriert, kein zusätzliches Paket. Standard auf Ubuntu, oft auch auf Debian. Reicht für die meisten Server.
- chrony — vollwertige NTP-Implementierung, deutlich präziser, kann auch selbst NTP-Server für andere Maschinen sein. Standard auf RHEL-Familie, optional auf Debian/Ubuntu.
Welches läuft, zeigt timedatectl:
timedatectl status
# Zeile "NTP service: active" sagt nur: irgendetwas synchronisiert
# Welches Tool: systemctl is-active systemd-timesyncd / chronydsystemd-timesyncd aktivieren (falls noch nicht aktiv):
sudo timedatectl set-ntp true
systemctl status systemd-timesyncdNTP-Server sind in /etc/systemd/timesyncd.conf konfigurierbar — Defaults sind die distro-eigenen Pools, was meistens reicht. Wer eigene NTP-Server möchte (interne Infrastruktur, Cloud-Provider-eigene NTP-Server):
[Time]
NTP=time.cloudflare.com 0.de.pool.ntp.org
FallbackNTP=ntp.ubuntu.comAnwenden mit sudo systemctl restart systemd-timesyncd.
chrony als Alternative installieren:
sudo apt install chrony -y
# systemd-timesyncd wird beim Installieren automatisch deaktiviertsudo dnf install chrony -y
sudo systemctl enable --now chronydStatus mit chronyc tracking und chronyc sources — die zweite zeigt, welche NTP-Server in Verwendung sind und wie weit der Server sich davon entfernt hat.
Komplett-Verifikation
Nach allen drei Schritten sollte alles stimmen — eine kurze Prüfung:
# Hostname
hostname
hostname --fqdn
# Locale
locale
# Zeit
timedatectl
date
# NTP-Sync — sollte "yes" / "active" zeigen
timedatectl show | grep -E 'NTP|Synchronized'Wenn alles passt, ist der Server in einem sauberen, identifizierbaren Grundzustand und kann produktiv genutzt werden.
Sicherheits-Checkliste
- Static Hostname auf einen kurzen, sprechenden Namen gesetzt
/etc/hostsenthält FQDN und Kurznamen in der richtigen Reihenfolge —hostname --fqdnliefert das Erwartete- Locale auf UTF-8 gesetzt (
de_DE.UTF-8oderen_US.UTF-8), neue Sessions zeigen Umlaute korrekt - Zeitzone bewusst gewählt (lokal oder UTC, je nach Setup)
- NTP aktiv und Synchronisation in
timedatectlals „active”/„yes” sichtbar - Bei Multi-Server-Setups: Zeitzone konsistent über alle Server (am besten UTC)
Häufige Fehler bei Hostname, Locale und Zeitzone
Hostname mit Underscore oder Sonderzeichen
_ ist im Hostnamen technisch nicht erlaubt (RFC 952/1123) — viele Tools akzeptieren es trotzdem, manche brechen aber subtil. Klassiker: Mail-Versand schlägt fehl, weil der Empfänger-Mailserver beim HELO/EHLO einen ungültigen Hostnamen ablehnt. Nur Buchstaben, Ziffern, Bindestriche.
FQDN mit kurzem Namen verwechselt
In /etc/hosts steht der kurze Name vor dem FQDN — hostname --fqdn liefert dann den kurzen Namen, was Mail- und Cluster-Setups verwirrt. Korrekt: <ip> <fqdn> <kurzname>. Verifikation mit hostname --fqdn.
Locale gesetzt, aber Session zeigt es nicht
Bestehende SSH-Sessions behalten ihre Locale, bis sie neu eingeloggt werden. locale in der alten Session zeigt weiterhin die alten Werte. Einfach neu einloggen; auf laufenden Daemons greift die neue Locale erst nach systemctl restart.
Locale-Variablen werden vom SSH-Client überschrieben
Manche SSH-Clients (vor allem macOS Terminal.app) schicken LC_*-Variablen mit, die auf dem Server greifen — auch wenn dort de_DE.UTF-8 gesetzt ist. Symptom: Server reagiert mit Locale, die auf dem Server gar nicht installiert ist. Lösung: in /etc/ssh/sshd_config die Direktive AcceptEnv LANG LC_* auskommentieren oder restriktiver setzen, oder im SSH-Client SendEnv deaktivieren.
Zeitzone gesetzt, aber Cron läuft trotzdem in UTC
cron liest die Zeitzone beim Start von cron, nicht bei jedem Job. Nach einer Zeitzonen-Änderung muss cron neu gestartet werden: sudo systemctl restart cron (Debian/Ubuntu) bzw. crond (RHEL). Sonst laufen Jobs weiterhin nach UTC.
NTP scheinbar aktiv, aber keine echte Synchronisation
timedatectl kann „NTP service: active” zeigen, ohne dass der Service Server erreicht — z. B. weil die Firewall ausgehende UDP/123-Pakete blockt. Verifikation mit chronyc sources (chrony) oder journalctl -u systemd-timesyncd. Wenn keine Quellen synchronisiert sind, läuft die Uhr auf der Hardware-Zeit weiter und driftet.
Verwandte Artikel
- Eigenen Benutzer anlegen und sudo einrichten — der vorhergehende Bootstrap-Schritt
- Automatische Sicherheits-Updates einrichten — folgender Schritt: Updates greifen, Mail nutzt den FQDN
- SSH-Hardening —
sshd_configenthält die Locale-Forwarding-Regeln, die hier relevant werden - Linux-Doku: systemd-Übersicht —
timedatectl,localectl,hostnamectlsind systemd-Komponenten
Externe Quellen
- hostnamectl(1) Manpage — vollständige Befehlsreferenz
- systemd-timesyncd Manpage — minimaler NTP-Client
- chrony Documentation — vollständige NTP-Implementierung
- tzdata IANA Time Zone Database — Quelle aller
Europe/Berlin-,America/New_York-Bezeichner - RFC 952 / RFC 1123 — Hostnamen-Syntax-Regeln