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
- Introduction
- Sommaire
- Comprendre systemd
- Architecture des services Linux
- Gestion des services avec systemctl
- Création d’un service personnalisé
- Analyse des logs avec journalctl
- Fichiers importants
- Bloc de configuration complet
- Commandes utiles et dépannage
- Gestion du pare-feu
- Erreurs fréquentes
- Cas concrets
- Bonnes pratiques de sécurité
- Pour aller plus loin
- Liens utiles et documentation officielle
- 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épertoire | Rô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
| Fichier | Rôle |
|---|---|
/etc/systemd/system/ | Services personnalisés |
/lib/systemd/system/ | Services installés |
/etc/systemd/journald.conf | Configuration logs |
/var/log/journal/ | Journaux persistants |
/var/log/syslog | Logs système Debian/Ubuntu |
/etc/rsyslog.conf | Configuration 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
| Directive | Rô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=always | Redémarre automatiquement |
RestartSec=5 | Attente avant redémarrage |
ProtectSystem=full | Protection système |
ProtectHome=true | Bloque 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 commetail -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 ;
