Fiche gestion des services sous Debian et Ubuntu

1. Introduction

Sous Debian et Ubuntu, la gestion des services repose principalement sur systemd. Ce système d’initialisation démarre les services au boot, surveille leur état, redémarre certains processus automatiquement et centralise les journaux système.

Dans un contexte BTS CIEL ou BTS SIO, tu utilises constamment des services :

  • serveur web Apache ou Nginx ;
  • serveur SSH ;
  • MariaDB ;
  • Docker ;
  • Mosquitto MQTT ;
  • Node-RED ;
  • fail2ban ;
  • services personnalisés Python ou Bash.

Comprendre le fonctionnement des services permet :

  • d’automatiser le démarrage des applications ;
  • de diagnostiquer des pannes ;
  • d’analyser les logs ;
  • de sécuriser les serveurs ;
  • de créer ses propres démons système.

Cette fiche présente :

  • la gestion des services ;
  • la création de services personnalisés ;
  • l’analyse des logs ;
  • les commandes de dépannage ;
  • les bonnes pratiques de sécurité et de supervision.

Source du besoin utilisateur :

2. Sommaire

  1. Introduction
  2. Sommaire
  3. Comprendre systemd
  4. Architecture des services Linux
  5. Gestion des services avec systemctl
  6. Création d’un service personnalisé
  7. Analyse des logs avec journalctl
  8. Fichiers importants
  9. Bloc de configuration complet
  10. Commandes utiles et dépannage
  11. Gestion du pare-feu
  12. Erreurs fréquentes
  13. Cas concrets
  14. Bonnes pratiques de sécurité
  15. Pour aller plus loin
  16. Liens utiles et documentation officielle
  17. Propositions de TP

3. Comprendre systemd

systemd remplace l’ancien système SysVinit sur Debian et Ubuntu modernes.

Il gère :

  • le démarrage du système ;
  • les dépendances ;
  • les services ;
  • les timers ;
  • les sockets ;
  • les logs avec journald.

Chaque service possède généralement un fichier .service.

Exemple :

sshd.service
apache2.service
mariadb.service
docker.service

3.1 Cycle de vie d’un service

Un service peut être :

  • démarré ;
  • arrêté ;
  • redémarré ;
  • rechargé ;
  • activé au boot ;
  • désactivé.

3.2 Arborescence des unités systemd

/etc/systemd/system/
├── monapp.service
├── multi-user.target.wants/
└── ...

/lib/systemd/system/
├── apache2.service
├── ssh.service
└── ...

Différence entre les répertoires

RépertoireRôle
/lib/systemd/system/Services installés par les paquets
/etc/systemd/system/Services personnalisés ou overrides
/run/systemd/system/Services temporaires

4. Architecture des services Linux

Un service fonctionne généralement ainsi :

Application

Fichier .service

systemd

journalctl / logs

Le fichier .service décrit :

  • la commande à exécuter ;
  • l’utilisateur ;
  • le redémarrage automatique ;
  • les dépendances ;
  • le comportement attendu.

5. Gestion des services avec systemctl

systemctl est la commande principale de gestion.

5.1 Vérifier l’état d’un service

sudo systemctl status ssh

Explications :

  • status : affiche l’état ;
  • ssh : nom du service.

Tu vois :

  • l’état actif ou non ;
  • le PID ;
  • les derniers logs ;
  • les erreurs éventuelles.

5.2 Démarrer un service

sudo systemctl start apache2

Le service démarre immédiatement mais ne démarre pas automatiquement au boot.

5.3 Arrêter un service

sudo systemctl stop apache2

Cette commande coupe le service immédiatement.

5.4 Redémarrer un service

sudo systemctl restart apache2

Très utile après une modification de configuration.

5.5 Recharger une configuration sans coupure

sudo systemctl reload nginx

reload relit uniquement la configuration.

Certaines applications ne supportent pas cette fonctionnalité.

5.6 Activer le démarrage automatique

sudo systemctl enable apache2

Cette commande crée un lien symbolique dans :

/etc/systemd/system/multi-user.target.wants/

5.7 Désactiver le démarrage automatique

sudo systemctl disable apache2

5.8 Voir tous les services

systemctl list-units --type=service

Options :

  • --type=service : filtre uniquement les services.

5.9 Voir les services échoués

systemctl --failed

Très utile en dépannage.

6. Création d’un service personnalisé

Tu peux créer tes propres services pour :

  • scripts Python ;
  • applications Node.js ;
  • scripts Bash ;
  • agents de supervision ;
  • outils IoT.

6.1 Exemple de script Python

Fichier :

/opt/monitoring/app.py

Contenu :

#!/usr/bin/python3

import time

while True:
print("Service actif")
time.sleep(30)

Rendre le fichier exécutable :

sudo chmod +x /opt/monitoring/app.py

6.2 Création du fichier service

Fichier :

/etc/systemd/system/monitoring.service

7. Synthèse Markdown pour ta fiche bristol

# Gestion des services Linux

## Vérifier un service
systemctl status nom_service

## Démarrer un service
sudo systemctl start nom_service

## Arrêter un service
sudo systemctl stop nom_service

## Redémarrer
sudo systemctl restart nom_service

## Recharger configuration
sudo systemctl reload nom_service

## Activer au démarrage
sudo systemctl enable nom_service

## Désactiver au démarrage
sudo systemctl disable nom_service

## Voir les logs
journalctl -u nom_service

## Voir les logs temps réel
journalctl -u nom_service -f

## Voir les services échoués
systemctl --failed

## Recharger systemd
sudo systemctl daemon-reload

8. Fichiers importants

