Désactiver le préchargeur
Tutoriels Linux Serveurs de jeux

Installer un serveur Unturned sur Linux (Ubuntu, Debian, AlmaLinux)

Documentation / Tutoriels Linux / Serveurs de jeux / Installer un serveur Unturned sur Linux (Ubuntu, Debian, AlmaLinux)
Mis à jour le 21/09/2026
11 vues
Intermédiaire
30 minutes

Prérequis

Votre serveur :

Ce guide installe le serveur dédié Unturned avec SteamCMD, l'outil de Valve : un utilisateur dédié, le serveur (1,9 Go), ses réglages dans Commands.dat, un service qui l'arrête proprement et le démarre avec la machine, la console commandée depuis le terminal à travers screen, le pare-feu, la sonde qui prouve qu'il répond, la connexion depuis le jeu, la sauvegarde de nuit et la mise à jour. Choisissez votre système ci-dessus. Copiez la commande avec le bouton Copier, collez-la dans votre terminal, et comparez avec le résultat attendu.

1Mettre à jour le système et installer les bibliothèques 32 bits

SteamCMD, l'outil de Valve qui télécharge les serveurs de jeux, est un programme 32 bits : il lui faut les bibliothèques 32 bits du système. On met d'abord le système à jour ; sans cela, l'installation 32 bits échoue sur AlmaLinux, Rocky, CentOS et Fedora (conflit avec une bibliothèque plus ancienne), et SteamCMD ne peut pas joindre Steam sur une Fedora fraîche (certificats absents).

Mettre à jour le système
apt update && apt upgrade -y
Résultat attendu
...
212 upgraded, 8 newly installed, 0 to remove and 4 not upgraded.
(les nombres dépendent de l'âge de l'image)
Mettre à jour le système
dnf upgrade -y
Résultat attendu
...
Complete!
Mettre à jour le système
dnf upgrade -y
Résultat attendu
...
Complete!
Mettre à jour le système
zypper -n refresh && zypper -n update
Résultat attendu
All repositories have been refreshed.
...
Installer les bibliothèques 32 bits et curl
dpkg --add-architecture i386 && apt update && apt install -y lib32gcc-s1 lib32stdc++6 curl
Installer les bibliothèques 32 bits
dnf install -y glibc.i686 libstdc++.i686
Installer les bibliothèques 32 bits
dnf install -y glibc.i686 libstdc++.i686
Installer les bibliothèques 32 bits
zypper -n install glibc-32bit libstdc++6-32bit

openSUSE Leap 16 livre son noyau avec l'exécution des programmes 32 bits désactivée : sans cette étape, SteamCMD répond « Exec format error ». On l'active dans GRUB et on redémarre (reconnectez-vous en SSH après une minute).

Activer les programmes 32 bits dans le noyau, puis redémarrer
sed -i 's/^GRUB_CMDLINE_LINUX_DEFAULT="/GRUB_CMDLINE_LINUX_DEFAULT="ia32_emulation=1 /' /etc/default/grub && grub2-mkconfig -o /boot/grub2/grub.cfg && reboot
Après le redémarrage : vérifier que l'option est active
grep -o ia32_emulation=1 /proc/cmdline
Résultat attendu
ia32_emulation=1

2Créer un utilisateur dédié et installer SteamCMD

Le serveur ne tourne jamais en root : un utilisateur unturned, dont le dossier personnel est /opt/unturned, possède SteamCMD et le serveur. Le dossier est créé avant l'utilisateur : sur Rocky et CentOS, SELinux refuse à useradd de le créer lui-même sous /opt.

Créer les dossiers et l'utilisateur unturned
mkdir -p /opt/unturned/server /opt/unturned/steamcmd && useradd -r -s /bin/bash -d /opt/unturned unturned && chown -R unturned:unturned /opt/unturned
Télécharger SteamCMD (en tant que unturned)
su - unturned -c "cd /opt/unturned/steamcmd && curl -fsSL https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz | tar zxf - && ls"
Résultat attendu
linux32
steamcmd.sh

3Télécharger le serveur Unturned (1,9 Go)

SteamCMD se met à jour puis télécharge l'application 1110390, le serveur dédié Unturned. Comptez de deux à cinq minutes. Il arrive souvent que le premier passage se termine sur « ERROR! Failed to install app '1110390' (Missing configuration) » sans rien télécharger : relancez la même commande, elle passe.

