Counter-Strike 2 Field guide

Install a CS2 server on Linux: SteamCMD, files and GSLT

Step-by-step setup of a dedicated CS2 server on Linux: SteamCMD staging, GSLT authentication, and resilient systemd configuration.

Install a CS2 server on Linux: SteamCMD, files and GSLT

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:

bash
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):

bash
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:

bash
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:

bash
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:

bash
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:

bash
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:

bash
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:

bash
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.

Sources#