FichierRôle
/etc/systemd/system/Services personnalisés
/lib/systemd/system/Services installés
/etc/systemd/journald.confConfiguration logs
/var/log/journal/Journaux persistants
/var/log/syslogLogs système Debian/Ubuntu
/etc/rsyslog.confConfiguration rsyslog
/run/systemd/Informations runtime

9. Bloc de configuration complet

[Unit]
Description=Service Monitoring Python
After=network.target

[Service]
Type=simple
User=www-data
Group=www-data
WorkingDirectory=/opt/monitoring
ExecStart=/usr/bin/python3 /opt/monitoring/app.py
Restart=always
RestartSec=5

# Sécurisation
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=full
ProtectHome=true

[Install]
WantedBy=multi-user.target

Explications détaillées

DirectiveRôle
Description=Description du service
After=Attend le réseau
User=Utilisateur utilisé
Group=Groupe utilisé
WorkingDirectory=Répertoire de travail
ExecStart=Commande lancée
Restart=alwaysRedémarre automatiquement
RestartSec=5Attente avant redémarrage
ProtectSystem=fullProtection système
ProtectHome=trueBloque accès /home

10. Commandes utiles et dépannage

Recharger systemd après modification

sudo systemctl daemon-reload

Cette commande force systemd à relire les fichiers .service.

Tester le démarrage

sudo systemctl start monitoring

Vérifier les logs

journalctl -u monitoring

Logs temps réel

journalctl -u monitoring -f

Option :

  • -f : mode suivi temps réel comme tail -f.

Voir les logs du boot actuel

journalctl -b

Voir uniquement les erreurs

journalctl -p err

Voir les 50 dernières lignes

journalctl -u monitoring -n 50

Vérifier la syntaxe d’un service

systemd-analyze verify /etc/systemd/system/monitoring.service

Très utile avant le redémarrage.

11. Gestion du pare-feu

Les services réseau exposent souvent des ports.

SSH

Port :

22/TCP

Autoriser :

sudo ufw allow 22/tcp

Apache

Ports :

80/TCP
443/TCP

Autoriser :

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

Mosquitto MQTT

Port standard :

1883/TCP

MQTT TLS :

8883/TCP

Vérifier le pare-feu

sudo ufw status verbose

12. Erreurs fréquentes

Mauvais chemin Python

Erreur :

Exec format error

Cause :

  • mauvais interpréteur ;
  • script non exécutable.

Service qui boucle

Cause possible :

  • erreur dans le script ;
  • dépendance absente ;
  • port déjà utilisé.

Diagnostic :

journalctl -u monitoring -xe

Oubli du daemon-reload

Après modification d’un service :

sudo systemctl daemon-reload

Sinon systemd utilise encore l’ancienne version.

13. Cas concrets

13.1 Service Node.js

ExecStart=/usr/bin/node /opt/app/server.js

13.2 Script Bash

ExecStart=/bin/bash /opt/scripts/backup.sh

13.3 Service Docker

sudo systemctl restart docker

13.4 Redémarrage automatique d’un agent IoT

Restart=always
RestartSec=10

Très utilisé avec :

  • Raspberry Pi ;
  • capteurs MQTT ;
  • applications Python.

14. Bonnes pratiques de sécurité

Utiliser un utilisateur dédié

Évite :

User=root

Préfère :

User=monitoring

Limiter les privilèges

Ajoute :

NoNewPrivileges=true

Protéger le système

ProtectSystem=full

Superviser les logs

Surveille :

  • redémarrages fréquents ;
  • erreurs réseau ;
  • crashs applicatifs ;
  • permissions refusées.

Ne pas exposer inutilement des ports

Ouvre uniquement les ports nécessaires dans UFW.

15. Pour aller plus loin

Tu peux approfondir :

  • les timers systemd ;
  • les sockets systemd ;
  • la supervision avec Prometheus ;
  • fail2ban ;
  • les services Docker ;
  • les unités mount ;
  • les cgroups Linux ;
  • rsyslog ;
  • logrotate.

16. Liens vers les sites officiels, MOOC et contenus pédagogiques

Documentation officielle systemd

https://www.freedesktop.org/software/systemd/man/systemctl.html

Référence officielle complète de systemctl.

Documentation journalctl

https://www.freedesktop.org/software/systemd/man/journalctl.html

Documentation officielle de gestion des journaux.

Documentation Debian systemd

https://wiki.debian.org/systemd

Très utile pour Debian.

Documentation Ubuntu systemd

https://documentation.ubuntu.com/server/explanation/software/changing-package-files

Documentation Ubuntu Server.

OpenClassrooms Linux

https://openclassrooms.com/fr/courses/7170491-administrez-un-systeme-linux

Cours progressif administration Linux.

OpenClassrooms sécurité Linux

https://openclassrooms.com/fr/courses/1753496-securisez-vos-systemes-linux

Très pertinent pour les bonnes pratiques système.

RFC Syslog

https://datatracker.ietf.org/doc/html/rfc5424

Norme officielle des logs syslog.

17. Propositions de TP

TP 1 — Gérer un service SSH

Objectifs :

  • démarrer ;
  • arrêter ;
  • activer au boot ;
  • consulter les logs.

TP 2 — Créer un service Python

Créer :

  • un script Python ;
  • un service systemd ;
  • un redémarrage automatique.

TP 3 — Diagnostiquer une panne

Créer volontairement :

  • un mauvais chemin Python ;
  • un port occupé ;
  • une erreur de permission.

Analyser ensuite :

journalctl
systemctl status

TP 4 — Sécuriser un service

Ajouter :

  • utilisateur dédié ;
  • protections systemd ;
  • règles UFW.

TP 5 — Supervision de logs

Créer :

un suivi temps réel avec journalctl -f.

un script qui écrit dans les logs ;

Retour en haut