Installer le serveur Unturned
su - unturned -c "/opt/unturned/steamcmd/steamcmd.sh +force_install_dir /opt/unturned/server +login anonymous +app_update 1110390 validate +quit"
Résultat attendu
... Update state (0x61) downloading, progress: 17.98 (342121649 / 1902468407)
...
 Update state (0x0) unknown, progress: 0.00 (0 / 0)
Success! App '1110390' fully installed.
Vérifier la taille et la présence du lanceur
du -sh /opt/unturned/server && ls -l /opt/unturned/server/ServerHelper.sh
Résultat attendu
1.9G	/opt/unturned/server
-rwxrwxr-x 1 unturned unturned 925 Sep 21 16:22 /opt/unturned/server/ServerHelper.sh
(les droits et la date varient)

4Écrire les réglages du serveur

Le lanceur ServerHelper.sh démarre un serveur nommé (ici MonServeur) et lit ses réglages dans Servers/MonServeur/Server/Commands.dat, une commande par ligne : le fichier est créé avant le premier démarrage. Changez le mot de passe. Avec un jeton GSLT, ajoutez une ligne GSLT suivie du jeton ; sans jeton, le serveur n'est ni listé ni joignable par adresse, seul son code de serveur (étape 7) permet d'entrer.

Créer Commands.dat
mkdir -p /opt/unturned/server/Servers/MonServeur/Server
cat > /opt/unturned/server/Servers/MonServeur/Server/Commands.dat << 'EOF'
Name Mon serveur Unturned
Password ChangezMoi
Map PEI
Port 27015
MaxPlayers 8
Perspective Both
Welcome Bienvenue sur mon serveur Unturned
EOF
chown -R unturned:unturned /opt/unturned
Name
Le nom affiché dans la liste des serveurs
Password
Le mot de passe demandé aux joueurs
GSLT VOTRE_JETON
Le jeton Steam : sans lui, pas de liste Internet ni de connexion par adresse
Map
La carte : PEI, Washington, Russia, Germany, Yukon (dossier Maps)
Port
27015 : le premier port sert à la liste des serveurs, le suivant (27016) au jeu
MaxPlayers
Le nombre de places
Owner VOTRE_STEAMID64
Votre identifiant Steam à 17 chiffres : les commandes d'administration depuis le jeu
Perspective
First, Third, Both ou Vehicle : les caméras permises
Mode, PvE, Cheats
Easy, Normal ou Hard ; PvE désactive le combat entre joueurs ; Cheats permet aux administrateurs de faire apparaître des objets
Welcome
Le message affiché à l'arrivée

5Démarrer le serveur comme un service

Unturned ne lit ses commandes que depuis un terminal : le service le lance dans screen, un terminal détaché, et l'arrête par la commande Shutdown, qui sauvegarde ; coupé autrement, il ne sauvegarde pas.

Installer screen
apt install -y screen
Installer screen (dépôt EPEL)
dnf install -y epel-release && dnf install -y screen
Installer screen
dnf install -y screen
Installer screen
zypper -n install screen
Autoriser le service à lancer screen (SELinux)
dnf install -y policycoreutils-python-utils && semanage fcontext -a -t bin_t /usr/bin/screen && restorecon -v /usr/bin/screen
Résultat attendu
Relabeled /usr/bin/screen from system_u:object_r:screen_exec_t:s0 to system_u:object_r:bin_t:s0
Autoriser le service à lancer screen (SELinux)
dnf install -y policycoreutils-python-utils && semanage fcontext -a -t bin_t /usr/bin/screen && restorecon -v /usr/bin/screen
Résultat attendu
Relabeled /usr/bin/screen from system_u:object_r:screen_exec_t:s0 to system_u:object_r:bin_t:s0
Créer le service unturned
cat > /etc/systemd/system/unturned.service << 'EOF'
[Unit]
Description=Serveur Unturned
After=network.target

[Service]
User=unturned
Group=unturned
WorkingDirectory=/opt/unturned/server
ExecStart=/usr/bin/screen -DmS unturned /opt/unturned/server/ServerHelper.sh +InternetServer/MonServeur
ExecStop=/bin/sh -c '/usr/bin/screen -S unturned -X stuff "Shutdown\n"; while /usr/bin/screen -ls | grep -q "[0-9].unturned"; do sleep 1; done'
TimeoutStopSec=90
Restart=on-failure
RestartSec=15

[Install]
WantedBy=multi-user.target
EOF
Activer et démarrer le service
systemctl daemon-reload && systemctl enable --now unturned
Résultat attendu
Created symlink /etc/systemd/system/multi-user.target.wants/unturned.service → /etc/systemd/system/unturned.service.

