Vous êtes sur la page 1sur 44

MODULE : ADMINISTRATION SYSTEME SOUS LINUX

CHAPITRE I : INSTALLATION D’UN SERVEUR LINUX

I. INSTALLATION DE RED HAT ENTERPRISE 4


II. RAPPELS DE COMMANDES DE BASES LINUX
III. GESTION DES DROITS ET DES UTILISATEURS

CHAPITRE II : PROGRAMMATION SHELL

I. INTRODUCTION AUX SHELLS


II. SUBSTITUTION DE PARAMETRES
III. STRUCTURES CONDITIONNELLES

CHAPITRE III : INSTALLATION DES SERVICES RESEAUX

I. CONFIGURATION D’UN SERVEUR DNS


II. CONFIGURATION D’UN SERVEUR DHCP
III. CONFIGURATION D’UN SERVEUR SAMBA
IV. CONFIGURATION D’UN SERVEUR PROXY AVEC SQUID
V. TRAVAUX PRATIQUES : INSTALLATION D’UN SERVEUR GNU/LINUX POUR
SALLE DE COURS
CHAPITRE I : INSTALLATION D’UNE DISTRIBUTION SERVEUR SOUS LINUX

I. INSTALLATION DE RED HAT ENTERPRISE 4

Nous allons dans un premier temps nous intéresser à l’installation de Red Hat Enterprise 4.

Démarrez l’ordinateur mettez le CDROM ou le DVD de Red hat dans votre lecteur. Vérifiez dans votre
bios l’ordre de démarrage et bootez en premier sur le lecteur CDROM dans lequel vous avez mis le
CDROM. Cette vérification faite, validez les ^paramètres et quittez le Bios. Votre ordinateur va
redémarrer, le CDROM va alors charger la procédure d’installation de Red Hat.

Vous allez arriver à l’écran ci-dessous.

 Validez par « Entrée »


 A l’écran suivant, vous aurez la possibilité de tester votre CDROM. Si vous avez déjà testé votre
CRDOM, vous pouvez passer à l’étape suivante, dans le cas contraire, il est préférable d’effecteur
ce test.
 A l’écran de bienvenue, cliquez sur « Next ». vous pouvez aussi lire la partie gauche, elle vous
explique comment naviguer dans les écrans de l’installation de Red Hat.
 Choisissez maintenant la langue que vous désirez pour la procédure d’installation. Si vous êtes
francophone, sélectionnez « French », cliquez sur « Suivant ».

 Choisissez la langue de configuration de votre clavier. Si vous avez un clavier français, choisissez
« French (latin9) », puis faites « Suivant ».
 Vous arrivez à l’écran de partitionnement.
 Deux options vous sont proposées :
 Partitionnement automatique : cette option va partitionner tout l’espace libre qui est
disponible sur votre disque dur. Si vous avez un disque dur de 80 Go, cela veut dire que
l’installation représentera tout cet espace. Si vous avez déjà un système d’exploitation sur votre
disque dur, l’espace libre disponible sera utilisé entièrement.
 Partitionnement avec Disk Druid : nous conseillons cette option. Elle permet, en plus de
vérifier le bon déroulement de cette étape, de comprendre les bases du partitionnement sous
Linux. De plus Disk Druid permet un partitionnement facile.

Choisissez donc « Partitionnement avec Disk Druid », puis cliquez sur « Suivant ».

 Voici l’écran que vous allez voir si votre disque dur est vide. Si vous avez un système
d’exploitation déjà installé, vous devriez voir le (ou les)partitions qui lui sont destinées.
Nous allons créer trois partitions pour l’installation de Red Hat :
 Une partition racine (également nommée « / ») : Sur cette partition, tous les programmes ainsi
que les fichiers nécessaires au bon fonctionnement de Red Hat seront installés. Cette partition
doit être assez grande. Elle nous permet d’installer les logiciels que nous voulons. Il faut aussi
faire attention de ne pas être limité par la taille de cette partition.
Dans les procédures d’installation qui vont suivre, il va vous être demandé de choisir les
paquetages (logiciels et outils de bases) que nous voulons installer. Sachez que pour une
installation par défaut de Red Hat, il faudra au moins 3 Go. Pour tout installer, 6.8Go seront
nécessaire. Prévoyons donc en fonction de ce renseignement.
 Une partition d’échange (nommée « SWAP ») : Cette partition correspond à la mémoire
virtuelle sous Windows. Elle sera utile si nous n’avons pas beaucoup de RAM. La taille de
cette partition doit être égale à la mémoire vive que nous avons (la RAM). Si nous avons 1Go
de RAM ou plus, il n’est pas nécessaire de créer cette partition (dans ce cas il nous sera
demandé une confirmation pour partitionner e disque dur sans partition SWAP).
 Une partition pour nos données personnelles (nommée « /home ») : nous pouvons allouer
autant de place que nous le souhaitons pour cette partition (dans la limite de notre espace
disponible bien sûr). Si nous ne souhaitons que sauvegarder nos documents de travail, une taille
de seulement quelques Go suffira, si nous prévoyons d’y stocker des vidéos par exemple, une
taille plus importante sera nécessaire.

Suivant la configuration de notre disque, voici ce que nous devrions avoir après
partitionnement :

Si cela correspond à votre attente, cliquez sur "Suivant".

 Nous arrivons à l’écran de configuration de Grub. Grub est le gestionnaire de démarrage. Si nous
avons déjà un système d’exploitation sur notre disque dur, nous devrions voir différentes
« Etiquettes » avec le nom de ces derniers. Cliquons sur "Suivant".
 Nous allons devoir paramétrer la configuration réseau. Deux options s’offrent à nous :
"Automatiquement avec DHCP".
Si nous avons un ordinateur qui fait office de serveur DHCP sur notre réseau nous devons choisir
cette option.
 "Manuellement"

S’il n’y a pas de serveur DHCP sur notre réseau, nous choisissons cette option et nous entrons les
différents paramètres.

Cliquons sur "Suivant".

 Il nous est proposé d’installer un pare-feu et SE Linux. Nous pouvons ne pas les installer et nous
occuper de la sécurité de notre station plus tard. Cliquez sur "Suivant".
 Nous devons choisir les "options régionales" de notre système Linux, si nous somme ivoirien,
vérifions bien que la langue par défaut est le français, puis cliquer sur "Suivant".
 Sélectionnons notre fuseau horaire et cliquons sur "Suivant".
 Entrons notre mot de passe "Suivant". Ce compte sert à l’administration de notre poste de travail.
Certaines tâches que nous effectuerons sous Linux demanderont l’accès à ce compte. Retenons
donc bien le mot de passe !
Nous arrivons à la sélection des paquetages. Nous avons deux possibilités. Choisir "Installation
des paquetages par défaut" (2.5Go) ou "Personnalisation des paquetages des logiciels à
installer" (6.8Go).

Voici l’écran que nous aurons si nous choisissons la personnalisation des paquetages. Des
paquetages sont déjà sélectionnés. Il s’agit des paquetages de l’installation par défaut. Si nous
désirons ajouter d’autres paquetages, il faut simplement cocher ceux que nous voulons. Nous
avons aussi la possibilité de cliquer sur "Détails" pour connaître tous les composants d’un
paquetage ainsi que sa description.
 L’installation va maintenant être effectuée, cliquons sur "Suivant" puis laissons faire il nous sera
demandé les différents cd d’installation. A la fin de l’installation le système nous demandera de
redémarrer le système, pensons à retirer le CD-Rom d’installation puis cliquons sur "Redémarrer".

Un joli écran de démarrage montre l’avancement du chargement du système.

Ne nous attardons pas sur le contrat de licence, si nous sommes à ce point de l’installation, cliquons sur
accepter. A la suite nous pouvons configurer la date et l’heure.

La configuration de l’affichage n’est pas compliquée. Si le système ne reconnaît pas notre carte
graphique, utilisez le VESA. Si nous ne trouvons pas notre écran, nous pouvons choisir celui qui a les
performances génériques équivalentes.

 Entrons ensuite le nom et le mot de passe de l’utilisateur de Red Hat et cliquons sur "Suivant".
 Il nous est ensuite proposé de tester notre carte son. Si les paramètres sont bons, cliquons sur
"Suivant".
 Si nous avons des CD-Rom supplémentaires pour l’installation, mettons ces CD-Rom et cliquons
sur "Install". Sinon cliquons sur "Suivant".
 La configuration est terminée, cliquons sur "Suivant". Nous arrivons à un écran où il nous est
demandé notre identifiant et notre mot de passe (correspond à l’utilisateur de Red Hat que nous
avons enregistré aux étapes précédentes). Notre bureau de Red Hat se charge alors.

II. RAPPELS DE COMMANDES DE BASES LINUX

II.1 Commandes utiles


 cd : changer de répertoire
 vi : éditeur système
 df : afficher l’espace disponible
 more : afficher un fichier page par page ou ligne par ligne
 grep : filtrer la sortie
 cp : copier les fichiers
 ls : lister le contenu d’un répertoire
 ln : créer des liens « durs » ou « symboliques »
 find : rechercher des fichiers
 man : afficher l’aide d’une commande
 mkdir : créer un dossier
 mv : déplacer un fichier
 passwd : changer le mot de passe
 pwd : afficher le chemin du dossier en cours
 rm : détruire un fichier
 sort : trier les lignes d’un fichier

