Skip to content
Documentation Background

System Configuration

The Network Time Protocol (NTP) keeps the system clock accurate by synchronizing it with time servers on the internet. Accurate system time is critical for:

  • Log correlation across servers (debugging, security audits)
  • TLS certificate validation (certificates have time-based validity)
  • Scheduled jobs (cron, systemd timers)
  • Distributed system consistency (databases, clusters)

NTP uses a hierarchical structure called strata:

StratumSourceExample
0Reference clock (atomic, GPS)Cesium clock, GPS receiver
1Directly connected to Stratum 0National time servers (NIST, USNO)
2Synchronized from Stratum 1pool.ntp.org servers
3+Synchronized from higher strataYour local machine, internal NTP servers

Your machine typically synchronizes from Stratum 2/3 servers with millisecond-level accuracy.

Modern distributions use systemd-timesyncd (basic SNTP client) or chrony/ntpd for full NTP.

Terminal window
# View current time, timezone, and NTP synchronization status
timedatectl
# List available timezones
timedatectl list-timezones | grep America
# Set timezone
sudo timedatectl set-timezone America/New_York
# Enable/disable NTP synchronization
sudo timedatectl set-ntp true
sudo timedatectl set-ntp false
# Set time manually (only when NTP is disabled)
sudo timedatectl set-time "2025-03-15 14:30:00"
# Check NTP sync status
timedatectl show-timesync

chrony handles time synchronization more aggressively than the older ntpd and is the default on RHEL 8+:

Terminal window
# Check synchronization status
chronyc tracking
chronyc sources -v # show all configured sources and their state
# View the configured NTP servers/pools
cat /etc/chrony.conf
# Force an immediate time step (useful after long downtime)
sudo chronyc makestep

NetworkManager is the standard network configuration daemon on most modern Linux desktop and server distributions. It:

  • Detects and manages wired, wireless, and mobile broadband interfaces
  • Handles connection profiles (static IP, DHCP, VPN, etc.)
  • Exposes a D-Bus API used by desktop applets and CLI tools
nmcli / nmtui / nm-applet (GUI)
|
NetworkManager daemon
|
+-------+-------+
| |
Wired Wi-Fi (wpa_supplicant)
(kernel) (kernel)
ConceptDescription
Connection profileNamed set of settings (IP, DNS, gateway); stored in /etc/NetworkManager/system-connections/
DevicePhysical or virtual NIC (e.g., enp3s0, wlan0)
Active connectionA profile applied to a device
DHCPAutomatic IP assignment; used for most connections by default

How NetworkManager handles wired connections:

  • Detects link state automatically (cable plugged/unplugged)
  • Requests DHCP lease on link-up
  • For static configs: edits the connection profile via nmcli
Terminal window
# Show all connections (profiles)
nmcli connection show
# Show active connections
nmcli connection show --active
# Show device status
nmcli device status
# Connect/disconnect a profile
nmcli connection up "Profile Name"
nmcli connection down "Profile Name"
# Set static IP on a connection
nmcli connection modify eth0-static \
ipv4.addresses "192.168.1.100/24" \
ipv4.gateway "192.168.1.1" \
ipv4.dns "8.8.8.8" \
ipv4.method manual
# Reload all connections
sudo nmcli connection reload

For an interactive, menu-driven interface (useful over SSH):

Terminal window
sudo nmtui # opens a terminal UI for editing connections

NetworkManager supports many VPN types via plugins:

VPN TechnologyNetworkManager Plugin
OpenVPNNetworkManager-openvpn
WireGuardNetworkManager-wireguard
Cisco AnyConnect / OpenConnectNetworkManager-openconnect
Microsoft PPTPNetworkManager-pptp
IPSec / L2TPNetworkManager-l2tp
Terminal window
# Install OpenVPN plugin (RHEL/Fedora)
sudo dnf install NetworkManager-openvpn
# Import an OpenVPN .ovpn file
nmcli connection import type openvpn file client.ovpn
nmcli connection up client

System locale controls date/number format, language, and character encoding:

Terminal window
localectl # show current locale settings
localectl list-locales | grep en_US # find available locales
sudo localectl set-locale LANG=en_US.UTF-8
# Per-session override
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8

Terminal window
xdpyinfo | grep dim # current screen dimensions
xrandr # list outputs and supported resolutions
xrandr --output HDMI-1 --mode 1920x1080 # set resolution

Terminal window
hostnamectl # show hostname, OS info, kernel version
sudo hostnamectl set-hostname myserver # set a new hostname (persistent)
# Types of hostnames:
# Static: persisted in /etc/hostname; used by default
# Transient: may be set by DHCP/mDNS at runtime
# Pretty: human-readable string (can contain spaces)
sudo hostnamectl set-hostname "My Dev Server" --pretty