Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
test-your-sysadmin-skills — 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. | Kitploit
Outils/GitHubGitHub/trimstray/test-your-sysadmin-skills
Apprentissage et ÉducationRessources OrganiséesParcours et Cours
GitHubtrimstray/test-your-sysadmin-skills

test-your-sysadmin-skills

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.

Voir le dépôt

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager
11.7k1.7kil y a 1 anVérifié par Kitploit

Master


: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)


Pull Requests MIT License




ℹ️  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 «


Table des matières


Introduction

💠 Questions simples

  • Qu'avez-vous appris cette semaine ?
  • Qu'est-ce qui vous passionne ou vous intéresse dans le monde de l'administration système ?
  • Quel est un récent défi technique que vous avez rencontré et comment l'avez-vous résolu ?
  • Parlez-moi du dernier grand projet que vous avez terminé.
  • Contribuez-vous à des projets open source ?
  • Décrivez la configuration de votre laboratoire personnel.
  • De quelle réalisation personnelle êtes-vous le plus fier ?
  • Parlez-moi de la plus grosse erreur que vous ayez commise. Que feriez-vous différemment aujourd'hui ?
  • Quels outils logiciels allez-vous installer le premier jour dans un nouveau travail ?
  • Parlez-moi de la façon dont vous gérez votre base de connaissances (wikis, fichiers, portails).
  • Quelles sources d'actualités consultez-vous quotidiennement ? (administration système, sécurité ou autres)
  • Votre équipe NOC a un nouveau budget pour les certifications d'administrateur système. Quelle certification souhaiteriez-vous et pourquoi ?
  • Comment interagissez-vous avec les développeurs : nous contre eux ou tous ensemble avec une approche différente ?
  • Quelle question d'administration système poseriez-vous si vous m'interrogiez, pour savoir à quel point je suis bon avec des situations non standard ?

Connaissances générales

💠 Administrateur junior

Questions système (37)
Donnez quelques exemples de distributions Linux. Quelle est votre distribution préférée et pourquoi ?
- Red Hat Enterprise Linux - Fedora - CentOS - Debian - Ubuntu - Mint - SUSE Linux Enterprise Server (SLES) - SUSE Linux Enterprise Desktop (SLED) - Slackware - Arch - Kali - Backbox

Ma distribution Linux préférée :

  • Arch Linux, qui offre un système de base minimaliste agréable sur lequel on peut construire un système d'exploitation personnalisé. Sa beauté réside aussi dans le fait qu'elle dispose de l'Arch User Repository (AUR), qui, combiné à ses dépôts binaires officiels, lui permet d'avoir probablement les plus grands dépôts de toutes les distributions. Son processus d'empaquetage est également très simple, ce qui signifie que si l'on souhaite un paquet non présent dans ses dépôts officiels ou l'AUR, il est facile de le créer soi-même.
  • Linux Mint, qui est également construite à partir des versions LTS d'Ubuntu, mais propose des éditions avec plusieurs environnements de bureau différents, dont Cinnamon, MATE et Xfce. Mint est assez soignée et son esthétique est plutôt attrayante, j'aime particulièrement son nouveau thème d'icônes, bien que je n'apprécie guère son thème GTK+ (trop fade à mon goût). J'ai également trouvé un bug dans sa dernière version Mint 19, qui devient assez irritant car j'ai demandé de l'aide il y a plus de quinze jours sur leurs forums et je n'ai reçu aucune réponse jusqu'à présent, et c'est un bug qui rend ma vie plus difficile.
  • Kali Linux, est une distribution Linux basée sur Debian destinée aux tests de pénétration avancés et aux audits de sécurité. Kali contient plusieurs centaines d'outils destinés à diverses tâches de sécurité informatique, telles que les tests de pénétration, la recherche en sécurité, la criminalistique informatique et le rétro-ingénierie.

Ressources utiles :

  • Liste des distributions Linux
  • Quelle est votre distribution Linux préférée et pourquoi ?
