Dans cette partie du TP on va découvrir les principaux répertoires d'un système UNIX.
Chaque système d'exploitation (differents Linux, autres UNIX) définit ses propres répertoires. Cependant, depuis quelques années, il y a une volonté d'harmonisation qui se traduit dans le Filesystem Hierarchy Standard.
Commençons par une petite révision des différents répertoires.
(essayez de répondre d'abord sans regarder votre cours...)
--
Quel est le chemin complet de la commande "ls" ?
(on demande à la fois le répertoire et le nom de fichier)Maintenant, essayons de tout enlever de PATH. A votre avis qu'est-ce qu'il va se passer?
Essayez:
export PATH=
(remarquez, il n'y a rien après le = )
Ensuite tapez la commande ls
Qu'est-ce qu'il se passe? Pourquoi?
Essayez la commande "gedit"
Essayez la commande "cp"
Votre PATH étant effacé... ça va être difficile de travailler.
Fermez cette fenêtre et ouvrez un nouveau shell.
Est-ce que vous arrivez à taper à nouveau les commandes ?
#!/bin/bash
echo "bonjour, je suis un script shell"
Le répertoire /usr/bin contient des commandes. Ce sont des fichiers exécutables.
Parmi les suivantes, lesquelles sont présentes dans /usr/bin?
Les binaires exécutables font appel à des fonctions qui sont regroupées dans des librairies de fonctions.
Dans le cas des librairies dynamiques il s'agit de fichiers avec des noms du type "libtoto.so".
Pour savoir quelles librairies sont requises par un programme on peut utiliser la commande "ldd".
De combien de librairies à besoin le programme "ls" ( /usr/bin/ls ) ?
Dans quel sous-répertoire de la racine se trouvent les librairies dynamiques requises par la commande "ls" ?
Lancez la commande "xfce4-terminal". Il s'agit de la commande vous fournissant le terminal graphique qui vous permet de taper des commandes.
La commande "which" permet de savoir ou se trouve une commande: tapez "which xfce4-terminal"
A l'aide de "ldd" regardez la liste des librairies dynamiques requises par "xfce4-terminal"
Combien est-qu'il y en a?
(on tiendra compte de toutes)
(astuce: utilisez la commande "wc" et un tube)
Dans quel répertoire se trouvent la majorité de ces librairies ?
Dans le répertoire se trouvent de nombreux fichier .h d'entêtes utilisés lorsqu'on programme en C.
Donnez un nom de fichier, commençant par un "s", que vous avez rencontré fréquemment lorsque vous avez programmé en C.
Avant d'aborder le serveur web apache, nous allons commencer par regarder un serveur plus simple : le serveur ssh.
voici quelques transparents du cours qui pourraient vous aider:
Vérifions que ssh tourne bien:
Est-ce que votre serveur ssh fonctionne correctement ?
En vous inspirant de votre cours quelle commande faut-il taper pour arrêter le serveur ssh?
En regardant la liste des processus, quel est le chemin complet du fichier executable qui fait fonctionner le serveur ssh ?
1. Vérifiez que votre demon ssh tourne correctement.
2. Tuez le processus avec la commande "kill"
3. Vérifiez que votre demon ssh ne tourne plus correctement.
ATTENTION: il peut arriver que la commande suivante change de terminal. Utilisez CTRL+Alt+F7 pour revenir !!!
4. Utilisez la commande "systemctl" pour démarrer à nouveau le serveur ssh.
5. Vérifiez que votre demon ssh tourne correctement.
Il vaut mieux éviter d'arreter les services en tuant directement les processus à la main (sans utiliser la commande "service"). Mais parfois ça peut dépanner.
Nous allons voir la différence entre ssh et sshd.
A l'aide de la commande "which" et la commande 'dpkg -S ...' , quel est le nom du paquet qui a servi à installer la commande "ssh" ?
A l'aide de la commande "sudo which ..." et la commande 'dpkg -S ...' , quel est le nom du paquet qui a servi à installer la commande "sshd" ?
Est-ce que "ssh" se trouve dans le même paquet que "sshd" ? Pourquoi ?
Les deux rôles sont completement differents. On peut vouloir installer un paquet sans vouloir installer l'autre.
Maintenant que nous avons vu un premier service "sshd", plutôt simple, nous allons explorer le serveur web Apache.
Apache est le serveur web le plus utilisé, il a beaucoup de fonctionnalités et sa configuration peut être très compliquée. Nous n'en verrons ici que quelques aspects très simples. Nous reviendrons sur la configuration du serveur Apache dans quelques semaines, de manière plus approfondie.
La commande "nmap" permet de parcourir tous les ports d'une machine pour déterminer ceux qui sont ouverts. Elle est utilisée par les pirates, pour savoir où attaquer, mais aussi par les administrateurs système, pour déterminer quels services tournent ou pour tester un firewall.
Tapez "nmap localhost" (localhost désigne votre propre machine avec l'adresse 127.0.0.1)
Vérifiez si le service http écoute sur le port 80.
Si ce n'est pas le cas, démarrez le serveur apache.
Refaites un nmap pour voir s'il tourne, puis arrêtez le service.
Vérifiez à nouveau avec nmap, puis démarrez-le
Quelle commande faut-il taper pour le démarrer?
Comme on l'a vu dans dans ce TP, les sites web sont stockés dans /var/www
Allez dans ce répertoire et explorez son contenu actuel.
Un fichier existe déjà, donnez son chemin complet (depuis / ).
Modifiez le fichier index.html
Rechargez l'adresse "http://localhost" dans votre navigateur.
Demandez à votre voisin de charger l'adresse "http://votre_adress_ip" dans son navigateur.
Vérifiez qu'à chaque fois vous retrouvez bien votre texte.
Arrêtez le serveur web et re-essayez de lire la page.
Redémarrez le serveur et re-essayez de lire la page à nouveau.
Créez dans "/var/www/html/" un fichier "essai.html" et vérifiez que vous arrivez à lire la page
http://localhost/essai.html
Ensuite créez un sous-répertoire de "/var/www/html/" et ajoutez y un fichier html.
Vérifiez que vous pouvez y accéder par: "http://localhost/votre_repertoire/votre_fichier.html"
Est-ce que vous obtenez le même résultat avec http://localhost et http://votre-adresse-ip ?
Dans quel répertoire se trouve le fichier de configuration apache "apache2.conf" ?
(chemin depuis la racine)
On ne souhaite plus que les fichiers html soient dans /var/www/html mais plutôt dans un répertoire /home/apache qu'on va créer.
Il faut donc modifier la configuration d'apache.
Ouvrez le fichier /etc/apache2/sites-available/000-default.conf dans un éditeur et parcourez le. Prenez le temps de lire quelques éléments et de parcourir aussi /etc/apache2/apache2.conf
Vous y trouverez beaucoup de commentaires et d'explications.
La syntaxe des fichiers de config apache est du type:
NomOption ValeurOption
avec, en plus, des rubrique et sous rubriques utilisant une syntaxe vaguement similaire au xhtml (xml):
<rubrique>
# Commentaire
NomOption1 Valeur1
NomOption2 Valeur2
<sousrubrique>
NomOption3 Valeur3
NomOption4 Valeur4
</sousrubrique>
NomOption5 Valeur5
</rubrique>
En regardant /etc/apache2/sites-available/000-default.conf
quel est le nom de l'option faisant référence au répertoire /var/www/html ?
<Directory /home/apache>
Require all granted
</Directory>
Remettez DocumentRoot à /var/www/html
(n'oubliez pas de redémarrer apache)
Dans cette partie du TP nous allons prendre connaissance des fichiers logs.
Il est très important de penser à lire les fichiers logs régulièrement.
En particulier, lorsqu'on a un problème avec un service, votre premier reflexe devrait être de regarder les fichiers logs.
Voici les transparents du cours correspondant:
Chaque fois que quelqu'un essaie de se connecter sur le serveur web, celui-ci ajoute une ligne à la fin du fichier "/var/log/apache2/access.log"
Parcourez ce fichier à l'aide de la commande "less"
Les lignes des fichier logs sont souvent trop longues et s'affichent alors sur plusieurs ligne. Pour eviter ca, on peut utiliser l'option "-S" : "less -S"
Prenez le temps de vous habituer à utiliser "less". Experimentez avec les diferentes touches. Essayez "h" pour obtenir de l'aide.
Dans access.log, quels sont les différents champs composant chaque ligne?
(Attention "::1" correspond à l'adresse IP de votre machine en IPV6)
En regardant la page man de "tail", quelle commande faut-il taper pour afficher les 5 dernières lignes du fichier access.log?
(on utilisera l'option courte à une seule lettre)
Dans les dernières questions on a vu le fichier "access.log" qui enregistre les connections.
Il y existe aussi un fichier "error.log" qui répertorie toutes les erreurs rencontrées.
Par exemple, lorsqu'on essaye d'accéder à une page qui n'existe pas.
Tapez "tail -f error.log" et dans votre navigateur rentrez l'adresse http://localhost
(normalement, il n'y a pas d'erreur, rien ne devrait s'afficher)
Ensuite essayez l'adresse http://localhost/abcdef
Dans /var/www/html créez un fichier "prob.html" et retirez les droits de lecture aux "autres" (chmod o-r prob.html)
Ensuite essayez l'adresse http://localhost/prob.html et regardez ce que donne error.log ...
Quel est le message d'erreur affiché lors de cette requête?
Pour l'instant, nous n'avons vu que des logs liés au serveur web.
Allez dans "/var/log"
En utilisant votre cours, quel est le nom du fichier log généraliste contenant des enregistrements de différents services.
Les fichiers logs contiennent souvent beaucoup d'informations. Il n'est pas aisé de trouver ce que l'on cherche.
La commande grep, permet de rechercher des lignes dans un fichier.
Par exemple "grep toto texte.txt" affiche toutes les lignes du fichier "texte.txt" contenant le mot "toto".
La commande "cut" permet de sélectionner des champs dans des lignes.
Par exemple "cut -d ' ' -f 3,6 texte.txt" affiche les 3ème et sixièmes mots de chaque ligne du fichier "texte.txt". L'option "-d" permet de spécifier le délimiteur entre les mots (ici un espace).
Expérimentez ces deux commandes sur les fichiers logs, puis réalisez les opérations suivantes:
Quelle commande taper pour , afficher uniquement les adresses IP et le noms de page (ou répertoires) web demandés correspondantes à partir d'access.log (apache2)?
(n'oubliez pas que l'utilisateur "etudiant" n'a pas le droit de lire certains fichiers logs)