II.2 Editer un fichier

Ici, nous allons utiliser l’éditeur que nous trouvons sur la plupart des systèmes d’exploitation Linux à
savoir vi. Cet éditeur de texte n’utilise pas d’interface graphique. Il prend en charge les commandes et les
données en même temps. Une fois vi lancé, deux modes de fonctionnement se présentent : le mode
commandes et le mode d’édition :
 pour passer du mode d’édition au mode commandes, il suffit d’appuyer sur la touche ECHAP
 pour passer du mode commandes au mode d’édition, il faut taper une touche d’insertion

a. Touches d’insertion

 a : ajoute des caractères devant le curseur


 A : ajoute à la fin de la ligne sur laquelle se trouve le curseur
 i : insère des caractères derrière le curseur
 I : insère des caractères au début de la ligne sur laquelle se trouve le curseur
 o : ajoute une nouvelle ligne en dessous de la ligne active
 O : ajoute une ligne au-dessus de la ligne active

b. modes commandes

 / « mot » : recherche l’instance « mot » dans le fichier (n pour le mot suivant dans le fichier et N
pour le précédent)
  : « nombre » : va à la ligne numéro « nombre »
  :q ou :q! : quitte l’éditeur sans sauvegarder et affiche le prompte du Shell
  :w ou :w! : sauvegarde sans quitter l’éditeur
  :x ou :x! : sauvegarde, quitte l’éditeur puis affiche le prompte du Shell

III. GESTION DES DROITS ET DES UTILISATEURS


III.1 Rôle d’un administrateur système sous Linux

Linux étant un système d’exploitation multiutilisateur, la gestion du système et des utilisateurs est confiée
à un super-utilisateur nommé aussi « root ». Le rôle de l’administrateur ou root est de :

 Configurer le noyau du système


 Installer le système et de nouveaux logiciels.
 Gérer les utilisateurs.
 Configurer le processus de démarrage de Linux
 Configurer le réseau
 Planifier et réaliser les sauvegardes.
 Protéger le système.
 Former et conseiller les utilisateurs.
 ...

Du fait que le super-utilisateur ou root possède tous les droits, il doit détenir des connaissances
concernant le fonctionnement du système.

II.2 Modification des droits d’accès

La commande chmod permet de changer les droits d’accès d’un fichier. Vous ne pouvez modifier les
droits d’un fichier que si vous en êtes le propriétaire ou bien l’administrateur.

Syntaxe : chmod « modification des droits d’accès » « nom du fichier »


Exemples :
$ chmod a+r astc autorise tout le monde à lire le fichier « astc »
$ chmod ug +rw, o-r astc le propriétaire et les membres de son groupe peuvent lire et modifier le fichier
« astc » alors que les autres personnes ne peuvent que lire
$ chmod u=x info.php autorise le propriétaire à exécuter le fichier « info.php »

Une autre méthode permet d’attribuer les droits d’accès à un fichier.

User (u) Group (g) Others (o)

000 0 Aucune action


001 x 1 Exécution
010 w 2 Ecriture
011 w x 3 Ecriture – Exécution
100 r 4 Lecture
101 r x 5 Lecture – Exécution
110 r w 6 Lecture – Ecriture
111 r w x 7 Lecture – Ecriture – Exécution

Exemple : $ chmod 100 info.php autorise seulement le propriétaire à exécuter le fichier « info.php  »

La commande chown permet de changer le propriétaire d’un fichier.


Syntaxe : chown « utilisateur » « nom du fichier »
Exemple : $ chown formateur astc

La commande chgrp permet de changer le groupe d’un fichier.


Syntaxe : chgrp « nom du groupe » « nom du fichier »
Exemple : $ chgrp formateur astc

III.3 Gestion des utilisateurs

Même si vous êtes le seul utilisateur, il est indispensable de créer des utilisateurs ne serait-ce que pour des
raisons de sécurité. Lorsque vous avez besoin de faire de l’administration système, vous avez toujours la
possibilité de changer d’utilisateur et de devenir root à partir de la commande « sudo –s » ou su root.

III.3.1 Ajout et suppression d’un groupe

Pour ajouter un groupe, on utilise la commande groupadd.


Syntaxe : groupadd « nom du groupe »
Exemple : $ groupadd formateur_linux

Pour supprimer un groupe, on utilise la commande groupdel.


Syntaxe : groupdel « nom du groupe »
Exemple : $ groupdel formateur_linux

III.3.2 Ajout et suppression d’un utilisateur

La commande useradd permet d’ajouter un nouvel utilisateur.


Syntaxe : useradd « nom de l’utilisateur» -g « groupe » -s /bin/bash –m
Exemple : $ useradd professeur -g formation_linux -s /bin/bash –m

L’option –m permet de copier les fichiers de configuration du Shell. On a choisi notre Shell avec l’option
–s. ensuite, on fait entrez le mot de passe grâce à cette commande : passwd « nom de l’utilisateur créé »

La commande userdel permet de supprimer un utilisateur.


Syntaxe : userdel « nom de l’utilisateur»

CHAPITRE II : INTRODUCTION A LA PROGRAMMATION SHELL

I. Introduction au Shell

I.1 Définition

Sous Linux, on appelle Shell l’interpréteur de commande qui fait office d’interfaces entre l’utilisateur et
le système d’exploitation. Les shells sont donc des interpréteurs : cela signifie que chaque commande
saisie par l’utilisateur (ou lue à partir d’un fichier) est systématiquement vérifiée puis exécutée.

Il existe de nombreux shells qui se classent en deux grandes familles :


 La famille C Shell (exemple : csh, tcsh)
 La famille Bourne Shell (exemple : sh, bash, ksh)

zsh est un Shell qui contient les caractéristiques des deux familles précédentes. Néanmoins, le choix
d’utiliser un Shell plutôt qu’un autre est essentiellement une affaire de préférence personnelle ou de
circonstance. En connaitre un permet d’accéder aisément aux autres. Lorsque l’on utilise le système
GNU/Linux (un des nombreux systèmes de la galaxie UNIX), le Shell par défaut est bash (Bourne Again
Shell). Ce dernier a été conçu en 1988 par Brian Fox dans le cadre du projet GNU.

Un Shell possède un double aspect :


 Un aspect environnement de travail
 Un aspect langage de programmation
I.2 Un environnement de travail

Un Shell doit fournir un environnement de travail agréable et puissant. Par exemple bash permet entre
autres :
 Le rappel des commandes précédentes (gestion de l’historique)
 La modification en ligne de la commande courante
 La gestion des travaux lancés en arrière-plan (appelés jobs)
 L’initialisation adéquate de variables de configuration ou la création de raccourcis de commandes

Le Shell permet d’exécuter une commande en mode interactif ou bien par l’intermédiaire de fichiers de
commandes (appelés scripts).

I.3 Un langage de programmation

Les shells ne sont pas seulement des interpréteurs de commandes mais également de véritables langages
de programmation. Un Shell comme bash intègre :
 Les notions de variables, d’opérateurs arithmétiques, de structure de contrôle, de fonction
présentes dans tout langage de programmation, mais aussi
 Des opérateurs spécifiques (exemple : |, ;)

Même si au fil du temps de nouveaux types de données, comme les entiers ou les tableaux ont été
introduites dans certains shells, ces derniers manipulent essentiellement des chaînes de caractères : ce sont
des langages de programmation orientés chaînes de caractères.

I.4 Shell utilisé

La manière la plus simple de connaître le Shell que l’on utilise est d’exécuter la commande ps qui liste les
processus de l’utilisateur.
Exemple : $ ps

Comme il existe plusieurs versions de bash présentant des caractéristiques différentes, il est important de
connaitre la version utilisée. Pour cela, on utilise l’option –version de bash
Exemple : $ bash - - version

I.5 Syntaxe d’une commande

La syntaxe générale est la suivante :


[chemin/] nom_commande [option….] [arguments…….]

c’est une suite de mots séparés par un ou plusieurs blancs. Un blanc est un caractère tab (tabulation
horizontale) ou un caractère espace. Cependant, plusieurs caractères ont une signification spéciale pour le
Shell et provoquent la fin d’un mot : ils sont appelés méta-caractères (exemple : |, <)

Bash utilise également des mots réservés pour son propre fonctionnement.

! Case do done elif else esac


fi for function if in select then
Time until while { } [[ ]]

I.6 Les commandes internes et externes

I.6.1 Commandes internes


Une commande interne est une commande dont le code est implanté au sein de l’interpréteur de
commande. Lorsqu’on change de Shell courant ou de connexion, par exemple en passant du bash au csh,
on ne dispose plus des mêmes commandes internes.

Les commandes internes de bash peuvent se décomposer en deux groupes :


 Les commandes simples Exemple : cd, echo, …………
 Les commandes composées Exemple : case…….esac, if…..fi,……..
(Les commandes composées sont principalement des structures de contrôle)

I.6.2 Commandes externes

Une commande externe est une commande dont le code se trouve dans un fichier ordinaire. Le Shell crée
un processus pour exécuter une commande externe. Parmi l’ensemble des commandes externes que l’on
peut trouver dans un système, nous utiliserons principalement les commandes Linux (Exemple : ls,
mkdir, vi,..) et les fichiers Shell.