Quelles sont les différences entre Unix, Linux, BSD et GNU ?

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 :

  • Quelle est la différence entre Unix, Linux, BSD et GNU ? (original)
  • Le grand débat : est-ce Linux ou GNU/Linux ?
Qu'est-ce qu'un CLI ? Parlez-moi de vos outils CLI, astuces et techniques préférés.

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 vous
  • ssh - la commande la plus précieuse à apprendre, je peux l'utiliser pour faire des choses étonnantes :
    • monter un système de fichiers sur internet avec sshfs
    • exécuter des commandes à distance : lance une commande contre un serveur rsync sans démon rsync en en démarrant un via ssh
    • exécuter dans des fichiers batch : je peux rediriger la sortie de la commande distante et l'utiliser dans un fichier batch local
  • vi/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 fichiers
Quel est votre shell préféré et pourquoi ?

BASH 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 :

  • Comparaison des shells de commande
Comment obtenir de l'aide en ligne de commande ? ***
  • 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)

Vos 5 premières commandes sur un serveur *nix après connexion.
  • w - beaucoup d'informations utiles avec l'uptime du serveur
  • top - 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 ports
  • df - rapporte la quantité d'espace disque disponible utilisée par les systèmes de fichiers
  • history - vous indique ce qui a été exécuté précédemment par l'utilisateur auquel vous êtes actuellement connecté

Ressources utiles :

  • Premières 5 commandes lorsque je me connecte sur un serveur Linux (original)
Que signifient les champs dans la sortie de ls -al ?

Dans l'ordre de la sortie :```bash -rwxrw-r-- 1 root root 2048 Jan 13 07:11 db.dump

root@kitploit:~
- 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
Quel est l'avantage d'exécuter les processus en cours en arrière-plan ? Comment faire ?

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 &

root@kitploit:~
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

root@kitploit:~
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

root@kitploit:~
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.

Avant de pouvoir gérer les processus, vous devez être capable de les identifier. Quels outils utiliserez-vous ? ***

À compléter.

Exécuter la commande en tant qu'utilisateur root. Est-ce une bonne ou une mauvaise pratique ?

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 :

  • Pourquoi est-il mauvais de se connecter en tant que root ? (original)
  • Qu'est-ce qui ne va pas avec le fait d'être toujours root ?
  • Pourquoi vous devriez éviter d'exécuter des applications en tant que root
Comment vérifier les statistiques de mémoire et de CPU ?

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 :

  • Comment connaître l'utilisation du CPU sous Linux ?
  • 16 commandes de surveillance de serveur Linux que vous devez vraiment connaître
Qu'est-ce que la moyenne de charge (load average) ?

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 :

  • si les moyennes sont à 0.0, alors votre système est inactif
  • si la moyenne sur 1 minute est plus élevée que les moyennes sur 5 ou 15 minutes, alors la charge augmente
  • si la moyenne sur 1 minute est plus basse que les moyennes sur 5 ou 15 minutes, alors la charge diminue
  • si elles sont plus élevées que votre nombre de CPU, alors vous pourriez avoir un problème de performances (cela dépend)

Ressources utiles :

  • Moyennes de charge Linux : résoudre le mystère (original)
  • Moyenne de charge Linux - le résumé définitif
  • Comment fonctionnent les moyennes de charge CPU (et les utiliser pour trier les performances du serveur web !)
Où est stocké mon mot de passe sous Linux/Unix ?

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 :

  • Où est stocké mon mot de passe sur Linux ?
Comment modifier récursivement les permissions pour tous les répertoires sauf les fichiers et pour tous les fichiers sauf les répertoires ?

Pour changer tous les répertoires par exemple en 755 (drwxr-xr-x) :```bash find /opt/data -type d -exec chmod 755 {} ;

root@kitploit:~
Pour changer tous les fichiers par exemple en **644** (`-rw-r--r--`):```bash
find /opt/data -type f -exec chmod 644 {} \;

Ressources utiles :

  • Comment définir chmod pour un dossier et tous ses sous-dossiers et fichiers ? (original)
