Les bases de la programmation shell #RARE

Les Conditions  :le if (Si)

if [ test ] #####Si test de la variable
then        ######Alors 
        echo "C'est vrai"  ####Renvoi si c'est Vrai
 fi     #### Il délimite la fin du Si seulement si le Vrai est vérifié

 

ATTENTION au espaces a l’intérieur des crochets …

Petit test :

#!/bin/bash

nom="RAREC3"

if [ $nom = "RAREC3" ]
then
        echo "Les meilleurs sont les RARE C3!"
fi

Avec 2 variables

#!/bin/bash

nom1="RAREC3"
nom2="RAREC3"

if [ $nom1 = $nom2 ]
then
        echo "Vive les RARE !"
fi

Quand la condition n’est pas remplie on fait comme ceci :

if [ test ]                  ###SI
then                         ####Alors
        echo "C'est vrai"    
else                         ####Sinon
        echo "C'est faux"
fi
#!/bin/bash

nom="RAREC3"

if [ $nom = "RAREC3" ]
then
        echo "Vive les RAREC3!"
else
        echo "Dégages t'es pas un RAREC3 !"
fi

On peut charger la variable comme ca pour tester… :

#!/bin/bash

if [ $1 = "RAREC3" ]
then
        echo "Vive les RAREC3!"
else
        echo "Dégages t'es pas un RAREC3 !"
fi
./monscript RAREC3      ###### pour tester
./monscript autre chose    ###### la il fera le sinon

On peut ensuite faire comme ca :

#!/bin/bash

if [ $1 = "RAREC3" ]
then
        echo "Vive les RAREC3!"
elif [ $1 = "Tontonfred" ]
then
        echo "Hello Tontonfred"
elif [ $1 = "RAREC4" ]
then
        echo "Alors les nouveaux ca va ?"
else
        echo "Z'êtes pas du CESI bye!"
fi

Utilisons maintenant les TESTS

Il est possible d’effectuer trois types de tests différents en bash :

  • des tests sur des chaînes de caractères ;
  • des tests sur des nombres ;
  • des tests sur des fichiers.

Tests sur les Chaines de caractères:

Condition Signification
$chaine1 = $chaine2 Vérifie si les deux chaînes sont identiques. Notez que bash est sensible à la casse : « b » est donc différent de « B ».
Il est aussi possible d’écrire « == » pour les habitués du langage C.
$chaine1 != $chaine2 Vérifie si les deux chaînes sont différentes.
-z $chaine Vérifie si la chaîne est vide.
-n $chaine Vérifie si la chaîne est non vide.
#!/bin/bash

if [ -z $1 ]
then
        echo "Pas de paramètre"
else
        echo "Paramètre présent"
fi

Test sur les Nombres:

Condition Signification
$num1 -eq $num2 Vérifie si les nombres sont égaux (equal). À ne pas confondre avec le « = » qui, lui, compare deux chaînes de caractères.
$num1 -ne $num2 Vérifie si les nombres sont différents (non equal).
Encore une fois, ne confondez pas avec « != » qui est censé être utilisé sur des chaînes de caractères.
$num1 -lt $num2 Vérifie si num1 est inférieur ( < ) à num2 (lower than).
$num1 -le $num2 Vérifie si num1 est inférieur ou égal ( <= ) à num2 (lower or equal).
$num1 -gt $num2 Vérifie si num1 est supérieur ( > ) à num2 (greater than).
$num1 -ge $num2 Vérifie si num1 est supérieur ou égal ( >= ) à num2 (greater or equal).
#!/bin/bash

if [ $1 -ge 20 ]
then
        echo "Vous avez envoyé 20 ou plus"
else
        echo "Vous avez envoyé moins de 20"
fi

Test sur les fichiers:

-e $nomfichier Vérifie si le fichier existe.
-d $nomfichier Vérifie si le fichier est un répertoire. N’oubliez pas que sous Linux, tout est considéré comme un fichier, même un répertoire !
-f $nomfichier Vérifie si le fichier est un… fichier. Un vrai fichier cette fois, pas un dossier.
-L $nomfichier Vérifie si le fichier est un lien symbolique (raccourci).
-r $nomfichier Vérifie si le fichier est lisible (r).
-w $nomfichier Vérifie si le fichier est modifiable (w).
-x $nomfichier Vérifie si le fichier est exécutable (x).
$fichier1 -nt $fichier2 Vérifie si fichier1 est plus récent que fichier2 (newer than).
$fichier1 -ot $fichier2 Vérifie si fichier1 est plus vieux que fichier2 (older than).

#!/bin/bash

read -p 'Entrez un répertoire : ' repertoire

if [ -d $repertoire ]
then
        echo "Bien, vous avez compris ce que j'ai dit !"
else
        echo "Vous n'avez rien compris..."
fi

Recap plus infos complémentaires:

Tests sur les fichiers/répertoires

Voici une liste des tests possibles sur les fichiers et/ou répertoires :

  • “-e fichier” : vrai si le fichier/répertoire existe.
  • “-s fichier” : vrai si le fichier à une taille supérieure à 0.
  • “-r fichier” : vrai si le fichier/répertoire est accessible en lecture.
  • “-w fichier” : vrai si le fichier/répertoire est accessible en écriture.
  • “-x fichier” : vrai si le fichier est exécutable ou si le répertoire est accessible.
  • “-O fichier” : vrai si le fichier/répertoire appartient à l’utilisateur.
  • “-G fichier” : vrai si le fichier/répertoire appartient au groupe de l’utilisateur.
  • “-b nom” : vrai si nom représente un périphérique (pseudo-fichier) de type bloc (disques et partitions de disques généralement).
  • “-c nom” : vrai si nom représente un périphérique (pseudo-fichier) de type caractère (terminaux, modems et port parallèles par exemple).
  • “-d nom” : vrai si nom représente un répertoire.
  • “-f nom” : vrai si nom représente un fichier.
  • “-L nom” : vrai si nom représente un lien symbolique.
  • “-p nom” : vrai si nom représente un tube nommé.
  • “fichier1 -nt fichier2″ : vrai si les deux fichiers existent et si fichier1 est plus récent que fichier2.
  • “fichier1 -ot fichier2″ : vrai si les deux fichiers existent et si fichier1 est plus ancien que fichier2.
  • “fichier1 -ef fichier2″ : vrai si les deux fichiers représentent un seul et même fichier.
Tests sur les entiers
  • “entier1 -eq entier2″ : vrai si entier1 est égal à entier2.
  • “entier1 -ge entier2″ : vrai si entier1 est supérieur ou égal à entier2.
  • “entier1 -gt entier2″ : vrai si entier1 est strictement supérieur à entier2.
  • “entier1 -le entier2″ : vrai si entier1 est inférieur ou égal à entier2.
  • “entier1 -lt entier2″ : vrai si entier1 est strictement inférieur à entier2.
  • “entier1 -ne entier2″ : vrai si entier1 est différent de entier2.
Tests sur les chaines de caractères

Les chaines doivent être entourées par des guillemets.

  • “-n “chaîne”" : vrai si la chaîne n’est pas vide.
  • “-z “chaîne”" : vrai si la chaîne est vide.
  • “”chaine1″ = “chaine2″” : vrai si les deux chaînes sont identiques.
  • “”chaine1″ != “chaine2″” : vrai si les deux chaînes sont différentes.
Les combinaisons de tests

Les combinaisons de tests sont utilisées quand on doit faire plusieurs tests simultanément, c’est à dire, quand on doit répondre à plusieurs conditions.

