1. Introduction au Shell Linux

Dans le cadre des travaux pratiques de ce cours et dans la suite de votre cursus, vous allez utiliser de manière intensive le shell Linux. Il est donc essentiel de vous familiariser au maximum avec cet outil. Pour réaliser les exercices de ce TP, il vous faudra une machine virtuelle Linux.

1.1. RTFM

Dès que vous utilisez un utilitaire en ligne de commande, prenez l’habitude d’aller consulter la documentation fournie avec.  Généralement, cette documentation est disponible sous forme de manpage, ou page de manuel.  Pour les consulter, il faut utiliser la commande man

Consultez les pages de manuel pour répondre aux questions suivantes :

  • Comment afficher la liste des fichiers dans un répertoire, y compris ceux qui commencent par un point (fichiers cachés)?
  • Comment trouver le propriétaire d’un fichier? 
  • A quoi sert la commande touch ? 
  • A quoi sert l’utilitaire grep ?

1.2. Manipulations de fichiers

Pouvoir manipuler des fichiers est indispensable dans le cadre de la mise en place de services réseaux, puisque ces derniers sont très souvent configurés à travers des fichiers textuels. 

1.2.1. Création et édition de fichiers

Dans votre répertoire home, créez un répertoire TP1.  Créez deux fichiers texte vides, et ajoutez-y le texte suivant : 

Lorem ipsum dolor sit amet,
consectetur adipiscing elit,
sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

Pour cela, utilisez deux méthodes :

  • en utilisant l’utilitaire echo et les caractères de redirection <> ou | 
  • en utilisant l’éditeur de texte vi (ou, éventuellement, nano)

Ensuite, sur un des fichiers, effectuez les opérations suivantes (n’hésitez pas à consulter les manpages de tail et grep) :

  • Afficher les deux dernières lignes du fichier,
  • Afficher les lignes du fichier qui contiennent dolor ,
  • Afficher, parmi les deux dernières lignes du fichiers, celles qui contiennent labor.

1.2.2. Propriétaires, groupes et droits d’éditions

Vous allez à présent jouer avec les paramètres des fichiers et avec les propriétaires. Vous utiliserez les commandes adduserchownchgrpgroupadd.  

  • Créez un nouvel utilisateur, toto.
  • Créez un nouveau groupe, newbies.
  • Attribuez toto au groupe newbies.
  • Changez les paramètres d’un de vos fichiers « lorem ipsum » pour que toto en soit propriétaire.
  • Changez les paramètres de l’autre fichier pour qu’il appartienne au groupe newbies.
  • Changez les permissions de vos fichiers pour que seul l’accès en lecture soit possible par le propriétaire, et en écriture par le groupe.
  • Que fait la commande umask ?

2. Les processus

Les services réseaux sont bien sûr des programmes comme les autres, et tournent dès lors à l’intérieur de processus. Il est donc indispensable de pouvoir identifier les processus qui tournent sur un système et examiner leurs propriétés. 

  • ps est une commande permettant d’afficher les processus qui tournent sur le système. Quelles sont les processus affichés lorsqu’aucun paramètre n’est spécifié ? Quelles sont les options de cet utilitaire qui vous paraissent intéressantes ?
  • kill permet de forcer un processus à quitter. Comment fonctionne- t-il ? Quels sont les paramètres qu’il accepte ?

3. Installation de programmes

Sous Linux, les programmes s’installent, pour la plupart, à l’aide des gestionnaires de paquets. Ceux-ci sont spécifiques à chaque distribution. Dans les distributions CentOS/Red Hat, c’est yum qui est utilisé. Par contre, dans Ubuntu/Debian, on utilisera plutôt apt

  • Quelle commande vous permettra d’installer l’éditeur de texte emacs?
  • A quoi sert la commande yum/apt update ?
  • Comment lister les programmes installés sur la machine ?
  • Pourquoi parle-t’on de repository dans le cadre des gestionnaires de paquets ?

4. Utilitaires réseaux

Les services réseaux utilisant évidemment les interfaces réseaux et les connectivités disponibles, vous serez fréquemment amenés à examiner la configuration IP d’une machine et à analyser son fonctionnement.  