Chaque commande échoue avec 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

root@kitploit:~
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

root@kitploit:~
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
Exécuter plusieurs commandes shell en une seule ligne.

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

root@kitploit:~
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

root@kitploit:~
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 utilisateurs
  • x - pour la permission d'exécution
Comment synchroniser deux répertoires locaux ?

Pour 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

root@kitploit:~
- `-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
Pourquoi utilisons-nous 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 :

  • su vs sudo -s vs sudo -i vs sudo bash
  • Pourquoi utilisons-nous su - et pas simplement su ? (original)
Comment trouver les fichiers qui ont été modifiés sur votre système au cours des 60 dernières minutes ?
```bash find / -mmin -60 -type f ``` Ressources utiles :
  • Obtenir tous les fichiers modifiés au cours des 30 derniers jours dans un répertoire (original)
Quelles sont les principales raisons de conserver les anciens fichiers journaux ?

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 :

  • d'où les gens venaient
  • quel navigateur ils utilisaient
  • exactement quels fichiers ils ont consultés
  • combien de temps il a fallu pour charger chaque fichier
  • et tout un tas d'autres trucs techniques

Facteurs à prendre en compte :

  • exigences légales en matière de conservation ou de destruction
  • politiques de l'entreprise en matière de conservation et de destruction
  • combien de temps les journaux sont utiles
  • à quelles questions vous espérez répondre à partir des journaux
  • combien d'espace ils occupent

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 :

  • Combien de temps conservez-vous les fichiers journaux ?
Qu'est-ce qu'une sauvegarde incrémentielle ?

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 :

  • Qu'est-ce qu'une sauvegarde incrémentielle ?
Qu'est-ce que le RAID ? Qu'est-ce que RAID0, RAID1, RAID5, RAID6, RAID10 ?

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.

  • RAID0 : Aussi connu sous le nom de répartition en bandes de disque, est une technique qui divise un fichier et répartit les données sur tous les disques d'un groupe RAID. Il n'y a aucune protection contre les pannes.
  • RAID1 : Un sous-système de disque populaire qui augmente la sécurité en écrivant les mêmes données sur deux disques. Appelé « miroir », le RAID 1 n'améliore pas les performances en écriture, mais les performances en lecture peuvent atteindre la somme des performances de chaque disque. Cependant, si un disque tombe en panne, le second disque est utilisé et le disque défaillant est remplacé manuellement. Après le remplacement, le contrôleur RAID duplique le contenu du disque fonctionnel sur le nouveau.
  • RAID5 : C'est un sous-système de disque qui augmente la sécurité en calculant des données de parité et en augmentant la vitesse en entrelaçant les données sur trois disques ou plus (répartition en bandes). En cas de panne d'un seul disque, les lectures suivantes peuvent être calculées à partir de la parité distribuée de sorte qu'aucune donnée ne soit perdue.
  • RAID6 : RAID 6 étend RAID 5 en ajoutant un autre bloc de parité. Il nécessite au minimum quatre disques et peut continuer à exécuter des opérations de lecture et d'écriture en cas de panne simultanée de deux disques. RAID 6 n'a pas de pénalité de performance pour les opérations de lecture, mais il a une pénalité de performance pour les opérations d'écriture en raison de la surcharge associée aux calculs de parité.
  • RAID10 : Aussi connu sous le nom de RAID 1+0, est une configuration RAID qui combine le miroir de disque et la répartition en bandes pour protéger les données. Il nécessite au minimum quatre disques et répartit les données sur des paires en miroir. Tant qu'un disque de chaque paire en miroir est fonctionnel, les données peuvent être récupérées. Si deux disques dans la même paire en miroir tombent en panne, toutes les données seront perdues car il n'y a pas de parité dans les ensembles répartis.

Ressources utiles :

  • RAID
Comment le groupe par défaut d'un utilisateur est-il déterminé ? Comment le changer ?
```bash useradd -m -g initial_group username ``` `-g/--gid` : définit le nom ou le numéro du groupe de connexion initial de l'utilisateur. S'il est spécifié, le nom du groupe doit exister ; si un numéro de groupe est fourni, il doit faire référence à un groupe déjà existant.

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 :

  • Comment modifier le groupe par défaut d'un utilisateur sous Linux ?
Quel est votre meilleur éditeur de texte en ligne de commande pour le travail quotidien et l'écriture de scripts ? ***

À compléter.

Pourquoi voudriez-vous monter des serveurs dans un rack ?
  • Protection du matériel
  • Refroidissement adéquat
  • Espace de travail organisé
  • Meilleure gestion de l'alimentation
  • Environnement plus propre

Ressources utiles :

  • 5 raisons de monter votre PC en rack
Questions sur le réseau (23)
Dessinez-moi un schéma réseau simple : vous avez 20 systèmes, 1 routeur, 4 commutateurs, 5 serveurs et un petit bloc IP. ***

À compléter.

Quelles sont les choses les plus importantes à comprendre à propos du modèle OSI (ou de tout autre modèle) ?

Les choses les plus importantes à comprendre à propos du modèle OSI (ou de tout autre modèle) sont :

  • nous pouvons diviser les protocoles en couches
  • les couches assurent l'encapsulation
  • les couches fournissent une abstraction
  • les couches découplent les fonctions les unes des autres

Ressources utiles :

  • Relation entre le modèle OSI et les protocoles réseau
Quelle est la différence entre un VLAN et un sous-réseau ? Avez-vous besoin d'un VLAN pour configurer un sous-réseau ?

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.

Citez 5 ports réseau courants que vous devriez connaître.
Que sont POP et IMAP, et comment choisir lequel implémenter ?

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.

Comment vérifier la route par défaut et la table de routage ?

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 :

  • Comment vérifier les routes (table de routage) sous Linux
  • FreeBSD : Définir une route/passerelle par défaut
Quelle est la différence entre 127.0.0.1 et localhost ?

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 :

  • Quelle est la différence entre 127.0.0.1 et localhost ?
  • localhost vs. 127.0.0.1
Quel port est utilisé par la commande 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

root@kitploit:~
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
Comment tester la connectivité d'un port avec telnet ou nc ?
```bash # with telnet command: telnet code42.example.com 5432