On utilise les opérateurs && et || comme dans les commandes composées. L’opérateur ! sert à inverser la condition.

  • SI test ALORS commandes FIN : exécute les commandes si test est VRAI
  • SI ! test ALORS commandes FIN : exécute les commandes si test est FAUX
  • SI test1 && test2 ALORS commandes FIN : exécute les commandes si test1 ET test2 sont vrais tous les deux
  • SI test1 -a test2 ALORS commandes FIN : pareil de précédemment, avec une autre notation
  • SI test1 && ! test2 ALORS commandes FIN : exécute les commandes si test1 est VRAI ET test2 est FAUX
  • SI test1 || test2 ALORS commandes FIN : exécute les commandes si test1 OU test2 sont VRAIS
  • SI test1 -o test2 ALORS commandes FIN : pareil de précédemment, avec une autre notation
  • SI ! { test1 || test2 } ALORS commandes FIN : exécute les commandes si NI test1 NI test2 sont VRAIS


 

EXERCICES

Le script demande une note ,et il renvoi ceci :

  • “Autiste” si la note est entre 16 et 20
  • “A” lorsqu’elle est entre 14 et 16
  • “B” si la note est entre 12 et 14
  • “C” si la note est entre 10 et 12
  • “D” si la note est inférieur à 10

 

Les variables utilisateur

Ce chapitre présente les fonctionnalités qui composent les bases de la programmation shell.

Le shell permet de définir ou redéfinir des variables qui conditionnent l’environnement de travail de l’utilisateur. Il est également possible de définir d’autres variables, dites variables utilisateur, qui vont permettre de stocker des informations qui seront nécessaires durant l’exécution d’un script.

1. Nommer une variable

Voici les règles à utiliser pour attribuer un nom à une variable :

  • le premier caractère fait partie de l’ensemble [a-zA-Z_] ;
  • les caractères suivants sont pris dans l’ensemble [a-zA-Z0-9_].

2. Définir une variable

Une variable est définie dès qu’elle est initialisée. Le contenu d’une variable est considéré par le shell comme une suite de caractères.

a. Affecter une chaîne de caractères à une variable

Exemples

$ var1=mot1
$ echo $var1
mot1
$
PUCE.png

Il ne faut pas mettre d’espace autour du symbole d’affectation : dans l’exemple suivant, le shell interprète var1 comme la commande à lancer, = et mot1 comme les deux arguments de la commande var1. Autrement dit, il n’interprète pas le signe = comme symbole d’affectation.

p128.png

b. Affecter une chaîne de caractères contenant au moins un espace

L’espace doit être protégé car c’est un caractère spécial du shell (séparateur de mots sur la ligne de commande).

Exemples

$ var2=’mot1 mot2 mot3’ #CORRECT
$ echo $var2
mot1 mot2 mot3
$ var2=mot1 mot2 mot3 #INCORRECT 
ksh: mot2:  not found
$

c. Variable indéfinie

Une variable qui n’a jamais été initialisée est vide.

PUCE.png

L’utilisation d’une variable vide n’est pas considérée comme une erreur en shell.

Exemple

$ echo $vide

$

d. Retirer la définition d’une variable

La commande interne unset permet de retirer la définition d’une variable.

Exemple

Définition d’une variable var :

$ var=12
$ echo $var
12

Elle apparaît dans la liste des variables définies au niveau du shell :

$ set | grep var
var=12

La définition de la variable est retirée :

$ unset var

La variable est indéfinie :

$ echo $var

$ set | grep var
$

e. Isoler le nom d’une variable

Il faut faire attention en concaténant le contenu d’une variable et d’une chaîne de caractères à ce que le shell interprète correctement le nom de la variable.

Exemple

Pour le shell, le caractère _ fait partie du nom de la première variable :

 

$ fic=resu
$ datejour=20110117
$ newfic=$fic_$datejour
$ echo $newfic
20110117

Pour le shell, la première variable se nomme fic_ (puisque le caractère souligné est autorisé à l’intérieur d’un nom de variable !). Celle-ci est donc substituée par sa valeur (donc vide !), puis concaténée avec le contenu de la variable datejour.

Pour faire comprendre au shell quels sont les caractères qui font partie du nom de la variable, il faut entourer le nom de cette dernière avec des {}.

Exemple

$ fic=resu
$ datejour=20110117
$ newfic=${fic}_$datejour
$ echo $newfic
resu_20110117

3. Substitution de variables

Le shell offre la possibilité d’attribuer une valeur par défaut aux variables non initialisées, ou au contraire, initialisées.

Expression ${variable:-valeur}

  • Si la variable n’est pas vide, l’expression est substituée par le contenu de celle-ci.
  • Si la variable est vide, l’expression est substituée par valeur.

Exemple

$ fic=/tmp/christie.log
$ echo "Le fichier traite sera: ${fic:-/tmp/default.log}"
Le fichier traite sera: /tmp/christie.log
$ unset fic
$ echo "Le fichier traite sera: ${fic:-/tmp/default.log}"
Le fichier traite sera: /tmp/default.log
$ echo $fic

$

Expression ${variable:=valeur}

  • Si la variable n’est pas vide, l’expression est substituée par $variable.
  • Si la variable est vide, variable est affectée avec valeur et l’expression est substituée par valeur.

Exemple

$ fic=/tmp/christie.log
$ echo "Le fichier traite sera: ${fic:=/tmp/default.log}"
Le fichier traite sera: /tmp/christie.log
$ echo $fic
/tmp/christie.log
$ unset fic
$ echo "Le fichier traite sera: ${fic:=/tmp/default.log}"
Le fichier traite sera: /tmp/default.log
$ echo $fic
/tmp/default.log
$

Expression ${variable:+valeur}

  • Si la variable n’est pas vide, l’expression est substituée par valeur.
  • Si la variable est vide, l’expression est substituée par $variable, donc vide.

Exemple

$ a=1
$ echo "Expression : ${a:+99}"
Expression : 99
$ unset a
$ echo "Expression : ${a:+99}"
Expression :
$

${variable:?message}

  • Si la variable n’est pas vide, l’expression est substituée par $variable.
  • Si la variable est vide, le shell affiche le nom de la variable suivie de la chaîne de caractères message.
PUCE.png

Si la variable est vide et que cette commande est placée dans un script shell, celui-ci affiche le message et se termine immédiatement.

Exemple

La variable var est vide :

$ echo $var

$ echo ${var:?"var non definie"}
bash: var: var non definie

Message par défaut :

$ echo ${var:?}
bash: var: parameter null or not set

Définition de la variable var :

$ var=definie
$ echo ${var:?"var non definie"}
definie
$






Sources :Eni .Site du Zéro

 

PDF Creator    Envoyer l'article en PDF   

Intro Shell RARE C5 “La piscine”

La piscine est peu profonde si on y pénètre par le bon côté.. A vrai dire c’est même une pataugeoire.
Par contre pour aller là où vous n’avez pas pied il faut savoir nager ou être équipé..


 

EXO 1.1

  1. Ouvrez une session en mode terminal. Tapez votre nom et votre mot de passe
  2. Quel est le prompt utilisé ?
  3. Affichez le nom de votre shell à l’aide d’une variable
  4. Ouvrez une deuxième session en mode terminal.. Connectez vous en tant que root
  5. Afficher le shell de root à l’aide d’une variable

