0% ont trouvé ce document utile (0 vote)
22 vues148 pages

Administration avancée de Linux

Le document présente un cours sur l'administration avancée de Linux, abordant des sujets tels que l'arborescence du système de fichiers, le shell, la gestion des utilisateurs, et la configuration de divers services. Il explique également les principes du logiciel libre et les principales distributions Linux. Enfin, il détaille les commandes essentielles et la navigation dans le système de fichiers Linux.

Transféré par

baironlivingston
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
22 vues148 pages

Administration avancée de Linux

Le document présente un cours sur l'administration avancée de Linux, abordant des sujets tels que l'arborescence du système de fichiers, le shell, la gestion des utilisateurs, et la configuration de divers services. Il explique également les principes du logiciel libre et les principales distributions Linux. Enfin, il détaille les commandes essentielles et la navigation dans le système de fichiers Linux.

Transféré par

baironlivingston
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Administration avancée

Linux
par Kenneth Hounsou
Janvier 2023
Plan du cours
▪ Rappel des bases

▪ Arborescence du système de fichiers (FHS)

▪ Le Shell

▪ Installation de programmes

▪ Éditions de configuration

▪ Gestion simple du réseau

▪ Le scripting

▪ Configurer les localisations et l’internationalisation

▪ Configuration de l’impression
Plan du cours
▪ Administration du système

▪ Gérer les utilisateurs et les groupes

▪ Limiter les accès à la mémoire et aux processeurs

▪ Configurer SSH

▪ Configurer GPG

▪ Installation et configuration de quelques services sous Linux


I. Rappel des bases
Qu'Est-ce que GNU/Linux?

▪ GNU/Linux est un système d'exploitation Open Source qui a une


place prépondérante dans l'écosystème numérique

▪ Il a la particularité d'être multitâche et multi-utilisateur

▪ Multitâche: gère et exécute plusieurs programmes simultanément

▪ Multi-utilisateur: supporte une connexion simultanée


de plusieurs utilisateurs
Historique GNU/Linux (1)

GNU/Linux

Projet GNU Linux

Richard Stallman : 1983 Linus Torvalds : 1991

Conception d'un ensemble de Développement de la


programmes, utilitaires et première version du
initiation des bases du libre noyaux Linux
Historique GNU/Linux (2)

▪ Projet GNU
– Idée de départ: conception d'un système d'exploitation comme Unix
– Dans les faits: conception de programmes, utilitaires compatibles UNIX libres
d'accès

▪ Linux
– Linus Torvalds a développé la première version du noyau Linux.
– Il s'agit d'un programme en C qui fournit un ensemble de pilotes de base pour le
matériel
– Le noyau a connu depuis bien des évolutions. Sa dernière version stable est la
6.11.3 (octobre 2024)
▪ L'association des 02 projets fournit autant le programme de bas
niveau pour communiquer avec le matériel que des programmes
destinés à l'utilisateur pour transmettre ces instructions à la machine.
Richard Stallman: principe du libre

▪ Le principe sur lequel Stallman base la Free Software Foundation


prône 04 libertés:
1. la liberté d’utiliser un logiciel quel que soit l’usage que vous en
faites;
2. la liberté d’étudier le fonctionnement du programme et de l’adapter
à votre besoin;
3. la liberté de redistribuer des copies;
4. la liberté d’améliorer le programme et de diffuser les améliorations
au public à des fins d’en faire bénéficier l’ensemble de la
communauté.
Open Source - Libre – Gratuit: que retenir?

▪ Libre : les 04 libertés sont respectées

▪ Open Source : le code source est disponible. La licence sous laquelle


il est disponible définit ce qui peut en être fait

▪ Gratuit : accessible sans paiement


Les principales distributions Linux

Debian et dérivées Red-Hat et dérivées

▪ Debian ▪ Red-Hat
▪ Ubuntu ▪ CentOS
▪ Mint ▪ Fedora
▪ Kali ▪ Alma Linux
▪ etc ▪ etc
Modes d'utilisation de Linux

Environnement console Environnement graphique


II. Arborescence du
système de fichiers (FHS)
Le FHS

• Le Filesystem Hierarchy Standard (FHS) est un standard sur la hiérarchie


des systèmes GNU/Linux. Il détermine donc l'arborescence des répertoires
sur un système Linux.

• Il permet:

• aux administrateurs d'anticiper les répertoires contenant les informations


recherchées, quelle que soit la distribution utilisée;

• aux développeurs système d'utiliser une arborescence commune et connue


pour déployer, installer ou configurer les programmes qu'ils éditent.
Exemple d'une arborescence du système de
fichiers sous Linux
Commande tree
La commande tree liste le
contenu de répertoires sous
forme d’arborescence.

Exécutée sans option ni


argument , elle affiche
l'ensemble de l'arborescence de
votre machine (cela peut être
assez indigeste)

Pour un retour plus concis , il


faut l'exploiter l'option –L pour
définir le nombre de niveaux à
explorer
Contenu du système de fichiers (1)
▪ / : racine de l'arborescence de répertoire du système Linux

▪ /bin : ce répertoire contient les binutils, les commandes de base pour tous les utilisateurs
(cp, mv, rm…). Ce sont les commandes nécessaires au démarrage du système.

▪ /boot : (partition séparée conseillée.). C'est ici que se trouvent les fichiers de votre chargeur
d'amorçage (GRUB par exemple) ainsi que vos noyaux linux …..

▪ /dev : les liens vers les périphériques physiques (CD, disques durs…), ainsi que les
périphériques virtuels (/dev/null, /dev/random). On peut noter que les périphériques physiques
sont nommés sous la forme « /dev/sdXN » avec X étant une lettre et N un numéro
– /dev/sda1 représente la première partition (1) de votre premier disque dur (a)

– /dev/sdd6 représente la sixième partition (6) de votre quatrième disque dur (d)

▪ /etc : (editing text config) : C'est la cachette des fichiers de configuration des logiciels installés
Contenu du système de fichiers (2)

▪ /home : (partition séparée conseillée) : Répertoire contenant les dossiers utilisateurs sous la
forme /home/nom_utilisateur.

▪ /lib : Répertoire où sont installées les bibliothèques système.

▪ /mnt : Point de montage des partitions internes montées temporairement. On y monte


généralement les partitions des disques durs internes. Pour les partitions externes, on utilisera
plutôt /media.

▪ /media : équivalent de /mnt, mais pour les supports amovibles/externes.

▪ /opt : est réservé pour l'installation des paquetages des greffons d'applications

▪ /proc : système de fichiers virtuel documentant le noyau et les différents processus

▪ /root : répertoire de l'utilisateur root


Contenu du système de fichiers (3)

▪ /sbin : Série d'exécutables pour les administrateurs

▪ /srv : Données pour les services hébergés par le système. Par exemple le contenu http-ftp ou
une base de données

▪ /tmp : (partition séparée conseillée) Répertoire des fichiers temporaires, vidé à chaque
démarrage du système

▪ /usr : (Unix system ressource) : Dossier contenant les exécutables du système qui ne sont pas
vitaux à son démarrage et son fonctionnement minimal. Son architecture est semblable à celle
de /

▪ /var : Dossier contenant les variables du système, renseignant son état. Divisé en sous-
dossiers.
Contenu du système de fichiers (4)

▪ /var/lock : Variables de verrouillage. Permet de connaître l'état d'utilisation de logiciels ne


devant pas être lancés deux fois en même temps (gparted, mises à jour…).

▪ /var/log : Fichiers de journalisation.

▪ /var/mail: Boîtes aux lettres des utilisateurs.

▪ /var/run: Variables temporaire des logiciels en cours d'exécution.

▪ /var/spool : File d'attente des services, notamment pour les imprimantes.

▪ /var/tmp : Fichiers temporaires, ceux là ne sont pas supprimés à chaque démarrage.

▪ /var/www : Répertoire web par défaut de Apache


Navigation dans l'arborescence Linux (1)

▪ Le caractère / représente le répertoire racine de l'arborescence d'un


système de fichiers sous Linux

▪ Sous Linux on identifie un fichier ou un répertoire par son chemin

▪ Le chemin est la succession des répertoires à parcourir pour atteindre un


fichier ou un répertoire

▪ Dans l'écriture du chemin, les répertoires sont séparés par le caractère: /


Navigation dans l'arborescence Linux (2)

Pour accéder à un répertoire ou fichier on peut spécifier:

▪ le chemin absolu: chemin partant de la racine ( / )

Ex: /usr/local/bin

ou