with nc (netcat) command:

nc -vz code42.example.com 5432

root@kitploit:~
</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
Développeur a ajouté une tâche cron qui génère d'énormes fichiers journaux. Comment les empêcher de devenir aussi gros ?

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

root@kitploit:~
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
Qu'est-ce que umask ? Comment le définir définitivement pour un utilisateur ?

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
  • ~/.cshrc

Ressources utiles :

  • Qu'est-ce qu'Umask et comment configurer le umask par défaut sous Linux ?
Expliquez les différences entre les valeurs umask suivantes : 000, 002, 022, 027, 077 et 277.
Quelle est la différence entre un lien symbolique et un lien dur ?

Sous le système de fichiers, les fichiers sont représentés par des inodes (ou est-ce plusieurs inodes, pas sûr).

  • un fichier dans le système de fichiers est fondamentalement un lien vers un inode
  • un lien dur crée alors simplement un autre fichier avec un lien vers le même inode sous-jacent

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.

  • un lien symbolique est un lien vers un autre nom dans le système de fichiers

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 :

  • Hardlink ne peut pas être créé pour les répertoires. Un lien dur ne peut être créé que pour un fichier
  • Softlink également appelé lien symbolique ou symlink peut lier un répertoire

Ressources utiles :

  • Quelle est la différence entre un lien dur et un lien symbolique ?
Comment fonctionne le sticky bit ? Le 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

root@kitploit:~
**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

root@kitploit:~
**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
Que fait 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=

Comment assurer une haute disponibilité d'une application web ? ***

À compléter.

Vous configurez un nouveau serveur. L'une des étapes consiste à définir les permissions des répertoires de l'application. Quelles étapes allez-vous suivre et quelles erreurs éviter ?

