L’init est le premier processus appelé par le noyau après le boot. Il porte le PID 1. C’est ce programme qui a pour tâche de lancer les autres programmes du système. Historiquement, les distributions utilisaient le système d’init SysV, qui consistait globalement en plein de scripts bash. Mais depuis 2015 (pour Debian en tout cas), c’est un tout nouveau système qui est utilisé : systemd.
Pour la petite histoire, ce changement a donné lieu à une petite guerre.
Un service dans le lexique de systemd est un programme qui s'exécute en arrière plan. Pour commencer, on va utiliser le serveur OpenSSH comme exemple.
SSH est un protocole qui permet de se connecter à distance à un ordinateur.
Beaucoup de services qui tournent en arrière plan ont un nom finissant par « d » (sshd, dhcpd, …) : c’est une référence au mot daemon !
On va commencer par installer le serveur SSH (on suppose être sur Ubuntu ou debian) :
sudo apt update && sudo apt install sshd
Maintenant on va manipuler le service.
La commande pour interagir avec systemd est :
sudo systemctl
On va regarder l’état du daemon SSH :
sudo systemctl status ssh
Par défaut, le service est activé (enable). Cela signifie qu’au démarrage, systemd lance le service. C’est pratique mais on a pas forcément besoin d’un serveur SSH tout le temps.
On va donc le désactiver :
sudo systemctl disable ssh
Si le service n’est pas lancé (active), on le lance :
sudo systemctl start ssh
Maintenant, depuis un autre ordinateur, on peut se connecter à l’ordinateur avec la commande ssh :
ssh ton_username@ton_ip
Par défaut, sur debian, ssh autorise l'authentification par mot de passe. Si c’est acceptable sur un petit lan, c’est pas une bonne pratique sur une machine exposée sur internet ou un grand réseau. Dans ces cas là, on préfère utiliser une paire de clés (clé publique / clé privée). Pour cela on va éditer la configuration d’OpenSSH. On va en profiter pour empêcher le compte root de se connecter (autre mesure de sécurité assez commune).
Éditons donc /etc/ssh/sshd_config
Cherchons la ligne
#PermitRootLogin prohibit-password
Et remplaçons la par (pas de connexion de root):
PermitRootLogin no
De même, cherchons la ligne :
#PasswordAuthentication yes
Et remplaçons la par (authentification par clé) :
PasswordAuthentication no
Ne pas hésiter à regarder les autres options, y en a beaucoup plus !
Bien, maintenant on a une config aux petits oignons, mais problème, OpenSSH tourne encore sur l’ancienne configuration. Et on a beau crier sur l’écran, ce con de daemon n’entend rien. Comment lui expliquer dans sa langue ? Et bien voilà :
sudo systemctl reload ssh
Et voilà. Parfois, on a besoin de redémarrer complètement un service :
sudo systemctl restart ssh
Aller, assez joué avec ssh :
sudo systemctl stop ssh
Voilà, maintenant au lit ! (Ou au bar )