EXO 1.2

  1. Affichez la liste des utilsateurs qui utilise comme shell de connexion le : /bin/bash
  2. Affichez leurs nombres
  3. Revenez sur la première console et optez pour le shell “sh” que se passe t’il ?
  4. Répétez l’étape précédent avec ksh. Que remarquez-vous ?
  5. Revenez à votre shell de départ
  6. Affichez le shell de connexion de root tout en restant sous votre identité
  7. En tant que root créez un utilisateur user2 et affectez-lui le /bin/sh comme shell de connexion
  8. Ouvrez une console et connectez-vous en tant que user2

EXO 1.3

  1. Affichez la liste des fichiers de votre répertoire courant sans explorer les sous répertoires
  2. Affichez les fichiers cachés de votre répertoire courant
  3. Affichez de maniére récursive, les caractéristiques de tous les fichiers de votre répertoire courant.
  4. Créez un répertoire nommé : Repertoire
  5. Copiez le fichier /etc/passwd dans Repertoire
  6. Renommez le fichier passwd en password
  7. Supprimez le fichier password
  8. Supprimez le dossier Repertoire
  9. Affichez le contenu du fichier /etc/group
  10. Afichez le nombre de lignes du fichier /etc/passwd
  11. Triez le fichier /etc/passwd et stockez le résultat dans un fichier nommé password dans votre répertoire courant.
  12. Affichez les 5 premières lignes du fichier /etc/group

Exo 1.4

  1. Affichez la liste des utilisateurs connectés sur le système
  2. Changez temporairement d’identité et devenez root
  3. Recherchez la chaine de caractères root dans le fichier /etc/passwd.récupérez le résultat dans un fichier tout en l’affichant sur l’écran
  4. Recherchez dans le répertoire / tous les fichiers dont le nom contient la chaine sh
  5. Affichez en Ko la taille totale des fichiers de votre répertoire courant
  6. Affichez des informations sur l’utilisation de l’espace disque de votre système de fichier /.
  7. Affichez des informations sur le contenu des fichiers suivants:
  • /etc/passwd
  • /etc/init.d
  • /bin/bash
  • /bin/sh
  • /etc/init.d/crond

EXO 1.5

  1. Sur une fenêtre console, lancez l’environnement sh
  2. Lancez les commandes suivantes: alias, history, logout
  3. Relancez les commandes précédentes en ksh puis en bash
  4. Essayez de rappeler ces commandes dans les trois environnements shell. Que constatez-vous ?

Alors vous êtes-vous noyé dans la pataugeoire ?

 

PDF Writer    Envoyer l'article en PDF   

Intro manipulation Shell #RARE

 

Exo 1 Déplacements dans une arborescence de répertoires et listage du contenu

  • Quel est votre répertoire courant ? Placez-vous dans votre répertoire principal ou bien la racine (si ce n’est pas déjà le cas) Affichez le contenu de votre répertoire principal

 

  • Utilisation de l’aide en ligne :
    consultez le manuel en ligne pour voir les différentes options de la commande ls
  • Regardez le contenu du premier niveau de l’arborescence Unix

 

Exo 2 Création et manipulation de répertoires

  • Replacez-vous dans votre répertoire principal
    Créez un répertoire d’exercice de nom ex_unix
  • Descendez dans ce répertoire
    créez-y deux sous-répertoires dir1 et dir2

  • Déplacez-vous dans le répertoire dir2 Créer le fichier fich

  • Déplacez-vous dans le répertoire dir2
    créé précédemment, déplacez le fichier dans le répertoire dir1

  • Détruisez le répertoire dir2. Opération qui se fait en deux étapes (à moins d’utiliser la commande rm -r) : destruction des fichiers se trouvant dans le répertoire destruction du répertoire proprement dit

Exo3 Manipulation et visualisation de fichiers

  • Créer un fichier 1.txt
    Expérimentez les différentes commandes de visualisation de fichiers-texte que sont : cat, more, head et tail
  • Concaténez tous vos fichiers texte sur un seul fichier de nom visu.txt Vérifiez le résultat en affichant le fichier ainsi créé

  • Faites une copie du fichier visu.txt sous le nom vis2.txt

  • La commande ln permet de réaliser un lien avec un autre fichier ou répertoire.
    Créez un lien pour le fichier fichier1

Word To PDF    Envoyer l'article en PDF   

Du shell au Script shell .. #RARE

Caractéristiques d’un interpréteur de commandes

Les interpréteurs de commandes disponibles en environnement Unix ont en commun les fonctionnalités suivantes :

  • Ils proposent un jeu de caractères spéciaux permettant de déclencher des actions particulières.
  • Ils possèdent des commandes internes et des mots clés parmi lesquels certains sont utilisés pour faire de la programmation.
  • Ils utilisent des fichiers d’initialisation permettant à un utilisateur de paramétrer son environnement de travail.

Chaque shell propose ses propres caractères spéciaux, commandes internes, mots clés et fichiers de paramétrage. Heureusement, les interpréteurs les plus utilisés actuellement dérivent tous du shell Bourne et ont, par conséquent, un certain nombre de fonctionnalités en commun.

Principaux interpréteurs de commandes

/usr/bin/sh

Cet exécutable correspond au shell POSIX sur certaines plates-formes (AIX, HP-UX), au Bourne Shell sur d’autres (Solaris). La page de manuel “sh” de chaque plate-forme indique la localisation des exécutables correspondant aux shells BOURNE et POSIX. Le shell POSIX possède, à quelques exceptions près, les fonctionnalités du ksh.

/usr/bin/ksh

Cet exécutable correspond au Korn Shell 88. Le programme “ksh” sait interpréter les scripts utilisant les fonctionnalités des shells Bourne, POSIX et Korn.

/usr/bin/ksh93

Cet exécutable correspond au ksh 93. Il s’agit d’un sur-ensemble du ksh 88. Ce shell n’est pas disponible sur toutes les plates-formes Unix.

/usr/bin/bash ou /bin/bash

Cet exécutable correspond au Bourne Again Shell. Le programme “bash” sait interpréter les scripts utilisant les fonctionnalités des shells Bourne, POSIX et Bourne Again. Le bash est disponible au téléchargement pour de nombreuses plates-formes UNIX qui ne possèdent pas ce shell en standard.

/usr/bin/csh

Cet exécutable correspond au C-shell. Le C-shell ne sait pas interpréter les scripts utilisant les fonctionnalités des shells Bourne, POSIX, Korn et Bourne Again. Il comprend uniquement la syntaxe C-shell.

 

Installer un nouveau shell

Pour le moment, vous devriez avoir sh et bash installés sur votre système. Si vous voulez essayer un autre shell, comme ksh par exemple, vous pouvez le télécharger comme n’importe quel paquet :

# apt-get install ksh

Une fois installé, il faut demander à l’utiliser pour votre compte utilisateur. Pour cela, tapez :

$ chsh

chsh signifie Change Shell.
On vous demandera où se trouve le programme qui gère le shell. Vous devrez indiquer /bin/ksh pour ksh, /bin/sh pour sh, /bin/bash pour bash, etc.

Création d’un premier Script

On passe par la commande touch ou par un éditeur pour créer le script

touch monscript.sh ou nano monscript.sh

J’ai donné ici l’extension .sh à monscript. On le fait souvent par convention pour indiquer que c’est un script shell, mais ce n’est pas obligatoire. Certains scripts shell n’ont d’ailleurs pas d’extension du tout.Il pourrait s’appeler monscript

La première ligne du script commence par le “sha-bang.”Il sert à dire quel shell on va utiliser .il permet de charger le bon shell mais il n’est pas obligatoire..si il n’est pas présent le shell de l’utilisateur courant sera utilisé.

