
Une collection de questions et réponses de test pour l'administration système Linux. Testez vos connaissances et compétences dans différents domaines avec ces Q/R.
:star:
"Un grand administrateur n'a pas besoin de tout savoir, mais il doit être capable de trouver des solutions étonnantes à des projets impossibles." - cwheeler33 (ServerFault)
:star:
"Mes compétences consistent à faire fonctionner les choses, pas à connaître un milliard de faits. [...] Si je dois réparer un système, j'identifie le problème, je vérifie les logs et je recherche les erreurs. Si je dois implémenter une solution, je cherche la bonne solution, je l'implémente et la documente, puis par la suite je n'en ai qu'une idée générale à moins d'interagir fréquemment avec... c'est pourquoi c'est documenté." - Sparcrypt (Reddit)
ℹ️ Ce projet contient 284 questions et réponses tests pouvant être utilisées pour tester vos connaissances ou lors d'un entretien/examen pour un poste tel que Administrateur système Linux (*nix).
✔️ Les réponses ne sont que des exemples et n'épuisent pas le sujet. La plupart contiennent des ressources utiles pour une compréhension plus approfondie.
⚠️ Les questions marquées *** n'ont pas encore de réponse ou celle-ci est incomplète - faites une pull request pour les ajouter !
🚥 Si vous trouvez quelque chose qui n'a pas de sens, ou qui semble incorrect, faites une pull request et ajoutez des explications valables et bien raisonnées sur vos modifications ou commentaires.
📚 Pour améliorer vos connaissances/compétences, veuillez consulter devops-interview-questions. Cela a l'air vraiment intéressant.
» Toutes les suggestions sont les bienvenues «
Ma distribution Linux préférée :
Ressources utiles :
GNU n'est pas vraiment un système d'exploitation. C'est davantage un ensemble de règles ou de philosophies régissant le logiciel libre, qui a en même temps donné naissance à un ensemble d'outils en essayant de créer un SE. Ainsi, les outils GNU sont essentiellement des versions ouvertes d'outils qui existaient déjà, mais réimplémentées pour se conformer aux principes du logiciel libre. GNU/Linux est un mélange de ces outils et du noyau Linux pour former un SE complet, mais il existe d'autres GNU, par exemple GNU/Hurd.
Unix et BSD sont des implémentations "plus anciennes" de POSIX qui sont plus ou moins "open source". Unix est généralement totalement fermé, mais il existe autant de variétés d'Unix que de Linux (sinon plus). BSD n'est généralement pas considéré comme "ouvert", mais il était considéré comme très ouvert lors de sa sortie. Sa licence permettait également une utilisation commerciale avec beaucoup moins de restrictions que les licences plus "ouvertes" de l'époque.
Linux est le plus récent des quatre. À proprement parler, ce n'est "qu'un noyau" ; cependant, en général, on le considère comme un SE complet lorsqu'il est combiné avec les outils GNU et plusieurs autres composants principaux.
Les principales différences qui les gouvernent sont leurs idéaux. Unix, Linux et BSD ont des idéaux différents qu'ils mettent en œuvre. Ils sont tous POSIX, et sont essentiellement interchangeables. Ils résolvent certains des mêmes problèmes de différentes manières. Donc, à part les idéaux et la manière dont ils choisissent d'implémenter les normes POSIX, il y a peu de différence.
Pour plus d'informations, je vous suggère de lire un bref article sur la création de GNU, OSS, Linux, BSD et UNIX. Ils seront orientés vers leurs idées individuelles, mais ces articles devraient vous donner une meilleure idée des différences.
Ressources utiles :
CLI est un acronyme pour Interface en Ligne de Commande ou Interpréteur de Langage de Commande. La ligne de commande est l'un des moyens les plus puissants de contrôler votre système/ordinateur.
Dans les systèmes de type Unix, CLI est l'interface par laquelle un utilisateur peut taper des commandes pour que le système les exécute. La CLI est très puissante, mais elle n'est pas très tolérante aux erreurs.
La CLI vous permet d'effectuer des manipulations avec les composants internes de votre système et avec le code de manière beaucoup plus fine. Elle offre une plus grande flexibilité et un meilleur contrôle qu'une interface graphique, quel que soit le système d'exploitation utilisé. De nombreux programmes que vous pourriez vouloir utiliser dans votre logiciel hébergé sur Github, par exemple, nécessitent également l'exécution de commandes sur la CLI pour les faire fonctionner.
Mes outils préférés
screen - multiplexeur de terminal gratuit, je peux démarrer une session et mes terminaux seront sauvegardés même si votre connexion est perdue, vous pouvez donc reprendre plus tard ou depuis chez vousssh - la commande la plus précieuse à apprendre, je peux l'utiliser pour faire des choses étonnantes :
sshfsrsync sans démon rsync en en démarrant un via sshvi/vim - est l'éditeur de texte le plus populaire et le plus puissant, il est universel, il fonctionne très vite, même sur de gros fichiersBASH est mon préféré. C'est vraiment une question de préférence, j'aime la syntaxe et ça "clique" pour moi. La syntaxe de redirection d'entrée/sortie (>>, << 2>&1, 2>, 1>, etc.) est similaire à celle du C++, ce qui la rend plus facile à reconnaître pour moi.
J'aime aussi le shell ZSH, car il est beaucoup plus personnalisable que BASH. Il dispose du framework Oh-My-Zsh, d'une complétion contextuelle puissante basée sur les tabulations, de motifs/globing améliorés, de modules chargeables, etc.
Ressources utiles :
man [nomcommande] peut être utilisé pour voir une description d'une commande (ex. : man less, man cat)
-h ou --help certains programmes implémentent l'affichage d'instructions lorsqu'on leur passe ce paramètre (ex. : python -h et python --help)
w - beaucoup d'informations utiles avec l'uptime du serveurtop - vous pouvez voir tous les processus en cours, puis les trier par CPU, utilisation mémoire, etc.netstat - pour savoir sur quel port et quelle IP votre serveur écoute et quels processus utilisent ces portsdf - rapporte la quantité d'espace disque disponible utilisée par les systèmes de fichiershistory - vous indique ce qui a été exécuté précédemment par l'utilisateur auquel vous êtes actuellement connectéRessources utiles :
ls -al ?Dans l'ordre de la sortie :```bash -rwxrw-r-- 1 root root 2048 Jan 13 07:11 db.dump
- les permissions des fichiers,
- nombre de liens,
- nom du propriétaire,
- groupe du propriétaire,
- taille du fichier,
- date de dernière modification,
- nom du fichier/répertoire
Les permissions des fichiers s'affichent comme suit :
- le premier caractère est `-` ou `l` ou `d`, `d` indique un répertoire, un `-` représente un fichier, `l` est un lien symbolique (ou lien logiciel) - type spécial de fichier
- trois ensembles de trois caractères, indiquant les permissions pour le propriétaire, le groupe et les autres :
- `r` = lecture
- `w` = écriture
- `x` = exécution
Dans votre exemple `-rwxrw-r--`, cela signifie que la ligne affichée est :
- un fichier régulier (affiché comme `-`)
- lisible, modifiable et exécutable par le propriétaire (`rwx`)
- lisible, modifiable mais pas exécutable par le groupe (`rw-`)
- lisible mais pas modifiable ou exécutable par les autres (`r--`)
Ressources utiles :
- [Que signifient les champs dans la sortie de ls -al ? (original)](https://unix.stackexchange.com/questions/103114/what-do-the-fields-in-ls-al-output-mean)
</details>
<details>
<summary><b>Comment obtenir une liste des utilisateurs connectés ?</b></summary><br>
Pour un résumé des utilisateurs connectés, incluant chaque session d'un nom d'utilisateur, le terminal auquel les utilisateurs sont attachés, la date/heure de connexion, et éventuellement l'ordinateur depuis lequel ils se connectent, saisissez :```bash
# It uses /var/run/utmp and /var/log/wtmp files to get the details.
who
L'avantage le plus significatif d'exécuter un processus en cours en arrière-plan est que vous pouvez effectuer toute autre tâche simultanément pendant que d'autres processus s'exécutent en arrière-plan. Ainsi, davantage de processus peuvent être achevés en arrière-plan pendant que vous travaillez sur des processus différents. Cela peut être réalisé en ajoutant le caractère spécial & à la fin de la commande.
En général, les applications qui mettent trop de temps à s'exécuter et ne nécessitent pas d'interaction utilisateur sont envoyées en arrière-plan afin que nous puissions continuer notre travail dans le terminal.
Par exemple, si vous voulez télécharger quelque chose en arrière-plan, vous pouvez :```bash wget https://url-to-download.com/download.tar.gz &
Lorsque vous exécutez la commande ci-dessus, vous obtenez le résultat suivant :```bash
[1] 2203
Ici 1 est le numéro de série du travail et 2203 est le PID du travail. Vous pouvez voir les travaux en cours d'exécution en arrière-plan en utilisant la commande suivante :```bash jobs
Lorsque vous exécutez une tâche en arrière-plan, elle vous donne un PID de la tâche, vous pouvez tuer la tâche s'exécutant en arrière-plan en utilisant la commande suivante :```bash
kill PID
Remplacez le PID par le PID de la tâche. Si vous n'avez qu'une seule tâche en cours d'exécution, vous pouvez la ramener au premier plan en utilisant :```bash fg
Si vous avez plusieurs tâches en cours d'exécution en arrière-plan, vous pouvez ramener n'importe quelle tâche au premier plan en utilisant :```bash
fg %#
Remplacez le # par le numéro de série du travail.
À compléter.
Exécuter (tout) en tant que root est mauvais car :
Bêtise : rien ne vous empêche de faire une erreur d'inattention. Si vous essayez de modifier le système d'une manière potentiellement dangereuse, vous devez utiliser sudo, ce qui impose une pause (pendant la saisie du mot de passe) pour vous assurer que vous n'êtes pas sur le point de faire une erreur.
Sécurité : plus difficile à pirater si vous ne connaissez pas le compte de connexion de l'utilisateur administrateur. root signifie que vous possédez déjà la moitié des identifiants d'administration.
Vous n'en avez pas vraiment besoin : si vous devez exécuter plusieurs commandes en tant que root et que vous êtes ennuyé de devoir saisir votre mot de passe plusieurs fois lorsque sudo a expiré, il vous suffit de faire sudo -i et vous êtes maintenant root. Vous voulez exécuter des commandes avec des pipes ? Utilisez alors sudo sh -c "command1 | command2".
Vous pouvez toujours l'utiliser dans la console de récupération : la console de récupération vous permet de vous remettre d'une grave erreur, ou de corriger un problème causé par une application (que vous avez quand même dû exécuter en tant que sudo). Ubuntu n'a pas de mot de passe pour le compte root dans ce cas, mais vous pouvez chercher en ligne comment changer cela - cela rendra plus difficile pour quiconque ayant un accès physique à votre machine de causer des dommages.
Ressources utiles :
Vous utiliseriez top/htop pour les deux. En utilisant les commandes free et vmstat, nous pouvons afficher respectivement les statistiques de mémoire physique et virtuelle. Avec l'aide de la commande sar, nous voyons l'utilisation du CPU et d'autres statistiques (mais sar n'est même pas installé sur la plupart des systèmes).
Ressources utiles :
Les load averages de Linux sont des « moyennes de charge système » qui montrent la demande de threads (tâches) en cours d'exécution sur le système sous forme d'un nombre moyen de threads en exécution plus en attente. Cela mesure la demande, qui peut être supérieure à ce que le système traite actuellement. La plupart des outils affichent trois moyennes, pour 1, 5 et 15 minutes.
Ces 3 nombres ne sont pas les nombres pour les différents CPU. Ce sont des valeurs moyennes du nombre de charge pour une période donnée (des dernières 1, 5 et 15 minutes).
La moyenne de charge est généralement décrite comme « longueur moyenne de la file d'attente d'exécution ». Ainsi, quelques processus ou threads consommateurs de CPU peuvent faire monter la moyenne de charge au-dessus de 1. Il n'y a pas de problème si la moyenne de charge est inférieure au nombre total de cœurs de CPU. Mais si elle devient plus élevée que le nombre de CPU, cela signifie que certains threads/processus resteront dans la file d'attente, prêts à s'exécuter, mais en attendant un CPU libre.
Elle est destinée à vous donner une idée de l'état du système, moyennée sur plusieurs périodes. Comme elle est moyennée, il lui faut du temps pour revenir à 0 après une charge lourde imposée au système.
Quelques interprétations :
Ressources utiles :
Les mots de passe ne sont stockés nulle part sur le système. Ce qui est stocké dans /etc/shadow sont ce qu'on appelle des hachages des mots de passe.
Un hachage d'un texte est créé en appliquant une fonction dite unidirectionnelle sur le texte (mot de passe), créant ainsi une chaîne à vérifier. Par conception, il est « impossible » (irréalisable informatiquement) d'inverser ce processus.
Les anciennes variantes Unix stockaient les mots de passe cryptés dans /etc/passwd avec d'autres informations sur chaque compte.
Les plus récentes ont simplement un * dans le champ correspondant de /etc/passwd et utilisent /etc/shadow pour stocker le mot de passe, en partie pour garantir que personne n'obtienne un accès en lecture aux mots de passe lorsqu'ils n'ont besoin que des autres informations (shadow est généralement protégé plus fortement que passwd).
Pour plus d'informations, consultez man crypt, man shadow, man passwd.
Ressources utiles :
Pour changer tous les répertoires par exemple en 755 (drwxr-xr-x) :```bash
find /opt/data -type d -exec chmod 755 {} ;
Pour changer tous les fichiers par exemple en **644** (`-rw-r--r--`):```bash
find /opt/data -type f -exec chmod 644 {} \;
Ressources utiles :
command not found. Comment tracer la source de l'erreur et la résoudre ?Il semble qu'à un moment donné, la variable d'environnement PATH par défaut soit écrasée. Le type d'erreurs que vous avez indique que PATH ne contient pas, par exemple, /bin, où résident les commandes (dont bash).
Une façon de commencer à déboguer votre script ou commande bash serait de lancer un sous-shell avec l'option -x :```bash
bash --login -x
Cela vous montrera chaque commande, ainsi que ses arguments, qui sont exécutés lors du démarrage de ce shell.
Il est également très utile d'afficher les valeurs de la variable `PATH` :```bash
echo $PATH
Si vous exécutez ceci :```bash PATH=/bin:/sbin:/usr/bin:/usr/sbin
la plupart des commandes devraient fonctionner - et ensuite vous pouvez éditer `~/.bash_profile` au lieu de `~/.bashrc` et corriger ce qui réinitialise `PATH` là-dedans. Les valeurs par défaut de la variable `PATH` pour **root** et les autres utilisateurs se trouvent dans le fichier `/etc/profile`.
Ressource utile :
- [Comment ajouter correctement un chemin à PATH ?](https://unix.stackexchange.com/questions/26047/how-to-correctly-add-a-path-to-path)
</details>
<details>
<summary><b>Vous tapez `CTRL + C` mais votre script continue de s'exécuter. Comment l'arrêter ? </b></summary><br>
Dans la plupart des cas, vous pouvez arrêter un script en cours d'exécution en utilisant la combinaison de touches `CTRL + C`. Cela envoie un signal d'interruption (SIGINT) au script, ce qui termine son exécution. Si cela ne fonctionne pas et que le script continue de s'exécuter, vous pouvez essayer d'utiliser la combinaison `CTRL + \`, qui envoie un signal de sortie (SIGQUIT) au script, ce qui peut le terminer immédiatement.
Alternativement, si vous utilisez un terminal ou une interface en ligne de commande, vous pouvez essayer d'utiliser la commande `kill` pour envoyer un signal au processus du script. Vous pouvez trouver l'ID du processus (PID) du script en utilisant la commande `ps` ou `top`, puis utiliser `kill` avec le PID pour arrêter le script.
Dans certains cas, vous devrez peut-être utiliser la commande `kill -9` pour forcer l'arrêt du script, car la commande `kill` normale peut ne pas fonctionner si le script est bloqué ou ne répond pas. L'option `-9` envoie un signal SIGKILL, ce qui force le processus à s'arrêter immédiatement.
</details>
<details>
<summary><b>Qu'est-ce que la commande <code>grep</code> ? Comment faire correspondre plusieurs chaînes sur la même ligne ?</b></summary><br>
Les utilitaires `grep` sont une famille d'outils Unix, incluant `egrep` et `fgrep`.
`grep` recherche des motifs dans les fichiers. Si vous cherchez un motif spécifique dans la sortie d'une autre commande, `grep` met en évidence les lignes pertinentes. Utilisez cette commande grep pour rechercher des fichiers journaux, des processus spécifiques, et plus encore.
Pour faire correspondre plusieurs chaînes :```bash
grep -E "string1|string2" filename
Si vous souhaitez exécuter chaque commande seulement si la précédente a réussi, combinez-les avec l'opérateur && :```bash
cd /my_folder && rm *.jar && svn co path to repo && mvn compile package install
Si l'une des commandes échoue, alors toutes les autres commandes qui la suivent ne seront pas exécutées.
Si vous souhaitez exécuter toutes les commandes, que les précédentes aient échoué ou non, séparez-les par des points-virgules :```bash
cd /my_folder; rm *.jar; svn co path to repo; mvn compile package install
Dans votre cas, je pense que vous voulez le premier cas où l'exécution de la commande suivante dépend du succès de la précédente.
Vous pouvez également placer toutes les commandes dans un script et exécuter celui-ci à la place :```bash
#! /bin/sh
cd /my_folder
&& rm *.jar
&& svn co path to repo
&& mvn compile package install
Ressources utiles :
- [Exécuter et combiner plusieurs commandes Linux en une seule ligne (original)](https://stackoverflow.com/questions/13077241/execute-combine-multiple-linux-commands-in-one-line)
</details>
<details>
<summary><b>Quelle représentation symbolique pouvez-vous passer à <code>chmod</code> pour donner à tous les utilisateurs un accès en exécution à un fichier sans affecter les autres permissions ?</b></summary><br>```bash
chmod a+x /path/to/file
a - pour tous les utilisateursx - pour la permission d'exécutionPour synchroniser le contenu de dir1 vers dir2 sur le même système, tapez :
rsync -av --delete dir1/ dir2/```bash
rsync -av --progress --delete dir1/ dir2
- `-a`, `--archive` - mode archive
- `--delete` - supprimer les fichiers superflus des répertoires de destination
- `-v`, `--verbose` - mode verbeux (augmente la verbosité)
- `--progress` - afficher la progression pendant le transfert
Ressources utiles :
- [How can I sync two local directories? (original](https://unix.stackexchange.com/questions/392536/how-can-i-sync-two-local-directories)
- [Synchronizing folders with rsync](https://www.jveweb.net/en/archives/2010/11/synchronizing-folders-with-rsync.html)
</details>
<details>
<summary><b>De nombreuses tâches de maintenance de base nécessitent de modifier des fichiers de configuration. Expliquez les moyens d'annuler les modifications que vous apportez.</b></summary><br>
- sauvegarde manuelle d'un fichier avant modification (avec l'expansion d'accolades comme ceci : `cp filename{,.orig}`)
- copie manuelle de la structure de répertoires où se trouve le fichier (ex. `cp`, `rsync` ou `tar`)
- faire une sauvegarde du fichier original dans votre éditeur (ex. définir des règles dans votre fichier de configuration de l'éditeur)
- la meilleure solution est d'utiliser `git` (ou tout autre contrôle de version) pour suivre les fichiers de configuration (ex. `etckeeper` pour le répertoire `/etc`)
Ressources utiles :
- [Backup file with .bak before filename extension](https://unix.stackexchange.com/questions/66376/backup-file-with-bak-before-filename-extension)
- [Is it a good idea to use git for configuration file version controlling?](https://superuser.com/questions/1037211/is-it-a-good-idea-to-use-git-for-configuration-file-version-controlling)
</details>
<details>
<summary><b>Vous devez trouver tous les fichiers de plus de 20 Mo. Comment faire ?</b></summary><br>```bash
find / -type f -size +20M
sudo su - et pas simplement sudo su ?sudo est présent dans la plupart des distributions Linux modernes où (mais pas toujours) l'utilisateur root est désactivé et n'a pas de mot de passe défini. Vous ne pouvez donc pas passer à l'utilisateur root avec su (vous pouvez essayer). Vous devez appeler sudo avec les privilèges root : sudo su.
su change simplement d'utilisateur, fournissant un shell normal avec un environnement presque identique à celui de l'ancien utilisateur.
su - invoque un shell de connexion après avoir changé d'utilisateur. Un shell de connexion réinitialise la plupart des variables d'environnement, fournissant une base propre.
Ressources utiles :
Ils sont essentiels pour enquêter sur les problèmes du système. La gestion des journaux est absolument cruciale pour la sécurité informatique.
Les serveurs, pare-feux et autres équipements informatiques conservent des fichiers journaux qui enregistrent les événements et transactions importants. Ces informations peuvent fournir des indices importants sur une activité hostile affectant votre réseau de l'intérieur et de l'extérieur. Les données des journaux peuvent également fournir des informations pour identifier et résoudre les problèmes d'équipement, y compris les problèmes de configuration et les pannes matérielles.
C'est l'enregistrement de votre serveur indiquant qui est venu sur votre site, quand et exactement ce qu'ils ont consulté. C'est incroyablement détaillé, montrant :
Facteurs à prendre en compte :
En collectant et en analysant les journaux, vous pouvez comprendre ce qui se passe au sein de votre réseau. Chaque fichier journal contient de nombreuses informations qui peuvent être inestimables, surtout si vous savez les lire et les analyser.
Ressources utiles :
Une sauvegarde incrémentielle est un type de sauvegarde qui ne copie que les fichiers qui ont changé depuis la sauvegarde précédente.
Ressources utiles :
Un RAID (Redundant Array of Inexpensive Disks) est une technologie utilisée pour augmenter les performances et/ou la fiabilité du stockage de données.
Ressources utiles :
S'il n'est pas spécifié, le comportement de useradd dépendra de la variable USERGROUPS_ENAB contenue dans /etc/login.defs. Le comportement par défaut (USERGROUPS_ENAB yes) est de créer un groupe portant le même nom que le nom d'utilisateur, avec un GID égal à l'UID.
Ressources utiles :
À compléter.
Ressources utiles :
À compléter.
Les choses les plus importantes à comprendre à propos du modèle OSI (ou de tout autre modèle) sont :
Ressources utiles :
Les VLAN et les sous-réseaux résolvent des problèmes différents. Les VLAN fonctionnent au niveau de la couche 2, modifiant ainsi les domaines de diffusion (par exemple). Alors que les sous-réseaux se situent au niveau de la couche 3 dans le contexte actuel.
Sous-réseau - est une plage d'adresses IP déterminée par une partie d'une adresse (souvent appelée adresse réseau) et un masque de sous-réseau (netmask). Par exemple, si le masque de sous-réseau est 255.255.255.0 (ou /24 en abrégé) et que l'adresse réseau est 192.168.10.0, cela définit une plage d'adresses IP allant de 192.168.10.0 à 192.168.10.255. La notation abrégée est 192.168.10.0/24.
VLAN - une bonne façon de concevoir cela est le "partitionnement de commutateur". Supposons que vous ayez un commutateur à 8 ports capable de gérer les VLAN. Vous pouvez attribuer 4 ports à un VLAN (par exemple VLAN 1) et 4 ports à un autre VLAN (par exemple VLAN 2). VLAN 1 ne verra aucun trafic de et vice versa ; logiquement, vous avez maintenant deux commutateurs séparés. Normalement, sur un commutateur, si celui-ci n'a pas vu une adresse MAC, il "inondera" le trafic vers tous les autres ports. Les empêchent cela.
POP et IMAP sont tous deux des protocoles de récupération de messages depuis un serveur de messagerie vers un client de messagerie.
POP (Post Office Protocol) utilise un transfert unidirectionnel du serveur de messagerie vers le client. Par défaut, cela envoie les messages au client POP et les supprime du serveur de messagerie, bien qu'il soit possible de configurer le serveur pour conserver tous les messages. Toute action effectuée sur le message dans votre client de messagerie (étiquetage, suppression, déplacement vers un dossier) ne sera pas répercutée sur le serveur, et sera donc inaccessible aux autres clients de messagerie qui se connectent au serveur. POP utilise peu d'espace de stockage sur le serveur et peut être considéré comme plus sûr car les messages n'existent que sur un seul client au lieu du serveur et de plusieurs clients.
IMAP (Internet Message Access Protocol) utilise une communication bidirectionnelle entre le serveur et le client. La suppression ou l'étiquetage d'un message dans votre client configuré avec IMAP supprimera ou étiquetera également le message sur le serveur. IMAP permet une expérience similaire lors de l'accès aux messages depuis différents clients ou appareils, car les messages peuvent exister dans le même état sur plusieurs appareils. IMAP peut également économiser de l'espace disque sur le client en synchronisant sélectivement les messages et en supprimant les anciens messages du client, car il peut les resynchroniser depuis le serveur ultérieurement si nécessaire.
Choisissez IMAP si vous devez accéder aux messages depuis plusieurs appareils et que vous souhaitez économiser de l'espace disque sur votre client. Choisissez POP si vous souhaitez économiser de l'espace disque sur votre serveur de messagerie, accéder aux messages depuis un seul client et garantir que les messages n'existent pas sur plusieurs systèmes.
En utilisant les commandes netstat -nr, route -n ou ip route show, nous pouvons voir la route par défaut et les tables de routage.
Ressources utiles :
Eh bien, la différence la plus probable est que vous devez encore effectuer une recherche réelle de localhost quelque part.
Si vous utilisez 127.0.0.1, alors un logiciel (intelligent) transformera directement cela en une adresse IP et l'utilisera. Certaines implémentations de gethostbyname détecteront le format en pointillé (et vraisemblablement le format IPv6 équivalent) et n'effectueront aucune recherche.
Sinon, le nom doit être résolu. Et il n'y a aucune garantie que votre fichier hosts sera réellement utilisé pour cette résolution (en premier, ou pas du tout), donc localhost pourrait devenir une adresse IP totalement différente.
Par là, je veux dire que, sur certains systèmes, un fichier hosts local peut être contourné. Le fichier host.conf contrôle cela sous Linux (et sur de nombreux autres Unix).
Si vous utilisez un socket de domaine Unix, ce sera légèrement plus rapide que d'utiliser TCP/IP (en raison de la moindre surcharge). Windows utilise TCP/IP par défaut, alors que Linux essaie d'utiliser un socket de domaine Unix si vous choisissez localhost et TCP/IP si vous prenez 127.0.0.1.
Ressources utiles :
ping ?ping utilise ICMP, plus précisément les paquets ICMP echo request et ICMP echo reply. Il n'y a pas de 'port' associé à ICMP. Les ports sont associés aux deux protocoles de la couche transport IP, TCP et UDP. ICMP, TCP et UDP sont des "frères" ; ils ne sont pas basés les uns sur les autres, mais sont trois protocoles distincts qui fonctionnent au-dessus d'IP.
Les paquets ICMP sont identifiés par le champ 'protocol' dans l'en-tête du datagramme IP. ICMP n'utilise pas les services de communication UDP ou TCP, il utilise les services de communication IP bruts. Cela signifie que le message ICMP est transporté directement dans le champ de données d'un datagramme IP. raw vient de la façon dont cela est implémenté dans le logiciel : pour créer et envoyer un message ICMP, on ouvre un socket raw, on construit un tampon contenant le message ICMP, puis on écrit le tampon contenant le message dans le socket raw.
La valeur du protocole IP pour ICMP est 1. Le champ protocole fait partie de l'en-tête IP et identifie ce qui se trouve dans la partie données du datagramme IP.
Cependant, vous pouvez utiliser nmap pour voir si les ports sont ouverts ou non :```bash
nmap -p 80 example.com
Ressources utiles :
- [Ping Numéro de port](https://networkengineering.stackexchange.com/questions/42463/ping-port-number)
- [Est-il possible de pinguer une adresse:port ?](https://superuser.com/questions/769541/is-it-possible-to-ping-an-addressport)
</details>
<details>
<summary><b>Le serveur A ne peut pas communiquer avec le serveur B. Décrivez les raisons possibles en quelques étapes.</b></summary><br>
Pour résoudre les problèmes de communication entre serveurs, il est préférable de suivre idéalement la pile TCP/IP :
1. **Couche application** : les services sont-ils en cours d'exécution sur les deux serveurs ? Sont-ils correctement configurés (par exemple, lier la bonne adresse IP et le bon port) ? Les journaux d'application et système affichent-ils des erreurs significatives ?
2. **Couche transport** : les ports utilisés par l'application sont-ils ouverts (essayez telnet !) ? Est-il possible de pinguer le serveur ?
3. **Couche réseau** : y a-t-il un pare-feu sur le réseau ou sur le système d'exploitation correctement configuré ? La pile IP est-elle correctement configurée (IP, routes, DNS, etc.) ? Les commutateurs et routeurs fonctionnent-ils (vérifiez la table ARP !) ?
4. **Couche physique** : les serveurs sont-ils connectés à un réseau ? Des paquets sont-ils perdus ?
</details>
<details>
<summary><b>Pourquoi les noms d'hôte ne se résolvent-ils pas sur votre serveur ? Résolvez ce problème. ***</b></summary><br>
À compléter.
</details>
<details>
<summary><b>Comment résoudre le nom de domaine (en utilisant un DNS externe) avec l'interface en ligne de commande ? Les adresses IP peuvent-elles être résolues en noms de domaine ?</b></summary><br>
Exemples pour résoudre une adresse IP en nom de domaine :```bash
# with host command:
host domain.com 8.8.8.8
# with dig command:
dig @9.9.9.9 google.com
# with nslookup command:
nslookup domain.com 8.8.8.8
telnet ou nc ?nc -vz code42.example.com 5432
</details>
<details>
<summary><b>Pourquoi devriez-vous éviter <code>telnet</code> pour administrer un système à distance ?</b></summary><br>
Les systèmes d'exploitation modernes ont désactivé par défaut tous les services potentiellement non sécurisés. En revanche, certains fournisseurs d'équipements réseau autorisent encore l'établissement de communications via le protocole telnet.
**Telnet** utilise la méthode la moins sécurisée pour la communication. Il envoie les données sur le réseau en texte clair et n'importe qui peut facilement trouver le mot de passe à l'aide d'un outil réseau.
Dans le cas de **Telnet**, cela inclut le passage des identifiants de connexion en texte clair, ce qui signifie que toute personne exécutant un renifleur sur votre réseau peut trouver les informations nécessaires pour prendre le contrôle d'un appareil en quelques secondes en écoutant une session de connexion **Telnet**.
Ressources utiles :
- [Telnet et SSH comme alternative sécurisée](https://www.ssh.com/ssh/telnet)
- [Comment telnet vers une adresse IP sur un port spécifique ?](https://superuser.com/questions/339107/how-to-telnet-to-an-ip-address-on-a-specific-port)
</details>
<details>
<summary><b>Quelle est la différence entre <code>wget</code> et <code>curl</code> ?</b></summary><br>
Les principales différences sont : le principal point fort de `wget` par rapport à `curl` est sa capacité à télécharger de manière récursive. `wget` est uniquement en ligne de commande. `curl` prend en charge FTP, FTPS, HTTP, HTTPS, SCP, SFTP, TFTP, TELNET, DICT, LDAP, LDAPS, FILE, POP3, IMAP, SMTP, RTMP et RTSP.
Ressources utiles :
- [Quelle est la différence entre curl et wget ? (original)](https://unix.stackexchange.com/questions/47434/what-is-the-difference-between-curl-and-wget)
</details>
<details>
<summary><b>Qu'est-ce que SSH et comment fonctionne-t-il ?</b></summary><br>
**SSH** signifie **Secure Shell**. C'est un protocole qui vous permet de passer d'un serveur "A" à une session shell sur un serveur "B". Il vous permet d'interagir avec votre serveur "B".
Pour qu'une connexion **SSH** soit établie, la machine distante (serveur A) doit exécuter un logiciel appelé démon **SSH** et l'ordinateur de l'utilisateur (serveur B) doit disposer d'un client **SSH**.
Le démon **SSH** et le client **SSH** écoutent les connexions sur un port réseau spécifique (par défaut 22), authentifient les demandes de connexion et lancent l'environnement approprié si l'utilisateur fournit les identifiants corrects.
Ressources utiles :
- [Comprendre le processus de chiffrement et de connexion SSH](https://www.digitalocean.com/community/tutorials/understanding-the-ssh-encryption-and-connection-process)
</details>
<details>
<summary><b>La plupart des tutoriels suggèrent d'utiliser l'authentification par clé SSH plutôt que l'authentification par mot de passe. Pourquoi est-elle considérée comme plus sécurisée ?</b></summary><br>
Une **clé SSH** est un identifiant d'accès dans le protocole SSH. Sa fonction est similaire à celle des noms d'utilisateur et des mots de passe, mais les clés sont principalement utilisées pour les processus automatisés et pour la mise en œuvre de l'authentification unique par les administrateurs système et les utilisateurs avancés.
Au lieu de demander le mot de passe d'un utilisateur, il est possible de confirmer l'identité du client en utilisant des algorithmes de cryptographie asymétrique, avec des clés publiques et privées.
Si votre service SSH n'autorise que l'authentification par clé publique, un attaquant a besoin d'une copie d'une clé privée correspondant à une clé publique stockée sur le serveur.
Si votre service SSH autorise l'authentification par mot de passe, alors votre serveur SSH connecté à Internet sera bombardé jour et nuit par des botnets essayant de deviner les noms d'utilisateur et les mots de passe. Le botnet n'a besoin d'aucune information, il peut simplement essayer des noms populaires et des mots de passe courants. En plus de cela, cela encombre vos journaux.
Ressources utiles :
- [Authentification par clé (authentification par clé publique)](http://www.crypto-it.net/eng/tools/key-based-authentication.html)
- [Mot de passe SSH vs authentification par clé](https://security.stackexchange.com/questions/33381/ssh-password-vs-key-authentication)
</details>
<details>
<summary><b>Qu'est-ce qu'un filtre de paquets et comment fonctionne-t-il ?</b></summary><br>
Le **filtrage de paquets** est une technique de pare-feu utilisée pour contrôler l'accès au réseau en surveillant les paquets entrants et sortants et en les autorisant ou les bloquant en fonction des adresses IP source et destination, des protocoles et des ports.
Le filtrage de paquets est approprié lorsque les exigences de sécurité sont modestes. Les réseaux internes (privés) de nombreuses organisations ne sont pas fortement segmentés. Des pare-feux très sophistiqués ne sont pas nécessaires pour isoler une partie de l'organisation d'une autre.
Cependant, il est prudent de fournir une certaine protection du réseau de production par rapport à un réseau de laboratoire ou expérimental. Un dispositif de filtrage de paquets est une mesure très appropriée pour assurer l'isolation d'un sous-réseau d'un autre.
Opérant au niveau de la couche réseau et de la couche transport de la pile de protocoles TCP/IP, chaque paquet est examiné lorsqu'il entre dans la pile de protocoles. Les en-têtes réseau et transport sont examinés de près pour les informations suivantes :
- **protocole (en-tête IP, couche réseau)** - dans l'en-tête IP, l'octet 9 (rappelez-vous que le décompte des octets commence à zéro) identifie le protocole du paquet. La plupart des dispositifs de filtrage ont la capacité de différencier TCP, UDP et ICMP.
- **adresse source (en-tête IP, couche réseau)** - l'adresse source est l'adresse IP 32 bits de l'hôte qui a créé le paquet.
- **adresse de destination (en-tête IP, couche réseau)** - l'adresse de destination est l'adresse IP 32 bits de l'hôte auquel le paquet est destiné.
- **port source (en-tête TCP ou UDP, couche transport)** - chaque extrémité d'une connexion réseau TCP ou UDP est liée à un port. Les ports TCP sont séparés et distincts des ports UDP. Les ports numérotés en dessous de 1024 sont réservés – ils ont une utilisation spécifiquement définie. Les ports numérotés au-dessus de 1024 (inclus) sont appelés ports éphémères. Ils peuvent être utilisés comme bon semble au fournisseur. Pour une liste des ports "bien connus", reportez-vous à la RFP1700. Le port source est un numéro de port éphémère attribué de manière pseudo-aléatoire. Ainsi, il n'est souvent pas très utile de filtrer sur le port source.
- **port de destination (en-tête TCP ou UDP, couche transport)** - le numéro de port de destination indique le port vers lequel le paquet est envoyé. Chaque service sur l'hôte de destination écoute sur un port. Certains ports bien connus qui peuvent être filtrés sont 20/TCP et 21/TCP - connexion/données ftp, 23/TCP - telnet, 80/TCP - http, et 53/TCP - transferts de zone DNS.
- **statut de connexion (en-tête TCP, couche transport)** - le statut de connexion indique si le paquet est le premier paquet de la session réseau. Le bit ACK dans l'en-tête TCP est défini sur "false" ou 0 s'il s'agit du premier paquet de la session. Il est simple d'interdire à un hôte d'établir une connexion en rejetant ou en supprimant tous les paquets dont le bit ACK est défini sur "false" ou 0.
Ressources utiles :
- [Construction de pare-feux Internet - Filtrage de paquets](http://web.deu.edu.tr/static/oreily/networking/firewall/ch06_01.htm)
</details>
<details>
<summary><b>Quels sont les avantages de l'utilisation d'un serveur proxy inverse ?</b></summary><br>
**Masquer la topologie et les caractéristiques de vos serveurs backend**
Le **serveur proxy inverse** peut masquer la présence et les caractéristiques du serveur d'origine. Il agit comme un intermédiaire entre le cloud Internet et le serveur web. C'est bon pour des raisons de sécurité, surtout lorsque vous utilisez des services d'hébergement web.
**Permet une maintenance transparente des serveurs backend**
Les modifications que vous apportez aux serveurs fonctionnant derrière un proxy inverse seront totalement transparentes pour vos utilisateurs finaux.
**Équilibrage de charge**
Le proxy inverse appliquera alors un algorithme d'équilibrage de charge comme le tourniquet, le tourniquet pondéré, le moins de connexions, le moins de connexions pondéré ou aléatoire, pour répartir la charge entre les serveurs du cluster.
Lorsqu'un serveur tombe en panne, le système bascule automatiquement vers le serveur suivant et les utilisateurs peuvent poursuivre leurs activités de transfert de fichiers sécurisé.
**Déchargement/terminaison SSL**
Gère les connexions HTTPS entrantes, déchiffre les requêtes et transmet les requêtes non chiffrées aux serveurs web.
**Masquage IP**
Utilisation d'une seule IP mais de différentes URL pour router vers différents serveurs backend.
Ressources utiles :
- [Les avantages d'un proxy inverse](https://dzone.com/articles/benefits-reverse-proxy)
</details>
<details>
<summary><b>Quelle est la différence entre un routeur et une passerelle ? Qu'est-ce que la passerelle par défaut ?</b></summary><br>
**Routeur** décrit la fonction technique générale (transmission de couche 3) ou un périphérique matériel conçu à cet effet, tandis que **passerelle** décrit la fonction pour le segment local (fourniture de la connectivité vers l'extérieur). On pourrait aussi dire "_vous configurez un routeur comme passerelle_". Un autre terme est saut, qui décrit le transfert entre sous-réseaux.
Le terme **passerelle par défaut** est utilisé pour désigner le routeur sur votre LAN qui a la responsabilité d'être le premier point de contact pour le trafic vers des ordinateurs en dehors du LAN.
C'est juste une question de perspective, le périphérique est le même.
Ressources utiles :
- [Différence entre routeur et passerelle (original)](https://networkengineering.stackexchange.com/questions/51426/difference-between-router-and-gateway)
</details>
<details>
<summary><b>Expliquez la fonction de chacun des enregistrements DNS suivants : SOA, PTR, A, MX et CNAME.</b></summary><br>
Les **enregistrements DNS** sont essentiellement des fichiers de mappage qui indiquent au serveur DNS à quelle adresse IP chaque domaine est associé et comment traiter les requêtes envoyées à chaque domaine. Certaines syntaxes d'**enregistrements DNS** couramment utilisées dans presque toutes les configurations d'enregistrements DNS sont `A`, `AAAA`, `CNAME`, `MX`, `PTR`, `NS`, `SOA`, `SRV`, `TXT` et `NAPTR`.
- **SOA** - Start Of Authority (début d'autorité)
- **A** - Enregistrement de mappage d'adresse
- **AAAA** - Enregistrement d'adresse IP version 6
- **CNAME** - Enregistrement de nom canonique
- **MX** - Enregistrement d'échangeur de courrier
- **NS** - Enregistrement de serveur de noms
- **PTR** - Enregistrement de pointeur de recherche inverse
Ressources utiles :
- [Liste des types d'enregistrements DNS](https://en.wikipedia.org/wiki/List_of_DNS_record_types)
</details>
<details>
<summary><b>Pourquoi les adresses MAC ne pourraient-elles pas être utilisées à la place d'IPv4/6 pour la mise en réseau ?</b></summary><br>
Le modèle **OSI** explique pourquoi il n'est pas logique de prendre des décisions de routage (un concept de **couche 3**) basées sur un mécanisme physique (couche 2).
La mise en réseau moderne est divisée en plusieurs couches pour réaliser votre communication de bout en bout. Votre carte réseau (ce qui est adressé par l'adresse MAC - adresse physique) n'a besoin d'être responsable que de la communication avec les pairs sur son réseau physique.
La communication que vous êtes autorisé à accomplir avec votre adresse **MAC** se limitera aux autres appareils qui résident à portée physique de votre machine. Sur Internet, par exemple, vous n'êtes pas physiquement connecté à chaque machine. C'est pourquoi nous utilisons le mécanisme **TCP/IP** (une adresse logique de couche 3) lorsque nous devons communiquer avec une machine à laquelle nous ne sommes pas physiquement connectés.
**IP** est un système de numérotation arbitraire imposé de manière hiérarchique sur un groupe d'ordinateurs pour les distinguer logiquement en tant que groupe (c'est ce qu'est un sous-réseau). L'envoi de messages entre ces groupes se fait via des tables de routage, elles-mêmes divisées en plusieurs niveaux afin de ne pas avoir à suivre chaque sous-réseau individuellement.
Il est également assez facile de faire le lien avec une autre paire de systèmes. Vous avez un numéro d'identification délivré par l'État, pourquoi auriez-vous besoin d'une adresse postale si ce numéro d'identification est déjà unique pour vous ? Vous avez besoin de l'adresse postale car c'est un système arbitraire qui décrit où doit aller la destination unique pour les communications qui vous sont destinées.
D'un autre côté, la distribution des adresses **MAC** sur le réseau est aléatoire et totalement indépendante de la topologie. Le regroupement des routes serait impossible, chaque routeur devrait suivre les routes pour chaque appareil qui transite du trafic par lui. C'est ce que font les commutateurs de **couche 2**, et cela ne passe pas à l'échelle au-delà d'un certain nombre d'hôtes.
Ressources utiles :
- [Pourquoi les adresses MAC ne pourraient-elles pas être utilisées à la place d'IPv4|6 pour la mise en réseau ? (original)](https://serverfault.com/questions/410626/why-couldnt-mac-addresses-be-used-instead-of-ipv46-for-networking)
</details>
<details>
<summary><b>Quel est le plus petit masque de sous-réseau IPv4 pouvant être appliqué à un réseau contenant jusqu'à 30 appareils ?</b></summary><br>
Que vous ayez un VLAN standard `/24` pour les utilisateurs finaux, un `/30` pour les liaisons point à point, ou quelque chose entre les deux, un sous-réseau qui doit contenir jusqu'à 30 appareils correspond à un `/27` - soit un masque de sous-réseau de `255.255.255.224`.
Ressources utiles :
- [Comment calculer le préfixe, le réseau, le sous-réseau et les numéros d'hôte ?](https://networkengineering.stackexchange.com/questions/7106/how-do-you-calculate-the-prefix-network-subnet-and-host-numbers)
- [La barre oblique après une adresse IP - Notation CIDR](https://networkengineering.stackexchange.com/questions/3697/the-slash-after-an-ip-address-cidr-notation)
- [Pourquoi y a-t-il 3 plages d'adresses IPv4 privées ?](https://networkengineering.stackexchange.com/questions/32119/why-are-there-3-ranges-of-private-ipv4-addresses)
- [Calculateur IP](http://jodies.de/ipcalc)
</details>
<details>
<summary><b>Quels sont certains codes de statut HTTP courants ?</b></summary><br>
- **1xx** - Réponses informationnelles - communique des informations au niveau du protocole de transfert
- **2xx** - Succès - indique que la requête du client a été acceptée avec succès
- **3xx** - Redirection - indique que le client doit entreprendre une action supplémentaire pour terminer sa requête
- **4xx** - Erreur côté client - cette catégorie de codes d'erreur pointe du doigt les clients
- **5xx** - Erreur côté serveur - le serveur assume la responsabilité de ces codes d'erreur
Ressources utiles :
- [Codes de statut HTTP](https://httpstatuses.com/)
</details>
###### Questions DevOps (5)
<details>
<summary><b>Qu'est-ce que DevOps ? Qu'est-ce qui est le plus important pour le succès d'une communauté DevOps : la façon dont les gens communiquent ou les outils que vous choisissez de déployer ? ***</b></summary><br>
**DevOps** est une équipe cohésive qui s'engage à la fois dans les tâches de développement et d'exploitation, ou ce sont des équipes d'exploitation et de développement individuelles qui travaillent en étroite collaboration. C'est plus une "façon" de travailler en collaboration avec d'autres départements pour atteindre des objectifs communs.
</details>
<details>
<summary><b>Qu'est-ce qu'un gestionnaire de versions ? Vos messages de commit sont-ils de bonne facture ?</b></summary><br>
C'est un système qui enregistre les modifications apportées à un fichier ou à un ensemble de fichiers au fil du temps afin que vous puissiez rappeler des versions spécifiques ultérieurement. Les systèmes de gestion de versions sont constitués d'un référentiel central partagé où les coéquipiers peuvent valider des modifications apportées à un fichier ou à un ensemble de fichiers. Ensuite, vous pouvez mentionner les utilisations de la gestion de versions.
La gestion de versions vous permet de :
- rétablir des fichiers à un état antérieur
- rétablir l'ensemble du projet à un état antérieur
- comparer les modifications dans le temps
- voir qui a modifié en dernier quelque chose qui pourrait poser problème
- savoir qui a introduit un problème et quand
Les sept règles d'un excellent message de commit :
- séparer le sujet du corps par une ligne vide
- limiter la ligne de sujet à 50 caractères
- mettre la première lettre du sujet en majuscule
- ne pas terminer la ligne de sujet par un point
- utiliser le mode impératif dans la ligne de sujet
- couper le corps à 72 caractères
- utiliser le corps pour expliquer quoi et pourquoi plutôt que comment
Ressources utiles :
- [Démarrage - À propos de la gestion de versions (original)](https://git-scm.com/book/en/v2/Getting-Started-About-Version-Control)
</details>
<details>
<summary><b>Expliquez quelques commandes <code>git</code> de base.</b></summary><br>
- `git init` - créer un nouveau référentiel local
- `git commit -m "message"` - valider les modifications vers HEAD
- `git status` - lister les fichiers que vous avez ajoutés avec `git add` et valider tous les fichiers que vous avez modifiés depuis
- `git push origin master` - envoyer les modifications vers la branche master de votre référentiel distant
</details>
<details>
<summary><b>Expliquez un pipeline d'intégration continue simple.</b></summary><br>
- cloner le référentiel
- étape de déploiement (QA)
- environnement de test (QA)
- étape de déploiement (PROD)
</details>
<details>
<summary><b>Expliquez quelques commandes <code>docker</code> de base.</b></summary><br>
- `docker ps` - afficher les conteneurs en cours d'exécution
- `docker ps -a` - afficher tous les conteneurs
- `docker images` - afficher les images Docker
- `docker logs <container-id|container-name>` - obtenir les logs d'un conteneur
- `docker network ls` - afficher tous les réseaux Docker
- `docker volumes ls` - afficher tous les volumes Docker
- `docker exec -it <container-id|container-name> bash` - exécuter bash dans un conteneur avec un shell interactif
</details>
###### Questions sur la cybersécurité (1)
<details>
<summary><b>Qu'est-ce qu'une mauvaise configuration de sécurité ?</b></summary><br>
**La mauvaise configuration de sécurité** est une vulnérabilité lorsque un appareil/application/réseau est configuré d'une manière qui peut être exploitée par un attaquant pour en tirer profit. Cela peut être aussi simple que de laisser le nom d'utilisateur/mot de passe par défaut inchangé ou trop simple pour les comptes de l'appareil, etc.
</details>
### :diamond_shape_with_a_dot_inside: <a name="regular-sysadmin">Administrateur Système régulier</a>
###### Questions Système (60)
<details>
<summary><b>Parlez-moi de votre expérience avec les environnements de production ? ***</b></summary><br>
À compléter.
</details>
<details>
<summary><b>Quelle distribution choisiriez-vous pour exécuter un serveur web majeur ? ***</b></summary><br>
À compléter.
</details>
<details>
<summary><b>Expliquez en quelques points le processus de démarrage du système Linux.</b></summary><br>
**BIOS** : Le nom complet de BIOS est Basic Input/Output System. Il effectue des vérifications d'intégrité, recherche, charge, puis exécute le chargeur d'amorçage.
**Chargeur d'amorçage** : Étant donné que les premières phases ne sont pas spécifiques au système d'exploitation, le processus de démarrage basé sur BIOS pour les architectures x86 et x86-64 est considéré comme commençant lorsque le code du master boot record (MBR) est exécuté en mode réel et que le chargeur d'amorçage de première étape est chargé. Dans les systèmes UEFI, une charge utile, telle que le noyau Linux, peut être exécutée directement. Ainsi, aucun chargeur d'amorçage n'est nécessaire. Quelques chargeurs d'amorçage populaires : **GRUB**, **Syslinux/Isolinux** ou **Lilo**.
**Noyau** : Le noyau Linux gère tous les processus du système d'exploitation, tels que la gestion de la mémoire, l'ordonnancement des tâches, les E/S, la communication interprocessus et le contrôle global du système. Il est chargé en deux étapes - dans la première étape, le noyau (sous forme d'image compressée) est chargé en mémoire et décompressé, et quelques fonctions fondamentales telles que la gestion de base de la mémoire sont mises en place.
**Init** : Est le parent de tous les processus du système, il est exécuté par le noyau et est responsable du démarrage de tous les autres processus.
- `SysV init` - le travail d'init est "de faire fonctionner tout comme il se doit une fois que le noyau est complètement en fonctionnement". Essentiellement, il établit et opère tout l'espace utilisateur. Cela inclut la vérification et le montage des systèmes de fichiers, le démarrage des services utilisateur nécessaires, et finalement le passage à un environnement utilisateur lorsque le démarrage du système est terminé.
- `systemd` - les développeurs de systemd visent à remplacer le système init Linux hérité d'Unix System V. Comme init, systemd est un démon qui gère d'autres démons. Tous les démons, y compris systemd, sont des processus en arrière-plan. Systemd est le premier démon à démarrer (lors du démarrage) et le dernier démon à se terminer (lors de l'arrêt).
- `runit` - runit est un schéma init pour les systèmes d'exploitation de type Unix qui initialise, supervise et termine les processus tout au long du système d'exploitation. C'est une réimplémentation de la boîte à outils de supervision de processus daemontools qui fonctionne sur les systèmes d'exploitation Linux, Mac OS X, \*BSD et Solaris.
Ressources utiles :
- [Analyse du processus de démarrage Linux](https://opensource.com/article/18/1/analyzing-linux-boot-process)
- [Processus de démarrage Systemd - un regard approfondi sur Linux](https://linoxide.com/linux-how-to/systemd-boot-process/)
</details>
<details>
<summary><b>Comment et pourquoi les démons Linux abandonnent-ils leurs privilèges ? Pourquoi certains démons ont-ils besoin des permissions root pour démarrer ? Expliquez. ***</b></summary>
À compléter.
</details>
<details>
<summary><b>Pourquoi une charge de 1,00 n'est-elle pas idéale sur une machine monocœur ?</b></summary><br>Le problème avec une charge de 1.00 est que vous n'avez aucune marge. En pratique, de nombreux administrateurs système fixent la limite à 0.70.
La règle empirique « À surveiller » : 0.70. Si votre charge moyenne reste supérieure à > 0.70, il est temps d'enquêter avant que la situation ne s'aggrave.
La règle empirique « Corriger maintenant » : 1.00. Si votre charge moyenne reste au-dessus de 1.00, trouvez le problème et corrigez-le maintenant. Sinon, vous serez réveillé en pleine nuit, et ce ne sera pas agréable.
Règle empirique : 5.0. Si votre charge moyenne est supérieure à 5.00, vous pourriez avoir de sérieux ennuis, votre machine soit se bloque soit ralentit considérablement, et cela se produira (inexplicablement) au pire moment possible, comme en pleine nuit ou lorsque vous présentez lors d'une conférence. Ne laissez pas la situation en arriver là.
Ressources utiles :
- [Proper way of interpreting system load on a 4 core 8 thread processor](https://serverfault.com/questions/618130/proper-way-of-interpreting-system-load-on-a-4-core-8-thread-processor)
- [Understanding Linux CPU Load - when should you be worried?](http://blog.scoutapp.com/articles/2009/07/31/understanding-load-averages)
</details>
<details>
<summary><b>Que signifie le fait que l'utilisateur effectif soit root, mais que l'ID utilisateur réel soit toujours votre nom ?</b></summary><br>
L'**ID utilisateur réel** est qui vous êtes vraiment (l'utilisateur qui possède le processus), et l'**ID utilisateur effectif** est ce que le système d'exploitation examine pour décider si vous êtes autorisé à faire quelque chose (la plupart du temps, il y a quelques exceptions).
Lorsque vous vous connectez, le shell de connexion définit à la fois l'**ID utilisateur réel et effectif** à la même valeur (votre **ID utilisateur réel**) telle que fournie par le fichier de mots de passe.
Si, par exemple, vous exécutez setuid, et qu'en plus de s'exécuter en tant qu'un autre utilisateur (par exemple **root**), le programme setuid est également censé faire quelque chose en votre nom.
Après avoir exécuté setuid, il aura votre **ID réel** (car vous êtes le propriétaire du processus) et l'ID utilisateur effectif du propriétaire du fichier (par exemple **root**) puisqu'il est setuid.
Prenons le cas de `passwd` :```bash
-rwsr-xr-x 1 root root 45396 may 25 2012 /usr/bin/passwd
L'utilisation de logrotate est la méthode habituelle pour gérer les fichiers journaux. Mais au lieu d'ajouter du contenu à /etc/logrotate.conf, vous devriez ajouter votre propre tâche dans /etc/logrotate.d/, sinon vous devrez examiner plus de différences de fichiers de configuration lors des mises à niveau de version.
S'il est activement écrit, vous n'avez pas vraiment beaucoup d'options en matière de troncature. Vos seules options sont de tronquer le fichier :```bash : >/var/log/massive-logfile
C'est très utile, car cela tronque le fichier sans perturber les processus.
Ressources utiles :
- [Comment utiliser logrotate pour gérer les fichiers journaux](https://www.linode.com/docs/uptime/logs/use-logrotate-to-manage-log-files/)
- [Journalisation système](https://www.ibm.com/developerworks/library/l-lpic1-108-2/index.html)
</details>
<details>
<summary><b>Comment le noyau Linux crée, gère et supprime les processus dans le système ? ***</b></summary><br>
À compléter.
Ressources utiles :
- [Processus Linux](https://www.tldp.org/LDP/tlk/kernel/processes.html)
</details>
<details>
<summary><b>Expliquez les informations sélectionnées que vous pouvez voir dans <code>top</code> et <code>htop</code>. Comment diagnostiquer la charge, le temps utilisateur élevé et les problèmes de mémoire insuffisante avec ces outils ? ***</b></summary><br>
À compléter.
Ressources utiles :
- [top expliqué visuellement](https://www.svennd.be/top-explained-visually/)
- [htop expliqué visuellement](https://codeahoy.com/2017/01/20/hhtop-explained-visually/)
- [Explication de tout ce que vous pouvez voir dans htop/top sur Linux](https://peteris.rocks/blog/htop/)
</details>
<details>
<summary><b>Comment reconnaîtriez-vous un processus qui accapare les ressources ? </b></summary><br>
`top` fonctionne assez bien, à condition de regarder les bons chiffres.
- **M** Trie par utilisation actuelle de la mémoire résidente
- **T** Trie par utilisation totale (ou cumulative) du CPU
- **P** Trie par utilisation actuelle du CPU (c'est le rafraîchissement par défaut)
- **?** Affiche un résumé d'utilisation pour toutes les commandes top
Ce sont des informations très importantes à obtenir lors de la résolution de problèmes pour savoir pourquoi un processus informatique s'exécute lentement et pour prendre des décisions sur les processus à tuer/logiciels à désinstaller.
Ressources utiles :
- [Comment trouver le(s) processus qui accaparent la machine](https://superuser.com/questions/326300/how-to-find-the-processes-which-are-hogging-the-machine)
</details>
<details>
<summary><b>Vous devez mettre à niveau le service <code>ntpd</code> sur 200 serveurs. Quelle est la meilleure façon de procéder pour mettre à niveau tous ces serveurs vers la dernière version ?</b></summary><br>
En utilisant l'approche **Infrastructure as Code** (Infrastructure en tant que code), il existe plusieurs bonnes méthodes :
1. **Modèle de gestion des changements par synchronisation de configuration** :
Il existe des outils de gestion de configuration (Ansible, Chef, Puppet, Saltstack, ...) qui peuvent être utilisés pour mettre à jour automatiquement le service `ntpd` sur tous les serveurs. Pour maintenir la stabilité des systèmes, les paquets système sur les serveurs sont généralement mis à jour automatiquement avec seulement les mises à jour de sécurité. Les versions majeures ou mineures des paquets sont généralement verrouillées par version dans les définitions de configuration pour éviter une mauvaise configuration du service. Le changement est ensuite déployé en modifiant la version de `ntpd` dans la définition de configuration.
Avec cette approche, il est important d'être prudent lors du déploiement massif de changements dans l'infrastructure. Le pipeline de déploiement devrait inclure des tests unitaires, d'intégration et système, et éventuellement être d'abord déployé dans un environnement de préproduction (staging) pour valider la configuration. Si les tests prouvent la correction de la configuration, le déploiement doit être effectué par un déploiement incrémental avec possibilité de retour en arrière en cas d'erreur ou d'échec.
2. **Modèle de serveurs immuables** :
Dans le modèle de serveur immuable, l'unité entière (serveur, conteneur) est remplacée par une nouvelle image mise à jour plutôt que d'apporter des modifications au serveur en cours d'exécution (cela élimine la dérive de configuration). Avec cette approche, vous construisez généralement l'image du serveur avec des outils comme Packer ou Docker avec un Dockerfile. Cette image est ensuite testée et déployée de manière similaire à l'option ci-dessus (1.), mais en utilisant des techniques telles que le déploiement canary (Canary Release), qui permet également un déploiement incrémental et un retour en arrière.
Ressources utiles :
- [Infrastructure as Code - Chapitre 8 : Modèles pour mettre à jour et modifier les serveurs](http://shop.oreilly.com/product/0636920039297.do)
</details>
<details>
<summary><b>Comment définir définitivement <code>$PATH</code> sur Linux/Unix ? Pourquoi cette variable est-elle si importante ? ***</b></summary>
À compléter.
</details>
<details>
<summary><b>Lorsque votre serveur démarre, certaines erreurs apparaissent sur la console. Comment examiner les messages de démarrage et où sont-ils stockés ?</b></summary><br>
Votre console a deux types de messages :
- **générés par le noyau** (via printk)
- **générés par l'espace utilisateur** (généralement votre système init)
Les messages du noyau sont toujours stockés dans le tampon **kmsg**, visibles via la commande `dmesg`. Ils sont également souvent copiés dans votre **syslog**. Cela s'applique également aux messages de l'espace utilisateur écrits dans `/dev/kmsg`, mais ceux-ci sont assez rares.
Pendant ce temps, lorsque l'espace utilisateur écrit son texte d'état de démarrage dans `/dev/console` ou `/dev/tty1`, il n'est stocké nulle part. Il va simplement à l'écran et c'est tout.
`dmesg` est utilisé pour examiner les messages de démarrage contenus dans le tampon circulaire du noyau. Un tampon circulaire est un tampon de taille fixe dans lequel toute nouvelle donnée ajoutée écrase les données les plus anciennes.
Il affiche les opérations une fois le processus de démarrage terminé, telles que les options de ligne de commande passées au noyau ; les composants matériels détectés, les événements lorsqu'un nouveau périphérique USB est ajouté, ou des erreurs comme une défaillance de la carte réseau (NIC) et les pilotes signalent qu'aucune activité de liaison n'est détectée sur le réseau, et bien plus encore.
Si la journalisation système est effectuée via le composant journal, vous devez utiliser `journalctl`. Il affiche les messages incluant les messages du noyau et de démarrage ; les messages provenant de syslog ou de divers services.
Les problèmes/erreurs de démarrage nécessitent qu'un administrateur système examine certains fichiers importants en conjonction avec des commandes particulières (traités différemment selon les versions de Linux) :
- `/var/log/boot.log` - journal de démarrage système, il contient tout ce qui s'est déroulé lors du démarrage du système
- `/var/log/messages` - stocke les messages système globaux, y compris les messages enregistrés lors du démarrage du système
- `/var/log/dmesg` - contient les informations du tampon circulaire du noyau
Ressources utiles :
- [Comment voir tous les messages de démarrage dans Linux après le démarrage ? (original)](https://superuser.com/questions/1188407/how-to-view-all-boot-messages-in-linux-after-booting)
- [Différences dans les fichiers journaux /var/log/{syslog,dmesg,messages}](https://superuser.com/questions/565927/differences-in-var-log-syslog-dmesg-messages-log-files)
- [Comment peut-on consulter ultérieurement les messages qui défilent lors du démarrage d'un système Debian ?](https://serverfault.com/questions/516411/all-debian-boot-messages)
</details>
<details>
<summary><b>L'utilisation du swap est trop élevée. Quelles sont les raisons de cela et comment résoudre les problèmes de swapping ?</b></summary><br>
L'espace **Swap** est une quantité restreinte de mémoire physique allouée à l'utilisation par le système d'exploitation lorsque la mémoire disponible est totalement utilisée. Il s'agit d'une gestion de la mémoire qui implique l'échange de sections de mémoire vers et depuis le stockage physique.
Si le système a besoin de plus de ressources mémoire et que la RAM est pleine, les pages inactives en mémoire sont déplacées vers l'espace swap. Bien que l'espace swap puisse aider les machines avec une petite quantité de RAM, il ne doit pas être considéré comme un remplacement pour plus de RAM. L'espace **Swap** se trouve sur les disques durs, qui ont un temps d'accès plus lent que la mémoire physique.
La charge de travail augmente votre demande de RAM. Vous exécutez une charge de travail qui nécessite plus de mémoire. L'utilisation de la totalité du swap l'indique. De plus, changer `swappiness` à **1** pourrait ne pas être une décision judicieuse. Définir `swappiness` à **1** n'indique pas que le swapping ne sera pas effectué. Cela indique simplement à quel point le noyau sera agressif en matière de swapping, cela n'élimine pas le swapping. Le swapping aura lieu si nécessaire.
- **Augmenter la taille de l'espace swap** - premièrement, vous auriez une utilisation accrue du disque. Si vos disques ne sont pas assez rapides pour suivre, votre système pourrait finir par trébucher (thrashing), et vous subiriez des ralentissements à mesure que les données sont échangées en mémoire. Cela entraînerait un goulot d'étranglement.
- **Ajouter plus de RAM** - la vraie solution est d'ajouter plus de mémoire. Il n'y a pas de substitut à la RAM, et si vous avez assez de mémoire, vous swapperez moins.
Pour surveiller l'utilisation de l'espace swap :
- `cat /proc/swaps` - pour voir la taille totale et utilisée du swap
- `grep SwapTotal /proc/meminfo` - pour afficher l'espace swap total
- `free` - pour afficher la quantité de mémoire système libre et utilisée (swap également)
- `vmstat` - pour vérifier les statistiques de swapping
- `top`, `htop` - pour vérifier l'utilisation de l'espace swap
- `atop` - pour montrer si votre système sur-alloue (overcommit) la mémoire
- ou utilisez une commande shell en une ligne pour lister toutes les applications avec la quantité d'espace swap qu'elles utilisent en kilo-octets :```bash
for _fd in /proc/*/status ; do
awk '/VmSwap|Name/{printf $2 " " $3}END{ print ""}' $_fd
done | sort -k 2 -n -r | less
Sous Linux et autres systèmes d'exploitation de type Unix, les nouveaux fichiers sont créés avec un ensemble de permissions par défaut. Plus précisément, les permissions d'un nouveau fichier peuvent être restreintes d'une manière spécifique en appliquant un « masque » de permissions appelé umask. La commande umask est utilisée pour définir ce masque, ou pour afficher sa valeur actuelle.
Changement permanent (définir par ex. umask 02) :
~/.profile~/.bashrc~/.zshrc~/.cshrcRessources utiles :
Sous le système de fichiers, les fichiers sont représentés par des inodes (ou est-ce plusieurs inodes, pas sûr).
Lorsque vous supprimez un fichier, il supprime un lien vers l'inode sous-jacent. L'inode n'est supprimé (ou supprimable/réinscriptible) que lorsque tous les liens vers l'inode ont été supprimés.
Une fois qu'un lien dur a été créé, le lien pointe vers l'inode. La suppression, le renommage ou le déplacement du fichier d'origine n'affectera pas le lien dur car il pointe vers l'inode sous-jacent. Toute modification des données sur l'inode est répercutée dans tous les fichiers qui font référence à cet inode.
Remarque : Les liens durs ne sont valides qu'au sein du même système de fichiers. Les liens symboliques peuvent traverser les systèmes de fichiers car ils sont simplement le nom d'un autre fichier.
Différences :
Ressources utiles :
SUID/GUID est-il la même chose ?C'est probablement l'une des choses les plus agaçantes que les gens confondent tout le temps. Le bit SUID/GUID et le sticky-bit sont deux choses complètement différentes.
Si vous exécutez man chmod, vous pouvez lire sur le SUID et les sticky-bits.
SUID/GUID
Ce que la page de manuel ci-dessus essaie de dire, c'est que la position que prend le bit x dans rwxrwxrwx pour l'octet utilisateur (1er groupe de rwx) et l'octet groupe (2e groupe de rwx) peut prendre un état supplémentaire où le x devient un s. Lorsque cela se produit, ce fichier, lorsqu'il est exécuté (s'il s'agit d'un programme et pas seulement d'un script shell), s'exécutera avec les permissions du propriétaire ou du groupe du fichier.
Ainsi, si le fichier appartient à root et que le bit SUID est activé, le programme s'exécutera en tant que root, même si vous l'exécutez en tant qu'utilisateur normal. La même chose s'applique pour le bit GUID.
Exemples :
pas de suid/guid - seuls les bits rwxr-xr-x sont définis.```bash
ls -lt b.pl
-rwxr-xr-x 1 root root 179 Jan 9 01:01 b.pl
**suid & bit exécutable de l'utilisateur activé (s minuscule)** - les bits `rwsr-x-r-x` sont définis.```bash
chmod u+s b.pl
ls -lt b.pl
-rwsr-xr-x 1 root root 179 Jan 9 01:01 b.pl
suid activé et bit exécutable désactivé (S majuscule) - les bits rwSr-xr-x sont définis.```bash
chmod u-x b.pl
ls -lt b.pl
-rwSr-xr-x 1 root root 179 Jan 9 01:01 b.pl
**guid & bit exécutable du groupe activé (s minuscule)** - les bits `rwxr-sr-x` sont définis.```bash
chmod g+s b.pl
ls -lt b.pl
-rwxr-sr-x 1 root root 179 Jan 9 01:01 b.pl
LC_ALL=C avant une commande ? Dans quels cas cela est-il utile ?LC_ALL est la variable d'environnement qui surcharge tous les autres paramètres de localisation. Elle définit d'un coup toutes les variables de type LC_ vers une locale spécifiée.
La principale raison de définir LC_ALL=C avant une commande est d'obtenir simplement une sortie en anglais (changement général de la locale utilisée par la commande).
D'autre part, il est également important d'augmenter la vitesse d'exécution des commandes avec LC_ALL=C, par exemple grep ou fgrep. L'utilisation de la locale LC_ALL=C a amélioré nos performances et réduit le temps d'exécution des commandes.
Par exemple, si vous définissez LC_ALL=en_US.utf8, votre système ouvre plusieurs fichiers du répertoire /usr/lib/locale. Avec LC_ALL=C, un minimum d'opérations d'ouverture et de lecture est effectué.
Si vous souhaitez restaurer tous vos paramètres de locale normaux (originaux) pour la session :```bash LC_ALL=
À compléter.
1) Exigences principales - rappelez-vous ceci
/var/www/app01/htmlumask pour les utilisateurs et suid/sgid (uniquement pour des situations spécifiques)2) Répertoires d'application
/var/www contient un répertoire pour chaque site web (isolation des applications), par exemple /var/www/app01, `/var/www/app02````bash
mkdir /var/www/{app01,app02}
**3) Propriétaire et groupe de l'application**
Chaque application a un **propriétaire** (par ex. **u01-prod**, **u02-prod**) et un **groupe** (par ex. **g01-prod**, **g02-prod**) désignés, qui sont définis comme le propriétaire de tous les fichiers et répertoires dans le répertoire du site Web :```bash
chown -R u01-prod:g01-prod /var/www/app01
chown -R u02-prod:g02-prod /var/www/app02
4) Propriétaire et groupe des développeurs
Pour définir les paramètres du noyau dans les systèmes de type Unix, modifiez d'abord le fichier /etc/sysctl.conf après avoir effectué les modifications, enregistrez le fichier et exécutez la commande sysctl -p, cette commande appliquera les modifications de manière permanente sans redémarrer la machine.
Ressources utiles :
/proc./proc est un système de fichiers virtuel qui fournit des informations détaillées sur le noyau, le matériel et les processus en cours d'exécution. Comme /proc contient des fichiers virtuels, on l'appelle système de fichiers virtuel. Ces fichiers virtuels ont des qualités uniques. La plupart d'entre eux sont répertoriés avec une taille de zéro octet. Les fichiers virtuels tels que /proc/interrupts, /proc/meminfo, /proc/mounts et /proc/partitions donnent un aperçu en temps réel du matériel du système. D'autres : le fichier /proc/filesystems et le répertoire /proc/sys/ fournissent des informations de configuration du système et des interfaces.
Ressources utiles :
À compléter.
Il existe trois types de journalisation disponibles dans les systèmes de fichiers ext3/ext4 :
Un inode est une structure de données sur un système de fichiers sous Linux et autres systèmes d'exploitation de type Unix qui stocke toutes les informations sur un fichier à l'exception de son nom et de ses données réelles. Une structure de données est une façon de stocker des données afin qu'elles puissent être utilisées efficacement. Un fichier Unix est stocké dans deux parties différentes du disque - les blocs de données et les inodes. Je n'entrerai pas dans les superblocs et autres informations ésotériques. Les blocs de données contiennent le "contenu" du fichier. Les informations sur le fichier sont stockées ailleurs - dans l'inode. Le numéro d'inode d'un fichier peut facilement être trouvé en utilisant la commande ls, qui par défaut liste les objets (c'est-à-dire les fichiers, les liens et les répertoires) dans le répertoire courant (c'est-à-dire le répertoire dans lequel l'utilisateur travaille actuellement), avec son option -i. Ainsi, par exemple, la commande suivante affichera le nom de chaque objet dans le répertoire courant ainsi que son numéro d'inode :
Si vous connaissez l'inode, vous pouvez le trouver à l'aide de la commande find :```bash find . -inum 435304 -print
**Suppression de fichiers aux noms étranges**
Parfois, des fichiers sont créés avec des caractères étranges dans leur nom. Le système de fichiers Unix autorise tout caractère dans un nom de fichier à l'exception d'un null (ASCII 000) ou d'un "/". Tous les autres caractères sont autorisés.
Les utilisateurs peuvent créer des fichiers avec des caractères qui rendent difficile la visualisation du répertoire ou du fichier. Ils peuvent créer le répertoire ".. " avec un espace à la fin, ou créer un fichier contenant un backspace dans le nom, en utilisant :```bash
touch `printf "aa\bb"`
Alors qu'est-ce qu'est-ce qu'il se passe quand vous utilisez la commande ls:```bash
ls
aa?b
ls | grep 'a'
ab
Notez que lorsque `ls` envoie le résultat à un terminal, il place un "**?**" dans le nom du fichier pour indiquer un caractère non imprimable.
Vous pouvez vous débarrasser de ce fichier en utilisant `rm -i *` et il vous demandera confirmation avant de supprimer chaque fichier. Mais vous pouvez aussi utiliser `find` pour supprimer le fichier, une fois que vous connaissez le numéro d'inode.```bash
ls -i
435304 aa?b
find . -inum 435304 -delete
Ressources utiles :
ls -l affiche les attributs de fichier comme des points d'interrogation. Qu'est-ce que cela signifie et quelles étapes prendrez-vous pour supprimer les fichiers « zombie » inutilisés ?Ce problème peut être plus difficile à résoudre car plusieurs étapes peuvent être nécessaires - parfois vous pouvez obtenir test/file: Permission denied, test/file: No such file or directory ou test/file: Input/output error.
Cela se produit lorsque l'utilisateur ne peut pas exécuter stat() sur les fichiers (ce qui nécessite les permissions d'exécution), mais peut lire les entrées du répertoire (ce qui nécessite un accès en lecture au répertoire). Vous obtenez donc une liste de fichiers dans le répertoire, mais vous ne pouvez obtenir aucune information sur les fichiers car ils ne peuvent pas être lus. Si vous avez un répertoire avec une permission de lecture mais pas d'exécution, vous verrez cela.
Certains processus comme rsync génèrent des fichiers temporaires qui sont créés et abandonnés rapidement, ce qui provoquera des erreurs si vous essayez d'appeler d'autres commandes simples de gestion de fichiers comme rm, mv, etc.
Exemple de sortie :```bash ?????????? ? ? ? ? ? sess_kee6fu9ag7tiph2jae
1) modifier les permissions : `chmod 0777 sess_kee6fu9ag7tiph2jae` et essayer de supprimer
2) changer le propriétaire : `chown root:root sess_kee6fu9ag7tiph2jae` et essayer de supprimer
3) modifier les permissions et le propriétaire du répertoire : `chmod -R 0777 dir/ && chown -R root:root dir/` et essayer de supprimer
4) recréer le fichier : `touch sess_kee6fu9ag7tiph2jae` et essayer de supprimer
5) faire attention aux autres processus en cours sur le serveur, par exemple `rsync`, parfois cela peut apparaître comme une erreur transitoire lorsqu'un serveur NFS est fortement surchargé
6) trouver l'inode du fichier : `ls -i`, et essayer de supprimer : `find . -inum <inode_num> -delete`
7) remonter (si possible) votre système de fichiers
8) démarrer le système en mode mono-utilisateur et réparer votre système de fichiers avec `fsck`
Ressources utiles :
- [Question marks showing in ls of directory. IO errors too.](https://serverfault.com/questions/65616/question-marks-showing-in-ls-of-directory-io-errors-too)
</details>
<details>
<summary><b>LVM ou pas LVM. Quels avantages cela apporte-t-il ?</b></summary><br>
- LVM facilite grandement le déplacement des systèmes de fichiers
- vous pouvez étendre un groupe de volumes sur un nouveau volume physique
- déplacer un nombre quelconque de volumes logiques d'un ancien volume physique
- supprimer ce volume du groupe de volumes sans avoir besoin de démonter des partitions
- vous pouvez également créer des instantanés de volumes logiques pour effectuer des sauvegardes
- LVM intègre la prise en charge de la mise en miroir, vous pouvez donc avoir un volume logique mis en miroir sur plusieurs volumes physiques
- LVM prend même en charge TRIM
Ressources utiles :
- [What is LVM and what is it used for?](https://askubuntu.com/questions/3596/what-is-lvm-and-what-is-it-used-for)
</details>
<details>
<summary><b>Comment augmenter la taille d'une partition LVM ?</b></summary><br>
Utilisez la commande `lvextend` pour redimensionner une partition LVM.
- augmenter la taille de 500 Mo :```bash
lvextend -L +500M /dev/vgroup/lvolume
| Type de chapitre | Nombre de questions | Brève description |
|---|
| Introduction | ||
| 🔸 Questions simples | 14 questions | Détendu, amusant et simple - parfait pour commencer. |
| Connaissances générales | ||
| 🔸 Administrateur junior | 65 questions | Raisonnablement simple et direct, basé sur des connaissances de base. |
| 🔸 Administrateur régulier | 94 questions | Le niveau intermédiaire des questions si vous avez des connaissances solides. |
| 🔸 Administrateur senior | 99 questions | Questions difficiles et énigmes. Testez-les si vous voulez être bon. |
| Connaissances secrètes | ||
| 🔸 Gourou Sysadmin | 12 questions | Des questions vraiment approfondies pour connaître le Gourou Sysadmin. |
bash-completion - contient un certain nombre de règles de complétion prédéfinies pour le shellAstuces et techniques
CTRL + Rpopd/pushd et autres commandes intégrées du shell qui permettent de manipuler la pile de répertoiresCTRL + U, CTRL + E!* - tous les arguments de la dernière commande!! - l'intégralité de la dernière commande!ssh - la dernière commande commençant par sshRessources utiles :
Pour des informations détaillées, incluant le nom d'utilisateur, le terminal, l'adresse IP de l'ordinateur source, l'heure de début de la session, le temps d'inactivité, les cycles CPU du processus, les cycles CPU du job, et la commande en cours d'exécution, saisissez :```bash
w
Aussi important pour afficher une liste des derniers utilisateurs connectés, entrez :```bash
# It uses /var/log/wtmp.
last
Ressources utiles :
Ressources utiles :
ou```bash grep -e "string1" -e "string2" filename
Ressources utiles :
- [Qu'est-ce que grep, et comment l'utiliser ? (original)](https://kb.iu.edu/d/afiy)
</details>
<details>
<summary><b>Expliquez les commandes de contenu de fichier avec leur description.</b></summary><br>
- `head` : pour vérifier le début d'un fichier.
- `tail` : pour vérifier la fin d'un fichier. C'est l'inverse de la commande head.
- `cat` : utilisé pour visualiser, créer, concaténer les fichiers.
- `more` : utilisé pour afficher le texte dans la fenêtre du terminal sous forme de pagination.
- `less` : utilisé pour visualiser le texte dans le sens inverse et permet également un déplacement ligne par ligne.
Ressources utiles :
- [Visualisation de fichiers texte depuis l'invite du shell](https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/4/html/Step_by_Step_Guide/s1-viewingtext-terminal.html)
</details>
<details>
<summary><b>Signaux POSIX SIGHUP, SIGINT, SIGKILL et SIGTERM. Expliquez.</b></summary><br>
- **SIGHUP** - est envoyé à un processus lorsque son terminal de contrôle est fermé. Il était à l'origine conçu pour notifier le processus d'une perte de ligne série (un raccrochage). De nombreux démons rechargent leurs fichiers de configuration et rouvrent leurs journaux au lieu de se terminer en recevant ce signal.
- **SIGINT** - est envoyé à un processus par son terminal de contrôle lorsqu'un utilisateur souhaite interrompre le processus. Cela est généralement initié en appuyant sur `Ctrl+C`, mais sur certains systèmes, le caractère "supprimer" ou la touche "break" peuvent être utilisés.
- **SIGKILL** - est envoyé à un processus pour le faire terminer immédiatement (tuer). Contrairement à **SIGTERM** et **SIGINT**, ce signal ne peut pas être intercepté ou ignoré, et le processus récepteur ne peut effectuer aucun nettoyage en recevant ce signal.
- **SIGTERM** - est envoyé à un processus pour demander sa terminaison. Contrairement au signal **SIGKILL**, il peut être intercepté et interprété ou ignoré par le processus. Cela permet au processus d'effectuer une terminaison propre en libérant les ressources et en sauvegardant l'état si approprié. **SIGINT** est presque identique à **SIGTERM**.
Ressources utiles :
- [Signaux POSIX](https://dsa.cs.tsinghua.edu.cn/oj/static/unix_signal.html)
- [Introduction à la programmation des signaux Unix](http://titania.ctie.monash.edu.au/signals/)
</details>
<details>
<summary><b>Que fait la commande <code>kill</code> ?</b></summary><br>
Dans les systèmes d'exploitation Unix et de type Unix, `kill` est une commande utilisée pour envoyer un signal à un processus. Par défaut, le message envoyé est le signal de terminaison, qui demande au processus de se terminer. Mais `kill` est quelque peu impropre ; le signal envoyé peut n'avoir rien à voir avec la terminaison d'un processus.
Ressources utiles :
- [Maîtrise de la commande "Kill" sous Linux](https://www.maketecheasier.com/kill-command-in-linux/)
</details>
<details>
<summary><b>Quelle est la différence entre <code>rm</code> et <code>rm -rf</code> ?</b></summary><br>
`rm` supprime uniquement les fichiers nommés (et pas les répertoires). Avec `-rf` comme vous le dites :
- `-r`, `-R`, `--recursive` supprime récursivement le contenu d'un répertoire, y compris les fichiers cachés et les sous-répertoires
- `-f`, `--force` ignore les fichiers inexistants, ne demande jamais confirmation
Ressources utiles :
- [Quelle est la différence entre `rm -r` et `rm -f` ?](https://superuser.com/questions/1126206/what-is-the-difference-between-rm-r-and-rm-f)
</details>
<details>
<summary><b>Comment faire un <code>grep</code> récursif ? Expliquez sur plusieurs exemples. ***</b></summary>
À compléter.
</details>
<details>
<summary><b><code>archive.tgz</code> fait environ 30 Go. Comment lister son contenu et extraire un seul fichier ?</b></summary><br>```bash
# list of content
tar tf archive.tgz
# extract file
tar xf archive.tgz filename
Ressources utiles :
r - pour la permission de lecturew - pour la permission d'écritureRessources utiles :
Ressources utiles :
VLAN 2Un sous-réseau n'est rien d'autre qu'une plage d'adresses IP qui permet aux hôtes de communiquer via les couches 2 et 3. Chaque sous-réseau ne nécessite pas son propre VLAN. Les VLAN sont mis en œuvre pour l'isolation (ils sont une sandbox pour la communication de couche 2 ; aucun système de deux VLAN différents ne peut communiquer, mais cela peut se faire via le routage inter-VLAN), la facilité de gestion et la sécurité.
Ressources utiles :
| SERVICE | PORT |
|---|---|
| SMTP | 25 |
| FTP | 20 pour le transfert de données et 21 pour l'établissement de la connexion |
| DNS | 53 |
| DHCP | 67/UDP pour le serveur DHCP, 68/UDP pour le client DHCP |
| SSH | 22 |
Ressources utiles :
Vous pouvez (parfois) résoudre une adresse IP en un nom d'hôte. L'adresse IP peut être stockée dans un enregistrement PTR. Vous pouvez ensuite faire :```bash dig A
Pour rechercher l'adresse IPv4 d'un hôte, ou :```bash
dig AAAA <hostname>
Pour rechercher l'adresse IPv6 d'un hôte, ou:```bash dig PTR ZZZ.YYY.XXX.WWW.in-addr.arpa.
Pour rechercher le nom d'hôte pour l'adresse IPv4 `WWW.XXX.YYY.ZZZ` (notez que les octets sont inversés), ou :```bash
dig PTR b.a.9.8.7.6.5.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa.
Ressources utiles :
Lorsque user2 souhaite changer son mot de passe, il exécute /usr/bin/passwd.
Le RUID sera user2 mais le EUID de ce processus sera root.
user2 ne peut utiliser passwd que pour changer son propre mot de passe, car en interne passwd vérifie le RUID et, s'il n'est pas root, ses actions seront limitées au mot de passe de l'utilisateur réel.
Il est nécessaire que le EUID devienne root dans le cas de passwd car le processus doit écrire dans /etc/passwd et/ou /etc/shadow.
Ressources utiles :
Ressources utiles :
| Umask | Résultat fichier | Résultat répertoire |
|---|---|---|
| 000 | 666 rw- rw- rw- | 777 rwx rwx rwx |
| 002 | 664 rw- rw- r-- | 775 rwx rwx r-x |
| 022 | 644 rw- r-- r-- | 755 rwx r-x r-x |
| 027 | 640 rw- r-- --- | 750 rwx r-x --- |
| 077 | 600 rw---- --- | 700 rwx --- --- |
| 277 | 400 r-- --- --- | 500 r-x --- --- |
Ressources utiles :
guid activé et bit exécutable désactivé (S majuscule) - les bits rwxr-Sr-x sont définis.```bash
chmod g-x b.pl
ls -lt b.pl
-rwxr-Sr-x 1 root root 179 Jan 9 01:01 b.pl
**bit collant**
Le bit collant, d'autre part, est noté `t`, comme pour le répertoire `/tmp` :```bash
ls -l /|grep tmp
drwxrwxrwt. 168 root root 28672 Jun 14 08:36 tmp
Ce bit aurait toujours dû s'appeler le bit de suppression restreinte car c'est ce qu'il signifie vraiment. Lorsque ce bit de mode est activé, il fait en sorte que, dans un répertoire, les utilisateurs ne peuvent supprimer que les fichiers et répertoires dont ils sont propriétaires.
Ressources utiles :
Si `LC_ALL` ne fonctionne pas, essayez d'utiliser `LANG` (si cela ne fonctionne toujours pas, essayez `LANGUAGE`) :```bash
LANG=C date +%A
Monday
Ressources utiles :
Tous les utilisateurs qui maintiennent le site web ont leurs propres groupes et sont rattachés au groupe d'application :```bash id alice uid=2000(alice) gid=4000(alice) groups=8000(g01-prod) id bob uid=2001(bob) gid=4001(bob) groups=8000(g01-prod),8001(g02-prod)
Ainsi, l'utilisateur **alice** a des privilèges standard pour `/var/www/app01` et l'utilisateur **bob** a des privilèges standard pour `/var/www/app01` et `/var/www/app02`.
**5) Propriétaire et groupe du serveur web**
Tout fichier ou répertoire devant être écrit par le serveur web a son propriétaire. Si le serveur web est Apache, les propriétaire/groupe par défaut sont **apache:apache** ou **www-data:www-data** et pour Nginx ce sera **nginx:nginx**. Ne modifiez pas ces paramètres.
Si les applications fonctionnent avec des serveurs d'applications comme **uwsgi** ou **php-fpm**, vous devez définir l'utilisateur et le groupe appropriés (par exemple pour **app01** ce sera **u01-prod:g01-prod**) dans les fichiers de configuration spécifiques.
**6) Permissions**
Définissez correctement les permissions avec les **listes de contrôle d'accès** :```bash
# For web server
setfacl -Rdm "g:apache:rwx" /var/www/app01
setfacl -Rm "g:apache:rwx" /var/www/app01
# For developers
setfacl -Rdm "g:g01-prod:rwx" /var/www/app01
setfacl -Rm "g:g01-prod:rwx" /var/www/app01
Si vous utilisez SELinux n'oubliez pas le contexte de sécurité:```bash chcon -R system_u:object_r:httpd_sys_content_t /var/www/app01
**7) Erreurs de sécurité**
- Propriétaire **root** pour les fichiers et les répertoires
- **root** n'exécute jamais de fichiers dans le répertoire du site web, et ne devrait pas y créer de fichiers
- des permissions trop larges comme **777** qui rendent certains fichiers critiques accessibles en écriture et en lecture par tous
- éviter de créer des scripts de maintenance ou d'autres fichiers critiques avec suid root
Si vous autorisez votre site à modifier les fichiers qui constituent le code exécuté sur votre site, vous facilitez grandement la prise de contrôle de votre serveur.
Un outil de téléversement de fichiers permet aux utilisateurs de téléverser un fichier avec n'importe quel nom et n'importe quel contenu. Cela permet à un utilisateur de téléverser un script PHP de relais de courrier sur votre site, qu'il peut placer où il veut pour transformer votre serveur en machine d'envoi de courriels commerciaux non sollicités. Ce script pourrait également être utilisé pour lire toutes les adresses e-mail de votre base de données, ou d'autres informations personnelles.
Si l'utilisateur malveillant peut téléverser un fichier avec n'importe quel nom mais ne contrôle pas le contenu, il pourrait facilement téléverser un fichier qui écrase votre `index.php` (ou un autre fichier critique) et casser votre site.
Ressources utiles :
- [How to setup linux permissions for the WWW folder?](https://serverfault.com/questions/124800/how-to-setup-linux-permissions-for-the-www-folder)
- [What permissions should my website files/folders have on a Linux webserver?](https://serverfault.com/questions/357108/what-permissions-should-my-website-files-folders-have-on-a-linux-webserver)
- [Security Pitfalls of setgid Programs](https://www.agwa.name/blog/post/security_pitfalls_of_setgid_programs)
</details>
<details>
<summary><b>Quelles étapes seront prises par init lorsque vous exécutez <code>telinit 1</code> depuis le niveau d'exécution 3 ? Quel sera le résultat final de cela ? Si vous utilisez <code>telinit 6</code> à la place de la commande <code>reboot</code>, votre serveur sera-t-il redémarré ? ***</b></summary><br>
À compléter.
Ressources utiles :
- [What differences it will make, if i use “telinit 6” instead of “reboot” command to restart my computer?](https://unix.stackexchange.com/questions/434560/what-differences-it-will-make-if-i-use-telinit-6-instead-of-reboot-command)
</details>
<details>
<summary><b>J'ai oublié le mot de passe root ! Que faire sous BSD ? Quel est le but du démarrage en mode mono-utilisateur ?</b></summary><br>
Redémarrez le système, tapez `boot -s` à l'invite `Boot:` pour entrer en **mode mono-utilisateur**.
À la question sur le shell à utiliser, appuyez sur `Entrée` ce qui affichera une invite `#`.
Saisissez `mount -urw /` pour remonter le système de fichiers racine en lecture/écriture, puis exécutez `mount -a` pour remonter tous les systèmes de fichiers.
Exécutez `passwd root` pour changer le mot de passe root puis exécutez `exit` pour continuer le démarrage.
Le **mode mono-utilisateur** devrait essentiellement vous permettre de vous connecter avec un accès root et de modifier presque tout. Par exemple, vous pouvez utiliser le mode mono-utilisateur lorsque vous restaurez une base de données maître ou une base de données système endommagée, ou lorsque vous modifiez des options de configuration du serveur (par ex. récupération de mot de passe).
Ressources utiles :
- [FreeBSD Reset or Recover Root Password](https://www.cyberciti.biz/tips/howto-freebsd-reset-recover-root-password.html)
- [Single User Mode Definition](http://www.linfo.org/single_user_mode.html)
</details>
<details>
<summary><b>Comment pourriez-vous modifier un fichier texte sans invoquer un éditeur de texte ?</b></summary><br>
Par exemple :<br>```bash
# cat >filename ... - overwrite file
# cat >>filename ... - append to file
cat > filename << __EOF__
data
__EOF__
et `resize2fs` ou `xfs_growfs` pour redimensionner le système de fichiers:
- pour les systèmes de fichiers ext:```bash
resize2fs /dev/vgroup/lvolume
Ressources utiles :
- [Extension d'un volume logique](https://www.tldp.org/HOWTO/LVM-HOWTO/extendlv.html)
</details>
<details>
<summary><b>Qu'est-ce qu'un processus zombie/défunt ?</b></summary><br>
C'est un processus qui a terminé son exécution (via l'appel système `exit`) mais qui possède encore une entrée dans la table des processus : c'est un processus dans l'« **état terminé** ».
Les processus marqués **defunct** sont des processus morts (appelés « zombies ») qui subsistent parce que leur parent ne les a pas détruits correctement. Ces processus seront détruits par init si le processus parent se termine.
Ressources utiles :
- [Qu'est-ce qu'un processus <defunct>, et pourquoi n'est-il pas tué ?](https://askubuntu.com/questions/201303/what-is-a-defunct-process-and-why-doesnt-it-get-killed)
</details>
<details>
<summary><b>Quelle est la bonne façon de mettre à niveau/mettre à jour un système en production ? Automatisez-vous ces processus ? Planifiez-vous des temps d'arrêt ? Écrivez des recommandations. ***</b></summary><br>
À compléter.
</details>
<details>
<summary><b>Votre ami, lors de la configuration du serveur MySQL, vous a demandé : <i>Dois-je exécuter <code>sudo mysql_secure_installation</code> après avoir installé mysql ?</i> Qu'en pensez-vous ?</b></summary><br>
Il serait préférable d'exécuter cette commande car elle offre de nombreuses options de sécurité, notamment :
- Vous pouvez définir un mot de passe pour les comptes root
- Vous pouvez supprimer les comptes root accessibles depuis l'extérieur de l'hôte local
- Vous pouvez supprimer les comptes d'utilisateurs anonymes
- Vous pouvez supprimer la base de données de test, qui par défaut est accessible aux utilisateurs anonymes
Ressources utiles :
- [Quel est le but d'utiliser mysql_secure_installation ?](https://stackoverflow.com/questions/20760908/what-is-purpose-of-using-mysql-secure-installation)
</details>
<details>
<summary><b>Présentez et expliquez les bonnes façons d'utiliser la commande <code>kill</code>.</b></summary><br>
En parlant de tuer des processus, n'utilisez jamais `kill -9/SIGKILL` sauf en cas d'absolue nécessité. Ce kill peut causer des problèmes en raison de sa force brute.
Essayez toujours d'utiliser la procédure simple suivante :
- d'abord, envoyez le signal **SIGTERM** (`kill -15`) qui indique au processus de s'arrêter et est généralement accepté comme signal à utiliser pour un arrêt propre (mais rappelez-vous que ce signal peut être ignoré).
- ensuite, essayez d'envoyer le signal **SIGHUP** (`kill -1`) qui est couramment utilisé pour dire à un processus de s'arrêter et de redémarrer ; ce signal peut également être intercepté et ignoré par un processus.
Dans la grande majorité des cas, cela suffit – et c'est bien plus propre.
Ressources utiles :
- [Quand ne pas utiliser kill -9 sur un processus ?](https://unix.stackexchange.com/questions/8916/when-should-i-not-kill-9-a-process)
- [SIGTERM vs. SIGKILL](https://major.io/2010/03/18/sigterm-vs-sigkill/)
</details>
<details>
<summary><b>Qu'est-ce que la commande <code>strace</code> et comment doit-elle être utilisée ? Expliquez un exemple de connexion à un processus déjà en cours d'exécution.</b></summary><br>
`strace` est un puissant outil en ligne de commande pour le débogage et le dépannage de programmes sur les systèmes d'exploitation de type Unix comme Linux. Il capture et enregistre tous les appels système effectués par un processus ainsi que les signaux reçus par le processus.
**Aperçu de strace**
`strace` peut être considéré comme un débogueur léger. Il permet à un programmeur/utilisateur de découvrir rapidement comment un programme interagit avec le système d'exploitation. Il fait cela en surveillant les appels système et les signaux.
**Utilisations**
Utile lorsque vous n'avez pas le code source ou que vous ne voulez pas vous embêter à le parcourir en détail. Également utile pour votre propre code si vous n'avez pas envie d'ouvrir **GDB**, mais que vous vous intéressez simplement à comprendre les interactions externes.
**Exemple d'attachement au processus**
`strace -p <PID>` - pour attacher un processus à strace.
`strace -e trace=read,write -p <PID>` - avec ceci, vous pouvez également tracer un processus/programme pour un événement, comme read et write (dans cet exemple). Ainsi, il affichera tous les événements qui incluent les appels système read et write du processus.
Autres exemples similaires
- `-e trace=network` - tracer tous les appels système liés au réseau.
- `-e trace=signal` - tracer tous les appels système liés aux signaux.
- `-e trace=ipc` - tracer tous les appels système liés à l'IPC.
- `-e trace=desc` - tracer tous les appels système liés aux descripteurs de fichier.
- `-e trace=memory` - tracer tous les appels système liés au mappage mémoire.
Ressources utiles :
- [Comment strace doit-il être utilisé ? (original)](https://stackoverflow.com/questions/174942/how-should-strace-be-used)
- [Comment strace se connecte-t-il à un processus déjà en cours d'exécution ? (original)](https://stackoverflow.com/questions/7482076/how-does-strace-connect-to-an-already-running-process)
- [strace : pour le plaisir, le profit et le débogage](http://timetobleed.com/hello-world/)
</details>
<details>
<summary><b>Quand utiliseriez-vous des listes de contrôle d'accès plutôt que ou en conjonction avec la commande <code>chmod</code> ? ***</b></summary><br>
À compléter.
</details>
<details>
<summary><b>Quels algorithmes sont supportés dans le fichier <code>/etc/shadow</code> ?</b></summary><br>
Les algorithmes courants actuels sont :
- MD5
- SHA-1 (aussi appelé SHA)
Ces deux algorithmes ne devraient plus être utilisés à des fins cryptographiques/de sécurité !
- SHA-256
- SHA-512
- SHA-3 (KECCAK a été annoncé vainqueur du concours pour un nouvel algorithme de hachage approuvé par le gouvernement fédéral en octobre 2012)
Ressources utiles :
- [Quel est l'algorithme utilisé pour chiffrer les mots de passe Linux ?](https://crypto.stackexchange.com/questions/40841/what-is-the-algorithm-used-to-encrypt-linux-passwords)
- [Comment trouver l'algorithme de hachage utilisé pour obscurcir les mots de passe ?](https://unix.stackexchange.com/questions/430141/how-to-find-the-hashing-algorithm-used-to-obfuscate-passwords)
</details>
<details>
<summary><b>Quelle est l'utilité de ulimit dans les systèmes de type Unix ?</b></summary><br>
La plupart des systèmes d'exploitation de type Unix, y compris Linux et BSD, offrent des moyens de limiter et de contrôler l'utilisation des ressources système telles que les threads, les fichiers et les connexions réseau par processus et par utilisateur. Ces « **ulimits** » empêchent un seul utilisateur d'utiliser trop de ressources système.
</details>
<details>
<summary><b>Que sont les limites souples et les limites dures ?</b></summary><br>
**Limite dure** (hard limit) est la valeur maximale autorisée pour un utilisateur, définie par le superutilisateur ou root. Cette valeur est définie dans le fichier `/etc/security/limits.conf`. L'utilisateur peut augmenter la **limite souple** (soft limit) par lui-même lorsqu'il a besoin de plus de ressources, mais ne peut pas définir la **limite souple** au-dessus de la **limite dure**.
</details>
<details>
<summary><b>Lors de la configuration de HAProxy pour fonctionner avec Redis, vous obtenez l'erreur <code>General socket error (Permission denied)</code> dans le journal. SELinux est activé. Expliquez le dépannage SELinux de base en ligne de commande. ***</b></summary><br>
Ressources utiles :
- [Dépannage SELinux de base en CLI](https://access.redhat.com/articles/2191331)
</details>
<details>
<summary><b>Vous avez configuré une connexion par clé RSA, mais votre serveur affiche <code>Server refused our key</code> comme prévu. Où chercherez-vous la cause du problème ?</b></summary><br>
**Côté serveur**
Définir `LogLevel VERBOSE` dans le fichier `/etc/ssh/sshd_config` est probablement ce dont vous avez besoin, bien qu'il existe des niveaux plus élevés :
Les échecs d'authentification SSH sont enregistrés dans `/var/log/auth.log`, `/var/log/secure` ou `/var/log/audit/audit.log`.
La commande suivante ne devrait vous donner que les lignes de journal liées à SSH (par exemple) :```bash
grep 'sshd' /var/log/auth.log
Ensuite, la commande la plus simple pour lister toutes les connexions SSH échouées est celle présentée ci-dessous :```bash grep "Failed password" /var/log/auth.log
est également utile :```bash
grep "Failed\|Failure" /var/log/auth.log
Sur les distributions Linux récentes vous pouvez interroger le fichier journal d'exécution maintenu par le démon Systemd via la commande journalctl (ssh.service ou sshd.service). Par exemple :```bash