Skip to content

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