La localisation du code d’une commande externe doit être connue du Shell pour qu’il puisse exécuter
cette commande. A cette fin, bash utilise la valeur de sa variable prédéfinie PATH qui contient une liste
de chemins séparés par le caractère « : » (Exemple : /bin:/usr/bin)

Remarque : pour connaitre le statut d’une commande, on utilise la commande interne type
Exemple : $ type sleep commande externe
$ type echo shell builtin

I.7 Modes d’exécution d’une commande

I.7.1 Exécution séquentielle

Le mode d’exécution par défaut d’une commande est l’exécution séquentielle. Le Shell lit la commande
entrée par l’utilisateur, l’analyse, la prétraite et si elle est syntaxiquement correcte, l’exécute. Une fois
l’exécution terminée, le Shell effectue le même travail avec la commande suivante. L’utilisateur doit donc
attendre la fin de l’exécution de la commande précédente pour que la commande suivante puisse être
exécutée : on dit que l’exécution est synchrone.

Pour lancer l’exécution séquentielle de plusieurs commandes sur la même ligne de commande, il suffit de
les séparer par un caractère « ; »
Exemple : $ cd /tmp ; pwd ; echo bonjour ; cd ~ ; pwd

Pour terminer l’exécution d’une commande lancée en mode synchrone, on appuie simultanément sur les
touches CTRL et C

I.7.2 Exécution en arrière-plan

L’exécution en arrière-plan permet à un utilisateur de lancer une commande et de récupérer


immédiatement la main pour lancer « en parallèle » la commande suivante (parallélisme logique). On
utilise le caractère « & » pour lancer une commande en arrière-plan.
Exemple : $ sleep 10&
$ ps

L’exécution en arrière-plan est souvent utilise lorsqu’une commande est gourmande en temps CPU.

I.8 les commentaires dans le Shell


Un commentaire débute avec le caractère « # » et se termine avec la fin de la ligne. Un commentaire est
ignoré par le Shell.
Exemple : $ echo bonjour # l’ami
$ echo coucou # l’ami
$ # echo coucou

Pour que le caractère « # » soit reconnu en tant que début de commentaire, il ne doit pas être inséré à
l’intérieur d’un mot ou terminer un mot.
Exemple : $ echo il est#10 heures
$ echo bon# jour

I.9 Fichiers shells

Lorsqu’un traitement nécessite l’exécution de plusieurs commandes, il est préférable de les sauvegarder
dans un fichier plutôt que de les retaper au clavier. Chaque fois que le traitement doit être lancé. Ce type
de fichier est appelé fichier de commandes ou fichier Shell ou encore script.
Exemple : A l’aide de l’éditeur de texte, créer le fichier « premier » contenant les lignes suivantes :
# !/bin/bash
# premier
echo –n "La date du jour est : "
date

La notation « # ! » en première ligne d’un fichier interprété précise au Shell courant quel interpréteur doit
être utilisé pour exécuter le script Shell (dans cet exemple, il s’agit de /bin/bash). La seconde ligne est une
commande.

Pour rendre le fichier exécutable on fait :


$ chmod +x premier

Pour exécuter le fichier exécutable, on fait :


$ ./ premier

II. Substitution de paramètres

Dans la terminologie du Shell, un paramètre désigne toute entité pouvant contenir une valeur. Le Shell
distingue trois classes de paramètres :
 Les variables identifiées par un nom
Exemple : a, nom
 Les paramètres de position identifiés par un numéro
Exemple : 0,1,12
 Les paramètres spéciaux identifiés par un caractère spécial
Exemple : #, ?, $

II.1 Variables

Une variable est identifiée par un nom c’est-à-dire une suite de lettres, de chiffres ou de caractères
espace souligné ne commençant pas par un chiffre. La casse est à respecter.

Les variables peuvent être classées en trois groupes :


 Les variables utilisateur
Exemple : a, valeur, ………
 Les variables prédéfinies du Shell
Exemple : PS1, PATH, REPLY, IFS, …………
 Les variables prédéfinies de commandes UNIX
Exemple : TERM

L’utilisateur peut affecter une valeur à une variable en utilisant :


 L’opérateur d’affectation « = »
 La commande interne read

II.1.1 Affectation directe

Syntaxe : nom = [valeur] [nom = [valeur]……]

Lorsque le Shell rencontre la chaîne $nom, il la remplace par la valeur de la variable <nom>. La
commande exécutée est echo nom est <valeur>.
Exemple : $ nom = astc
$ echo mon ecole est $nom

II.1.2 Affectation par lecture

Elle s’effectue à l’aide de la commande interne read. Celle-ci lit une ligne entière sur l’entrée standard.
Syntaxe : read [var1 .. .. ..]
Exemple : $ read a b
Bonjour Monsieur
$ echo $b
Monsieur

Lorsque la commande interne read est utilisée sans argument, la ligne lue est enregistrée dans la variable
prédéfinie du Shell REPLY.
Exemple : $ read
Bonjour tout le monde
$ echo $REPLY
Bonjour tout le monde

Une autre option intéressante est l’option « -p » qui affiche une chaîne d’appel avant d’effectuer la
lecture. La syntaxe à utiliser est :
Read "chaîne d’appel" [var .. .. ..]
Exemple : $ read –p "Entrez votre prénom : " prenom
Entrez votre prénom  :Eric
$ echo $prenom
Eric

Exercice 1 : Ecrire un programme Shell "deuxfois" qui affiche " Entrez un mot : ", lit le mot saisi
par l’utilisateur puis affiche ce mot deux fois sur la même ligne.
Exercice 2 : Ecrire un programme Shell "untrois" qui demande à l’utilisateur de saisir une suite de
mots constituée d’au moins trois mots et affiche sur la même ligne le premier et le troisième mot
saisi.

II.1.3 Variable en « lecture seule »

Pour définir une variable dont la valeur ne doit pas être modifiée, on utilise la syntaxe : declare –r
nom=valeur ………..

II.2 La commande set

La commande set permet d’assigner des valeurs à des paramètres de position en numérotant ses
arguments suivants leur position. La numérotation commence à 1.
Syntaxe : set arg1 …. ….
Exemple : $ set alpha beta gamma
$
$ echo $1 $2 $3

Ainsi donc la valeur d’un paramètre de position est obtenu en plaçant « $ » devant son numéro : $1
permet d’obtenir alpha, $2 beta et $3 gamma.

Tous les paramètres sont réinitialisés dès que la commande interne set est utilisée avec au moins un
argument.
Exemple : $ set coucou
$ echo $1
coucou
$ echo $2

La commande set – rend indéfinie la valeur des paramètres de positions préalablement initialisés.
Exemple : $ set alpha beta
$ echo $1
alpha
$ set --
$ echo $1

II.3 Les paramètres spéciaux

Un paramètre spécial est référence par un caractère spécial. L’affectation d’une valeur à un paramètre
spécial est effectuée par le Shell. Pour obtenir la valeur paramètre spécial, il suffit de placer le caractère
« $ » devant le caractère spécial qui le représente.

Un caractère spécial très utilisé est la paramètre «# ». Celui-ci contient le nombre de paramètres de
position ayant une valeur.
Exemple : $ set a b c
$ echo $#
3
Exercice: Ecrire un programme Shell "nbmots" qui demande à l’utilisateur de saisir une suite
quelconque de mots puis affiche le nombre de mots saisis.

II.4 Commande interne shift

La commande interne shift décale la numérotation des paramètres de position ayant une valeur.
Syntaxe : shift [n]

Elle renomme le n+1 ième paramètre de position en paramètre en position 1, le n+2 ième paramètre de
position en paramètre de position 2, etc… une fois le décalage effectué, le paramètre spécial « # » est mis
à jour.
Exemple : $ set a b c d e
$ echo $1 $2 $#
$ shift 2
$ echo $1 $#

La commande interne shift sans argument est équivalente à shift 1.


II.5 Paramètres de position et fichiers Shell

Dans un fichier, les paramètres de positions sont utilisés pour accéder aux valeurs des arguments qui ont
été passés lors de son appel. Le paramètre spécial « $# » contient le nombre d’arguments passés lors de
l’appel. Le paramètre de position « 0 » contient le nom complet du programme Shell qui s’exécute.

Exemple : soit le Shell « copie »

# ! /bin/bash
# @(#) copie
echo "Nom du programme : $0"
echo "Nbre d’arguments : $#"
echo "Source: $1"
echo "Destination : $2"
cp $1 $2

l’exécution : ./copie astc astc_copy

II.6 la commande expr

Syntaxe : expr expression

Les arguments de la commande "expr" sont considères comme une expression. La commande "expr"
évalue ses arguments et écrit le résultat sur la sortie standard. "expr", comme toutes les commandes
Linux, doit avoir ses arguments sépares par des espaces. La première utilisation de "expr" concerne les
opérations arithmétiques simples. Les opérateurs « + », « - », « * » et « / » correspondent respectivement
à l’addition, à la soustraction, à la multiplication et à la division.

La seconde utilisation de la commande "expr" concerne la comparaison et la gestion des chaînes de


caractères grâce à l’operateur ":". Celui-ci permet de compter combien de fois apparaît, dans l’expression
placée en premier membre, l’expression régulière spécifiée en second membre.
Il est possible d’effectuer des regroupements grâce à des parenthèses, comme dans toute opération
arithmétique

