Activation par socket
Activation par socket (en anglais socket activation) : mécanisme de systemd qui ouvre lui-même la socket d'écoute d'un service, puis démarre ce service et lui transmet la socket à la première connexion.
Une unité .socket déclare l'adresse (ListenStream=22, par exemple) ; systemd l'ouvre très tôt au démarrage, et le service reçoit le descripteur déjà ouvert (protocole sd_listen_fds(), variable d'environnement LISTEN_FDS). Pendant que le service démarre, le noyau garde les connexions dans la file d'attente de la socket : aucune n'est refusée. C'est pourquoi sudo ss -tulpn montre systemd (PID 1) sur le port 22 d'une Ubuntu 24.04 : depuis Ubuntu 22.10, ssh.socket ouvre le port et le transmet à sshd. Debian 13 n'active pas SSH par socket par défaut. Docker fonctionne de la même façon : dockerd -H fd:// reçoit sa socket de docker.socket.
Deux pièges en découlent. Arrêter le service ne suffit pas à le faire taire : la socket le relance à la connexion suivante, d'où la nécessité de désactiver aussi l'unité .socket (cups.socket à côté de cups.service). Et sur Ubuntu 24.04, changer Port dans la configuration de sshd n'a d'effet qu'après sudo systemctl daemon-reload puis sudo systemctl restart ssh.socket, parce qu'un générateur traduit ce réglage dans la configuration de la socket.
Dans les cours
- Linux : administration système, leçon 1 : Prendre en charge un serveur
- Linux : administration système, leçon 14 : Durcir un serveur
- Docker : les fondamentaux, leçon 3 : L'architecture de Docker, du client à runc