1) Exigences principales - rappelez-vous ceci

  • quels utilisateurs ont accès au système de fichiers de l'application
  • permissions pour les serveurs web, par exemple Apache et les serveurs d'application comme uwsgi
  • permissions pour les répertoires spécifiques comme uploads, cache et le répertoire principal de l'application comme /var/www/app01/html
  • valeur correcte de umask pour les utilisateurs et suid/sgid (uniquement pour des situations spécifiques)
  • permissions pour tous les fichiers et répertoires futurs
  • permissions pour les tâches cron et les scripts

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}

root@kitploit:~
**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

Comment modifier les paramètres du noyau ? Quelles options du noyau pourriez-vous avoir besoin d'ajuster ? ***

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 :

  • Comment modifier les paramètres du noyau en cours d'exécution de manière persistante et non persistante
Expliquez le système de fichiers /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 :

  • Hiérarchie du système de fichiers Linux - /proc
Décrivez votre processus de sauvegarde des données. À quelle fréquence devriez-vous tester vos sauvegardes ? ***

À compléter.

Expliquez trois types de journalisation dans ext3/ext4.

Il existe trois types de journalisation disponibles dans les systèmes de fichiers ext3/ext4 :

  • Journal - les métadonnées et le contenu sont sauvegardés dans le journal
  • Ordonné - seules les métadonnées sont sauvegardées dans le journal. Les métadonnées sont journalisées uniquement après l'écriture du contenu sur le disque. C'est le mode par défaut
  • Writeback - seules les métadonnées sont sauvegardées dans le journal. Les métadonnées peuvent être journalisées avant ou après l'écriture du contenu sur le disque
Qu'est-ce qu'un inode ? Comment trouver le numéro d'inode d'un fichier et comment pouvez-vous l'utiliser ?

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 :

```bash ls -i ``` L'option `-i` de `df` lui demande de fournir des informations sur les inodes de chaque système de fichiers plutôt que sur l'espace disponible. Plus précisément, elle demande à df de renvoyer pour chaque système de fichiers monté le nombre total d'inodes, le nombre d'inodes libres, le nombre d'inodes utilisés et le pourcentage d'inodes utilisés. Cette option peut être utilisée avec l'option `-h` de la manière suivante pour rendre la sortie plus lisible :```bash df -hi ``` **Trouver des fichiers par inodes**