Attention : Ne pas oublier que le processus d’évaluation du Shell effectue ses opérations avant de passer
le contrôle à la commande "expr". Par conséquent, les caractères "*", "(" et ")" risquent d’être évalues
par le Shell et non pas passe en argument à la commande "expr". Il faudra donc les faire précéder du
caractère "\" .

Exemple

$ X=3; Y=5
$ Z=‘expr $X + 4 ‘
$ echo $Z
7
$ Z=‘expr \( $Z + $X \) \* $Y‘
$ echo $Z
50
$ X=abcdef
$ Z=‘expr $X : ’.*’ ‘
$ echo $Z
6
$ Z=‘expr \( $X : ’.*’ \) + $Y‘
$ echo $Z
11

III. Structures conditionnelles

III.1 Tests avec if

Pour vérifier qu'une ou plusieurs conditions sont remplies avant d'effectuer un traitement, on utilise
souvent le if, par exemple :

if [ $age -ge 18 ];
then echo Vous etes majeur(e)
fi

III.2 Else, elif

Le if sert à imposer une condition pour effectuer un traitement. Le else (sinon) permet de compléter le if
pour effectuer un traitement dans le cas où la condition n'est pas remplie. Exemple :

if [ $age -ge 18 ];
then echo Vous etes majeur(e)
else echo Vous etes mineur(e)
fi

Le elif (else if) permet d'imbriquer plusieurs if les uns dans les autres pour pouvoir traiter tous les cas
possibles :

if ($feu = “ rouge ”);


then echo N'avancez pas
elif ($feu = “ orange ”);
then echo Ralentissez
else echo Allez-y
fi

III.3 Plusieurs conditions

Vous pouvez aussi combiner un certain nombre de conditions les unes après les autres, par exemple pour
vérifier que l'âge entré par l'utilisateur est situé entre 0 et 100 :

if ($age -le 0) || ($age -ge 100);


then echo l\'age entré n\'est pas correct
fi

Pour combiner plusieurs conditions, vous pouvez utiliser soit OU ( || ), soit ET ( && ). Il s'agit des
opérateurs logiques :

 OU signifie soit l'un, soit l'autre, soit les deux.

 ET signifie l'un et l'autre obligatoirement.

III.4 Opérateurs de comparaison

Opérateur Description
Opération sur des fichiers
-e fic Vrai si fic existe
-d fic Vrai si fic est un répertoire
-f fic Vrai si fic est u fichier ordinaire
-L fic Vrai si fic est un lien symbolique
-r fic Vrai si fic est lisible (r)
-w fic Vrai si fic est modifiable (w)
-x fic Vrai si fic est exécutable (x)
fic1 –nt fic2 Vrai si fic1 plus récent que fic2
fic1 –ot fic2 Vrai si fic1 plus ancien que fic2
Opération sur les chaînes de caractères
-z chaine Vrai si chaine est vide
-n chaine Vrai si chaine est non vide
chaine1 = chaine2 Vrai si les deux chaines sont égales
chaine1 != chaine2 Vrai si les deux chaines sont différentes
Opération de comparaison numérique
num1 –eq num2 Egalité
num1 –ne num2 Inégalité
num1 –lt num2 Inférieur
num1 –le num2 Inférieur ou égal
num1 –gt num2 Supérieur
num1 –ge num2 Supérieur ou égal

Remarque : la négation d’une comparaison se fait avec « ! ». Exemple :


Si ce répertoire n'existe pas on le crée :
if [ ! -d /home/courslinux/astc ];
then mkdir /home/courslinux/astc;
fi

III.5 Case

La structure case permet de faire un traitement différent en fonction de la valeur d'une variable, par
exemple :

#!/bin/bash
echo Quel est votre OS préféré ?
echo 1- Windows 2- Linux 3- Mac OS 4- Autre
read $choix
case “  $choix “ in
1) echo Vous préférez Windows ;;
2) echo Vous préférez Linux;;
3) echo Vous préférez Mac OS;;
4) echo Vous préférez un autre OS »;;
else ) echo « Vous devez taper un nombre entre 1 et 4 ! »;;
esac

# Quel est votre OS préféré ?


2
Vous préférez Linux

III.6 Select

Le select est une extension du case. La liste des choix possibles est faite au début et on utilise le choix de
l'utilisateur pour effectuer un même traitement. Exemple :

select systeme in "Windows" "Linux" "BSD" "Mac OS" "MS DOS"


do
echo "Votre système favori est $systeme."
break
done

Ce qui créera automatiquement un menu et donnera à l'écran :

1) Windows
2) Linux
3) BSD
4) Mac OS
5) MS DOS
#? 4
Votre système favori est Mac OS.

IV. Boucles

Les boucles servent en général à deux choses :


 Vérifier qu'une information saisie par l'utilisateur est correcte et lui faire recommencer la saisie
tant que ce n'est pas correct
 Recommencer un certain nombre de fois la même suite de commandes
D'autre part elles fonctionnent toujours avec ces trois critères :
 Une valeur de départ
 Une condition d'entrée ou de sortie
 Une incrémentation

Les boucles While et Until testent une condition avant d'effectuer le traitement, ce qui
veut dire qu'il se peut qu'on n'entre jamais dans la boucle.

ATTENTION !!: Il n’y a pas d’équivalent de « répéter … jusqu’à…. » en langage Shell.

IV.1 La boucle while : tant que …

While signifie tant que, ce qui veut dire que la boucle sera exécutée tant que la condition est respectée.
Exemples :

i=1 # Valeur de départ 1


while [ $i -le 5 ]; do # Condition de sortie : i > 5
echo tour de boucle n° $i
i = `expr $i + 1` # Incrément de 1 par tour de boucle
done

continuer=o # Valeur de départ «o»


while [ $continuer = «o» ]; do # condition de sortie : pas o
echo Voulez-vous recommencer ? o/n
read continuer # Nouvelle valeur de continuer
done # (qui remplace l'incrément)

Cette boucle continue tant que l'utilisateur entre o.

IV.2 La boucle until : jusqu'à …

Until signifie jusqu'à, ce qui veut dire que la boucle sera exécutée jusqu'à ce que la condition soit
respectée. Exemples :

i=1 # Valeur de départ 1


until [ $i -gt 5 ]; do # Condition de sortie : i > 5
echo tour de boucle n° $i
i = `expr $i + 1` # Incrément de 1 par tour de boucle
done

continuer=o # Valeur de départ «o»


until [ $continuer = «n» ]; do # condition de sortie : n
echo Voulez-vous recommencer ? o/n
read continuer # Nouvelle valeur de continuer
done # (qui remplace l'incrément)

Cette boucle continue jusqu'à ce que l'utilisateur entre n.

IV.3 La boucle for :

A priori, la boucle for est utilisée quand on veut exécuter un ensemble de commandes un nombre précis
de fois. Exemple :
echo Combien voulez-vous d\'étoiles ?
read nombre
for i in `seq $nombre`
do
echo -n \*
done

Combien voulez-vous d'étoiles ?


4
****

NB : La commande seq sert à afficher une liste de nombre :


 seq 3 affichera à l'écran 1 2 3
 seq 3 5 affichera à l'écran 3 4 5
 seq 1 2 7 affichera à l'écran 1 3 5 7

En Shell la boucle for est beaucoup utilisée pour traiter les fichiers, par exemple :

echo Ce script va renommer tous les fichiers en y ajoutant votre nom


for fichier in `ls`
do
if [ ! -d $fichier ]; then
fichierdest=$USER--$fichier
mv $fichier $fichierdest
fi
done

V. Fonctions

Comme pour les autres langages de programmation, les scripts Bash peuvent faire appel à des fonctions.

La déclaration de fonction se fait comme suit :

function nom () {
commandes ;
}

L'appel d'une fonction se fait en écrivant son nom. On peut lui passer des paramètres comme on le fait
pour une commande.

Attention !!: On ne peut appeler une fonction que si elle a été déclarée avant !

Exemple de fonction et de son appel :


s
#!/bin/sh
# Déclaration de la fonction :
function multiplier()
{
resultat=`expr $1 "*" $2`
echo $resultat
}
echo Veuillez entrer deux nombres
read nb1
read nb2
# Appel de la fonction :
multiplier $nb1 $nb2

CHAPITRE III : INSTALLATION DES SERVICES RESEAUX

I. Configuration d’un serveur DNS

Le système DNS introduit une convention de nommage hiérarchique des domaines qui commence par un
domaine racine appelé «. ». Les domaines situés directement sous le domaine racine sont appelés
« domaines de premier niveau ». Ils sont gérés par l’ICANN et représentent souvent la localisation
géographique (fr, be, eu, ru, de, …) ou le type de service disponible pour les entreprises et les particuliers.
Ils sont distribués et gérés par d’autres sociétés comme l’InterNIC (une filiale de l’ICANN) ou bien
l’AFNIC (Association Française pour le Nommage Internet en Coopération) qui gère le domaine « .fr ».
Enfin une multitude de sous-domaines peuvent être créé à l’intérieur d’un « domaine de second niveau ».

Domaine racine

Domaine de premier niveau « . »

Domaine de second niveau fr net org com ci

