Home Apprendre Linux - Cours 5
Post
Cancel

Apprendre Linux - Cours 5

Difficulté: Débutant

Ce cours vous donnera les bases pour utiliser un shell Linux. Ce cinquième cours sera orienté vers la gestion de services avec Systemd et la manipulation d’utilisateurs.

GNU/Linux Tux

Systemd

Systemd signifie system daemon, un daemon est une application qui tourne en arrière-plan. C’est le premier programme qui démarre après avoir chargé le kernel Linux. Il permet d’orchestrer le démarrage de tous les services du système. Un service est un programme, démarré de façon automatique par le système, parfois selon certaines conditions.

Fichier service

Pour créer un service, on doit tout d’abord créer un fichier de service. On créée un fichier dans /etc/systemd/system/ portant le nom de notre service et se terminant par l’extension .service.

1
mickael@culture-numerique:~$ sudo touch /etc/systemd/system/myservice.service

L’architecture d’un fichier de service est comme suit:

[Unit]
Description=
Wants=network-online.target
After=network.target network-online.target

[Service]
Restart=
Type=
User=
Group=
ExecStartPre=
ExecStart=
ExecStartPost=
WorkingDirectory=
[Install]
WantedBy=multi-user.target
  • La section Description dans [Unit] permet de donner une description au service.
  • La section Restart dans [Service] permet de définir une politique de redémarrage: always redémarrera le service à chaque fois qu’il se finit, on-failure redémarrera le service à chaque fois que son code de sortie sera différent de 0, on-success redémarrera le service à chaque fois que son code de sortie sera 0, no ne redémarrera jamais le service.
  • La section Type permet de définir le type de service: généralement, on utilise simple pour un processus qui reste attaché au shell qui l’exécute, pour un processus qui se détache du shell, on utilise forking.
  • Les sections User et Group permettent de définir un utilisateur et un groupe qui vont exécuter le service.
  • Les sections ExecStartPre et ExecStartPost permettent d’exécuter une commande avant le démarrage et après l’extinction du service.
  • La section ExecStart permet de définir la commande exécutée par le service.
  • La section WorkingDirectory permet de définir un dossier à partir duquel le service va être exécuté.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
mickael@culture-numerique:~$ sudo cat /etc/system/system/myservice.service
[Unit]
Description=My custom service
Wants=network-online.target
After=network.target network-online.target

[Service]
Restart=always
Type=simple
User=svc_myservice
Group=svc_myservice
ExecStartPre=echo "Service démarré" > /var/log/myservice/myservice.log
ExecStart=/usr/bin/python3 /opt/myservice/myservice.py
ExecStartPost=echo "Service terminé" > /var/log/myservice/myservice.log
WorkingDirectory=/opt/myservice
[Install]
WantedBy=multi-user.target

systemctl

systemctl (lire system control) est la commande permettant de gérer systemd. Elle requiert une élévation de privilèges pour être exécutée. Elle permet de démarrer, arrêter, redémarrer, recharger des services, et bien d’autres choses encore.

Recharger la liste des services

Une fois un fichier de service créé, il faut recharger la liste des services pour le prendre en compte. C’est valable aussi lorsqu’on modifie ou supprime un fichier de service. Pour cela, on utilise la commande systemctl daemon-reload.

Démarrer un service

Pour démarrer un ou des services, on utilise la commande systemctl start suivie du ou des services à démarrer.

1
mickael@culture-numerique:~$ sudo systemctl start myservice

Observer l’état d’un service

Pour observer l’état d’un ou de plusieurs services, on utilise la commande systemctl status suivie du ou des services à observer.