Si vous connaissez l'inode, vous pouvez le trouver à l'aide de la commande find :```bash find . -inum 435304 -print

root@kitploit:~
**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

root@kitploit:~
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 :

  • Comprendre les bases des inodes UNIX/Linux avec des exemples
  • Qu'est-ce qu'un inode tel que défini par POSIX ?
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

root@kitploit:~
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
Télécharger l’outil
Type de chapitreNombre de questionsBrève description
Introduction
🔸 Questions simples14 questionsDétendu, amusant et simple - parfait pour commencer.
Connaissances générales
🔸 Administrateur junior65 questionsRaisonnablement simple et direct, basé sur des connaissances de base.
🔸 Administrateur régulier94 questionsLe niveau intermédiaire des questions si vous avez des connaissances solides.
🔸 Administrateur senior99 questionsQuestions difficiles et énigmes. Testez-les si vous voulez être bon.
Connaissances secrètes
🔸 Gourou Sysadmin12 questionsDes 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 shell
  • Astuces et techniques

    • rechercher dans l'historique des commandes avec CTRL + R
    • popd/pushd et autres commandes intégrées du shell qui permettent de manipuler la pile de répertoires
    • raccourcis clavier d'édition comme CTRL + U, CTRL + E
    • les combinaisons seront automatiquement développées :
      • !* - tous les arguments de la dernière commande
      • !! - l'intégralité de la dernière commande
      • !ssh - la dernière commande commençant par ssh

    Ressources utiles :

    • Définition de l'Interface en Ligne de Commande
    • Quelle est votre astuce de ligne de commande préférée avec Bash ?
    • Quelles sont vos fonctionnalités ou astuces de ligne de commande préférées ?

    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

    It uses /var/run/utmp, and their processes /proc.

    w

    root@kitploit:~
    Aussi important pour afficher une liste des derniers utilisateurs connectés, entrez :```bash
    # It uses /var/log/wtmp.
    last
    

    Ressources utiles :

    • 4 façons d'identifier qui est connecté sur votre système Linux

    Ressources utiles :

    • Comment exécuter un processus Unix en arrière-plan ?
    • Commandes de contrôle des travaux
    • Quels sont les avantages d'exécuter des applications en arrière-plan ?
  • Où se trouvent les mots de passe des utilisateurs sous Linux ?
  • Formats des fichiers de mots de passe et shadow Linux
  • ou```bash grep -e "string1" -e "string2" filename

    root@kitploit:~
    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 :

    • Lister le contenu d'un fichier tar ou tar.gz
    • Comment extraire un ou plusieurs fichiers spécifiques d'un fichier tar.gz
  • r - pour la permission de lecture
  • w - pour la permission d'écriture
  • Ressources utiles :

    • Comment définir les permissions de fichiers avec chmod
    • Que fait "chmod +x your_file_name" et comment l'utiliser ?

    Ressources utiles :

    • Comment trouver les fichiers qui sont plus gros/plus petits que x octets ?
    VLAN 2
    VLAN

    Un 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 :

    • Quelle est la différence entre un VLAN et un sous-réseau ? (original)
    • VLAN vs sous-réseaux pour la sécurité et la segmentation réseau
    SERVICEPORT
    SMTP25
    FTP20 pour le transfert de données et 21 pour l'établissement de la connexion
    DNS53
    DHCP67/UDP pour le serveur DHCP, 68/UDP pour le client DHCP
    SSH22

    Ressources utiles :

    • Red Hat Enterprise Linux 4 : Guide de sécurité - Ports courants

    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

    root@kitploit:~
    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.

    root@kitploit:~
    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 :

    • Comment résoudre un nom d'hôte en adresse IP dans un script Bash ?
    • Comment résoudre des adresses IP en noms de domaine ?

    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 :

    • Différence entre Real User ID, Effective User ID et Saved User ID ? (original)
    • Quelle est la différence entre pid, ppid, uid, euid, gid et egid ?

    Ressources utiles :

    • Linux a mangé ma RAM !
    • Comment trouver quels processus utilisent l'espace d'échange sous Linux ?
    • 8 commandes utiles pour surveiller l'utilisation de l'espace d'échange sous Linux
    • Quel est le danger d'avoir un SWAP entièrement utilisé sur un serveur Ubuntu ?
    • Comment vider le swap s'il y a de la RAM libre ?
    UmaskRésultat fichierRésultat répertoire
    000666 rw- rw- rw-777 rwx rwx rwx
    002664 rw- rw- r--775 rwx rwx r-x
    022644 rw- r-- r--755 rwx r-x r-x
    027640 rw- r-- ---750 rwx r-x ---
    077600 rw---- ---700 rwx --- ---
    277400 r-- --- ---500 r-x --- ---

    Ressources utiles :

    • Qu'est-ce qu'Umask et comment configurer le umask par défaut sous Linux ?

    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

    root@kitploit:~
    **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 :

    • Comment fonctionne le sticky bit ? (original)
    root@kitploit:~
    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 :

    • Que fait LC_ALL=C ? (original)
    • Accélérer les recherches grep avec LC_ALL=C

    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)

    root@kitploit:~
    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

    root@kitploit:~
    **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__
    
    • étendre tout l'espace libre disponible:```bash lvextend -l +100%FREE /dev/vgroup/lvolume
    root@kitploit:~
    et `resize2fs` ou `xfs_growfs` pour redimensionner le système de fichiers:
    
    - pour les systèmes de fichiers ext:```bash
    resize2fs /dev/vgroup/lvolume
    
    • pour le système de fichiers xfs:```bash xfs_growfs mountpoint_for_/dev/vgroup/lvolume
    root@kitploit:~
    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

    root@kitploit:~
    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


    Read more