#!        <---Ca c'est le sha-bang
on aura donc en début de script bash:
#!/bin/bash

Par convention et bon sens on va ajouter des commentaires dans le script. Ce sont des lignes qui ne seront pas exécutées mais qui permettent d’expliquer ce que fait votre script.

Tous les commentaires commencent par un #

#!/bin/bash

# Affichage du répertoire courant
pwd

Ensuite il faut enregistrer le script et lui donner des droits d’execution. Avec la commande :

chmod +x monscript.sh

il passera donc en – rwx r-x r-x au niveau de la permission

Et enfin on l’exécute avec ./

./monscript.sh

Lire PDF commandes interne et externe

EXO Commandes internes et externes

  1. Connectez-vous avec votre nom de login et ouvrez une console
  2. Dites si echo est une commande interne ou externe
  3. Quel est le résultat des commandes suivantes:
  • help
  • help echo
  • help cd
  • help ls cd –help
  • ls –help

Que pouvez-vous en déduire ?

4. Quel est le type de données contenu dans les fichiers suivants ?

  • /bin/bash
  • /etc/init.d
  • /sbin/poweroff

 

LIRE PDF AFFICHAGE A L’ECRAN

 Exo Affichage à l’écran

1. Exécutez la commande echo qui permet d’afficher le texte suivant à l’écran :

Les RARE C3 sont les meilleurs
oui, je le pense aussi

2. A l’aide de la commande echo, affichez la liste de caractères suivants:

& ~ # ( ) | \ ^@ $ * ! ;

3. Quel est le résultat affiché par les lignes de commandes suivantes:

echo pwd
echo `pwd`
echo "il ya `ls | wc -l` fichiers dans `pwd`"
echo "`whoami`, nous sommes le `date '+%d/%m/%y'`"
echo "$(whoami), nous sommes le $(date) "

Caractères spéciaux du shell

Caractères sh (Bourne) ksh 88 bash Signification
espacetabulationsaut de ligne oui oui oui Séparateurs de mots sur la ligne de commande.
& oui oui oui Arrière-plan.
| < << > >> oui oui oui Tube et redirections.
>| non oui oui Écrasement d’un fichier (option noclobber).
(cmde1;cmde2){cmde1;cmde2} oui oui oui Regroupement de commandes.
; oui oui oui Séparateur de commandes.
* ? [ ] oui oui oui Expressions pour noms de fichier et case.
* ? [ ] non oui oui Expressions pour la commande de test [[...]].
?() +() *()!() @() non oui oui Expressions pour noms de fichier [[ ]] et case.
$ et ${ } oui oui oui Valeur d’une variable.
`…` oui oui oui Substitution de commandes.
$() non oui oui Substitution de commandes.
’…’”…”\ oui oui oui Caractères de protection.
$(( )) non oui oui Substitution d’expression arithmétique.
cmde1 && cmde2cmde1 || cmde2 oui oui oui Opérateurs logiques du shell.
# oui oui oui Commentaire.
~ non oui oui Répertoire d’accueil de l’utilisateur.

Lire PDF sur les redirections

Lire PDF tubes de communications

Lire PDF Regroupement de commandes

Lire PDF Processus en arrière plan

L’environnement SHELL

EXO Pré-Requis

PDF Download    Envoyer l'article en PDF   

Introduction à Apache et Sécurisation de votre accés Web #RARE #C21

Apache est un serveur http libre, c’est un des serveurs http les plus utilisé sur Internet avec plus de 65% des sites d’Internet en Novembre 2011  (contre environ 20% pour IIS).

Apache est conçu pour prendre en charge de nombreux modules lui donnant des fonctionnalités supplémentaires : interprétation du langage PerlPHPPython et Ruby, serveur proxyCommon Gateway InterfaceServer Side Includes, réécriture d’URL, négociation de contenu, protocoles de communication additionnels, etc. Néanmoins, il est à noter que l’existence de nombreux modules Apache complexifie la configuration du serveur web. En effet, les bonnes pratiques recommandent de ne charger que les modules utiles : de nombreuses failles de sécurité affectant uniquement les modules d’Apache sont régulièrement découvertes.

On trouvera une documentation complète sur apache (en anglais) sur le site suivant :
http://httpd.apache.org/docs/.

Sur une distribution de la famille Debian pour installer Apache : apt-get install apache2

Pour installer php5 : apt-get install libapache2-mod-php5

Sur une distribution de la famille Debian lancer le service apache :
# /etc/init.d/apache2 start.
Pour vérifier que le service apache tourne :
# ps -ef|grep apache
Pour relancer apache après un changement de configuration, tapez :
# /etc/init.d/apache2 start.

La configuration globale d’apache s’effectue par modification du fichier de configuration /etc/apache2/apache2.conf. Apache pouvant gérer plusieurs serveurs, on trouve des compléments pour la configuration de chaque serveur dans /etc/apache2/site-enabled. Les fichiers de /etc/apache2/site-enabled sont inclus dans apache2.conf par un Include et suivent la même syntaxe. Les fichiers dans /etc/apache2/site-enabled correspondent aux serveurs activés et sont en fait un lien symbolique vers un fichier dans /etc/apache2/site-available, qui contient la liste de tous les serveurs disponibles. Par défaut, il n’y a qu’un seul serveur activé : le serveur par défaut. Ce qui suit décrit les principaux paramètres, et leur valeur attribuée par défaut à l’installation.

Dans apache2.conf:

DocumentRoot /var/www/html C’est le chemin par défaut du site Web

DirectoryIndex index.html index.php index.htm…Nom de la page d’index

Apache dans Webmin

Sécuriser Apache et son serveur

Tout d’abord Retour sur SSH qui va permettre d’accéder à votre serveur pour l’administrer. Merci a Alsacreation pour la personnalisation des scripts..

Configuration SSH

Afin de sécuriser l’accès SSH au serveur, éditons le fichier /etc/ssh/sshd_config. Nous allons changer le port de connexion par défaut pour éviter quelques attaques par bruteforce sur le port 22, qui est bien connu pour héberger ce service. N’oubliez pas de préciser ce nouveau port (dans Putty ou en ligne de commande ssh sous Linux) à la prochaine connexion.

vi /etc/ssh/sshd_config

Port 2222                  # Changer le port par défaut
PermitRootLogin no         # Ne pas permettre de login en root
Protocol 2                 # Protocole v2
AllowUsers dew             # N'autoriser qu'un utilisateur précis

Redémarrez le service SSH après ces modifications :

/etc/init.d/ssh restart

Alerte login Root

Vous pouvez éditer le fichier /root/.bashrc qui est exécuté au démarrage d’une sesion root pour envoyer un e-mail de notification. De cette façon, vous serez prévenu lorsqu’un login est effectué.

vi /root/.bashrc

Ajoutez la ligne (en modifiant l’adresse e-mail de destination) :

echo 'Accès Shell Root le ' `date` `who` | mail -s `hostname` Shell Root de `who | cut -d"(" -f2 | cut -d")" -f1` monitoring@test.com

Profitons-en pour un peu de personnalisation esthétique avec ces lignes :

alias ls='ls $LS_OPTIONS --color=auto'
alias ll='ls $LS_OPTIONS -al --color=auto'
alias vi='vim'

 Mise en place d’un Firewall (source alsacreations)

vi /etc/init.d/firewall

#!/bin/sh

# Vider les tables actuelles
iptables -t filter -F

