Exercices TP-2

  1. Table des matières
  2. Arborescence UNIX
    1. Revision des répertoires
    2. PATH
    3. ls et PATH
    4. PATH vide
    5. modifier le PATH
    6. retrouver quelques commandes dans /bin
    7. contenu du repertoire /usr/bin
    8. librairies dynamiques
    9. librairies dynamiques : répertoire
    10. ldd xfce4-terminal
    11. Répertoire des librairies
    12. /usr/include
    13. /usr/include/stdio.h
  3. Le service sshd
    1. verifier que ssh tourne
    2. arreter le serveur ssh
    3. serveur ssh: eteindre et allumer
    4. sshd: processus
    5. sshd: processus
    6. sshd : tuer le processus
    7. Paquet de ssh
    8. Paquet sshd
    9. distinction client et serveur
    10. fichier de configuration
    11. fichier de configuration: contenu
    12. fichier de configuration: changer le port
    13. conclusion config
  4. Le serveur web Apache
    1. nmap puis demarrage d'apache
    2. vérification apache
    3. utilisateur apache
    4. utilisateur apache: conclusion
    5. Page par défaut.
    6. premières pages
    7. fichiers de configuration
    8. modifier la configuration apache
    9. Modifier la configuration d'Apache
    10. Nettoyage
  5. Les fichiers logs
    1. apache acces log : introduction
    2. tail
    3. tail -n 5
    4. tail -f
    5. error_log
    6. messages
    7. manipulation

1. Table des matières

1.1 Table des matières



Bienvenue au TP 2.

Avez vous bien fait et fini le TP précèdent?

C'est important d'avoir bien compris les notions du TP précèdent avant de faire ce TP.
Si ce n'est pas fait, finissez d'abord le TP précèdent.

Cliquez sur "début du TP" pour commencer.


2. Arborescence UNIX

2.1 Arborescence UNIX


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.


Arborescence UNIX

2.2 Revision des répertoires

Commençons par une petite révision des différents répertoires.
(essayez de répondre d'abord sans regarder votre cours...)

Arborescence UNIX

2.3 PATH

path



Tapez la commande "echo $PATH"
Parmi les répertoires suivants, lesquels se trouvent dans votre PATH?


Arborescence UNIX

2.4 ls et PATH

La plupart des commandes que vous tapez sont des fichiers exécutables se trouvant dans les répertoires indiqués par la variable PATH

Pour savoir où se trouve une commande on peut utiliser la commande "which"
par exemple, essayez:
which gedit


--


Quel est le chemin complet de la commande "ls" ?

(on demande à la fois le répertoire et le nom de fichier)

Arborescence UNIX

2.5 PATH vide

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 ?

Arborescence UNIX

2.6 modifier le PATH

Ajouter un élément dans son PATH


On souhaite souvent ajouter des répertoires supplémentaires dans la liste des répertoires de la variable PATH.

Dans votre répertoire personnel créez un répertoire appelé "mes-programmes".

Écrivez le script shell suivant dans un fichier appelé "bonjour" qui se situera dans le répertoire "mes-programmes".

#!/bin/bash
echo "bonjour, je suis un script shell"

vérifiez que vous arrivez à exécuter ce programme avec "./bonjour"
N'oubliez pas que vous devez vous donner les droits d'exécution sur ce fichier, pour pouvoir l'exécuter ("chmod"...).

Ensuite, ajoutez le répertoire "mes-programmes" (en fait, son chemin complet: /home/.../mes-programmes) à la liste de répertoires contenus dans la variable d'environnement PATH. Si vous ne savez pas comment faire, prenez le temps de chercher sur internet. (indice: "export PATH= .... ")

Vérifiez que votre variable PATH est correcte en tapant "echo $PATH". Changez de répertoire et tapez "bonjour". Votre programme doit s'exécuter. Tapez "ls" pour vérifier que "/bin" est toujours bien dans PATH.

Arborescence UNIX

2.7 retrouver quelques commandes dans /bin

Commandes dans /bin

Allez dans le répertoire /usr/bin et regardez les différents fichiers.
Vérifiez, à l'aide de la commande "ls -l" que la plupart des fichier son bien exécutables.
Dans cet affichage, quelle est la lettre du champ des droits d'accès qui dit qu'un fichier est exécutable?

Arborescence UNIX

2.8 contenu du repertoire /usr/bin

Contenu du répertoire /usr/bin


Le répertoire /usr/bin contient des commandes. Ce sont des fichiers exécutables.

Parmi les suivantes, lesquelles sont présentes dans /usr/bin?


Arborescence UNIX

2.9 librairies dynamiques

Librairies dynamiques : la commande ldd


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


Arborescence UNIX

2.10 librairies dynamiques : répertoire

Dans quel sous-répertoire de la racine se trouvent les librairies dynamiques requises par la commande "ls" ?

Arborescence UNIX

2.11 ldd xfce4-terminal

Commande "xfce4-terminal"

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)