Le serveur écrit son journal dans Logs/Server_MonServeur.log : les réglages lus, le code de serveur, l'avertissement sur le jeton, puis « Loading level: 100% » au bout d'une trentaine de secondes. Il prend 800 Mo de mémoire au repos.

Une minute plus tard : le serveur est démarré et écoute
systemctl is-active unturned && grep -E 'Successfully set name|Server Code|GSLT|Loading level: 100' /opt/unturned/server/Logs/Server_MonServeur.log | cut -c1-100 && ss -lunp | grep -E ':2701[56] '
Résultat attendu
active
[2026-09-21 16:38:32] Successfully set name to Mon serveur Unturned!
[2026-09-21 16:38:50] Server Code: 90293153879467016
[2026-09-21 16:38:51] Steam Game Server Login Token (GSLT) not set
[2026-09-21 16:38:51] Loading level: 100%
UNCONN 0      0            0.0.0.0:27015      0.0.0.0:*    users:(("Unturned_Headle",pid=3867,fd=33))
UNCONN 0      0                  *:27016            *:*    users:(("Unturned_Headle",pid=3867,fd=39))
(le code de serveur est propre à chaque démarrage ; la ligne GSLT n'apparaît pas si le jeton est dans Commands.dat)

6Ouvrir les ports dans le pare-feu

Le serveur écoute en UDP sur le port 27015 (liste des serveurs) et sur le port 27016 (jeu). La commande active le pare-feu du système en gardant SSH autorisé, puis ouvre les ports.

Activer le pare-feu (SSH reste autorisé) et ouvrir les ports du jeu
apt install -y ufw && ufw allow 22/tcp && ufw allow 27015:27016/udp && ufw --force enable
Résultat attendu
...
Firewall is active and enabled on system startup
Activer le pare-feu (SSH reste autorisé) et ouvrir les ports du jeu
dnf install -y firewalld && systemctl enable --now firewalld && firewall-cmd --permanent --add-port=27015-27016/udp && firewall-cmd --reload
Résultat attendu
...
success
success
Activer le pare-feu (SSH reste autorisé) et ouvrir les ports du jeu
dnf install -y firewalld && systemctl enable --now firewalld && firewall-cmd --permanent --add-port=27015-27016/udp && firewall-cmd --reload
Résultat attendu
...
success
success
Ouvrir les ports du jeu (firewalld est déjà actif sur openSUSE)
firewall-cmd --permanent --add-port=27015-27016/udp && firewall-cmd --reload
Résultat attendu
success
success

Depuis une autre machine, la sonde ci-dessous interroge le serveur comme le fait la liste des serveurs (remplacez 203.0.113.42 par l'adresse de votre serveur) :

Interroger le serveur depuis une autre machine
python3 - 203.0.113.42 << 'EOF'
import socket, sys
h = sys.argv[1]
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM); s.settimeout(5)
q = b'\xff\xff\xff\xffTSource Engine Query\x00'
s.sendto(q, (h, 27015)); r = s.recvfrom(4096)[0]
if r[4:5] == b'A':
    s.sendto(q + r[5:9], (h, 27015)); r = s.recvfrom(4096)[0]
p = r[6:].split(b'\x00')
print(p[0].decode(), '|', p[1].decode(), '|', p[2].decode())
EOF
Résultat attendu
Mon serveur Unturned | PEI | Unturned

7Se connecter au serveur

  1. Avec un jeton GSLT : lancez Unturned, puis Jouer (Play) et l'écran de connexion par adresse (Connect) : l'adresse IP de votre serveur (203.0.113.42), le port 27015 et le mot de passe.
  2. Sans jeton : donnez à vos amis le code de serveur du journal (« Server Code », étape 5) ; il s'entre dans le menu Connect Directly du jeu, sans adresse ni port.

8Commander le serveur depuis le terminal

Chaque commande s'envoie à la console du serveur à travers screen, en tant qu'utilisateur unturned ; la réponse s'écrit dans le journal du serveur, que la deuxième partie de la commande affiche.

Demander la liste des joueurs, puis lire la réponse
su - unturned -c 'screen -S unturned -X stuff "Players\n"' && sleep 3 && tail -n 1 /opt/unturned/server/Logs/Server_MonServeur.log
Résultat attendu
[2026-09-21 16:39:31] Failed to find any players.
Les joueurs connectés (« Failed to find any players. » quand il n'y en a pas)
Players
Message à tous les joueurs
Say Bonjour
Sauvegarde tout de suite (« Successfully saved the game. »)
Save
Fait d'un joueur un administrateur ; Unadmin le retire ; Admins les liste
Admin STEAMID64
Expulse un joueur ; Ban STEAMID64/raison/durée le bannit, Unban STEAMID64 le rétablit
Kick STEAMID64/raison
La liste des commandes (60) ; Help suivi d'un nom détaille l'une d'elles
Help
Sauvegarde et arrête le serveur (c'est ce que fait systemctl stop unturned)
Shutdown

Pour voir la console en direct : su - unturned -c 'screen -r unturned', puis Ctrl+A suivi de D pour la quitter sans arrêter le serveur.

9Gérer, sauvegarder et mettre à jour le serveur

Voir l'état du service
systemctl status unturned
Suivre le journal du serveur en direct (Ctrl+C pour sortir)
tail -f /opt/unturned/server/Logs/Server_MonServeur.log
Redémarrer
systemctl restart unturned
Arrêter
systemctl stop unturned
Vérifier que l'arrêt a sauvegardé
systemctl stop unturned && grep -E 'Saving during server shutdown|Quit game' /opt/unturned/server/Logs/Server_MonServeur.log && systemctl start unturned
Résultat attendu
[2026-09-21 16:31:44] Saving during server shutdown
[2026-09-21 16:31:44] Quit game: server shutdown
(arrêté pendant son chargement, le serveur n'écrit que la seconde ligne)

Tout ce qui est propre à votre serveur, monde, joueurs et réglages, vit dans Servers/MonServeur. Le script ci-dessous demande une sauvegarde au serveur, puis archive ce dossier ; chaque nuit, il conserve les 7 dernières archives.

Créer le script de sauvegarde
cat > /opt/unturned/backup.sh << 'EOF'
#!/bin/sh
BACKUP_DIR=/opt/unturned/backups
DATE=$(date +%Y-%m-%d_%H-%M)
mkdir -p $BACKUP_DIR
screen -S unturned -X stuff 'Save\n'
sleep 5
tar -czf $BACKUP_DIR/unturned-$DATE.tar.gz -C /opt/unturned/server/Servers MonServeur
cd $BACKUP_DIR && ls -t | tail -n +8 | xargs -r rm
EOF
chmod +x /opt/unturned/backup.sh && chown unturned:unturned /opt/unturned/backup.sh
Tester une sauvegarde tout de suite
su - unturned -c '/opt/unturned/backup.sh && ls -la /opt/unturned/backups'
Résultat attendu
total 28
drwxrwxr-x 2 unturned unturned    46 Sep 21 16:55 .
drwxr-xr-x 7 unturned unturned    96 Sep 21 16:55 ..
-rw-rw-r-- 1 unturned unturned 27975 Sep 21 16:55 unturned-2026-09-21_16-55.tar.gz
(la taille grandit avec le monde exploré)
Installer et démarrer cron
apt install -y cron && systemctl enable --now cron
Installer et démarrer cron
dnf install -y cronie && systemctl enable --now crond
Installer et démarrer cron
dnf install -y cronie && systemctl enable --now crond
Installer et démarrer cron
zypper -n install cronie && systemctl enable --now cron
Programmer la sauvegarde chaque nuit à 4 h
su - unturned -c '(crontab -l 2>/dev/null; echo "0 4 * * * /opt/unturned/backup.sh") | crontab - && crontab -l'
Résultat attendu
0 4 * * * /opt/unturned/backup.sh

Après une mise à jour du jeu, les joueurs à jour ne peuvent plus entrer sur un serveur en retard : la mise à jour est la même commande que l'installation, serveur arrêté. Le dossier Servers n'est pas touché.

Mettre à jour le serveur (serveur arrêté, puis relancé)
systemctl stop unturned && su - unturned -c "/opt/unturned/steamcmd/steamcmd.sh +force_install_dir /opt/unturned/server +login anonymous +app_update 1110390 +quit" && systemctl start unturned
Résultat attendu
... Success! App '1110390' already up to date.
(« fully installed » quand une mise à jour a été téléchargée)

Erreurs fréquentes

Serveur prêt

Votre serveur Unturned démarre avec la machine, sauvegarde à l'arrêt et chaque nuit, et écoute sur les ports 27015 et 27016. La même base SteamCMD sert aux autres serveurs de jeux.

💬 Écrivez-nous sur Messenger !