# Vider les règles personnelles
iptables -t filter -X

# Interdire toute connexion entrante et sortante
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT DROP

# ---

# Ne pas casser les connexions etablies
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# Autoriser loopback
iptables -t filter -A INPUT -i lo -j ACCEPT
iptables -t filter -A OUTPUT -o lo -j ACCEPT

# ICMP (Ping)
iptables -t filter -A INPUT -p icmp -j ACCEPT
iptables -t filter -A OUTPUT -p icmp -j ACCEPT

# ---

# SSH In
iptables -t filter -A INPUT -p tcp --dport 2222 -j ACCEPT

# SSH Out
iptables -t filter -A OUTPUT -p tcp --dport 2222 -j ACCEPT

# DNS In/Out
iptables -t filter -A OUTPUT -p tcp --dport 53 -j ACCEPT
iptables -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -t filter -A INPUT -p udp --dport 53 -j ACCEPT

# NTP Out
iptables -t filter -A OUTPUT -p udp --dport 123 -j ACCEPT

Si vous hébergez un sevreur web (Apache) :

# HTTP + HTTPS Out
iptables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 443 -j ACCEPT

# HTTP + HTTPS In
iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 8443 -j ACCEPT

Si vous hébergez un serveur FTP :

# FTP Out
iptables -t filter -A OUTPUT -p tcp --dport 20:21 -j ACCEPT

# FTP In
modprobe ip_conntrack_ftp # ligne facultative avec les serveurs OVH
iptables -t filter -A INPUT -p tcp --dport 20:21 -j ACCEPT
iptables -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Si vous hébergez un serveur de mail avec SMTP, POP3 et IMAP :

# Mail SMTP:25
iptables -t filter -A INPUT -p tcp --dport 25 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 25 -j ACCEPT

# Mail POP3:110
iptables -t filter -A INPUT -p tcp --dport 110 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 110 -j ACCEPT

# Mail IMAP:143
iptables -t filter -A INPUT -p tcp --dport 143 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 143 -j ACCEPT

# Mail POP3S:995
iptables -t filter -A INPUT -p tcp --dport 995 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 995 -j ACCEPT

N’oubliez pas de tester vos régles !!! Exemples, elles pourraient vous empêcher d’accéder à votre accés ssh si elles sont trop restrictives.

N’oubliez pas non plus de redémarrer le sevice firewall aprés les modifs..

######################################################################

IPtables / Netfilter

IPtables (associé à Netfilter) est un des meilleurs firewalls pour Linux, et certainement le plus répandu. Vous pourrez trouver de nombreux scripts de configuration à son sujet. En voici un, à adapter à votre configuration. A tout instant, utilisez la commande iptables -L -v pour lister les règles en place.

Celles-ci portent sur 3 chaînes : INPUT (en entrée), FORWARD (dans le cas d’un routage réseau) et OUPUT (en sortie). Les actions à entreprendre sont ACCEPT (accepter le paquet), DROP (le jeter), QUEUE et RETURN.

Arguments utilisés :

  • i : interface d’entrée (input)
  • i : interface de sortie (output)
  • t : table (par défaut filter contenant les chaînes INPUT, FORWARD, OUTPUT)
  • j : règle à appliquer (Jump)
  • A : ajoute la règle à la fin de la chaîne (Append)
  • I : insère la règle au début de la chaîne (Insert)
  • R : remplace une règle dans la chaîne (Replace)
  • D : efface une règle (Delete)
  • F : efface toutes les règles (Flush)
  • X : efface la chaîne
  • P : règle par défaut (Policy)
  • lo : localhost (ou 127.0.0.1, machine locale)

######################################################################

Fail2ban

Fail2ban est un script surveillant les accès réseau grâce aux logs des serveurs. Lorsqu’il détecte des erreurs d’authentification répétées, il prend des contre-mesures en bannissant l’adresse IP grâce à iptables. Cela permet d’éviter nombre d’attaques bruteforce et/ou par dictionnaire.

Installation

apt-get install fail2ban

Configuration

vi /etc/fail2ban/fail2ban.conf

loglevel
Niveau de détail des logs (défaut 3)
logtarget = /var/log/fail2ban.log
Chemin vers le fichier de log (description des actions entreprises par fail2ban)

Les services à monitorer sont stockés dans jail.conf. Il est recommandé d’en effectuer une copie nommée jail.local qui sera automatiquement utilisée à la place du fichier exemple.

cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

vi /etc/fail2ban/jail.local

Quelques paramètres globaux :

ignoreip = 127.0.0.1
Liste des adresses IP de confiance à ignorer par fail2ban
bantime = 600
Temps de ban en secondes
maxretry = 3
Nombre d’essais autorisés pour une connexion avant d’être banni
destmail monitoring@test.com
Adresse e-mail destinataire des notifications
action
Action à entreprendre en cas de détection positive (voir dans /etc/fail2ban/action.d/)

Chaque section possède ses propres paramètres qui prennent le pas sur les globaux s’ils sont mentionnés :

enabled
Monitoring activé (true) ou non (false)
maxretry, bantime, ignoreip, destmail
Voir ci-dessus
port
Port IP concerné
logpath
Fichier de log à analyser pour détecter des anomalies
filter
Filtre utilisé pour l’analyser du log

Les filtres par défaut sont stockés dans /etc/fail2ban/filter.d. Ils contiennent en général une instruction failregex suivie d’une expression régulière matchant la détection d’une authentification erronée. Par exemple pour le service Courier :

failregex = LOGIN FAILED, ip=[<HOST>]$

Note : Celle-ci peut être précisée directement dans jail.local à la section appropriée pour prendre le pas sur la directive filter.

Modifiez les ports le cas échéant dans la section ssh si vous avez suivi la recommandation ci-dessus…

enabled = true
port    = 2222

Après modification de la configuration, n’oubliez pas de redémarrer fail2ban : /etc/init.d/fail2ban restart

Rkhunter

Rootkit Hunter

Rootkit Hunter est un programme de détection de rootkits. Vous pouvez l’installer grâce à :

apt-get install rkhunter

Il procédera à des détections journalières anti-rootkits et enverra des notifications par e-mail si nécessaire. Il est conseillé de l’installer très tôt car il calcule l’empreinte MD5 des programmes installés afin de détecter d’éventuels changements. Editez /etc/default/rkhunter pour indiquer l’adresse de notification et l’exécution journalière :

vi /etc/default/rkhunter

REPORT_EMAIL="monitoring@test.com"
CRON_DAILY_RUN="yes"

En cas de fausses détections positives sur des répertoires ou fichiers existants et sains, éditez /etc/rkhunter.conf pour les ajouter à la liste des éléments autorisés.

vi /etc/rkhunter.conf

ALLOWHIDDENDIR=/dev/.udev
ALLOWHIDDENDIR=/dev/.static

Vous pouvez également utiliser chkrootkit qui est un équivalent.

Empêcher l’accès aux sous dossiers

Bloquer l’accès à PhpMyAdmin par exemple.

Sur un reverse proxy

/etc/apache2/apache2.conf
RewriteCond %{THE_REQUEST} /phpmyadmin/
RewriteRule ^.*$ - [G,L]

Via le .htaccess

Renvoie un code 403.

RewriteRule ^phpMyAdmin - [F]

Empêcher l’accès à la racine de apache

/etc/apache2/sites-available/default
et /etc/apache2/sites-available/default-ssl
<Directory /var/www/>
                Options -Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                deny from all
</Directory>

