The migration from the legacy Source 1 engine to Source 2 fundamentally redesigned the architecture of the Counter-Strike 2 dedicated server. Unlike CS:GO, which relied on the 32-bit srcds_run launcher, CS2 operates as a native 64-bit Linux application, features a different directory structure, and mandates GSLT authentication for public listing and inventory access.
This guide provides a comprehensive setup procedure for installing a dedicated CS2 server on Linux from scratch: from base environment preparation and SteamCMD staging to GSLT credentialing and resilient systemd service configuration.
System dependencies and unprivileged user isolation#
Running game daemons under the root superuser is a critical security vulnerability. Any unpatched buffer overflow or network vulnerability in the game engine would grant an attacker root access to the underlying VPS.
Establish a dedicated cs2 service account and deployment path:
sudo useradd -m -s /bin/bash cs2
sudo mkdir -p /opt/cs2
sudo chown -R cs2:cs2 /opt/cs2
Install prerequisite system libraries (32-bit compatibility runtimes for SteamCMD alongside libicu localization binaries):
sudo dpkg --add-architecture i386
sudo apt update && sudo apt install -y lib32gcc-s1 lib32stdc++6 libicu-dev curl tar
Downloading the dedicated server payload via SteamCMD#
The dedicated server distribution for Counter-Strike 2 is registered under App ID 730 and supports anonymous retrieval without requiring a personal Steam account license.
Switch to the unprivileged cs2 account and initiate the download:
sudo -u cs2 /usr/games/steamcmd \
+force_install_dir /opt/cs2 \
+login anonymous \
+app_update 730 validate \
+quit
Verify that the 64-bit server executable is installed at its native Source 2 path:
file /opt/cs2/game/bin/linuxsteamrt64/cs2
GSLT credentialing and server.cfg baseline configuration#
For the dedicated server to register properly with Steam master servers, display in community browser queries, and render player inventory skins, a GSLT (Game Server Login Token) is required. Generate this token via the Steam Community interface (https://steamcommunity.com/dev/managegameservers) for App ID 730.
Establish a baseline server.cfg in the engine configuration directory:
sudo -u cs2 mkdir -p /opt/cs2/game/csgo/cfg
cat << 'EOF' | sudo -u cs2 tee /opt/cs2/game/csgo/cfg/server.cfg
hostname "Nexardo CS2 Dedicated Community Server"
sv_lan 0
sv_cheats 0
mp_autoteambalance 1
mp_limitteams 1
mp_maxrounds 24
mp_roundtime 1.92
EOF
Configuring a systemd unit and managing daemon execution#
To ensure automatic startup following system restarts and reliable background execution, wrap the engine inside a systemd service unit. Note the elevated file descriptor limit (LimitNOFILE), which is required by Source 2 under multiplayer loads:
cat << 'EOF' | sudo tee /etc/systemd/system/cs2.service
[Unit]
Description=Counter-Strike 2 Dedicated Server
After=network.target
[Service]
Type=simple
User=cs2
Group=cs2
WorkingDirectory=/opt/cs2/game/bin/linuxsteamrt64
ExecStart=/opt/cs2/game/bin/linuxsteamrt64/cs2 -dedicated +ip 0.0.0.0 -port 27015 +map de_dust2 +game_type 0 +game_mode 1 +sv_setsteamaccount YOUR_GSLT_TOKEN
Restart=on-failure
RestartSec=10
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
EOF
Reload systemd and initialize the service:
sudo systemctl daemon-reload
sudo systemctl enable --now cs2
sudo systemctl status cs2 --no-pager
Confirm that the server is actively listening on UDP port 27015:
ss -ulnp | grep 27015
For streamlined game server provisioning and health telemetry without manual systemd unit crafting, teams rely on an end-to-end server management platform, where CS2 instances, network bindings, and security tokens are managed through intuitive web workflows.




