Parties

  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 /bin
    8. librairies dynamiques
    9. librairies dynamiques : répertoire
    10. ldd gnome-terminal
    11. repertoire des librairies
    12. /usr/include
  3. Le service sshd
    1. verifier que ssh tourne
    2. arreter le serveur ssh
    3. serveur ssh: eteindre et allumer
    4. script init de sshd
    5. script init de sshd
    6. script init de sshd
    7. script init de sshd
    8. script init de ssh : conclusion
    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. premières pages
    6. fichiers de configuration
    7. modifier la configuration apache
    8. modifier la configuration apache
  5. Les fichiers logs
    1. apache acces log : introduction
    2. tail
    3. tail -n 5
    4. tail -f
    5. error_log
    6. messages
    7. manipulat+ion

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.


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

2.3 PATH

path



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


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

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é, il va être difficile de travailler.
Fermez cette fenêtre et ouvrez un nouveau shell.

(remarque: les variables d'environnement ne sont modifiées que pour le processus courant et les processus fils, donc la nouvelle fenêtre shell ne sera pas affectée par le changement... ouf!).

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

2.7 retrouver quelques commandes dans /bin

Commandes dans /bin

Allez dans le répertoire /bin et regardez les différents fichiers.
Vérifiez, à l'aide de la commande "ls -la" 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?

2.8 contenu du repertoire /bin

Contenu du répertoire /bin


Le répertoire /bin contient des commandes indispensables, qui doivent être accessibles, par exemple, en cas de problèmes graves avec les systèmes de fichiers (absence de /usr ).

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


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 requise par un programme on peut utiliser la commande "ldd".

De combien de librairies à besoin le programme "ls" ( /bin/ls ) ?


2.10 librairies dynamiques : répertoire

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

2.11 ldd gnome-terminal

Commande "gnome-terminal"

Lancez la commande "gnome-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 gnome-terminal"

A l'aide de "ldd" regardez la liste des librairies dynamiques requises par "gnome-terminal"

Combien est-qu'il y en a?
(on tiendra compte de toutes)
(astuce: utilisez la commande "wc" et un tube)

2.12 repertoire des librairies


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

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

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

3.2 verifier que ssh tourne

Vérifions que ssh tourne bien:

  1. Affichez tous les processus relatifs au serveur ssh ("sshd" = "demon ssh"), avec la commande
    ps -ef | grep sshd
  2. Vérifiez que votre voisin arrive à se connecter sur votre machine avec "ssh" et ensuite demandez-lui de se déconnecter
  3. Allez dans le répertoire "/etc/init.d" et vérifiez qu'il existe bien un fichier exécutable appelé "ssh"

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?

On vous demande d'utiliser un chemin absolu.

IMPORTANT: les services doivent toujours être arrêtes et démarrés en tant que root, vous devez donc utiliser sudo.

3.4 serveur ssh: eteindre et allumer


Votre service ssh devrait être arrêté.

  1. re-affichez les processus relatifs au serveur ssh, il 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?

3.5 script init de sshd

En utilisant vos connaissances sur la commande "dpkg" du TP précedent, quel est le nom du paquet qui a servi à installer le fichier "/etc/init.d/ssh"

3.6 script init de sshd

Utilisez la commande "dpkg" pour obtenir la liste de tous les fichiers associés au paquet.

On remarque qu'il y a 3 fichiers appelés "sshd", l'un se trouve dans /var/run, l'autre dans /etc/pam.d dans quel répertoire se trouve l'autre?

(n'hésitez pas à utiliser un tube et grep pour n'afficher que les fichiers contenant "sshd")

Donnes le chemin absolu du répertoire

3.7 script init de sshd

Les fichiers dans /etc/init.d


Regardez très rapidement le contenu du fichier /etc/init.d/ssh.

De quel type de fichier s'agit-il ?

3.8 script init de sshd

Différence entre /usr/sbin/sshd et /etc/init.d/ssh


Essayez de lire le contenu du fichier "/usr/sbin/sshd".

La commande "file" permet de savoir de quel type est un fichier (est-ce que c'est une image, un script shell, un exécutable, une librairie... etc.). C'est très pratique lorsqu'on tombe sur un fichier et qu'on ne sait pas à quoi il sert.

Regardez rapidement "man file"

Tapez la commande "file /usr/sbin/sshd" et comparez avec "file /etc/init.d/ssh"

Lorsque sshd tourne, regardez les processus avec "ps -ef | grep sshd".
Quel est le fichier binaire exécutable associé aux processus sshd?

(saisir le chemin complet)

3.9 script init de ssh : conclusion

En conclusion, /etc/init.d/ssh est un script shell qui sert juste à lancer et a tuer le processus associé au binaire exécutable /usr/sbin/sshd. C'est ce dernier qui tourne en tant que serveur ssh.

3.10 distinction client et serveur


A l'aide de la commande "which", déterminez dans quel répertoire se trouve la commande "ssh"
Ensuite, à l'aide de la commande "dpkg", déterminez dans quel paquet se trouve la commande "ssh"

Est-ce que "ssh" se trouve dans le même paquet que "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 nom (avec le chemin) 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)

3.12 fichier de configuration: contenu

Contenu du fichier de configuration

Lisez le fichier de configuration.
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" ?

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

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 y être habitués.

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é. 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.

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.

(S'il n'y a aucun fichier "apache2" dans le répertoire /etc/init.d, c'est que apache2 n'est pas installé sur votre machine. Dans ce cas vous devez installer apache2 avec apt-get...)

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?
(on suppose qu'on se trouve dans un répertoire quelconque, donc on utilisera un chemin absolu.)

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.


4.4 utilisateur apache

Trouvez les processus correspondant au serveur web.

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

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

4.6 premières pages

Comme on l'a vu dans dans ce TP, les sites web sont stockés dans /var/www

Créez un fichier appelé index.html dans "/var/www" et écrivez-y un peu de texte.

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.

Attention! Vous ne devez PAS créer vos fichiers dans /var/www/apache2-default/ !

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" 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" et ajoutez y un fichier html.
Vérifiez que vous pouvez y accéder par: "http://localhost/votre_repertoire/votre_fichier.html"

4.7 fichiers de configuration


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

Dans quel répertoire se trouve le fichier de configuration apache "apache2.conf" ?

4.8 modifier la configuration apache

Modifier la configuration d'apache

On ne souhaite plus que les fichiers html soient dans /var/www 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/default 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>
 NomOption1 Valeur1
 NomOption2 Valeur2
 <sousrubrique>
 NomOption3 Valeur3
 NomOption4 Valeur4
 </sousrubrique>
 NomOption5 Valeur5
</rubrique>

Quel est le nom de l'option faisant référence au répertoire /var/www ?
fichier de config: /etc/apache2/sites-available/default

4.9 modifier la configuration apache


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

Attention il y a deux références à /var/www à modifier dans sites-available/default

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



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

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?

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 "sudo 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)

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)

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.




5.6 error_log

Au 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, 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" ...


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.

5.8 manipulat+ion

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)