▪ le chemin relatif: chemin partant du répertoire courant (le répertoire où se trouve l'utilisateur)

Ex: mnt/cdrom
Navigation dans l'arborescence Linux (2)

Comme pour tout système de fichiers structuré, un certain nombre d’outils aident à parcourir le
système. Les deux commandes suivantes sont des commandes internes du shell :

▪ pwd : (Print Working Directory) affiche le répertoire actuel en chemin absolu

▪ cd : la commande pour changer de répertoire (Change Directory)

Les emplacements

▪ répertoire courant: le répertoire où est positionné l'utilisateur. Il est matérialisé par un "."
(point)

▪ répertoire parent : le répertoire immédiatement avant le répertoire courant. Il est représenté


par ".." (point point)
III. Le Shell
A la découverte du Shell (1)

Le shell (qui signifie coquille en anglais) est:

▪ un programme qui sert d'interface en


mode texte entre le noyau et l'utilisateur

▪ un interpréteur de commande et un
langage de programmation

▪ une interface en mode texte dont le


clavier est l'entrée et l'écran la sortie

Le shell de connexion est le premier shell dont l'utilisateur dispose. Il est identifiable dans le
fichier /etc/passwd dans le dernier champ de chaque ligne
NB: /usr/bin/nologin ou /dev/zero ou encore /dev/null dans ledit champ veut dire que l'utilisateur
n'a pas de shell de connexion
A la découverte du Shell (2)

Il existe plusieurs Shells compatibles Linux parmi lesquels:

Nom du shell Emplacement du programme

Shell Bourne (l'antique shell de Steve Bourne) /bin/sh

Korn shell, le shell de David Korn pour UNIX /bin/ksh

C shell /bin/csh

Tenex shell (le shell C étendu ) /bin/tcsh

Zorn shell /bin/zsh

Bash (Bourne Again Shell, le shell par défaut de


/bin/bash
Linux de nos jours)
A la découverte du Shell (3)

▪ La liste exhaustive des Shells disponibles sur votre machine Linux est accessible
dans le fichier /etc/shells

▪ Pour connaître le shell utilisé à l'aide de sa variable d'environnement: echo $SHELL

▪ Pour connaître l'utilisation en détail du shell bash: man bash

▪ Les shells peuvent imbriqués les uns dans les autres ce qui permet de changer
d'environnement à l'intérieur d'une même session. On parle de nesting. Cette
technique peut également être utilisée pour des mesures de sécurité.
Le prompt (1)

▪ Prompt: succession de caractères qui s'affiche dans l'angle


supérieur gauche de la console Linux
▪ Variable suivant l'interpréteur shell que vous utilisez
▪ Avec le shell Bash, très répandu il ressemble souvent à:
guy@PC12R8:~$
ou
root@srv1:/var/log#
Le prompt (2)

▪ Pour : guy@PC12R8:~$
– guy : est l'utilisateur connecté
– PC12R8 : est le nom de l'ordinateur

– ~ : est le répertoire courant (ce caractère se substitue au chemin du répertoire


de base de l'utilisateur connecté dans ce cas /home/guy)

– $ : est le mode de connexion


▪ dans ce cas-ci, utilisateur standard

▪ Pour un super-utilisateur on a plutôt un #


Commandes Linux : syntaxe

▪ Commande

▪ Commande Options
Options: -a -b -c --option-a-plusieurs-caractères

▪ Commande Arguments

▪ Commande Option Arguments


Commandes Linux : type

▪ Commandes internes : intégrées aux shells (builtin)

▪ Commandes externes : programmes qui se trouvent


généralement dans les répertoires des exécutables ou des
binaires ("/bin" ou "/usr/bin" ou "/usr/bin/local" ou
"$HOME/bin").
▪ NB: Une série de commandes peut être sur la même ligne; c'est la liaison de commandes ; chaque
commande est séparée des autres par un point-virgule (";") et chacune est exécutée
séquentiellement (l'une après l'autre)
Commandes Linux: commandes courtes

▪ ls : affiche le contenu du répertoire courant


▪ cd : positionne dans le répertoire utilisateur du compte connecté
▪ date : affiche la date et l'heure
▪ pwd : affiche le répertoire courant
▪ id : affiche les informations relatives à l'utilisateur connecté
▪ who : indique tous les comptes utilisateurs connectés
▪ whoami : ressort le nom du compte connecté
▪ passwd : change le mot de passe de l'utilisateur connecté
▪ history : affiche l'historique des commandes exécutée par l'utilisateur connecté
Commandes Linux: commandes avec argument (1)

▪ ls rep1
affiche le contenu du répertoire rep1
▪ mkdir rep1
crée un répertoire rep1 dans le répertoire courant

▪ rmdir rep2
supprime le répertoire rep2 à condition qu'il soit vide
▪ rm fic12
supprime le fichier fic12
▪ rm –rf rep3
supprime de façon récursive le répertoire rep3
Commandes Linux: commandes avec argument (2)

▪ cp source destination
copie la source vers la destination

▪ mv source destination
déplace la source vers la destination (elle sert aussi à renommer)

▪ ln -s source destination
créer la destination comme un lien symbolique (raccourci) vers la source
Commandes Linux: obtenir de l'aide

▪ man commande
permet d'obtenir d'accéder au manuel d'une commande

▪ commande --help
permet d'obtenir de l'aide sur l'utilisation d'une commande

▪ man man
permet d'accéder au manuel de la commande man
Commandes Linux: manipuler des fichiers

▪ touch fichierX : crée le fichier fichierX dans le répertoire


courant
▪ cat fichier1 : affiche le contenu de fichier1 en entièreté
▪ less fichier1 : affiche le contenu de fichier1 ligne par ligne
▪ more fichier2 : affiche le contenu de fichier2 page par page
▪ tail fichier2 : affiche les 10 dernières lignes de fichier2
▪ head fichier3 : affiche les 10 premières lignes de fichier3
Commandes Linux: Alias

▪ Les alias permettent de remplacer une commande par un terme (généralement plus
court à saisir et plus facile à retenir).

▪ Attention, les alias ne sont pas conservés d'une session à l'autre; pour les initialiser
à chaque ouverture du shell, il faut les enregistrer dans un fichier ".profile".

▪ Création d'alias: nom='commande'

Exemple: ls = 'ls –-colo=auto'


Commandes Linux: Historique

▪ history: commande pour voir la liste des commandes que vous avez exécuté

▪ liste les commandes en cache ainsi que celles sauvées dans ~/.bash_history.
Lorsque l’utilisateur quitte le shell, les commandes en cache sont inscrites dans ce
fichier.

▪ Vous pouvez récupérer les commandes tapées en utilisant les flèches directionnelles
(haut et bas) de votre clavier.

▪ La commande history -c efface l’historique de la session courante.


Variables d'environnement

▪ Le shell utilise des variables d'environnement dont on peut faire apparaître

le contenu avec le signe dollars ("$").

▪ Les principales variables d'environnement sont prédéfinies

▪ Exemple: PATH , HOME , SHELL, LANG, HOSTNAME

▪ Mais un utilisateur peut en définir aussi. Certaines variables

d'environnement sont exportables, c'est à dire que leur valeur est


transmise aux processus enfants du processus shell.
La variable PATH

▪ Les chemins absolus des répertoires contenant des programmes doivent


être définis dans la variable d'environnement PATH afin que les
programmes soient accessibles par le shell. Pour chaque commande
validée, le shell vérifie qu'elle correspond, soit à l'une de ces commandes
internes, soit à l'un des programmes contenus dans les chemins de
recherche définis dans la variable PATH.

▪ Pour rajouter le répertoire personnel de l'utilisateur dans les chemins de


recherche (pendant le temps de la session): PATH=$PATH:$HOME
Redirection des Entrées/Sorties (1)

▪ Également appelé "traitement en pipeline", la redirection des Entrées/Sorties (E/S) s'effectue au


travers des trois canaux de communication que possède chaque processus:

– STDIN (standard input) est par défaut associé au clavier et est identifié par le N°0

– STDOUT (standard output) est par défaut associé à l'écran et est identifié par le N° 1

– STDERR (standard error) est par défaut associé à l'écran et est identifié par le N° 2

Le résultat d’une commande peut être:

▪ Affiché dans un terminal (cas par défaut)

▪ Redirigé dans un fichier

▪ Redirigé dans une autre commande


Redirection des Entrées/Sorties (2)

▪ Redirection dans un fichier


> : redirige dans un nouveau fichier ou écrase le contenu du
fichier si ce dernier existait déjà
Exemple: ls > resultat
le contenu du répertoire sera redirigé vers un nouveau fichier avec le nom resultat

>> : redirige à la fin d'un fichier


Exemple: pwd >> resultat
le chemin du répertoire courant sera ajouté à la fin du fichier resultat
Redirection des Entrées/Sorties (3)

▪ Redirection d'erreur dans un fichier


2> : redirige les messages d'erreur
Exemple: mkdir /essai 2> erreur
les erreurs de la commande sont redirigées dans le fichier avec le nom erreur

2>> : redirige les messages d'erreur à la fin d'un fichier


Exemple: rm /etc/passwd 2>> erreur
les erreurs de la commande sont ajoutés à la fin du fichier avec le nom erreur
Redirection des Entrées/Sorties (4)

▪ Redirection dans une autre commande


| : (lire pipe) renvoi le résultat d'une commande en argument
à une autre commande. On peut donc chaîner plus sieurs
commandes. On parle de pipeline.
Exemple: cat [Link] | sort | wc –l

cat [Link] : affiche le contenu de [Link]


sort : le contenu de cat [Link] est trié
wc –l : le nombre de ligne est compté après le tri

NB: seul le nombre de ligne sera affiché au final


Redirection des Entrées/Sorties (5)
▪ La commande "more" permet de ralentir la sortie d'un pipeline et de l'afficher page
par page.

▪ La commande "tee" permet de rediriger son entrée à la fois vers l'écran et vers un
fichier donné en argument.

▪ Les redirections vers le répertoire "/dev/null" sont irrémédiablement perdues


puisque ce fichier qui correspond à la corbeille (bit-bucket) est un fichier de
périphérique spéciale dont la taille est toujours égale à zéro octets.
IV. Installation de
programmes
Concepts de base (1)
▪ Sous Linux, au lieu d'aller chercher des programmes sur internet, on se procure les
paquets auprès de sa distribution, ce qui garantit que les paquets ont été testés
pour la version de votre distribution : c'est un gage de stabilité et de sécurité.

▪ Un paquet (en anglais, package) est une archive qui contient non seulement un
programme, mais aussi la documentation, les fichiers de configuration, et les
bibliothèques associées. Il permet de façon pratique d'installer le programme.
▪ Sous forme de paquetage RPM. Il s'agit d'un fichier portant l'extension .rpm
permettant une installation automatique, pour les distributions Linux telles que
RedHat ou Mandrake.

▪ Sous forme de paquetage DEB. Il s'agit d'un fichier portant l'extension .deb
permettant une installation automatique, pour les distributions Linux Debian.
Concepts de base (1)
▪ Presque chaque distribution possède son gestionnaire de paquets. Avant d'installer un
logiciel, il faut donc savoir :
– Quelle est sa distribution ;

– Quel est le gestionnaire de paquets de sa distribution.

▪ Une distribution fournit en général plusieurs centaines, parfois plusieurs dizaines de milliers
de paquets. Cependant, dans certains cas, on a besoin d'un logiciel pour lequel il n'y a pas de
paquets - c'est très rare pour les distributions les plus populaires. On peut alors se procurer
les sources du logiciel et les compiler, ce qui est plus long et plus difficile.

▪ Il s'agit de fichiers compressés souvent avec l'extension .[Link], .gz ou .tar.bz2 connues sous
le nom tarballs.
Concepts de base (3)
▪ Les programmes sous Linux sont disponibles sous des formats différents suivant la branche
de distributions concernée

▪ Sous forme de paquet RPM. Il s'agit d'un fichier portant l'extension .rpm permettant une
installation automatique, pour les systèmes RedHat et dérivés.

▪ Sous forme de paquet DEB. Il s'agit d'un fichier portant l'extension .deb permettant une
installation automatique, pour les systèmes Debian et dérivés
Gestionnaire de paquets: DPKG (1)
▪ La distribution Debian propose un outil de gestion de package permettant d'automatiser
l'installation, la configuration et la mise à jour des logiciels installés. Il s'agit de DPKG
accessible sous Debian et dérivés.

Usages courants

▪ Installer un paquet : dpkg –i [Link]

▪ Désinstaller un paquet : dpkg –r paquet

▪ Supprimer un paquet et sa configuration : dpkg --purge [Link]

▪ Reconfigurer un paquet déjà installé : dpkg-reconfigure paquet

▪ Lister tous les paquets installer : dpkg -l

▪ Vérifier qu’un paquet est installé : dpkg -s paquet

▪ Pour lister les fichiers installés par un paquet : dpkg -L paquet


Gestionnaire de paquets: RPM (1)
▪ RPM (Red Hat Package Manager) est un gestionnaire de paquets inventé en 1995
par Red Hat, et adopté par la suite par d'autres distributions telles que SuSE,
Mageia et bien entendu Fedora.

Usages courants

▪ Installer un paquet : rpm -ivh [Link]

▪ Mettre à jour un paquet : rpm -Uvh [Link]

▪ Désinstaller un paquet : rpm -e [Link]

▪ Lister tous les paquets installés : rpm -qa


Gestionnaire de paquets: RPM (2)
▪ Vérifier qu’un paquet est installé : rpm -q paquet

▪ Lister les fichiers d’un paquet installé : rpm -ql paquet

▪ Obtenir toutes les informations concernant un paquet installé : rpm -qi paquet

▪ Obtenir toutes les informations concernant un paquet avant le l’installer : rpm -qip
[Link]
Installation de paquet depuis les dépôts:
APT (1)
▪ APT (Advanced Packaging Tool) est un gestionnaire de paquets inventé pour Debian et ses dérivés.
Il gère les dépendances entre les différents packages et de permet de les mettre à jour par simple
téléchargement

Usages courants

▪ Mise à jour la liste des paquets (à faire périodiquement) : apt-get update

▪ Recherche dans les descriptions de paquets : apt-cache search paquet

▪ Vérifier les dépendances d’un paquet : apt-cache showpkg paquet

▪ Installation ou mise-à-jour d’un paquet : apt install paquet

▪ Installation sans dialogue : apt -y install paquet

▪ Retirer le paquet sans les configurations : apt remove paquet

▪ Retirer le paquet sans les dépendances : apt autoremove paquet


Installation de paquet depuis les dépôts:
APT (2)
▪ Retirer totalement un paquet (configurations incluses) : apt purge paquet

▪ On peut combiner les deux : apt autoremove --purge paquet

▪ Mettre à jour tous les paquets sans ajout de nouveaux paquets : apt-get update && apt-get
upgrade

▪ Mettre à jour tous les paquets installés vers les dernières versions en installant de nouveaux
paquets si nécessaire : apt dist-upgrade
Installation de paquet depuis les dépôts:
YUM / DNF (1)
▪ YUM, pour “Yellowdog Updater Modified”, est un gestionnaire de paquets pour Red Hat et dérivés

▪ “Dandified Yum” ou “DNF” est le successeur de YUM dont l’usage est en quasiment identique
depuis Red Hat Enterprise Linux 8.

▪ YUM et DNF permettent de gérer l’installation et la mise à jour des logiciels installés. Ce sont des
surcouches de RPM gérant les téléchargements et les dépendances de la même manière que APT
de Debian. Contrairement à APT, YUM met à jour sa liste de paquets automatiquement.

Usages courants

▪ Chercher un paquet : yum search paquet

▪ Lister des informations concernant un paquet : yum list paquet ou yum info paquet

▪ Installer un paquet : yum install paquet

▪ Installer un paquet sans dialogue: yum -y install paquet

▪ Désinstaller un paquet: yum remove paquet


Installation de paquet depuis les dépôts:
YUM / DNF (2)
▪ Mise-à-jour d’un paquet : yum update paquet

▪ Vérification des mise-à-jours disponibles : yum check-update

▪ Mise-à-jours de sécurité et des binaires : yum update

▪ Liste des dépôts de paquets : yum repolist ou yum repolist all

▪ Installer le dépôt supplémentaire EPEL (Extra Packages for Enterprise Linux) : yum install epel-
release

▪ La configuration des dépôts est accessible dans le répertoire: /etc/[Link].d/


V. Edition de
configurations
Les basiques
▪ Les fichiers de configurations de programmes / applications sont souvent accessibles dans le
répertoire /etc et ses sous répertoire. Il y en a énormément.

▪ Quelle que soit la modification faite sur un fichier de configuration, elle prend effet uniquement
après redémarrage du service associé.

Bonnes pratiques

▪ Avant d'éditer un fichier de configuration, il faut toujours en sauvegarder la version originale sous
forme en la copiant avec un ajout d'une extension (exemple: .old, .bkp)

▪ Pendant l'édition d'un fichier de configuration, il faut autant que possible ajouter des
commentaires qui permettent de délimiter avec exactitude les lignes modifiées.

▪ Dans l'idéal, toujours sauvegarder une copie originale de la ligne modifier sous forme de
commentaire dans le fichier

▪ NB: les lignes de commentaire débutent souvent par un dièze (#)

▪ Pour éditer convenablement un fichier de configuration , il savoir utiliser un éditeur de texte


Commandes Linux: Editeur de texte vi (1)

▪ Mode interactif:
– mode par défaut
– impossible d'écrire
– copier, coller, supprimer, se déplacer

▪ Mode insertion:
– accès par la touche "i"
– permet la saisie de texte
– sortie du mode insertion avec la touche [Echap]

▪ Mode commande:
– accès par la combinaison [Echap :]
– permet d’enregistrer le fichier, de quitter, faire des recherches
– saisir d’autres commandes Unix
Commandes Linux: Editeur de texte vi (2)

Mode
Interactif

Mode Mode
Insertion commande
Commandes Linux: Editeur de texte vi (3)

▪ Mode interactif: pour y accéder appuyez sur Echap


h , j , k , l : déplacement dans le texte gauche, bas, haut droite
respectivement
$ : aller en fin de ligne
^ : aller au début de la ligne
G: aller au début la dernière ligne du fichier
G$: aller à la fin de la dernière ligne du fichier
1G: aller à la première ligne du fichier
e: aller à la fin du mot
b: aller au début du mot
Commandes Linux: Editeur de texte vi (4)

▪ Mode interactif: pour y accéder appuyez sur Echap


w : aller au début du mot suivant
2w : aller à 2 mots à partir du curseur
dd : supprimer la ligne courante
5dd : supprimer 5 lignes vers le vers bas (inclus la ligne courante)
yy : copier la ligne courante
3yy : copier 3 lignes vers le bas (inclus la ligne courante)
p : coller sous la ligne courante
P :coller au-dessus de la ligne courante
Commandes Linux: Editeur de texte vi (5)

▪ Mode insertion: pour y accéder revenir d'abord au mode interactif


i : insérer du texte avant le curseur
I : insérer du texte au début de la ligne courante
a : insérer du texte après le curseur
A : insérer du texte à la fin de la ligne courante
o : insérer en dessous de la ligne courante
O : insérer au-dessus de la ligne courante
Echap : revenir en mode interactif
Commandes Linux: Editeur de texte vi (6)

▪ Mode commande: pour y accéder il faut d'abord être en mode interactif


:w : enregistrer le fichier
:q : quitter le fichier
:q! : quitter le fichier sans enregistrer
:wq : enregistrer le fichier et le quitter
:x : enregistrer le fichier et quitter
:10 : aller à la ligne 10
:set number : afficher les numéros de ligne
:set nonumber : désactiver l'affichage des numéros de ligne
Echap : revenir en mode interactif
VI. Gestion simple du
réseau
Adressage (1)

▪ ip : commande permettant de gérer les interfaces réseaux


▪ Vérification de la configuration réseau
ip addr ou ip a

▪ Définition d'une adresse éphémère


ip addr add adresseip/mask dev interface
Ex: ip addr add [Link]/24 dev enp0s25

▪ Suppression d'une adresse ip


ip addr del adresseip/mask dev interface
Ex: ip addr del [Link]/24 dev enp0s25
Adressage (2)

▪ Modifier l'état d'une interface réseau


ip link set dev interface up ou ip link set dev interface down
Ex: ip link set dev enp0s25 up

▪ Pour définir une configuration réseau permanente à votre


machine Linux, il vous faudra éditer le fichier
/etc/network/interfaces sous les systèmes Debian
▪ Il peut s'agir d'une configuration statique ou dynamique
suivant la conception de votre réseau et vos objectifs
Adressage (3)

Configuration dynamique Configuration statique


Adressage (4)

▪ Sur Red Hat et dérivés, il existe un fichier de configuration


par interface réseau
▪ Il est sous la forme : /etc/sysconfig/network-scripts/ifcfg-
nom-interface
▪ Pour l'interface enp0s3 le fichier s'appellera bien entendu :
/etc/sysconfig/network-scripts/ifcfg-enp0s3
Adressage (5)

Configuration dynamique Configuration statique


Gestion des services réseau

▪ Il est important après édition de ce fichier de redémarrer le service


"networking" comme suit:
/etc/init.d/ networking restart
ou
systemctl restart networking
▪ Pour s'assurer que ce dernier a effectivement redémarré sans encombre, il
faudra faire:
/etc/init.d/networking status
ou
systemctl status networking
Commandes réseaux usuelles

▪ ping : permet de tester l'accessibilité d'une machine sur le


réseau
▪ route : permet de lister, ajouter ou supprimer les routes sur
votre machine
▪ netstat : permet en autre de connaître les ports en écoute,
les interfaces impliquées, les protocoles, etc
▪ traceroute : permet de déterminer la route suivie par un
paquet pour atteindre une machine cible
VII. Scripting Shell
Concept de base (1)

▪ La programmation shell consiste à écrire de "petits programmes", les scripts shells à


l'aide des outils du shell (commandes, options, arguments, variables, paramètres,
fonctions, structures de contrôle, redirections, filtres,...).

▪ Les scripts shells sont des fichiers textes exécutables dont le shell interprète et traite
chaque ligne séquentiellement
Concept de base (2)

▪ Il faut enregistrer les scripts dans les répertoires prévus pour les programmes

("$HOME/bin", "/usr/local/bin"), ou du moins dans un des répertoires de la

variable PATH, afin que le shell puisse les retrouver quand l'utilisateur les invoque.

Pour exécuter un script qui se trouve dans le répertoire courant depuis ce même

répertoire, il faut faire précéder le nom du script d'un point et d'un slash pour

indiquer au shell le répertoire de travail (par exemple : "./script"). Ainsi, le shell

est forcé d'exécuter le fichier du répertoire de travail au lieu d'essayer d'aller le

rechercher dans les chemins de la variable PATH.


Concept de base (3)

▪ Il y a 03 façons d'appeler un script:


▪ Appel implicite : consiste à saisir le nom du script à partir du
prompt. L'utilisateur doit avoir les droits de lecture (r) et
d'exécution (x) pour pouvoir lancer le script.
▪ Appel explicite : consiste à préciser le shell qui exécutera le script.
Il suffit de saisir le nom de l'interpréteur suivi du nom du script (par
exemple : "bash script").
▪ Appel par le point : consiste à saisir le nom du script depuis le
répertoire ou il se trouve, précédé d'un point et d'un espace (par
exemple : ". script").
Rédaction du script shell
▪ Les scripts shell commencent généralement par indiquer avec lequel des shells ils peuvent
être executés:
– #! /bin/bash

– #! /bin/sh

▪ Certains caractères sont spécialement utilisés dans les scripts:


– #(pour les commentaires)

– $variable= valeur (pour le passage d'un paramètre au script)

– read variable (donne la main à l'utilisateur pour saisir une valeur qui sera enregistrée dans variable)

– for (boucle itérative)

– if (test de comparaison)

– case (test multi choix)

– test
Structures de contrôle (1)

▪ Les structures de contrôle ▪ Le branchement binaire:

peuvent être des branchements IF condition THEN


instructions
ou des boucles. ELSE
instructions
▪ Les branchements (IF et CASE) FI

sont des instructions de décision ▪ Le branchement multiple:


ou de consultation qui sont CASE expr IN
1
fonction de certaines conditions. 2
3
DEFAULT
ESAC
Structures de contrôle (2)

▪ Le branchement "TEST" (qui correspond à "IF THEN" dans d'autres


langages de programmation) procède à un contrôle d'une expression
simple (composée d'un seul élément) ou procède à une comparaison de
deux éléments. Le branchement "TEST" renvoi un code de retour qui est
égal à 0 quand la comparaison est vraie (true) ou à 1 quand la
comparaison est fausse (false).
Structures itératives (1)
▪ Les boucles (FOR, WHILE et UNTIL) sont des instructions répétitives ou itératives qui traitent
plusieurs fois une même partie de programme en fonction de certaines conditions. Le traitement
séquentiel est interrompu en fin de boucle pour revenir en début de boucle (point d'itération)
et exécuter de nouveau le corps de la boucle. La condition "true ' (qui a pour valeur 0) est
toujours vraie, ce qui permet de créer des boucles sans fin.

▪ La boucle WHILE continue "tant que" la condition est vraie:


WHILE expr DO
DONE

▪ La boucle UNTIL continue "jusqu'à" ce que la condition soit vraie (c'est la négation de la
boucle WHILE):
UNTIL expr DO
DONE

▪ La boucle FOR est une boucle de comptage dont le nombre de passage est connu dès le
départ.
FOR expr DO
DONE
Structures itératives (2)
Instructions de sortie de boucle
▪ L'instruction "continue" permet de quitter le corps d'une boucle mais l'exécution de la boucle
se poursuit en revenant au début.

▪ L'instruction "break" permet de quitter la boucle, comme si la condition de fin de boucle


avait été réalisée.

Calculs arithmétiques

▪ Le shell BASH ne sait calculer que sur des nombres entiers. Les nombres à virgules flottantes
doivent être traité avec la calculatrice "bc".

▪ Les opérateurs arithmétiques sont plus ou moins prioritaires et l'ordre de calcul peut être
facilité à l'aide de parenthèses.
Les opérateurs (1)
▪ Les opérateurs de comparaison de chaînes de caractères:
= pour égal
!= pour différent

▪ Les opérateurs de comparaison numérique:


-eq pour "equal"
-ge pour "greater or equal"
-gt pour "greater than"
-le pour "less or equal"
-lt pour "less than"
-ne pour "not equal
Les opérateurs (2)
▪ Les opérateurs logiques:
-a pour "and"
-o pour "or"
! pour "not"

▪ Les opérateurs arithmétiques:


+ pour l'addition
- pour la soustraction
* pour la multiplication
/ pour la division
VIII. Configurer
localisation et
internationalisation
Affichage des paramètres régionaux (1)

▪ Un environnement local est un ensemble de variables


d'environnement qui définissent les paramètres de langue, de pays et
d'encodage de caractères pour vos applications et votre session shell
sur un système Linux.
▪ Ces variables d'environnement sont utilisées par les bibliothèques
système et les applications compatibles avec les paramètres
régionaux sur le système.
▪ Les locales affectent des éléments tels que le format de l'heure/de la
date, le premier jour de la semaine, les nombres, la devise et de
nombreuses autres valeurs formatées en fonction de la langue ou de
la région/du pays que vous définissez sur un système Linux.
Affichage des paramètres régionaux (2)

• locale : afficher des informations sur les paramètres régionaux


actuellement installés
• localectl status : afficher des informations sur les paramètres
régionaux actuellement installés
• locale -k LC_TIME : afficher plus d'informations sur une variable
d'environnement, par exemple LC_TIME
• locale –a : afficher une liste de tous les paramètres régionaux
disponibles
Modification des paramètres régionaux
(1)

• Pour modifier les paramètres régionaux, on peut se servir de la commande update-locale


ou localectl comme suit :
update-locale LANG=en_IN.UTF-8
ou
localectl set-locale LANG=en_IN.UTF-8

• La variable LANG vous permet de définir les paramètres régionaux pour l'ensemble du
système.

update-locale LC_TIME=en_IN.UTF-8
ou
localectl set-locale LC_TIME=en_IN.UTF-8
Modification des paramètres régionaux
(2)

• Vous pouvez trouver les paramètres régionaux globaux dans les fichiers suivants:

/etc/default/locale – sur Ubuntu/Debian

/etc/[Link] – sur CentOS/RHEL


• Pour définir une locale globale pour un seul utilisateur, vous pouvez simplement
ouvrir le fichier ~/.bash_profile et ajouter les lignes suivantes :

LANG="en_IN.utf8"

export LANG
• Outre le changement de langue, vous pouvez ressenntir le besoin de changer la
dispostion de votre clavier. Pour se faire, utilisez la commande:

dpkg-reconfigure keyboard-configuration
Changement du fuseau horaire (1)
La commande timedatectl exécutée seule affiche les informations sur la date,
heure et fuseau horaire, ainsi que les informations de synchronisation automatique
via NTP. Voici les détails :
•Local time : L’horloge logicielle prise comme horloge locale par l’ordinateur en fonction du
fuseau horaire
•Universal Time : Le temps universel coordonné ou UTC
•RTC : L’heure de l’horloge en temps réel ou horloge matérielle. Habituellement, c’est UTC
•Time Zone : c’est le Fuseau horaire configuré dans le système
•System clock synchronized : Si l’horloge système est synchronisée avec un serveur NTP
•NTP Service : si le service NTP de l’ordinateur est actif.
•RTC in TZ local : Si l’horloge en temps réel utilise l’heure locale au lieu de UTC
Changement du fuseau horaire (2)

• Pour changer le fuseau horaire, il faut d'abord lister les fuseaux horaires
disponibles:
timedatectl list-timezones
• Pour appliquer un fuseau horaire, il faut exécuter la commande comme
suit en respectant la casse du fuseau horaire choisi:
timedatectl set-timezone Africa/Porto-Novo
NB: dans le cet exemple, Africa/Porto-Novo est le fuseau horaire choisi
IX. Configuration de
l'impression
Système d'impression CUPS (1)
▪ CUPS fournit différentes commandes permettant de définir la configuration des
imprimantes et de les rendre accessibles aux systèmes sur le réseau. En outre,
CUPS prend en charge plusieurs options propres aux imprimantes qui vous
permettent de contrôler la configuration des imprimantes

▪ Paquet à installer: cups


▪ Ajout d'une imprimante à cups: lpadmin -p printer-name -E -v device -m ppd
▪ -p : spécifie le nom de l'imprimante à ajouter.
▪ -E : autorise la destination et accepte les tâches.
▪ -v : définit l'attribut device-uri de la file d'attente d'impression.
▪ -m : définit le fichier PPD de l'imprimante à partir du répertoire du modèle ou à
l'aide de l'une des interfaces de pilote
Système d'impression CUPS (2)
▪ cupsaccept printer-name : permettre à l'imprimante d'accepter les demandes
d'impression

▪ cupsenable printer-name : permettre à l'imprimante de lancer


les demandes d'impression

▪ lpstat –s : afficher la liste des imprimantes

▪ lpstat –a : afficher la liste des imprimantes actuellement connectées au système

▪ lpstat -p printer-name –l : vérifier que l'imprimante est correctement configurée

▪ lpoptions -d printer-name : définir l'imprimante comme par défaut

▪ lp fichier1 : imprimer le fichier "fichier1"

▪ lp -n 3 fichier1 : imprimer 3 copies de "fichier1"

▪ lpq : afficher la liste d'attente d'impression


X. Administration du
système
Gestion des processus (1)

▪ Un processus est un programme en cours d'exécution. Par


exemple, chaque fois que l'on lance la commande ls, un
processus est créé durant l'exécution de la commande.
▪ Un processus est identifié par un numéro unique que l'on
appelle le PID (Process IDentifiant)
▪ Un processus dispose d'un processus père que l'on appelle le
PPID (Parent PID).
▪ Le père de tous les processus est le processus "init"
Gestion des processus (2)

▪ pstree: affiche l’arborescence des processus.


▪ pstree -p : affiche l’arborescence des processus + leur PID
▪ ps : affiche les processus de l’utilisateur courant
ps -ef ou ps aux : affiche avec des détails tous les processus
▪ kill 6976: arrête le processus portant le PID 6976 spécifié
▪ pkill nom-processus : arrête le processus à partir de son nom
▪ Ctrl + C: arrête un processus lancé dans la console
▪ init 0: arrête tout le système
▪ init 6: redémarre tout le système
Planification/automatisation de tâches (1)

▪ Bien souvent, le besoin d'exécuter une routine périodiquement ou à un moment précis sans avoir à s'y
mettre soit même se fait ressentir pour tout administrateur système. C'est là qu'intervient le cron qui est
un programme vous permettant d'exécuter automatiquement des commandes ou scripts à un date et une
heure très précise avec possibilité de répétition. On y accède avec la commande crontab

▪ Pour être autorisé à utiliser la commande crontab, il faut que l'utilisateur soit présent dans le groupe
cron.

▪ Les fichiers /etc/[Link] et /etc/[Link] permettent de définir les droits d'utilisation sur crontab

▪ Si le fichier /etc/[Link] existe, alors vous devez être présent dans ce fichier pour être autorisé à
utiliser cette commande. Si le fichier /etc/[Link] n'existe pas mais que /etc/[Link] existe, alors
vous ne devez pas être mentionné dans le fichier /etc/[Link] afin de pouvoir utiliser cette commande.

▪ Il est préférable de ne créer qu'un seul des deux fichiers et y placer le nom des utilisateurs auxquels vous
voulez donner/refuser l'accès à la commande crontab.
Planification/automatisation de tâches (2)
▪ crontab –l : affiche le contenu de votre fichier crontab

▪ crontab –r : supprime toutes les tâches du fichier crontab

▪ crontab –e : éditer le fichier contab

▪ Structure d'une ligne de du crontab: mm hh jj MMM JJJ [utilisateur] commande

▪ mm : minutes (00-59).

▪ hh : heures (00-23) .

▪ jj : jour du mois (01-31).

▪ MMM : mois (01-12 ou abréviation anglaise sur trois lettres : jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec).

▪ JJJ : jour de la semaine (0-6 ou abréviation anglaise sur trois lettres : sun, mon, tue, wed, thu, fri, sat).

▪ utilisateur (facultatif) : nom d'utilisateur avec lequel exécuter la tâche.

▪ commande: commande à exécuter.


Planification/automatisation de tâches (3)
Pour chaque unité, on peut utiliser les notations suivantes :

▪ 1-5 : les unités de temps de 1 à 5.

▪ */6 : toutes les 6 unités de temps (toutes les 6 heures par exemple).

▪ 2,7 : les unités de temps 2 et 7.

Exemples

▪ 00 22 * * * /root/scripts/[Link] >> [Link]


Exécution tous les jours à 22h00 du script /root/scripts/[Link] et redirection du
résultat dans le fichier [Link]

▪ 15 00 25 12 * echo "Le père Noël est passé !"


Affichage d'un message une fois par an à (ici le 25 décembre à 00h15)
XI. Gérer les utilisateurs
et les groupes
Gestion des utilisateurs et groupes (1)

Création de compte utilisateur


Se fait en deux commandes
# useradd nom-utilisateur (créer le compte)
# passwd nom-utilisateur (définir un mot de passe pour le compte utilisateur)
Suppression d'un compte utilisateur
# userdel nom-utilisateur
Gestion des utilisateurs et groupes (2)

Modification d'un compte utilisateur


# usermod –g groupeX utilisateur
Fait de "groupeX" le groupe principal de utilisateur

#usermod –aG groupeA utilisateur


Ajoute utilisateur au groupe "groupeA" (on ajoute ici un groupe complémentaire)

Création d'un groupe


# groupadd nom-groupe
Suppression d'un groupe
# groupdel nom-groupe
Gestion des utilisateurs et groupes (3)

▪ Les détails sur les utilisateurs


existants sur un système Linux
sont accessibles dans le fichier
/etc/passwd

▪ Chaque ligne représente un


utilisateur et contient
respectivement 7 colonnes
séparées chacune de l'autre par
le caractère ":"

▪ Pour les groupes, la liste


équivalente est disponible dans
/etc/group
Gestion des utilisateurs et groupes (3)
• Nom d’utilisateur : Il est utilisé lorsque l’utilisateur se connecte. Sa longueur doit être comprise entre
1 et 32 caractères
• Mot de passe : Un caractère x indique que le mot de passe est chiffré est stocké dans le fichier
/etc/shadow
• ID utilisateur (UID) : Chaque utilisateur doit se voir attribuer un ID utilisateur (UID). L’UID 0 (zéro) est
réservé à l’utilisateur root et les UIDs 1-99 sont réservés aux autres comptes prédéfinis. Les UID 100-
999 sont réservés par le système pour les comptes/groupes administratifs et système
• ID de groupe (GID) : L’ID du groupe principal de l'utilisateur (stocké dans le fichier /etc/group)
• User ID Info (GECOS) : Le champ de commentaire. Il vous permet d’ajouter des informations
supplémentaires sur les utilisateurs, comme le nom complet de l’utilisateur, son numéro de
téléphone, etc.
• Répertoire personnel : Le chemin absolu vers le répertoire personnel de l'utilisateur
• Shell de connexion: Le chemin absolu du shell de connexion (/bin/bash).
XII. Limiter les accès à
la mémoire et au
processeur
Limitation des accès aux ressources du
système (1)

▪ Sous GNU/Linux, comme sur n’importe quel autre système d’exploitation, il existe un moyen de
connaître et/ou de modifier les ressources allouées aux processus du système. Il s’agit d’une commande
permettant, au travers de divers indicateurs, de régler les seuils haut et bas des ressources du système.

▪ Sous Linux on offre la possibilité aux utilisateurs de contrôler les ressources proposées aux processus du
système. D’ailleurs, la priorité des processus utilisateur fait partie des seuils à administrer. Il s’agit d’un
élément fondamental de la fiabilité du système GNU/Linux. L’objectif de ce mécanisme est d’éviter les
dénis de services en cas de dysfonctionnement du processus en cours d’exécution. Ce type d’attaque,
aussi appelée fork bomb peut s’avérer dévastateur pour le système, ses utilisateurs et leur
environnement. Fort heureusement GNU/Linux permet de borner ces précieuses ressources système,
soit par utilisateur, soit par groupes d’utilisateurs, en paramétrant le fichier /etc/security/[Link]
Limitation des accès aux ressources du
système (2)

▪ Beaucoup de limites ne peuvent être gérées que par root. Mais, certaines peuvent être réglées par l’utilisateur
lui-même, via la commande ulimit. Nombre de ces limites sont établies selon deux critères :
– une limite souple (aussi appelée soft limit)

– une limite dure (aussi appelée hard limit)

▪ La première peut facilement être augmentée par l’utilisateur grâce à la commande ulimit. Mais, en aucun cas,
l’utilisateur ne pourra dépasser la limite dure. Le système, quant à lui, ne peut pas dépasser la valeur de la limite
souple. Mais, si l’utilisateur souhaite accroitre la capacité de la ressource, il doit alors définir un nouveau seuil de
cette limite souple à l’aide de la commande ulimit. Deux règles essentielles prévalent à la gestion de ces limites:
– la limite souple est toujours inférieure (ou égale) à la limite dure.

– les limites d’un utilisateur sont préemptives sur celles d’un groupe.
Limitation des accès aux ressources du
système (3)

▪ Les seuils sont gérés au sein du fichier /etc/security/[Link] et ulimit ne permet de modifier que
certains d’entre eux :
– Taille des fichiers

– Nombre de fichiers ouverts

– Temps CPU maximum pour un processus

– Nombre de processus

– Priorité maximale des processus de l’utilisateur


Utilisation de la commande ulimit (1)

La commande ulimit permet de


confiner un programme et/ou un script,
à une quantité de ressource souhaitée.
Le meilleur moyen de connaître les
différents seuils déjà fixés, pour
l’utilisateur courant, est d’exécuter la
commande : ulimit –a
Utilisation de la commande ulimit (2)

▪ core file size : Nombre maximum de core dumps. Il s'agit d'un snapshot du système comprenant l'état
de la RAM, le context switch et les registres processeur. C'est à utiliser à des fins de débogage
seulement et vous n'en avez habituellement pas besoin. À laisser à 0 donc, pour ne pas courir le risque
de rapidement saturer votre espace disque.
▪ data seg size : Taille maximum du segment de données d'un programme. Il s'agit d'une portion
d'espace d'adressage virtuel d'un programme contenant les différentes variables de ce dernier.
▪ scheduling priority : Priorité maximum que l'on peut attribuer à un processus. La gestion des priorités,
ou ordonnancement, définit l'ordre dans lequel les processus auront accès au processeur (utile lorsque
l'on a besoin de faire plusieurs tâches à la fois).
▪ file size : Taille maximum des fichiers écrits par le shell et ses processus enfants.
Utilisation de la commande ulimit (3)

▪ pending signal : Un poil complexe, on spécifie ici la limite du nombre de signaux qui peuvent être en
attente pour un process donné (tels que sigterm, sigkill, sigstop…) lorsque ce dernier est en attente
d'I/O. Lorsqu'un process est dans cet état, il n'est pas possible de l'interrompre (le noyau attend que le
process « se réveille »), c'est pour cela qu'il y a une file d'attente.
▪ max locked memory : Taille maximum de mémoire qu'un processus peut « verrouiller » en RAM afin
de prévenir que ce dernier ne swap (échange) pas.
▪ max memory size : Taille maximale qu'un processus peut occuper en RAM (appelé resident set size). À
ne pas confondre avec la taille totale de mémoire virtuelle que le processus possède.
▪ open files : Nombre de descripteurs de fichier qui peuvent être ouverts concurremment.
▪ POSIX message queues : Nombre maximum (en bytes) dans la file d'attente de message POSIX.
N'hésitez pas à consulter le man de la message queue pour plus de détails.
Utilisation de la commande ulimit (4)

▪ real-time priority : C'est la priorité maximale pour un processus, telle qu'il ne peut être
interrompu (c'est pour cela qu'on l'appelle real time).
▪ stack size : Taille maximum de la stack size. Il s'agit d'une région réservée en mémoire (à ne
pas confondre avec la heap memory) utilisée pour stocker l'emplacement des appels à
fonction. Cependant, le développeur peut choisir d'y stocker d'autres informations.
▪ cpu time : Temps processeur maximum en secondes.
▪ max user processes : Il s'agit du nombre maximal de processus qu'un utilisateur peut démarrer
ou forker.
▪ virtual memory : Taille maximale de mémoire virtuelle disponible pour un utilisateur donné. Il
s'agit de la somme de la mémoire physique et de la mémoire de masse (les disques durs).
▪ file locks : Nombre maximum de de fichiers qu'un processus peut verrouiller. Le file locking est
un mécanisme permettant de restreindre l'accès d'un fichier à seulement un utilisateur ou
processus à un instant donné.
Utilisation de la commande ulimit (5)

Les options de la commande ulimit


▪ -a : Répertorie toutes les limites de ressources en cours.
▪ -c : Indique la taille des clichés du processus core, en nombre de blocs de 512 octets.
▪ -d : Indique la taille de la zone de données, en nombre de ko.
▪ -f : Définit la limite de taille de fichier en blocs lorsque le paramètre Limite est utilisé, ou indique la
limite de taille de fichier si aucun paramètre n'est spécifié. L'indicateur -f est la valeur par défaut.
▪ -h : Indique que la limite absolue de la ressource indiquée est définie. Si vous disposez des droits de
l'utilisateur root, vous pouvez augmenter la limite absolue. N'importe qui peut le diminuer.
▪ -m : Indique la taille de la mémoire physique (taille de l'ensemble résident), en nombre de ko. Cette
limite n'est pas appliquée par le système.
Utilisation de la commande ulimit (6)

▪ -n : Indique la limite du nombre de descripteurs de fichier qu'un processus peut avoir.


▪ -r : Indique la limite du nombre d'unités d'exécution qu'un processus peut avoir.
▪ -s : Indique la taille de la pile, en nombre de ko.
▪ -S : Indique que la limite souple de la ressource donnée est définie. Une limite souple peut être
augmentée jusqu'à la valeur de la limite absolue. Si aucun des indicateurs -H ou -S n'est spécifié, la
limite s'applique aux deux.
▪ -t : Indique le nombre de secondes que chaque processus doit utiliser.
▪ -u : Indique la limite du nombre de processus qu'un utilisateur peut créer.
Utilisation de la commande ulimit (7)

▪ Syntaxe d'utilisation de ulimit


ulimit typelimite objet-a-limiter valeur
▪ Exemple
ulimit -Su 300

dans cet exemple, on applique une softlimit (-S) d'une valeur de 300 au
nombre de processus que peut créer un utilisateur
XIII. Configurer SSH
Le protocole d'accès distant SSH
▪ L’un des outils essentiels à maîtriser en tant qu’administrateur
système est le SSH.
▪ SSH, ou Secure Shell, est un protocole utilisé pour se connecter en
toute sécurité à des systèmes distants. C’est le moyen le plus
courant d’accéder à des serveurs Linux distants
▪ Pour fonctionné, il faut que la machine distante sur laquelle vous
souhaitez vous connecter ait actif un serveur SSH installable avec le
paquet openssh-server. Le service associé dans ce cas et dénommé
ssh et peut être géré avec la commande systemctl pour les opération
courantes (start, stop, restart, status)
▪ Le client doit lui avoir installé le paquet openssh-client
Utilisation du client SSH
Il est possible de se connecter à un serveur SSH de différente façon pour différents buts

▪ ssh <nom_utilisateur>@<hôte_distant> -p <num_port>

– Se connecter au shell de l'hôte distant afin d'y exécuter des commandes comme si on y était. L'hôte distant peut être sous
forme d'adresse IP comme de nom de domaine. Par défaut le serveur SSH écoute sur le port 22. Dans ce cas, l'option –p n'est
pas requise. Ici l'utilisateur mentionné est un utilisateur existant sur le l'hôte distant

▪ scp <fichier> <nom_utilisateur>@<hôte_distant>:<Répertoire destination>


– Chargement d'un fichier dans un répertoire du serveur SSH distant. L'utilisateur spécifier doit d'abord avoir le droit d'écrire dans
ledit répertoire destination

▪ En exécutant ces commandes, une authentification vous est requise et se fait de deux façons:
– Mot de passe
– Clé de chiffrement

▪ Le choix de la méthode d'authentification est défini dans la configuration du serveur SSH.


Serveur SSH
▪ Le fichier de configuration du serveur SSH est accessible sous /etc/ssh/sshd_config Ci-dessous quelques-
unes des directives qui influent majoritairement sur le mode de fonctionnement du serveur SSH

▪ port 22 : définit le port d'écoute à 22 (valeur par défaut )

▪ LoginGraceTime 120 : précise combien de secondes maintenir la connexion active sans se connecter
avec succès. Il peut être judicieux de fixer ce temps juste un peu plus élevé que le temps qu’il vous faut
pour vous connecter normalement.

▪ PermitRootLogin no : interdit les connexions ssh via l'utilisateur root. Sa valeur peut aussi être à "yes"
pour autoriser ou "without-password" pour autoriser mmais seulement avec une authentification par clés
(restriction applicable uniquement à l'utilisateur root)

▪ StrictModes yes : est un garde de sécurité qui refusera une tentative de connexion si les fichiers
d’authentification sont lisibles par tous. Cela permet d’éviter les tentatives de connexion lorsque les
fichiers de configuration ne sont pas sécurisés.

▪ PasswordAuthentication no : interdit globalement les connexions SSH par mot de passe à tous les
utilisateurs
Authentification SSH par clés
▪ Le principe de l'authentification par clé ici est basé sur le principe de chiffrement
asymétrique (paire de clé)

▪ En effet, depuis votre client SSH, il faut générer la paire de clés avec la commande:

▪ ssh-keygen -t rsa -b 4096 : l'option –t détermine l'algorithme de chiffrement exploité


(ici c'est RSA) et -b défini le nombre de bit (ici c'est 4096)

▪ Une fois fait, une clé privée est générée et stocké dans ~/.ssh/id_rsa tandis que sa
clé publique correspondante est stockée dans ~/.ssh/id_rsa.pub

▪ Pour pouvoir établir une session SSH avec authentification par clés, il faudrait que la
clé publique générée soit chargée sur le serveur SSH distant. Pour se faire, deux
méthodes:
– Copier le contenu de ~/.ssh/id_rsa.pub sur une nouvelle ligne dans le fichier ~/.ssh/authorized_keys de l'utilisateur ciblé sur le serveur
SSH
– Faire ssh-copy-id -i ~/.ssh/id_rsa.pub <utilisateur_cible>@<hôte_distant> : fait exactement pareil que sur l'option précédente sauf qu'ici,
cela est automatisé
XIV. Configurer GPG
Introduction à GPG

• A l'image de OpenSSH utilisé pour chiffrer les connexions à distance ainsi que tout échange
d’informations ultérieur. Il existe d’autres scénarios dans lesquels vous souhaiterez chiffrer des
fichiers ou des e-mails pour qu’ils parviennent à leur destinataire en toute sécurité et à l’abri des
regards indiscrets. Vous pourrez également avoir besoin de signer numériquement ces fichiers ou
ces messages pour éviter qu’ils ne soient falsifiés.

• Un excellent outil pour ce genre d’utilisation est GNU Privacy Guard (alias GnuPG ou
simplement GPG), une implémentation libre et open source de l’outil propriétaire Pretty Good
Privacy (PGP). GPG utilise le standard OpenPGP tel qu’il a été défini par le OpeanPGP Working
Group de l’IETF (Internet Engineering Task Force) dans la RFC 4880.

• Le mécanisme sous le capot de GPG est la cryptographie asymétrique ou cryptographie à clé


publique. Un utilisateur génère une paire de clés composée d’une clé privée et d’une clé publique.
Les clés sont liées mathématiquement de manière à ce que ce qui est chiffré par l’une ne puisse
être déchiffré que par l’autre. Pour une communication réussie, l’utilisateur devra envoyer sa clé
publique au destinataire concerné.
Installation de GPG
• GnuPG est dans les dépôts de toutes les distributions, et il est très souvent installé par
défaut.

• Il peut être utile néanmoins de vérifier que la version installée est bien issue de la dernière
branche stable (2.2.x), et non de la branche 1.4.x (qui n’est maintenue que pour la
compatibilité avec les versions de PGP datant des années 1990) ou des branches 2.0.x/2.1.x
(qui sont obsolètes).

• Il est possible de faire cohabiter GnuPG 1.4 et GnuPG 2.2 sur le même système ; dans ce
cas, assurez-vous que la version que vous utilisez en temps normal est bien la 2.2.

• Actuellement, il semble que sur la plupart des distributions GNU/Linux, demander


l’installation d’un paquet gnupg installe bien GnuPG 2.2, le binaire correspondant étant
disponible sous le nom gpg. Il y a quelques exceptions, comme Fedora, où gnupg installe
GnuPG 1.4 — il faut demander l’installation de gnupg2 pour avoir GnuPG 2.2, le binaire
correspondant étant appelé gpg2.
Génération d'une paire de clés GnuPG (1)
• La commande pour travailler avec GPG est gpg. Vous pouvez lui fournir un certain nombre
d’options pour effectuer différentes tâches. Commençons par générer une paire de clés pour
l’utilisatrice carol. Pour ce faire, vous utiliserez la commande gpg --gen-key

• Après vous avoir informé que le répertoire de configuration ~/.gnupg et votre trousseau
public ~/.gnugpg/[Link] ont été créés, gpg vous invite à fournir votre nom et votre
adresse e-mail

• Une fois insérées, un prompt vous demande de confirmer vos informations. Une fois cela fait,
on vous demandera une phrase d’authentification (passphrase en anglais) qui devra être
suffisamment complexe de préférence.

• Un message final s’affiche pour vous informer de la création d’une série de fichiers ainsi que
les clés elles-mêmes, et le processus de génération des clés est terminé avec succès.

• Vous pouvez maintenant consulter le contenu du répertoire ~/.gnupg pour voir lesdits fichiers
Génération d'une paire de clés GnuPG (2)

• opengp-revocs.d : le certificat de révocation créé avec la paire de clés est conservé ici. Les
permissions sur ce répertoire sont assez restrictives étant donné que toute personne qui
aurait accès au certificat pourrait révoquer la clé (nous reviendrons sur la révocation de la clé
dans la prochaine section).

• private-keys-v1.d : ce répertoire contient vos clés privées, les permissions sont donc
restrictives.

• [Link] : c’est votre trousseau de clés publiques. Il contient votre propre clé publique
ainsi que toutes les clés publiques importées.

• [Link] : la base de données de confiance. Elle concerne le concept de toile de confiance


(Web of Trust qui dépasse le cadre de cette leçon).
Lister vos clés GnuPG
• Une fois que votre paire de clés a été créée, vous pouvez voir vos clés publiques
avec la commande gpg --list-keys qui affichera le contenu de votre trousseau de
clés publiques

• Avec la commande commande gpg --list-secret-keys pour afficher vos clés privées.
La sortie sera similaire, mais elle indiquera une clé secrète (sec) au lieu d'une clé
publique (pub).
Distribution et révocation des clés (1)
• Maintenant que vous disposez de votre clé publique, vous devez l’enregistrer (ou l'exporter)
dans un fichier afin de la mettre à disposition de vos futurs destinataires. Ils pourront alors
l’utiliser pour chiffrer des fichiers ou des messages qui vous sont destinés (puisque vous êtes
le seul à posséder la clé privée, vous serez également le seul à pouvoir les déchiffrer et les
lire). De même, vos destinataires l’utiliseront pour déchiffrer et vérifier vos messages et
fichiers chiffrés et, ou signés.

• La commande à utiliser est gpg --export suivi du USER-ID et d’une redirection vers le
nom du fichier résultant de votre choix :
Distribution et révocation des clés (2)
• L’ajout de l’option -a ou --armor à gpg --export (par exemple : gpg --export --armor
carol > [Link]) va créer un résultat ASCII armuré (au lieu du format OpenPGP
binaire par défaut) qui pourra être envoyé par e-mail en toute sécurité.

• Vous devez maintenant envoyer votre fichier de clé publique ([Link]) au destinataire
avec lequel vous souhaitez échanger des informations. Par exemple, envoyons le fichier de
clé publique à ina sur le serveur distant halof en utilisant scp (secure copy) :
Distribution et révocation des clés (3)
• Une autre manière de distribuer les clés publiques consiste à utiliser des serveurs de clés :
vous envoyez votre clé publique sur le serveur avec la commande gpg --keyserver
keyserver-name --send-keys KEY-ID et d’autres utilisateurs pourront les récupérer (ou
les importer) avec gpg --keyserver keyserver-name --recv-keys KEY-ID

• La révocation de clés sera utilisée lorsque vos clés privées ont été compromises ou retirées.
La première étape consiste à créer un certificat de révocation en passant à gpg l’option --
gen-revoke suivie du USER-ID. Vous pouvez précéder --gen-revoke de l’option --output
suivie d’un nom de fichier cible pour enregistrer le certificat résultant dans un fichier (au lieu
de l’afficher sur l’écran du terminal).

• Exemple : gpg --output revocation_file.asc --gen-revoke sonya


Distribution et révocation des clés (3)
▪ Le certificat de révocation a été enregistré dans le fichier revocation_file.asc (asc
pour le format ASCII)

• Pour révoquer la clé privée, il vous faudra fusionner le certificat avec la clé, ce qui
se fait en important le fichier du certificat de révocation dans votre trousseau de
clés
o Exemple : gpg --import revocation_file.asc

• Vous pouvez maintenant afficher vos clés et vous verrez que la clé a été révoquée
Chiffrer et déchiffrer des fichiers (1)
• Il faut d'abord s'assurer d'avoir bien importer la clé publique de votre interlocuteur. Dans ce
cas, ina importe la clé publique de carole comme suit : gpg --import [Link]

• Puis créer un fichier en y écrivant du texte et le chiffrer en utilisant


Chiffrer et déchiffrer des fichiers (2)
• --output encrypted-message : spécification du nom de fichier pour la version
chiffrée du fichier original (encrypted-message dans l’exemple).
• --recipient carol : spécification du USER-ID du destinataire (carol dans notre
exemple). S’il n’est pas fourni, GnuPG le demandera (à moins que --default-
recipient ne soit spécifié).
• --armor : cette option produit un texte ASCII armuré, qui pourra être copié dans un
e-mail.
• --encrypt unencrypted-message : spécification du nom de fichier du fichier original
à chiffrer.
• Le message chiffré "encrypted-message" par ina peut désormais être envoyé à carol
via scp ou tout autre moyen
• Si carol out tout autre utilisateur essaie de lire ce message chiffré en utilisant la
commande cat, ce dernier restera illisible
Chiffrer et déchiffrer des fichiers (3)
• Carol étant en possession de la clé privée, vous pouvez facilement déchiffrer ce
message car il a été originalement chiffré avec sa clé publique. On peut donc:
• Déchiffrer directement le message et l'afficher

• Ou le déchiffrer dans un fichier qu'on peut afficher ensuite autant que souhaité
Signer et vérifier des fichiers (1)
• En dehors du chiffrement, GPG peut être utilisé pour signer des fichiers. Dans ce cas, carol
signera son message à l'aide de sa clé publique. Ainsi tout interlocuteur pourra vérifier que ce
message vient bien de carol grâce à sa clé publique.

• --output message : spécification du nom de fichier de la version signée du fichier original


([Link] dans notre exemple).

• --sign message : chemin vers le fichier original

• Remarque: en utilisant --sign, le document est compressé puis signé. Le résultat est au
format binaire.

• On peut maintenant partager le fichier vers un autre utilisateur via scp


Signer et vérifier des fichiers (2)
• Pour vérifier la signature du message, il faut utiliser l'option --verify

• Par contre, pour l'afficher, il faut recourir à l'option --decrypt que nous connaissons déjà
XV. Quelques services
Service web : Apache2

▪ Le serveur HTTP Apache est le serveur web le plus utilisé au monde. Il


offre de nombreuses fonctionnalités puissantes, notamment des
modules à chargement dynamique, une prise en charge robuste des
médias et une intégration poussée avec d’autres logiciels populaires.

▪ Paquet à installer : apache2

▪ Démarrage des services: systemctl start apache2

▪ Arrêt des services : systemctl stop apache2

▪ Redémarrage des services: systemctl restart apache2

▪ Recharger la configuration apache : systemctl relaod apache2


Fichiers de configuration (1)
Les fichiers de configurations de apache2 se retrouvent dans le répertoire /etc/apache2 . On y retrouve
notamment:

▪ [Link] , envars et [Link] : il s'agit de fichiers de configuration globale d'Apache

▪ sites-available : contient les fichiers de configuration des sites disponibles. On parle d'hôtes
vituels (vhosts)

▪ sites-enabled : ce répertoire contient des liens symboliques vers les configurations, dans site-available, des
sites activés

▪ conf-available : ce répertoire contient les fichiers de configuration des autres services disponibles

▪ conf-enabled : ce répertoire contient des liens symboliques vers les configurations, dans conf-available, des
autres services activés

▪ mods-available : ce répertoire contient les fichiers de configuration des modules d'Apache disponibles

▪ mods-enabled : ce répertoire contient des liens symboliques vers les configurations, dans mods-available,
des modules activés
Fichiers de configuration (2)
▪ Les diverses configurations sont activées (a2en pour Apache 2 enable) ou
désactivées (a2dis pour Apache 2 disable) avec les commandes suivantes :

▪ a2ensite [configuration d'un site à activer]

▪ a2dissite [configuration d'un site à désactiver]

▪ a2enconf [configuration d'un service à activer]

▪ a2disconf [configuration d'un service à désactiver]

▪ a2enmod [configuration d'un module à activer]

▪ a2dismod [configuration d'un module à désactiver]


Configuration d'un site (1)
▪ Pour configurer Apache afin qui serve un site, il faut créer un vhost et récupérant le template
disponible dans le fichier de vhost par défaut /etc/apache2/sites-available/000-
[Link] qui est sous la forme
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/[Link]
CustomLog ${APACHE_LOG_DIR}/[Link] combined
</VirtualHost>

▪ <VirtualHost *:80> : On déclare l'hôte virtuel. Il doit répondre aux requêtes qui s'adressent à
toutes les adresses IP (*) du serveur sur le port 80. On peut ici éventuellement spécifier une
adresse IP unique à laquelle répondra Apache pour un hôte virtuel donné (dans le cas ou le
serveur possède plusieurs adresses IP), ou choisir de répondre au port 443 (pour HTTPS)

▪ ServerAdmin webmaster@localhost : C'est le courriel de l'administrateur système. Cette


directive n'est ni très utile, ni indispensable
Configuration d'un site (2)
▪ DocumentRoot /var/www/html : c'est le chemin absolu vers l'emplacement local (sur l'espace
disque du serveur) qui sera la racine de l'hôte. Apache recherche en premier un fichier
[Link] ou [Link] à afficher par défaut à l'emplacement spécifié

▪ ErrorLog ${APACHE_LOG_DIR}/[Link] et CustomLog ${APACHE_LOG_DIR}/[Link]


combined : Ce sont des directives relatives au log d'erreur et au log d'accès de cet hôte
virtuel. Ceux-ci seront donc écrits dans le répertoire APACHE_LOG_DIR, qui est par
défaut /var/log/apache2

▪ </VirtualHost> : fin de la section concernant cet hôte virtuel.


Configuration d'un site (3)

▪ Pour configurer le site [Link]


on créera donc le
fichier /etc/apache2/sites-
available/[Link] avec le
contenu suivant

▪ On activera ensuite le vhost avec la


commande a2ensite [nom du fichier
sans son extension] soit sudo
a2ensite [Link]

▪ Après quoi on rechargera la


configuration d'Apache pour que le
site soit accessible : sudo systemctl
reload apache2
Service DHCP

▪ DHCP (Dynamic Host Configuration Protocol) est un service réseau qui


permet de définir la configuration réseau des clients du réseau

▪ Un serveur DHCP peut fournir des paramètres de configuration à l'aide des


méthodes suivantes :
– Allocation manuelle (adresse MAC)
– Allocation dynamique (pool d'adresses)
– Allocation automatique

▪ Pour déployer le service DHCP, il faudra installer le paquet isc-dhcp-server

▪ /etc/dhcp/[Link] : fichier de configuration principal

▪ /etc/default/isc-dhcp-server : fichier de définition de(s) interface(s) d'écoute

▪ systemctl start isc-dhcp-server : démarrage du service


Configuration basique (1)

▪ default-lease-time : définit le bail DHCP par


défaut (temps d'allocation d'une adresse IP)
en secondes

▪ max-lease-time : définit le bail DHCP


maximale en secondes

▪ subnet [Link] netmask [Link]


{ } : définit un bloc de configuration DHCP
pour le réseau [Link]/24

▪ range : définit la plage d'adresse attribuable


en dynamique

▪ option routers : définit la passerelle par


défaut à affecter aux clients DHCP
Configuration basique (2)

▪ option domain-name-servers : définit les serveurs DNS à exploiter par les clients DHCP

▪ option domain-name : définit le domaine auquel apportient le client DCHP

▪ Il faut dire que sur un même réseau, il peut arriver accidentellement que plusieurs
serveurs DHCP soient actifs. Dans ce cas, seul celui qui a la directive
authoritative décommenté sera pris en compte

▪ dhcpd –t : test de la configuration /etc/dhcp/[Link]


Service de partage de fichiers : Samba

▪ Un serveur de fichiers Samba permet le partage de fichiers entre différents


systèmes d'exploitation sur un réseau. Il vous permet d'accéder à vos
fichiers de bureau à partir d'un ordinateur portable et de partager des
fichiers avec des utilisateurs Windows et macOS.
▪ Paquet à installer : samba
▪ Fichier de configuration : /etc/samba/[Link]
▪ Démarrage des services: systemctl start smbd
Configuration (1)

▪ Ci-dessous un exemple de configuration dans /etc/samba/[Link] :


▪ Section [global] : elle permet de définir certaines directives qui seront communes à
tous les partages configurés
▪ Les sections suivantes sont définies au grés de l'administrateur et représente
chacune un partage
[sambashare]
comment = Samba on Ubuntu
path = /home/username/sambashare
read only = no
browsable = yes
– comment: donne un descriptif du partage
– path: donne de répertoire local de stockage du partage
– read only: avec la valeur no on peut modifier le contenu du partage
– browseable: avec la valeur yes, le partage est visible dans la liste des partages réseaux depuis
votre explorateur de fichier
Configuration (2)

▪ Il faut encore créer les utilisateurs SAMBA capables d'accéder au partage


avec la commande: smbpasswd -a username
▪ Pour accéder au partage créé, il suffit sur une machine Windows, MacOS
depuis le gestionnaire de fichier accéder au chemin :
\\adresseIP\nomdupartage
Service DNS: Bind9

▪ Le DNS (Domaine Name System) est un service Internet qui établit une
correspondance entre les adresses IP et les noms de domaine pleinement
qualifiés (FQDN). De cette manière, le DNS évite d'avoir à se souvenir des
adresses IP. Les ordinateurs qui exécutent le DNS sont appelés serveurs
de noms. Ubuntu est livré avec BIND (Berkley Internet Naming Daemon),
le programme le plus couramment utilisé pour maintenir un serveur de
noms sous Linux.

▪ Paquets à installer
– bind9 : service DNS
– dnsutils: utilitaires de troubleshooting

Vous aimerez peut-être aussi