hotmail astc
Sous-domaine

mail etudiants

Hiérarchie du système DNS

Les noms de machine utilisant le système DNS sont appelés noms d’hôtes. Un nom d’hôte peut contenir
jusqu’à 255 caractères alphanumériques (chiffres et lettres) et le caractère trait d’union « - ». L’utilisation
du caractère «. » est interdite car il est réservé afin de séparer un domaine supérieur d’un domaine
inférieur.

En effet, on distingue deux types de noms avec le système DNS :

 Le nom d’hôte : qui représente le nom de la machine (un ordinateur, une imprimante ou bien
encore un routeur).
 Le nom de domaine pleinement qualifié ou FQDN (Fully Qualified Domain Name)

Le FQDN est en fait composé de deux parties : le nom d’hôte et le suffixe DNS. Le suffixe DNS définit
la relation entre le domaine auquel appartiennent la machine et le domaine racine. Par exemple, si l’on
considère une machine avec le nom d’hôte « poste1» située dans le domaine « etudiants », son suffixe
DNS est : etudiants.astc.ci. Le nom de domaine pleinement qualifié de la machine « poste1 » est donc :
poste1. etudiants.astc.ci.

Les fichiers de configuration du serveur DNS sont les suivants :

 Le fichier /etc/named.conf : ce fichier indique les fonctions de named et les noms des fichiers de
configuration
 /var/named/named.local : ce fichier permet de résoudre l’adresse de boucle locale
 named.hosts : ce fichier qualifié de zone file, contient les noms DNS et les adresses IP
correspondantes des hôtes dans un domaine. Ce fichier doit être créé dans le répertoire
/var/named et le nom qui lui est donné (named.hosts) est à titre d’exemple ; l’administrateur est
libre de lui donner le nom qu’il veut
 named.rev : ce fichier qualifié de zone file, contient les données inverses du précédent
(named.hosts) et permet de connaitre le nom d’une machine à partir de son adresse IP. Ce fichier
doit être créé dans le répertoire /var/named et le nom qui lui est donné (named.rev) est à titre
d’exemple ; l’administrateur est libre de lui donner le nom qu’il veut.

I.1 Etude du fichier /etc/named.conf

Les commentaires commencent par « // » ou « # » ou bien sont de type « /*…….*/ ». La structure du
fichier est la suivante :

 Une suite de section terminée par « ; »


 Une section « zone » décrit un domaine DNS
 L’énoncé « type »précise le rôle du serveur :
 Type master : indique que le serveur est maître
 Type slave : indique que le serveur est secondaire
 Type hint : indique un serveur cache
 L’énoncé « file » précise le nom du fichier qui contient la description du domaine

I.2 Format d’un enregistrement de ressource DNS

Les fichiers named.hosts et named.rev, …. contiennent des enregistrements de ressources DNS mais les
noms exacts des fichiers d’enregistrement de ressources sont spécifiés dans le fichier « named.conf ». La
structure des ressources DNS est la suivante :

Nom Durée de vie Classe Type Donnée

 Nom : c’est le nom d’un objet, par exemple un nom DNS


 Durée de vie : c’est la durée de vie de l’objet dans le tampon (cache). En son absence, elle est
égale à la valeur du champ minimum de l’enregistrement SOA
 La classe : indique le réseau de transport utilisé. Les réseaux TCP/IP sont définis par la classe IN
 Le type : c’est une valeur sur 16 bits spécifiant le type de ressource décrit par l’enregistrement. Le
type de ressource peut être un des éléments suivants :
 SOA (Start Of Authority) : le champ SOA permet de décrire le serveur de nom ayant
autorité sur la zone, ainsi que l’adresse électronique du contact technique (dont le caractère
« @ » est remplacé par « . »)
 NS : correspond au serveur de noms ayant autorité sur le domaine
 A : il s’agit du type de base établissant la correspondance entre un nom canonique et une
adresse IP. Par ailleurs, il peut exister plusieurs enregistrements A correspondant aux
différentes machines du réseau (serveurs)
 PTR : permet la conversion d’une adresse IP en nom DNS
 MX : identifie un serveur de messagerie
 CNAME (Canonical Name) : il permet d faire correspondre un alias au nom canonique. Il
est particulièrement utile pour fournir des noms alternatifs correspondant aux différents
services d’une même machine

I.3 Configuration d’un DNS maître principal d’un domaine

Première étape : configuration du fichier /etc/named.conf

Voici comment se présente ce fichier avant sa configuration

//
// named.conf for Red Hat caching-nameserver
//

options {
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
/*
* If there is a firewall between you and nameservers you want
* to talk to, you might need to uncomment the query-source
* directive below. Previous versions of BIND always asked
* questions using port 53, but BIND 8.1 uses an unprivileged
* port by default.
*/
// query-source address * port 53;
};

//
// a caching only nameserver config
//
controls {
inet 127.0.0.1 allow { localhost; } keys { rndckey; };
};

zone "." IN {
type hint;
file "named.ca";
};

zone "localdomain" IN {
type master;
file "localdomain.zone";
allow-update { none; };
};

zone "localhost" IN {
type master;
file "localhost.zone";
allow-update { none; };
};

zone "0.0.127.in-addr.arpa" IN {
type master;
file "named.local";
allow-update { none; };
};

zone "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
type master;
file "named.ip6.local";
allow-update { none; };
};
zone "255.in-addr.arpa" IN {
type master;
file "named.broadcast";
allow-update { none; };
};

zone "0.in-addr.arpa" IN {
type master;
file "named.zero";
allow-update { none; };
};

include "/etc/rndc.key";

La configuration de ce fichier est simple. Il suffit de copier les zones : zone « localhost » et zone
« 0.0.127.in-addr.arpa » et de les copier à la fin du fichier juste avant la dernière ligne « include
"/etc/rndc.key" »

//
// named.conf for Red Hat caching-nameserver
//

options {
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
/*
* If there is a firewall between you and nameservers you want
* to talk to, you might need to uncomment the query-source
* directive below. Previous versions of BIND always asked
* questions using port 53, but BIND 8.1 uses an unprivileged
* port by default.
*/
// query-source address * port 53;
};

//
// a caching only nameserver config
//
controls {
inet 127.0.0.1 allow { localhost; } keys { rndckey; };
};

zone "." IN {
type hint;
file "named.ca";
};

zone "localdomain" IN {
type master;
file "localdomain.zone";
allow-update { none; };
};

zone "localhost" IN {
type master;
file "localhost.zone";
allow-update { none; };
};

zone "0.0.127.in-addr.arpa" IN {
type master;
file "named.local";
allow-update { none; };
};

zone "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
type master;
file "named.ip6.local";
allow-update { none; };
};
zone "255.in-addr.arpa" IN {
type master;
file "named.broadcast";
allow-update { none; };
};

zone "0.in-addr.arpa" IN {
type master;
file "named.zero";
allow-update { none; };
};

zone "localhost" IN {
type master;
file "localhost.zone";
allow-update { none; };
};

zone "0.0.127.in-addr.arpa" IN {
type master;
file "named.local";
allow-update { none; };

include "/etc/rndc.key";

Après cette étape, nous allons maintenant remplacer “localhost” par le nom de notre domaine et dans le
champ “file” de cette zone, nous allons remplacer “localhost.zone” par le nom du fichier qui contiendra
les noms DNS et les adresses IP correspondant des hôtes d’un domaine. Le nom de ce fichier est laissé au
choix de l’administrateur. Ce fichier doit être créé dans le répertoire « /var/named » ; il est à noter que le
contenu du fichier /var/named/named.local doit être copié dans ce fichier.

Aussi devons-nous remplacer  « 0.0.127 » par l’inverse des trois premiers octets de l’adresse du sous-
réseau auquel nous appartenons. Par exemple si nous appartenons au sous-réseau « 192.168.0.0 », nous
remplacerons alors « 0.0.127 » par « 0.168.192 ».

Nous devons aussi remplacer « localhost.zone » par le nom d’un fichier qui doit être différent du
précédent. Ce fichier qualifié contient les données inverses du précédent et permet de connaitre le nom
d’une machine à partir de son adresse IP. Ce fichier doit être créé dans le répertoire « /var/named » ; il
est à noter que le contenu du fichier « /var/named/named.local » doit être copié dans ce fichier.

Exemple de configuration d’un DNS maître principal d’un domaine

Le nom du domaine est : astc.ci.


L’adresse de notre réseau sera donc : 192.168.1.0
Le nom de la machine servant de serveur est « serveur ». L’adresse IP de la machine est 192.168.1.254.

Les postes seront nommés de 1 à 4.


Poste1 adresse IP 192.168.1.1
Poste2 adresse IP 192.168.1.2
Poste 3 adresse IP 192.168.1.3
Poste4 adresse IP 192.168.1.4

Dans ce cas de figure le fichier /etc/named.conf après configuration se présente comme suit :

//
// named.conf for Red Hat caching-nameserver
//

options {
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
/*
* If there is a firewall between you and nameservers you want
* to talk to, you might need to uncomment the query-source
* directive below. Previous versions of BIND always asked
* questions using port 53, but BIND 8.1 uses an unprivileged
* port by default.
*/
// query-source address * port 53;
};

//
// a caching only nameserver config
//
controls {
inet 127.0.0.1 allow { localhost; } keys { rndckey; };
};

zone "." IN {
type hint;
file "named.ca";
};

zone "localdomain" IN {
type master;
file "localdomain.zone";
allow-update { none; };
};

zone "localhost" IN {
type master;
file "localhost.zone";
allow-update { none; };
};

zone "0.0.127.in-addr.arpa" IN {
type master;
file "named.local";
allow-update { none; };
};

zone "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
type master;
file "named.ip6.local";
allow-update { none; };
};
zone "255.in-addr.arpa" IN {
type master;
file "named.broadcast";
allow-update { none; };
};