Désactiver le listage des répertoires

Changer « Indexes » en « -Indexes ».

/etc/apache2/sites-available/default
/etc/apache2/sites-available/default-ssl
et les configurations des vhosts

Attribuer les permissions correctement

cd /var/www
chown www-monsite:www-monsite -R *
find . -type f -exec chmod 644 {} \;
find . -type d -exec chmod 755 {} \;
PDF    Envoyer l'article en PDF   

Afficher les infos matériel sous Linux #C21 #TIPS

linux22

Questions de Olivier C : Comment obtenir les infos matériel en ligne de commande sous linux ?

infos sur le ou les processeurs  :  cat /proc/cpuinfo

infos carte mère et bios : dmidecode  et  lspci  et  lsusb

infos sur les périphériques montés : mount

Sinon il ya le fameux:

apt-get install lshw
root@home:~# lshw

Informations sur la machine

- La marque de mon PC
- Son numéro de série 
- Le modèle du PC

Informations concernant la carte mère

lshw me donne pour la carte mère :
- La référence de la carte mère
- Le constructeur de la carte mère
- Le numéro de série

Informations sur le bios

J’obtiens comme informations sur le bios :
- La version du bios
- Le fabriquant du bios

Caractéristiques du processeur

Pour le cpu la liste des informations que j’ai retenue est :
- La fréquence du processeur
- La marque du processeur
- Le socket du cpu
- La liste des instructions et des fonctionnalités supportées
- La fréquence du bus
- Les niveaux de cache du cpu et leurs tailles
- Le nombre de coeur
- La taille des instructions supportées (processeur 32bits ou 64 bits).

Informations sur la mémoire du pc

Concernant la mémoire vive du pc je retiens :
- La capacité totale de mémoire de la machine
- Le nombre de slot occupés et surtout le nombre de slot vides (utile pour prévoir un upgrade matériel sans démonter sa machine).
- La référence des barettes de ram
- La taille des barettes de mémoire
- La fréquence de la mémoire et même son temps de latence si vous avez de la chance

Autres informations intéréssantes

- Modèle, taille, et partitionnement des disques durs
- Liste du matériel pci et pci express (carte réseau, carte graphique, carte son …) avec les modèles et les constructeurs.

PDF Creator    Envoyer l'article en PDF   

Afficher les services Actifs sous Linux #C21 #RARE

 

service --status-all|grep -i pid

Sinon après un peu de recherche sous debian il ya:

apt-get install chkconfig
# chkconfig -l 

# chkconfig -l

acpid                     0:off  1:off  2:on   3:on   4:on   5:on   6:off
alsa-utils                0:off  1:off  2:off  3:off  4:off  5:off  6:off  S:on
atd                       0:off  1:off  2:on   3:on   4:on   5:on   6:off
bluetooth                 0:off  1:off  2:on   3:on   4:on   5:on   6:off
bootlogd                  0:off  1:off  2:off  3:off  4:off  5:off  6:off  S:on
bootlogs                  0:off  1:on   2:on   3:on   4:on   5:on   6:off
bootmisc.sh               0:off  1:off  2:off  3:off  4:off  5:off  6:off  S:on
checkfs.sh                0:off  1:off  2:off  3:off  4:off  5:off  6:off  S:on
checkroot.sh              0:off  1:off  2:off  3:off  4:off  5:off  6:off  S:on
console-setup             0:off  1:off  2:off  3:off  4:off  5:off  6:off  S:on
cpufrequtils              0:off  1:off  2:on   3:on   4:on   5:on   6:off
cron                      0:off  1:off  2:on   3:on   4:on   5:on   6:off
dbus                      0:off  1:off  2:on   3:on   4:on   5:on   6:off
...

Significations:

* 0 System Halt * 1 Single user * 2 Full multi-user mode (Default) * 3-5 Same as 2 * 6 System Reboot


PDF Writer    Envoyer l'article en PDF   

Les indispensables de l’Admin système débutant sous Debian #C21 #Rappels

top

Ceci n’est pas un cours mais un petit “TIPS” pour vous aider à vous remettre dans le bain..

 Créer un fichier vide

touch le-nom-du-fichier

touch -t le-nom-du-fichier (-t utilise la date indiquée plutôt que la date actuelle)

 Modifier la permission d’un fichier ou dossier

chmod 755 le-nom-du-dossier-ou-fichier

chmod -R 755 le-nom-du-dossier (Modifie récursivement les autorisations des dossiers et leurs contenus)

Modifier le propriétaire d’un fichier ou Dossier

chown proprietaire le-nom-du-dossier-ou-fichier

chown -R proprietaire le-nom-du-dossier (Modifie récursivement l’appartenance des répertoires et leurs contenus)

Redémarrer un service sous Debian

/etc/init.d/lenomduservice start , stop

Editer un fichier sous debian

Sous Unix, et en particulier sous Linux, la configuration du système et des programmes se fait très souvent en éditant des fichiers textes qui contiennent des paramètres de configuration. Ces paramètres de configuration suivent une certaine syntaxe, différente pour chaque programme, et que l’utilisateur doit connaître. Généralement, il y a une instruction de configuration par ligne de texte. Le système ou le programme va alors lire son ou ses fichier(s) de configuration et s’adapter à la configuration demandée.