Arborescence UNIX

2.12 Répertoire des librairies


Dans quel répertoire se trouvent la majorité de ces librairies ?

Arborescence UNIX

2.13 /usr/include

Allez dans dans le répertoire "/usr/include" et regardez les noms des fichiers.

Quelle est l'extension des noms de la plupart des fichiers de ce répertoire.
(exemple: l'extension du nom de fichier "toto.abc" est "abc" )

Arborescence UNIX

2.14 /usr/include/stdio.h

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.

3. Le service sshd

3.1 Le service sshd

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:

http://moodle.iutv.univ-paris13.fr/img/sa/sysadmin-cm-1-39.pnghttp://moodle.iutv.univ-paris13.fr/img/sa/sysadmin-cm-1-41.png

Le service sshd

3.2 verifier que ssh tourne

Vérifions que ssh tourne bien:

  1. Tapez la commande : sudo systemctl status ssh.service
  2. Affichez tous les processus relatifs au serveur ssh ("sshd" = "demon ssh"), avec la commande
    ps -ef | grep sshd
  3. Vérifiez que votre voisin arrive à se connecter sur votre machine avec "ssh" et ensuite demandez-lui de se déconnecter

Est-ce que votre serveur ssh fonctionne correctement ?

Le service sshd

3.3 arreter le serveur ssh

Arrêt du serveur ssh

En vous inspirant de votre cours quelle commande faut-il taper pour arrêter le serveur ssh?

Le service sshd

3.4 serveur ssh: eteindre et allumer


Votre service ssh devrait être arrêté.

  1. re-affichez les processus relatifs au serveur ssh, il ne devrait plus y en avoir (à moins que quelqu'un soit encore connecté sur votre machine)
  2. Re-demandez à votre voisin de se connecter sur votre machine par ssh. Est-ce que ça marche?
  3. En vous inspirant de votre cours démarrez (start) le serveur ssh.
  4. Re-demandez à votre voisin de se connecter sur votre machine par ssh. Est-ce que ça marche?

Le service sshd

3.5 sshd: processus

En regardant la liste des processus, quel est le chemin complet du fichier executable qui fait fonctionner le serveur ssh ?

Le service sshd

3.6 sshd: processus

Le demon ssh est un processus appartenant à quel utilisateur?

Le service sshd

3.7 sshd : tuer le processus

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.

Le service sshd

3.8 Paquet de ssh

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" ?

Le service sshd

3.9 Paquet sshd

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" ?

Le service sshd

3.10 distinction client et serveur


Est-ce que "ssh" se trouve dans le même paquet que "sshd" ? Pourquoi ?


Le service sshd

3.11 fichier de configuration

Fichier de configuration

En utilisant votre cours (répertoires UNIX importants) et en cherchant un peu, quel est le chemin complet (chemin+fichier) du fichier de configuration du serveur ssh?

Attention ne confondez pas avec le fichier de configuration du client ssh!

(si vous hésitez entre plusieurs fichier, lisez-en le contenu)

Le service sshd

3.12 fichier de configuration: contenu

Contenu du fichier de configuration

Lisez le fichier de configuration /etc/ssh/sshd_config
Les lignes commençant par un # sont des commentaires.
La syntaxe des lignes est:
NomOption ValeurOption

La plupart des options sont commentés (il s'agit des valeurs par défaut).

Quel est la valeur de l'option "Port" ?

Le service sshd

3.13 fichier de configuration: changer le port

Changer le port sur lequel écoute ssh

A la question précédente, nous avons vu la ligne qui permettait de spécifier sur quel port écoutait le serveur ssh.

Par convention, un serveur ssh écoute normalement sur le port 22.
Nous allons essayer un autre port:

A la place de 22 essayez un autre port (par exemple 3000).
N'oubliez pas de dé-commenter la ligne.

N'oubliez pas qu'il faut faire quelque chose pour que les changements soient pris en compte (voir cours).

Demandez à votre voisin de se connecter sur votre machine avec ssh.
Attention, si on ne lui dit rien, le client ssh va essayer de se connecter sur le port 22, il faut donc utiliser l'option -p de la commande ssh (le client) qui permet de spécifier un port diffèrent de 22.
(en cas de doute: "man ssh" )



une fois que ca marche, revenez à la configuration précédente (port 22) et vérifiez que ça marche à nouveau.

Le service sshd

3.14 conclusion config

Conclusion


La procédure suivie précédemment:
  1. modification d'un fichier de configuration dans /etc (avec des lignes du type: NomOption ValeurOption)
  2. redémarrage du service
est extrêmement fréquente. On la retrouve pour un grand nombre de services. Vous devez vous habituer.

4. Le serveur web Apache

4.1 Le serveur web Apache


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.

Le serveur web Apache

4.2 nmap puis demarrage d'apache

Vérification d'apache

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?

Le serveur web Apache

4.3 vérification apache

Vérification du serveur web

Ouvrez un navigateur web, et connectez vous à l'adresse: "http://localhost"

Vous devriez voir une page d'accueil apache, intitulée "It works!". Cette page est affichée lorsqu'apache vient d'être installé et qu'il ne trouve rien d'autre à afficher.

Si cette page ne s'affiche pas, essayez de redemarrer apache, si ça ne marche toujours pas, demandez de l'aide à votre enseignant.


Le serveur web Apache

4.4 utilisateur apache

Trouvez les processus correspondant au serveur web.

Sous quel nom d'utilisateur tourne la plupart des processus du serveur web?

Le serveur web Apache

4.5 utilisateur apache: conclusion

Si un pirate réussi a prendre contrôle des processus associés au serveur web, est-ce qu'il pourra réussir à modifier des fichiers du système (par exemple, ceux dans /usr/bin) ?

Le serveur web Apache

4.6 Page par défaut.

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 / ).

Le serveur web Apache

4.7 premières pages



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 ?

Le serveur web Apache

4.8 fichiers de configuration


Avec la commande dpkg affichez une liste de tous les fichiers appartenant au paquet "apache2"

Dans quel répertoire se trouve le fichier de configuration apache "apache2.conf" ?
(chemin depuis la racine)

Le serveur web Apache

4.9 modifier la configuration apache

Modifier la configuration d'apache

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 ?

Le serveur web Apache

4.10 Modifier la configuration d'Apache


Changez la configuration du serveur apache pour que l'adresse
http://localhost/essai2.html
accède au fichier /home/apache/essai2.html

Ajoutez aussi les lignes suivantes dans la configuration apache (etc/apache2/sites-available/000-default.conf):

<Directory /home/apache>
Require all granted
</Directory>

Pensez à créer les répertoires et les fichiers nécessaires.
Pensez à donner les droits d'accès nécessaires aux répertoires et aux fichiers.
N'oubliez pas qu'il il y a des choses à faire pour qu'une modification d'un fichier de configuration soit prise en compte...




Le serveur web Apache

4.11 Nettoyage


Remettez DocumentRoot à /var/www/html

(n'oubliez pas de redémarrer apache)



5. Les fichiers logs

5.1 Les fichiers logs

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:

xxx

Les fichiers logs

5.2 apache acces log : introduction

Apache access log


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)

Les fichiers logs

5.3 tail


A chaque accès une nouvel ligne est ajouté au fichier access_log: les derniers accès se retrouvent donc à la fin du fichier.
C'est pour ça qu'on utilise souvent la commande "tail" pour lire les fichiers logs.

tapez "tail access.log"

combien de lignes sont affichées?

(Attention, petit problème dans le TP: pour obtenir la bonne réponse il faut avoir rechargé pas mal de fois dans votre navigateur la page http://localhost)

Les fichiers logs

5.4 tail -n 5

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)

Les fichiers logs

5.5 tail -f

L'option "--follow" ( raccourci: "-f" ) de tail permet de suivre l'évolution du fichier.

Chaque fois qu'une nouvelle ligne est écrite dans le log, elle est affichée.


tapez "sudo tail -f access.log" puis, sans l'arrêter connectez vous avec le navigateur à l'adresse "http://localhost"
Essayez d'avoir les deux fenêtres (navigateur et terminal) visibles en même temps.

Dans le navigateur essayez d'autres pages "http://localhost/essai.html" ... et regardez ce qui change.
Demandez à votre voisin de se connecter à votre serveur : "http://votre_adresse_ip" ... et comparez les lignes qui apparaissent dans le fichier log.




Les fichiers logs

5.6 error_log

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?

Les fichiers logs

5.7 messages

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

5.8 manipulation

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)