zone "0.in-addr.arpa" IN {
type master;
file "named.zero";
allow-update { none; };
};

zone "astc.ci" IN {
type master;
file "astc.ci";
allow-update { none; };
};

zone "1.168.192" IN {
type master;
file "astc.ci.rev";
allow-update { none; };

include "/etc/rndc.key";

Nous allons comme indiqué copier le contenu du fichier “named.local” dans les fichiers “astc.ci” et
“astc.ci.rev”. Nous allons donc en ligne de commande et nous saisissons les commandes suivantes :

cp /var/named/named.local /var/named/astc.ci
et
cp /var/named/named.local /var/named/astc.ci.rev

Par la suite nous éditons le fichier /var/named/astc.ci et nous l’éditons comme suit :
vi /var/named/astc.ci

$TTL 86400
@ IN SOA serveur.astc.ci. root.serveur.astc.ci. (
1997022700 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS serveur.astc.ci.

serveur IN A 192.168.1.254
Poste1 IN A 192.168.1.1
Poste2 IN A 192.168.1.2
Poste3 IN A 192.168.1.3
Poste4 IN A 192.168.1.4

Nous éditons également le fichier /var/named/astc.ci.rev

$TTL 86400
@ IN SOA serveur.astc.ci. root.serveur.astc.ci. (
1997022700 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS serveur.astc.ci.

254 IN PTR serveur.astc.ci.


1 IN PTR Poste1.astc.ci.
2 IN PTR Poste2.astc.ci.
3 IN PTR Poste3.astc.ci.
4 IN PTR Poste4.astc.ci.

NB : Remarquez que pour les enregistrements « IN A », il n’y a pas de point en fin de ligne alors que
pour les enregistrements « IN NS » et « IN PTR », il y a toujours un point en fin de ligne. Si vous ne
respectez pas cette ponctuation, votre serveur DNS vous enverra un message d’erreur de configuration.

Nous allons éditer maintenant un nouveau fichier nommé « /etc/resolv.conf ». Dans ce fichier, nous
indiquerons l’adresse de notre serveur DNS : vi /etc/resolv.conf

Nous le modifierons comme suit :


search astc.ci
nameserver 192.168.1.254
Le dernier fichier à être modifié sera le fichier /etc/hosts. Ce fichier répertorie les noms FQDN de toutes
les machines du domaine et leur adresse IP correspondante. Nous l’éditerons :
vi /etc/hosts

Et nous le modifierons comme suit :

# Do not remove the following line, or various programs


# that require network functionality will fail.
127.0.0.1 localhost.localdomain localhost
192.168.1.254 serveur.astc.ci serveur
192.168.1.1 Poste1.astc.ci Poste1
192.168.1.2 Poste2.astc.ci Poste2
192.168.1.3 Poste3.astc.ci Poste3
192.168.1.4 Poste4.astc.ci Poste4

Enfin, nous démarrons le service à l’aide de la commande suivante :

#/etc/init.d/named start

La commande nslookup est l’outil adéquat pour mettre au point une configuration DNS et obtenir des
informations provenant de n’importe quel serveur DNS. Voici un exemple dans un environnement à
plusieurs serveurs DNS :

#nslookup
 help //aide en ligne
 set type=ns //visualise la listes des serveurs de noms d’un domaine
 set type= MX //visualise la liste des serveurs de messagerie d’un domaine
 exit //met fin à une session

II. Configuration du serveur DHCP

Le serveur DHCP (Dynamic Host Configuration Protocol) permet à une machine de notre réseau (le
serveur DHCP) de fournir aux machines le demandant (clients) toutes les données nécessaires pour
s’intégrer efficacement au réseau. Le serveur DHCP est basé sur le fichier, qui fournit les données que
doit envoyer le serveur, et ajoute des précisions sur le(s) réseau(x), les machines cibles, la trame d’IP.

Le fichier est séparé en blocs qui définissent chacun un réseau local. Chaque bloc possède des options qui
précisent les propriétés du réseau configuré dans le bloc. Le bloc peut intégrer des sous-blocs pour des
sous-réseaux. Voici un exemple de configuration de serveur, gérant un réseau.

option domain-name "domaine.net"


subnet 192.168.1.0 netmask 255.255.255.0 {
option domain-name-servers 192.168.1.254 ;
option routers 192.168.1.254 ;
range 192.168.1.100 192.168.1.200 ;
}
Le bloc principal contient l’ensemble des propriétés identique à tout le réseau au sortir de la carte
Ethernet. On retrouve le nom de domaine et le serveur DNS du réseau.

En dessous, on retrouve aussi un bloc de sous-réseau, et un seul car seul un réseau est géré par dhcpd.

Voici toutes les options que nous pouvons fournir dans notre fichier de configuration de dhcpd :

 default-lease-time : Temps (en seconde) que dure un bail d’adresse par défaut. Si l’option n’est
pas établie, le temps est d’une journée (86400s)
 max-lease-time : Temps maximum pour lequel l’adresse est cédée. En effet, le client peut parfois
demander un bail spécifique (en général non) et cette option permet de fournir une durée
maximum autorisée (en seconde également). Si l’option n’est pas précisée, cette valeur est d’une
semaine.
 get-lease-hostnames : cette option ordonne à dhcpd de fournir un nom d’hôte aux machines pour
lesquelles aucune IP n’est prédéfinie dans la configuration. Le serveur dhcp utilisera le serveur
DNS du réseau pour fournir le nom d’hôte à la machine. Il s’agit d’une option à utiliser avec soin
 option subnet-mask : définit le masque du réseau du bloc supérieur ou en tant qu’option
générale, si tous les réseaux ont le même masque
 option domain-name : fournit le nom de domaine du bloc supérieur. Peut être utilisé en tant
qu’option générale
 option domain-name-servers : fournit les serveurs DNS du bloc supérieur. Peut être utilisé en
option générale. Nous pouvons fournir plusieurs serveurs DNS en séparant leur IP par une virgule
 option ipr-serveurs : définit l’adresse du ou des serveurs(s) d’impression. De la même manière,
la définition n’est active que dans le bloc où il se trouve. Peut être utilisé en option générale
 option interface-mtu : cette option est à utiliser avec précaution. Elle fournit la "Maximum
Transmission Unit", qui représente la taille maximum des paquets IP autorisés à être transmis. La
valeur est en octet. Pour Ethernet, c’est 1500
 option routers : fournit l’adresse IP du routeur. Doit se trouver dans le bloc
 option broadcast-address : fournit l’adresse de broadcast du réseau. Doit se trouver dans un bloc
 range : précise l’intervalle d’adresse IP dans laquelle le serveur peut piocher pour fournir les
adresses aux clients. On peut fournir plusieurs intervalles (qui ne doivent pas se croiser bien sûr)
 hardware ethernet : fournit l’adresse hardware de la carte Ethernet du client précisé par le bloc
 fixed-adress : permet de définir une adresse IP fixe (parmi l’intervalle définie) pour le client
précisé par le bloc

Les clients ayant besoin du serveur dhcp envoient une requête à celui-ci, aussi leur envoie les données
nécessaires à leur intégration dans le réseau. Ceux-ci utilisent une application client pouvant détecter et se
mettre en relation avec tout serveur dhcp qu’elle rencontre dans un réseau inconnu (car non configuré).

 Exemple de configuration du serveur DHCP

Le fichier de configuration du serveur DHCP sous Linux est le fichier /etc/dhcpd.conf est initialement
vide. Pour que ce fichier soit opérationnel, nous sommes obligés d’y copier le contenu du fichier
/usr/share/doc/dhcp-3.0.1/dhcp.conf.sample.
Dans cet exemple, nous allons configurer DHCP avec les paramètres suivants :
 plage d’adresse : 192.168.1.100 à 192.168.1.200
 adresse du serveur DNS : 91.168.1.254
 adresse du routeur : 192.168.1.253

ddns-update-style interim;
ignore client-updates;

subnet 192.168.1.0 netmask 255.255.255.0 {

# --- default gateway


# option routers 192.168.0.1;
option subnet-mask 255.255.255.0;

option nis-domain "astc.ci";


option domain-name "astc.ci";
option domain-name-servers 192.168.1.254;

option time-offset -18000; # Eastern Standard Time


# option ntp-servers 192.168.1.254;
# option netbios-name-servers 192.168.1.254;
# --- Selects point-to-point node (default is hybrid). Don't change this unless
# -- you understand Netbios very well
# option netbios-node-type 2;

range dynamic-bootp 192.168.1.100 192.168.1.200;


default-lease-time 21600;
max-lease-time 43200;

# we want the nameserver to appear at a fixed address


host ns {
next-server marvin.redhat.com;
hardware ethernet 12:34:56:78:AB:CD;
fixed-address 207.175.42.254;
}
}

Pour terminer la configuration, nous allons lancer le service avec la commande suivante :
/etc/init.d/dhcpd start

Pour redémarrer le service, nous lançons la commande suivante


/etc/init.d/dhcpd restart

Pour arrêter le service, nous lançons la commande suivante :


/etc/init.d/dhcpd stop
III. Configuration d’un serveur SAMBA

Il existe des protocoles permettant de transférer des fichiers à l’aide de commandes à travers un réseau
hétérogène (constitué de machines de types et de systèmes d’exploitation différents). Toutefois, ce type
de manipulation est assez fastidieux. Ainsi, les réseaux Microsoft Windows offrent une manière
totalement transparente de partager des fichiers, en permettant notamment la copie par simple glisser-
déposer. Cependant, ce type de réseau ne permet à la base qu’un partage de fichiers entre machine
fonctionnant avec un système Microsoft Windows ou OS/2. Ainsi, si nous possédons une machine sous
Linux, il existe une solution : utiliser SAMBA.

SAMBA est un logiciel très simple. Il s’agit de la première solution permettant une intégration
transparente de clients Windows dans un environnement serveur Linux qui ne nécessite pas l’installation
d’un logiciel client spécifique. Grâce à SAMBA, nous pouvons partager des disques UNIX et des
imprimantes, assurer la sécurité et la fiabilité, et même intégrer un domaine Windows. D’autre part,
SAMBA permet de définir des niveaux d’accès très pointus, très proche de celui proposé par un serveur
Windows NT. SAMBA est donc une alternative économique et robuste à un recours à un serveur
Windows NT.

III.1 Qu’est-ce que le serveur SAMBA

SAMBA est un ensemble de programmes qui permettent de se connecter à un serveur Linux, des stations
fonctionnant sous des systèmes divers : Windows 3.11, Windows 9x, Windows NT, Windows 2000,
Windows XP, OS/2, MAC.

Mis au point par Microsoft en 1987, en reprenant un concept mis au point par IBM en 1985 NetBIOS
(Network Basic Input/Output System), le projet SAMBA a été initié des 1991 puis développé par un
australien Andrew Tridgell. Celui-ci lui donna ce nom, en choisissant un nom voisin de SMB en
interrogeant un dictionnaire UNIX, par la commande grep : grep « ^s.*m.*b » /usr/dict/words. Son
fonctionnement est conforme au schéma client-serveur.

Le serveur Linux est en mesure de se conduire comme un serveur de fichiers capable d’offrir les services
habituels sur un réseau :
- partage de fichiers et de répertoires
- partage d’imprimantes
- respect des comptes utilisateurs
- gestion des permissions d’accès
- exécution de scripts de connexion personnalisés

ce protocole est aussi appelé :


- CIFS : Common Internet File System (RFC 1001, 1002)
- LanManager
- NetBIOS

III.2 Le fonctionnement de Samba


Le protocole de communication permettant cette communication entre Windows et Linux s’appelle SMB
(Serveur Message Block). Ce protocole s’appuie sur NetBIOS (ainsi que TCP/IP). L’intérêt de TCP/IP
provient du fait qu’il a été très largement adopté. Ainsi TCP/IP est déjà implémenté sur la plupart des
systèmes d’exploitation.

III.3 L’architecture de SAMBA

Le serveur offre ses ressources (systèmes de fichiers, imprimantes …) aux clients Windows qui s’y
connecteront sous un comte créé par root, après une authentification par mot de passe. Le travail est
partagé en deux « daemons » :
 smbd pour le service serveur fournissant les services d’authentification et d’accès aux ressources.
 nmbd permettant de montrer les services offerts par SAMBA (affichage des serveurs SAMBA
dans le voisinage réseau, service de résolution des noms NetBIOS……)

Du côté client, le protocole SMB fonctionne au-dessus de plusieurs protocoles. Il existe NetBIOS au-
dessus de TCP/IP (par contre Net BEUI n’est pas utile) :
 le client (smbclient) est un client pour Linux fournissant une interface permettant de transférer
des fichiers, accéder à des imprimantes ;
 smbstar permet d’effectuer un transfert d ou vers un fichier TAR sous Linux ;
 testparm vérifie la syntaxe du fichier smb.conf, le fichier de configuration de SAMBA.

Chaque demande de connexion par SAMBA, d’une station au serveur LINUX, laisse une trace stockée
dans un fichier log.%m, situé dans le répertoire /var/log/samba (%m désigne le nom de la station). Toute
connexion pourra donc être identifiée de manière précise puis examinée sur une ligne de fichier :
Nom d’utilisateur, nom de la machine, date, heure de début, heure de fin, services utilisés, ….

SAMBA peut implémenter la sécurité au niveau de l’utilisateur, ce qui est recommandé et non au niveau
des ressources comme c’est le cas dans les réseaux de type WORKGROUP.

III.4 Etudes des paramètres du fichier de configuration

Le fichier de configuration de samba est /etc/samba/smb.conf. ce fichier comporte des sections qui sont
déclarées entre crochet : « [] », celle que l’on trouvera toujours est la section GLOBAL. On y trouvera la
configuration globale du serveur qui déterminera si SAMBA tourne en tant que serveur de fichier, PDC
ou BDC. C‘est souvent la section la plus importante.

Ensuite viennent d’autres sections spécialisées comme HOME, PRINTERS, PROFILES,


NETLOGON,….

Dans le fichier de configuration, un commentaire commence par un dièse (#) ou un point-virgule (;). Un
commentaire ne peut être que sur une nouvelle ligne, c’est-à-dire qu’il ne pourra pas se trouver devant ou
derrière un paramètre ou sa valeur. Tout manquement à ces deux règles engendra un disfonctionnement
de notre serveur.

III.4.1 La section [global]


Dans cette section, nous allons trouver tous les paramètres généraux de SAMBA. En voici les
principaux :
 Identité de la machine
workgroup = MONDOMAINE
netbios name = SERVEURSMB
server string = Serveur %L (Samba %v)

 Workgroup : nom du groupe de travail (workgroup) ou du domaine. La valeur par


défaut est : workgroup = WORKGROUP
 Netbios name : nom de NetBIOS de la machine (le nom Windows). La valeur par défaut
est le nom Internet (Hostname) de la machine.
 Server string : Description de la machine. La valeur par défaut est server string = Samba
%v

 Authentification
security = user
domain logons = yes
username map = /etc/samba/smbusers

 Security : ce paramètre est l’un des plus importants de SAMBA. Il peut prendre les
valeurs share, user, server et domain :
 Le mode share corresponde à la possibilité offerte par Win9x d’effectuer un
« contrôle d’accès au niveau ressource », c’est-à-dire par exemple de définir un
mot de passe pour le partage quel que soit l’utilisateur.
 Le mode user : est le mode le plus intéressant : il émule presque parfaitement la
majeure partie des fonctionnalités de Windows NT en matière d’authentification,
de partage de fichiers et d’imprimantes, en proposant un « contrôle d’accès au
niveau utilisateur ».
 Les modes server et domain se comportent comme le mode user d’un point de
vue du client, pais permettent de relayer l’authentification sur un autre serveur
SAMBA, sur un PDC ou un BDC NT.
La valeur par défaut est : security = user
 Domain logons active la fonction de contrôleur de domaine de SAMBA, ce qui permet
aux clients Windows de se loguer dans un domaine NT. Le nom du domaine est celui
définit par la variable workgroup. La valeur par défaut domain logons = yes
 Username map : permet d’établir une correspondance entre les noms d’utilisateurs
SAMBA et les noms d’utilisateur UNIX. La valeur par défaut est username map :
/etc/samba/smbusers

 Gestion des mots de passe


encrypt passwords = yes
smbpasswd file = /etc/samba/smbpasswd
password server = workgroup
unix password sync = no
passwd program = /usr/bin/passwd %U
 Encrypt passwords valide la négociation des mots de passe cryptés. Par défaut les
versions non préhistoriques de Windows (à part les premières versions de Win95 et de
winNT<SP3) effectuent les négociations d’authentification en utilisant un mot de passe
crypté. La valeur par défaut est encrypt passwords = yes
 Smb passwd file : emplacement de la version SAMBA du fichier des mots de passe. Ce
fichier contient le login SAMBA, l’UID, la version cryptée LanMan du mot de passe, la
version cryptée NT et autres informations sur le type de comte, sa validité, la date du
dernier changement de mot de passe, etc. la valeur par défaut est : smb passwd file = $
{préfixe}/private/smbpasswd ou /etc/samba/smbpasswd par exemple.
 Password server : définit quel est le serveur principal lorsque l’on fonctionne en mode
security = serveur ou security = domain. La valeur par défaut est password server =
workgroup.
 Unix password sync : permet d’exécuter un programme externe défini par passwd
program lors d’un changement de mot de passe SAMBA, afin par exemple de synchroniser
le mot de passe Unix. La valeur par défaut est unix : password sync = no.
 Passwd program : Si le paramètre unix password sync est à yes, exécute le programme
externe lors d’un changement de mot de passe SAMBA. Si le programme externe échoue,
alors le changement de mot de passe échouera également. Le programme est exécuté en
root, il est donc impératif d’utiliser des chemins absolus et de faire attention aux aspects de
sécurité.
Exemple : passwd program = /usr/bin/passwd %u
 Passwd chat définit un dialogue à utiliser avec le paramètre passwd program

 Explorateur de machine
local master = yes
os level = 33
domain master = yes

 Local master définit si SAMBA doit participer à l’élection du « maître explorateur local »
(sur son réseau local, son sous-réseau) pour son domaine. La valeur par défaut est : local
master = yes
 Os level : cette valeur va influer sur les chances de SAMBA de remporter les élections de
maître explorateur. La valeur par défaut est : os level = 20
 Domain master : définit si SAMBA doit être le « maître explorateur de domaine » pour
son domaine. Ceci permet de rassembler les listes de machines fournies par les maîtres
explorateurs locaux et de leur redistribuer ensuite une liste complète des machines du
domaine. NB : A ne pas utiliser si un PDC Windows NT existe PDC le domaine. La valeur
par défaut dépend de domain logons

 Paramètres de connexion utilisateur : les paramètres de cette section n’ont pas de sens que si
l’on utilise SAMBA en PDC voir domain logons)
Exemple :
logon script = script.bat
logon path = \\%L_Profiles\%U
logon drive= p :
logon home = \\%L\%U\Profile
 Logon script : définit le script qui sera exécuter sur le client, lorsque celui-ci viendra se
loguer dans le domaine
 Logon path : utilisé par Windows NT pour le stockage du profil utilisateur
(NTUSER.DAT, menus, etc …)
 Logon home : chemin réseau du répertoire personnel (type NetBIOS). Le chemin prend la
syntaxe suivante : logon home = \\SERVER\PARTAGE\CHEMIN\VERS\LE\PROFILE. la
partie \\SERVEUR\PARTAGE est utilisée par win9x comme chemin pour le répertoire
personnel et le reste (\CHEMIN\VERS\LE\PROFILE) est utilisé pour le stockage du profil
(user.dat, menus, etc…)
 Logon drive : ce paramètre, valable uniquement pour des clients NT, définit le lecteur qui
sera utilisé pour la connexion au répertoire personnel

 Résolution de nom
wins support = no
wins server = 10.0.0.2
wins proxy = yes
dns proxy = no

 Casse des noms de fichiers


preserve case = yes #NOTE : These can be set on a per share basic
short preserve case = no
default case = lower
case sensitive = no

 Preserve case maintient la casse (distribution minuscule / majuscule) des noms de fichiers

 Réseau
Socket option = TCP_NODELAY SO_RCVBUF = 8192 SO SNDBUF = 8192
Interfaces = 10.0.0.1/32

III.4.2 La section [homes]

Cette section permet de déterminer un répertoire personnel par l’utilisateur SAMBA

III.4.3 La section [printers]

C’est le répertoire de partage des imprimantes

III.4.4 Partage d’une ressource

Les paramètres permettant le partage d’une ressource disque sont résumés dans le tableau ci-dessous. Une
section est toujours désignée par son nom entre crochet.

SECTION Paramètre Exemple Description


[PARTAGE] path /home/partage Chemin du dossier partagé
comment Mon dossier partagé Commentaire de la ressource
Read only no Si "no"= on autorise l’écriture dans ce dossier
Si "yes"= on ne peut que lire
browseable yes Si "yes"= la ressource apparaît dans
l’explorateur
guest ok yes Les comptes invité peuvent acceder à cette
ressource
valid users Koffi, yao Liste des utilisateurs autorisés à acceder à la
ressource

Le partage d’une ressource disque se fait après la section [homes].


Exemple : on veut créer un répertoire nommé « backup » (situé dans le répertoire home) dans lequel se
trouveront les sauvegardes. Ce répertoire ne doit être accessible (en lecture et en écriture) que par
l’utilisateur nommé « lea »

La première des choses à faire est la création du répertoire « backup » par la commande suivante : #mkdir
/home/backup

Ensuite, nous allons définir le partage comme suit :


[backup]
Comment=repertoire de sauvegarde
Browseable=yes
Path=/home/backup
Read only=no
Valid users=lea

III.5 Création des comptes d’utilisateurs samba

La commande « smbpasswd » permet de créer des utilisateurs avec un mot de passe samba. La seule
condition est que ces utilisateurs doivent posséder un compte Linux c’est-à-dire qu’ils doivent être déjà
créés comme utilisateurs Linux
Exemple :
 Créer des comptes samba pour les utilisateurs suivants : mobio, toure, dago, yaokan
La première des choses est de vérifier si les utilisateurs possèdent chacun un compte Linux. Dans
le cas contraire, il faut le créer avec la commande « useradd » comme suit
#useradd mobio -s /bin/bash –m
#useradd toure -s /bin/bash –m
#useradd dago -s /bin/bash –m
#useradd yaokan -s /bin/bash –m

 Après cette étape nous allons maintenant créer les comptes samba pour nos utilisateurs ; c’est là
qu’intervient la commande « smbpasswd »
#smbpasswd -a mobio
#smbpasswd –a toure
#smbpasswd –a dago
#smbpasswd –a yaokan
A chaque création de compte samba, smbpasswd nous demandera un mot de passé pour chaque
utilisateur samba créé.

NB : Il ne faut jamais oublier de créer un mot de passe samba pour le compte root car c’est ce compte qui
nous permettra d’intégrer les clients Windows au domaine géré par SAMBA.

III.6 Création des comptes pour les clients Windows

Lorsqu’une machine de type Windows 2000/XP/VISTA/7 souhaite se connecter à notre contrôleur de


domaine, un compte lui correspondant doit être spécifié dans le fichier « smbpasswd ». Ces comptes se
différencient par le fait qu’ils se terminent par un « $ » et ils ne posséderont ni Shell, ni répertoire
personnel.

Exemple : créons des comptes pour les clients Windows suivants : « astc1 », «  astc2  », « astc3 »

# useradd astc1$
# useradd astc2$
# useradd astc3$

Pour terminer, nous allons ajouter à « /etc/samba/smbpasswd » les usernames de nos différents pc, c’est-
à-dire les clients Windows à l’aide de la commande smbpasswd comme suit :

#smbpasswd –a –m astc1$
#smbpasswd –a –m astc2$
#smbpasswd –a –m astc3$

Pour terminer la configuration du serveur, nous allons démarrer le service smb avec la commande
suivante :

#/etc/init.d/smb start

Pour redémarrer le service nous utiliserons la commande suivante

#/etc/init.d/smb restart

Pour arrêter le service, nous utiliserons la commande suivante :

#/etc/init.d/smb stop

III.7 Exemple de configuration complète de samba

Nous allons éditer le fichier de configuration de Samba avec l’éditeur vi

# vi /etc/samba/smb.conf

# This is the main Samba configuration file. You should read the
# smb.conf(5) manual page in order to understand the options listed
# here. Samba has a huge number of configurable options (perhaps too
# many!) most of which are not shown in this example
#
# Any line which starts with a ; (semi-colon) or a # (hash)
# This option is important for security. It allows you to restrict
# connections to machines which are on your local network. The
# following example restricts access to two C class networks and
# the "loopback" interface. For more examples of the syntax see
# the smb.conf man page
; hosts allow = 192.168.1. 192.168.2. 127.

# if you want to automatically load your printer list rather


# than setting them up individually then you'll need this
printcap name = /etc/printcap
load printers = yes

# It should not be necessary to spell out the print system type unless
# yours is non-standard. Currently supported print systems include:
# bsd, sysv, plp, lprng, aix, hpux, qnx
; printing = cups

# This option tells cups that the data has already been rasterized
cups options = raw

# Uncomment this if you want a guest account, you must add this to /etc/passwd
# otherwise the user "nobody" is used
; guest account = pcguest

# this tells Samba to use a separate log file for each machine
# that connects
log file = /var/log/samba/%m.log
# all log information in one file
# log file = /var/log/samba/smbd.log
# Put a capping on the size of the log files (in Kb).
max log size = 50

# Security mode. Most people will want user level security. See
# security_level.txt for details.
security = user
# Use password server option only with security = server
Après la modification du fichier smb.conf, nous allons créer les répertoires définis pour le partage des
fichiers sur notre réseau avec la commande mkdir.

# mkdir /home/%U
# mkdir /var/samba/netlogon
# mkdir /var/samba/profiles
# mkdir /home/samba
# mkdir /home/save

Les répertoires suivants ont été créés à l’installation de notre système. Nous n’avons plus besoin de les
créer. Il s’agit de « /var/spool/samba » et « /tmp »

III.8 Configuration des postes clients Windows

Si nous voulns joindre une machine cliente au domaine géré par samba, nous devons nous connecter en
tant qu’administrateur Windows puis faire un clic-droit sur poste de travail, propriétés puis sur l’onglet
“Nom de l’ordinateur”, cliquez sur le bouton « Modifier ». Nous allons nous placer sur “Domaine” et
entrer le nom du domaine de smb.conf et cliquer sur OK.
Si tout se passe bien, nous devons voir s’ouvrir une fenêtre de login. Dans cette fenêtre, nous allons écrire
le login root et son mot de passe Samba créé auparavant et nous allons avoir le message de bienvenue
dans le domaine. Ensuite, notre machine Windows devra être redémarrée.

(images)

Vous aimerez peut-être aussi