1
2
3
4
5
6
7
8
9
10
11
12
mickael@culture-numerique:~$ sudo systemctl status myservice
● myservice.service - My custom service
     Loaded: loaded (/etc/systemd/system/myservice.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2023-06-22 15:46:02 CEST; 1 days ago
   Main PID: 524074 (python3)
      Tasks: 11 (limit: 1074)
     Memory: 103.1M (high: 350.0M max: 450.0M available: 246.8M)
        CPU: 9.655s
     CGroup: /system.slice/myservice.service
             └─524074 /usr/bin/python3 /opt/myservice/myservice.py

Jun 22 15:36:16 culture-numerique python3[524075]:       i am writing a log

Cette commande permet d’obtenir l’état actuel du service (à la ligne Active), ainsi que son temps d’exécution, mais aussi les dernières lignes envoyées dans son STDOUT et STDERR.

Eteindre un service

Pour éteindre un ou plusieurs services, on utilise la commande systemctl stop suivie du ou des services à éteindre.

1
mickael@culture-numerique:~$ sudo systemctl stop myservice

Activer le démarrage automatique d’un service

Pour activer le démarrage automatique d’un ou de plusieurs services, on utilise la commande systemctl enable suivie du ou des services. Pour désactiver ce démarrage automatique, on utilise la commande systemctl disable.

1
mickael@culture-numerique:~$ sudo systemctl enable myservice

systemctl enable et systemctl disable supportent une option –now qui permet d’allumer le service en l’activant ou d’éteindre le service en le désactivant. {.prompt-info}

Commandes

useradd

useradd est une commande permettant d’ajouter des utilisateurs au système. Elle requiert une élévation de privilèges pour être exécutée.

PARAMETRES: l’utilisateur à créer

OPTIONS:

  • -m: signifie make home, permet de créer un dossier home pour l’utilisateur.
  • -G: signifie groups, permet d’ajouter l’utilisateur à des groupes.
  • -s: signifie shell, permet de spécifier le chemin du shell à utiliser pour l’utilisateur (par défaut, sh).
1
mickael@culture-numerique:~$ sudo useradd -m -s $(which bash) cedric

userdel

userdel est une commande permettant de supprimer des utilisateurs du système. Elle requiert une élévation de privilèges pour être exécutée.

PARAMETRES: l’utilisateur à supprimer

OPTIONS:

  • -r: signifie remove, permet de supprimer le dossier home de l’utilisateur.
1
mickael@culture-numerique:~$ sudo userdel -r cedric

usermod

usermod est une commande permettant de modifier des utilisateurs du système. Elle requiert une élévation de privilèges pour être exécutée.

PARAMETRES: l’utilisateur à modifier

OPTIONS:

  • -a: signifie append, permet d’ajouter une liste de goupes avec l’option -G.
  • -G: signifie groups, permet de définir la liste des groups supplémentaires auxquels l’utilisateur appartiendra.
  • -r: signifie remove, permet de supprimer l’utilisateur des groupes supplémentaires spécifiés par -G.
  • -s: signifie shell, permet de spécifier le chemin du shell à utiliser pour cet utilisateur.
1
mickael@culture-numerique:~$ sudo usermod -a -G sudo gabriel

passwd

passwd est une commande qui permet de modifier un mot de passe. Par défaut, elle change le mot de passe de l’utilisateur. Pour changer le mot de passe d’autres utilisateurs, elle requiert une élévation de privilèges.

PARAMETRES: l’utilisateur dont on veut changer le mot de passe. Si vide, cible l’utilisateur actuel.

OPTIONS:

  • -d: signifie delete, peremt de supprimer le mot de passe d’un compte, rendant l’authentification par mot de passe indisponible.
1
2
3
4
5
6
7
8
mickael@culture-numerique:~$passwd
Changing password for mickael.
Current password:
New password:
Retype new password:
passwd: password updated successfully
mickael@culture-numerique:~$ sudo passwd -d gabriel
passwd: password changed.

journalctl

journalctl est une commande permettant de visualiser les sorties STDOUT et STDERR de tout systemd. Elle nécessite une élévation de privilèges. Une fois ouvert, on peut naviguer avec les flèches, et quitter avec q.

OPTIONS:

  • -e: signifie end, permet de commencer la lecture à partir des dernières entrées.
  • -f: signifie follow, permet de suivre les entrées au moment où elles sont écrites.
  • -u: signifie unit, permet de spécifier un service dont on veut voir les entrées.
1
2
3
4
5
6
7
8
9
10
mickael@culture-numerique:~$ sudo journalctl -xu myservice
Jun 22 15:36:16 culture-numerique python3[524075]:       i am writing a log
Jun 22 15:36:17 culture-numerique python3[524075]:       i am writing a log
Jun 22 15:36:18 culture-numerique python3[524075]:       i am writing a log
Jun 22 15:36:19 culture-numerique python3[524075]:       i am writing a log
Jun 22 15:36:20 culture-numerique python3[524075]:       i am writing a log
Jun 22 15:36:21 culture-numerique python3[524075]:       i am writing a log
Jun 22 15:36:22 culture-numerique python3[524075]:       i am writing a log
Jun 22 15:36:23 culture-numerique python3[524075]:       i am writing a log
Jun 22 15:36:24 culture-numerique python3[524075]:       i am writing a log
This post is licensed under CC BY 4.0 by the author.
Trending Tags
Contents
Trending Tags