Presque tous les programmes et systèmes Unix sont conçus avec une règle qui dit qu’il ne tient pas compte des lignes du fichier de configuration qui commencent par un certain caractère (souvent #). L’utilisateur peut alors mettre des lignes de commentaires dans le fichier de configuration en commençant ces lignes par le caractère particulier. Il peut aussi facilement activer ou désactiver une ligne du fichier de configuration en enlevant ou en ajoutant le caractère particulier au début de la ligne. Le fait de désactiver ainsi une ligne de configuration se dit « commenter une ligne » et le fait d’activer ainsi une ligne de configuration se dit « décommenter une ligne ». Ces expressions seront régulièrement utilisées dans la suite de cette formation.

vi /etc/nom-du-fichier-a-editer  (Editeur incontournable sur un système unix/linux)

gedit  /etc/nom-du-fichier-a-editer (Editeur sous Gnome)

kedit /etc/nom-du-fichier-a-editer (Editeur sous KDE)

vim /etc/nom-du-fichier-a-editer (Version améliorer de vi mais à installer)

emacs /etc/nom-du-fichier-a-editer (Pour les puristes)

Changer son ip sous Debian

gedit /etc/network/interfaces

En statique :
auto eth0
iface eth0 inet static
address 192.168.0.7
netmask 255.255.255.0
gateway 192.168.0.254

En client DHCP :
auto eth0
allow-hotplug eth0
iface eth0 inet dhcp

Redémarrer les services réseau :
/etc/init.d/networking restart

 

Vider le cache DNS  (Client)

Il suffit simplement de relancer le deamon NSCD :

/etc/init.d/nscd restart

Si cela ne marche pas, vous devez installer le paquet « nscd »

apt-get install nscd

Changer le nom d’hôte de votre Debian

Editez le fichier /etc/hostname

gedit /etc/hostname

 Redémarrer le service hostname

/etc/init.d/hostname.sh

Testez votre modification en utilisant les commandes

hostname

hostname -f

Affiche l’état de tout les processus en cours

ps -e

Affiche les informations mise à jour périodiquement sur les processus, l’utilisation de la mémoire, du CPU.

top

Plus complet regardez ceci : http://www.tontonfred.net/blog/?p=865

Déport d’affichage par SSH

SSH possède une fonction de déport d’affichage. Il faut que le serveur SSH distant ait autorisé cette fonction.

ssh -X login@serveur.exemple.org

 

 La programmation de tâches

Exécuter un commande périodiquement

La cron est un programme (installé par défaut) qui est chargé de lancer d’autres programmes de manière périodique et automatique. Chaque utilisateur peut définir avec sa crontab les programmes qu’il veut lancer périodiquement. Il lui suffit d’éditer sa cron et de définir la commande et sa périodicité d’exécution.

Par exemple, je veux que mon ordinateur me réveille tous les matins à 7h12 en jouant un mp3. J’édite ma crontab :

% crontab -e

Je me retrouve alors dans vim avec un fichier vide. J’ajoute la ligne :

12 7 * * * music123 ~/music/fichier.mp3

J’enregistre et je quitte ; les changements sont alors automatiquement pris en compte par le système.

Explications :

  1. Les 5 premiers ensembles de caractères séparés par des espaces (ici, 12 7 * * *) définissent la fréquence. Dans l’ordre, on trouve :
    • les minutes,
    • les heures,
    • le jour du mois,
    • le mois,
    • le jour de la semaine (sachant que Lundi vaut 1, Mardi vaut 2, etc.).

    Pour exécuter une commande chaque jour à 7h12, on fixe donc le champ minute à 12, le champ heure à 7, puis on met des étoiles dans les autres champs pour dire qu’il faut que ce soit exécuté tous les jours dans le mois, tous les mois et tous les jours de la semaine.

  2. Enfin, on trouve la commande à exécuter : (ici, music123 ~/music/fichier.mp3).

Quand la cron lance un programme, elle envoie par mail à l’utilisateur le texte que ce programme écrirait sur la console s’il était lancé à la main ; sauf si le programme n’a rien écrit. Pour éviter de recevoir un mail tous les matins qui me dit qu’il a bien joué mon fichier mp3, je modifie l’entrée dans la cron en renvoyant la sortie texte du programme vers /dev/null :

12 7 * * * music123 ~/music/fichier.mp3 1>/dev/null 2>&1

Autre exemple : j’ai une connexion permanente à Internet et je veux aussi que fetchmail aille chercher mes mails tous les quarts d’heure. J’édite ma cron et je rajoute la ligne suivante :

*/15 * * * * fetchmail –silent

Explications :

  1. Les 5 premiers ensembles de caractères */15 * * * * définissent la fréquence « toutes les quinze minutes ».
  2. J’exécute fetchmail avec l’option –silent qui n’écrit dans sa sortie que les messages d’erreur ; comme ça, je ne recevrais un mail que quand le rappatriement des mails se passe mal.

Exécuter une commande à une date donnée

Par exemple, pour exécuter les commandes date puis df -h le 28 septembre 2008 à midi 42, tapez :

% at 12:42 28.09.2008

Vous voyez alors apparaître le prompt du programme at pour taper les commandes :

at> date

at> df -h

Une fois que vous avez fini de taper les commandes, utilisez la combinaison de touches Ctrl+d. Le résultat de la série de commandes, appelée job, vous sera envoyé par mail juste après leur exécution.

Pour voir la liste des jobs en attente, utilisez la commande atq. Pour annuler un job, tapez atrm numéro_du_job.

Surveiller les connexions réseau du serveur “Humour”

  • netstat -lapute
  • netstat -taupe
  • netstat -nao
Word To PDF    Envoyer l'article en PDF   

Introduction à Samba sous Gnu/Linux #C21

Samba est un logiciel libre qui supporte le protocole CIFS (Common Internet File System), anciennement appelé SMB (Server Message Block), sous licence GNU GPL 3, il est utilisé pour partager des ressources (fichiers, imprimantes …) à travers un réseau entre des postes Microsoft Windows et un serveur de fichier sous Linux.

À partir de la version 3, on peut intégrer un serveur Samba à un domaine Microsoft Windows Server, soit en tant que contrôleur de domaine principal (PDC) ou en tant que membre d’un domaine. On peut également le joindre à un domaine Active Directory. Il fonctionne sur la plupart des systèmes Unix, comme GNU/Linux, Sun Solaris, AIX et les variantes de BSD, y compris MacOSx Server (qui a été ajouté au client Mac OS X en version 10.2). Samba fait partie intégrante de presque toutes les distributions GNU/Linux.

Voici la liste des ports TCP et UDP utilisés par les protocoles SMB et CIFS pour le partage de fichiers et d’imprimantes.

Port Protocole Nom du service
135 TCP et UDP Localisateur de services RPC
137 TCP et UDP NetBIOS Name Service (nbname)
138 UDP NetBIOS Datagram Service (nbdatagram)
139 TCP NetBIOS Session Service (nbsession)
445 TCP et UDP Services de dossiers partagés Windows

Installation de Samba pour quelques grandes familles de distribs :

Si vous êtes sous Mandriva la famille Mandrake :

# urpmi samba samba-common samba-client

Sous Fedora et la famille Red-hat :

# yum install samba samba-common samba-client

Sous Debian, Ubuntu, linuxmint… :

# apt-get install samba samba-common smbclient smbfs samba-doc

Sous Slackware :

Samba est déjà présent sur le CD-ROM, l’installez en faisant :

# installpkg /chemin_du_fichier/samba-xxx.tgz

  • ATTENTION AUX DIFFERENCES EN FONCTION DES DISTRIBUTIONS
  • ATTENTION AUX DIFFERENTES VERSIONS DE SAMBA

Une fois SAMBA installé il faut se rendre à l’endroit ou se trouve le fichier de configuration.

Dans /etc ,dans /etc/samba en fonction de la distribution.

Le fichier de configuration principale est: smb.conf

Il suffit ensuite d’utiliser un éditeur de fichier pour éditer, modifier, compléter celui-ci.

ex: vi /etc/samba/smb.conf

La commande « testparm », sert à vérifier que le fichier de configuration de samba ne comporte pas d’erreurs. Elle sert également à connaitre le rôle de son serveur de fichier Samba. Vous pouvez lancer cette commande de n’importe ou.

La section [global] contient les options communes à tous les répertoires partagés.

Voici quelques options utilisables :

workgroup 
Le nom du groupe de travail.
server string 
La description du serveur, qui apparaitra à coté de son nom dans l’explorateur Windows. Si la description contient la variable %h, il sera remplacé par le nom d’hôte de la machine.
encrypt passwords Attention aux soucis en fonction des versions
Détermine si les mots de passe doivent être cryptés avant d’être transmis. C’est fortement recommandé et tous les systèmes Windows à partir de 98 et NT4 SP3 utilisent cette fonctionnalité par défaut.
log file 
Le nom du fichier qui contiendra le journal des activités du serveur. On peut avoir un journal par machine client en utilisant %m dans le nom du fichier. Le %m sera remplacé par le nom de la machine client.
max log size 
Taille maximale du fichier journal, en Ko.
Ensuite on retrouve les partages sous cette forme:[<nom du partage>] 

Les paramètres principaux sont les suivantes :

comment 
La description du répertoire partagé.
path 
Le chemin du répertoire partagé. C’est le contenu du répertoire indiqué qui sera partagé.
read only 
Détermine si les clients pourront écrire ou non dans le répertoire partagé.
public 
Autoriser ou non les connexions sans mot de passe.
valid users 
Liste des seuls utilisateurs autorisés à se connecter séparés par des espaces. Si on veut autoriser tous les utilisateurs il ne faut pas mettre cette option.
browseable 
Détermine si le partage apparaitra dans la liste des partages du serveur.

De nombreuses autres options sont disponibles. Elles sont détaillées dans la page de man de smb.conf

EXEMPLE

[global]
workgroup = CRC12
server string = Serveur Samba sur %h
encrypt passwords = true
log file = /var/log/samba/log.%m
max log size = 1000
socket options = TCP_NODELAY
[cdrom]
comment = Samba server's CD-ROM
read only = yes
locking = no
path = /cdrom
guest ok = yes
[partage]
path = /media/d/partage
available = yes
browsable = yes
public = yes
writable = yes
[tontonfred]
comment = Site web
path = /var/www/tontonfred.net
read only = no

Si vous décidez de rendre privé un partage :( Commande pour créer un user Samba)

smbpasswd -a <nom de l’utilisateur>

 

Pour accéder aux partage sous Windows, il suffit d’ouvrir le voisinage réseaux d’une station Windows et de vérifier si la machine y est.

Attention dans Authentification :

security = share  =========>Accès sans mot de passe

security = user   ==========>Accès avec demande de mot de passe

Cas particulier: accéder à un dossier partagé par Windows 7 (Source Ubuntu-fr)

Il est possible que vous ayez de la difficulté à accéder à des dossiers partagés par un ordinateur fonctionnant avec Windows 7, même en saisissant correctement vos informations d’identification du poste distant. Ceci est dû apparemment à une incompatibilité entre les modes departage de Windows 7 et ceux des précédentes versions de Windows (sur lesquels se base Samba). Pour corriger la situation, vous devez modifier certains paramètres concernant la gestion des partages par Windows 7.

  1. Dans votre ordinateur fonctionnant sous Windows 7, ouvrez une session à l’aide d’un compte d’administrateur;
  2. Ouvrez l’éditeur de base de registre. Appuyez sur le bouton Démarrer, puis dans le champ Rechercher les programmes ou fichiers, inscrivez regedit et appuyez sur la touche [Entrée] de votre clavier;
  3. Développez l’arborescence jusqu’à la clé de registre HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\ puis:
    • Modifiez la valeur de la clé everyoneincludesanonymous de 0 vers 1;
    • Modifiez la valeur de la clé NoLmHash de 1 vers 0;
  4. Développez l’arborescence jusqu’à la clé de registre HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\LanmanServer\Parameters, puis:
    • Modifiez la valeur de la clé restrictnullsessaccess de 1 vers 0;
  5. Redémarrez votre ordinateur.

Pour se connecter en ligne de commande à un partage à partir de Linux, on peut utiliser la commande:

smbclient //<nom du serveur>/<nom du partage> -U <utilisateur>

Il est également possible de monter un partage Samba avec

smbmount //<nom du serveur>/<nom du partage> <répertoire local>

Différentes options sont disponibles. On peut les consulter dans man smbclient et man smbmount.

Par exemple, pour monter un répertoire “public” il faut préciser qu’il faut se connecter en guest :

smbmount //serveur/partage /point_de_montage -o guest

Même chose à partir d’un Windows Client

net use z: \\10.0.0.10\monrepertoire  monpassword /user:toto /persistent:no

 

Le fonctionnement de Samba repose principalement sur trois services (daemons): smbd , nmbd et winbindd

  • smbd 
    Ce service est celui qui permet le partage des fichiers et des imprimantes. Son paramètrage se fait par l’intermédiaire du fichier deconfiguration /etc/samba/smb.confsmbd vérifie toutes les trois minutes ce fichier pour prendre en compte les modifications ; pour une application immédiate des changements, relancez ce service
  • nmbd 
    Ce service sert à l’envoi et la découverte des noms NetBIOS (nom des machines) dans le réseau local. Il est également utilisé pour la résolution de noms et la fonction WINS, lorsque votre serveur Samba est le serveur d’un réseau NetBIOS. Ses paramètres sont aussi renseignés dans le fichier de configuration /etc/samba/smb.conf.
  • winbindd 
    Ce service n’est utilisé que lorsqu’un serveur Samba intègre un domaine NT ou pour gérer les relations d’approbation entre le serveur Samba et un domaine Windows / Active Directory.

Quand vous effectuez une modification dans le fichier smb.conf, il faut redémarrer le service Samba en relation avec la modification.

/etc/init.d/samba restart

service samba restart

/etc/init.d/smbd restart

Pour optimiser le fonctionnement de Samba on peut utiliser des variables d’environnement:

Variables du client
%a Architecture du client
Exemple: Win95, WfWg, WinNT, Samba …
%I Adresse IP du client
%m Nom NetBios du client
%M Nom DNS du client
Variables utilisateur
%g Groupe primaire de l’utilisateur %u
%H Répertoire home de l’utilisateur %u
%u Nom de l’utilisateur Unix courant
Variables de partage
%P Racine du partage actuel
%S Nom du partage actuel
Variables du serveur
%h Nom DNS du serveur Samba
%L Nom NetBios du serveur Samba
%v Version de Samba
Variables diverses
%T La date et l’heure courantes

Pour configurer Samba il existe des interfaces graphique, soit propre à la distribution soit des outils tiers que l’on rajoute.Comme Webmin et Swat

Samba Contrôleur de Domaine

Modifier les paramètres important du smb.conf :

[global]
# Nom du groupe de travail ou du domaine
workgroup = tontonfred.net

# Nom qui apparait lors du parcours reseau (%h = hostname)
server string = %h

# Configuration des logs du serveur
log file = /var/log/samba/%m.log

# Taille maximal des logs (en kb)
max log size = 1000

# Mode d'authentification
# - share = ok pour tous
# - user = oblige d'avoir un compte sur le serveur samba
# - domain = pour joindre un domaine
security = user

# Activation du cryptage des mots de passe
encrypt passwords = yes

#Emplacement du fichier des utilisateurs samba
smb passwd file = /etc/samba/smbpasswd

# L'option ci-dessous definit Samba comme le Controleur de domaine principal (maitre).
domain master = true

# Le niveau d'OS indique l'importance de ce serveur en tant que candidat au role de controleur principal lorsqu'une élection est provoquée
os level = 255

# Permettre d'utiliser les profils errants sur le serveur samba
domain logons = Yes

# Gestion de l'authentification sur le domaine
wins support = no

Redémarrer le service Samba et tester le rôle avec testparm pour avoir :

Le plus important est ROLE_DOMAIN_PDC

Pour joindre un client Xp ou Seven, il faut tout d’abord avoir créer un compte samba à l’utilisateur root, soit: smbpasswd -a root

ensuite il faut créer des comptes machines pour les pc sous Seven/xp, cad :
adduser –force-badname nomduclientwindows$ 
smbpasswd -a -m nomduclientwindows (sans le $)

Ensuite il faut joindre le domaine avec le client Windows avec l’utilisateur root comme vous avez l’habitude de le faire avec un Domaine Windows.

N’oubliez pas de modifier le registre de Seven

Si problème avec Xp modifier le registre comme ceci :

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Netlogon\parameters
“RequireSignOrSeal”=dword:00000000

Pour les visiteurs lisant ce billet, attention on ne gére pas dans cette exemple les partages administratifs de Windows pour les profils itinérants .Ils seront vus ici dans un autre billet ultérieurement.

Sources:

  • http://fr.wikibooks.org/wiki/Administration_r%C3%A9seau_sous_Linux/
  • http://www.samba.org/
  • http://doc.ubuntu-fr.org/samba
PDF Download    Envoyer l'article en PDF