Prenez dès à présent l’habitude de représenter la situation courante sous forme d’un schéma réseau en préalable à toute opération de configuration ou de debugging.

  • Utilisez la commande ip addr pour afficher les informations de configuration des interfaces de la machine. Expliquez chaque élément de la réponse.
  • Faites un schéma représentant votre machine virtuelle, votre machine hôte et leurs interfaces respectives. Indiquez les subnets IP correspondant à chaque interface.
  • A quoi sert l’utilitaire ping ? Expliquez en quelques mots, et utilisez-le avec la machine de votre voisin comme cible. Quelles sont les options de ping? Si vous connaissez déjà Wireshark, utilisez-le pour observer le trafic généré par cet outil. De quel protocole s’agit-il ? Quelles sont les couches/protocoles sur lesquelles il repose ?
  • La commande arp vous permet de consulter la table ARP de la machine. Qu’est ce que le protocole ARP ? A quoi sert-il ? En quoi consulter cette table peut vous être utile pour le troubleshooting réseau ?
  • Même question avec la commande route.
  • A quoi sert l’utilitaire traceroute? Utilisez-le pour découvrir un maximum d’information sur le réseau dans lequel vous vous trouvez. Si vous savez le faire, observez le trafic généré avec Wireshark. De quels protocoles s’agit- il? traceroute tourne-t’il au dessus de TCP ou d’UDP? Comparez sous Linux et sous Windows (outil tracert).
  • ⚠️ [IMPORTANT] A quoi sert l’utilitaire netstat ? Quels sont les effets de la commande netstat -lnptu? Utilisez la manpage pour déterminer le rôle de chaque option.

5. Connexion à distance et transfert de fichiers

Vous serez régulièrement amenés, lors de votre cursus ou dans votre vie professionnelle, à contrôler des machines à distance. Le protocole SSH est souvent utilisé pour cela, surtout dans le monde Unix.  

  • Que fait la commande ssh? Comment l’utilise-t’on? Qu’apporte-t- elle de plus que telnet ?
  • Connectez-vous en ssh sur la machine de votre voisin. Vous aurez pour cela besoin de son adresse IP.
  • Utilisez scp ou sftp pour transférer un de vos fichiers « lorem ipsum » sur la machine de votre voisin.

6. Fichiers de configuration Linux

Les machines Linux possèdent un système de fichiers organisé sous forme d’un arbre contenant, à la racine, un ensemble de répertoires “standards” : /home, /dev, /mnt, … Nous allons ici nous intéresser au répertoire /etc. L’acronyme ETC signifie “Editable Text Configuration”. Ce répertoire va donc contenir des fichiers de configuration au format texte, qu’il est possible d’éditer pour adapter la machine à ses besoins.

Nous allons donc nous intéresser aux fichiers contenus dans ce répertoire. Pour chaque fichier indiqué ci-dessous, consultez-le au moyen des commandes cat, grep ou less.

Expliquez à quoi chacun d’eux sert. Dans le cas d’un dossier, décrivez brièvement les fichiers qu’il contient. Les items marqués d’un ⚠️ sont particulièrement importants pour le cours, les autres restent intéressants pour votre culture générale.

  • ⚠️/etc/hosts
  • ⚠️/etc/resolv.conf
  • ⚠️/etc/passwd                   
  • ⚠️/etc/shadow
  • ⚠️/etc/group
  • ⚠️/etc/sudoers
  • /etc/networks
  • /etc/host.conf
  • /etc/services
  • /etc/sysconfig
  • /etc/default/useradd
  • /etc/fstab
  • /etc/rsyslog.conf

7. Les logs

Les logs, ou journaux système, sont les fichiers qui listent tous les événements qui se produisent dans le système. 

Lorsqu’un service est bien configuré, toute action importante ou problème sera listée dans le fichier de log correspondant. Les logs sont un point d’entrée incontournable en cas de troubleshooting. Dans les systèmes Unix/Linux, ils sont généralement stockés dans le répertoire /var/log(⚠️).

  • Examinez les fichiers dans /var/log. Essayez d’expliquer quelles informations on trouve dans chacun d’eux. Lesquels sont génériques (i.e. journaux systèmes), et lesquels sont spécifiques à un programme ou un service particulier ?  
  • Le fichier de logs qui vous sera le plus utile est le fichier /var/log/messages.  Comment faire pour l’examiner en temps réel ? Pour n’afficher que les 10 dernières lignes ? Affichez toutes les lignes du fichier /var/log/messages concernant le processus dhclient.

8. Gestion des services (facultatif)

Un service est un programme qui tourne en arrière-plan, sous contrôle d’un gestionnaire appelé systemd dans certaines versions récentes de Linux. L’utilitaire systemctl permet de contrôler l’ensemble de ces services. 

  • Quelle commande permet de démarrer le service SSH ? 
  • Comment lister les services démarrés sur la machine ?
  • A quoi correspond la notion de target dans SystemD ?
  • Comment afficher les services démarrés dans le target graphical ?