RIR CRC1 C6
Du shell au Script shell .. TD ASR ABD #Warmup
Maintenant que Leila et Stéphanie sont devenues les reines du #Bash
Entrainez-vous avec les exercices suivants . Devant certains exercices cous avez un petit cours à lire avant (pour certains en PDF)
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
- Connectez-vous avec votre nom de login et ouvrez une console
- Dites si echo est une commande interne ou externe
- 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
Exo Affichage à l’écran
1. Exécutez la commande echo qui permet d’afficher le texte suivant à l’écran :
Les RISR 2021 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 tubes de communications
Lire PDF Regroupement de commandes
Lire PDF Processus en arrière plan
L’environnement SHELL
EXO Pré-Requis
Les bases de la programmation shell #Bigboss
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 $
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.
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.
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.
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
Introduction à Apache et Sécurisation de votre accés Web #GMSI19 R
-- Download Introduction à Apache et Sécurisation de votre accés Web #GMSI19 R as PDF --
Pour notre TD : Attention (Adapter en fonction de la version du Debian)
Pour une version 9.X de Debian prendre la ISO du DVD1 pour avoir l’interface graphique de base afin de pouvoir paramétrer le navigateur et pouvoir traverser le proxy du Cesi.
Outils pour surveiller votre serveur WEB
Apache est un serveur http libre, c’est un des serveurs http les plus utilisé sur Internet
Apache est conçu pour prendre en charge de nombreux modules lui donnant des fonctionnalités supplémentaires : interprétation du langage Perl, PHP, Python et Ruby, serveur proxy, Common Gateway Interface, Server 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/.
La configuration globale d’apache s’effectue par modification du fichier de configuration /etc/apache2/apache2.conf.
Hôtes Virtuels
Cette méthode est la plus utilisée et la plus conseillée. Elle tend même à devenir un standard. Il s’agit simplement d’associer plusieurs noms DNS à une seule adresse IP.
dans /etc/apache2/sites-available se trouve un fichier nommé default…
il ressemble a ceci:
Ceci fait, enregistrez le fichier sous le nom monsite1.conf puis modifiez-le en mettant cette fois monsite2 à la place de monsite1, puis ré-enregistrez sous le nom de monsite2.conf.
Pour terminer, il vous suffit de créer des liens des deux fichiers nouvellement créés dans le sites-available à l’aide d’un script des fichiers créés auparavant dans le dossier /etc/apache2/sites-enabled. Pour ce faire, une commande a été faite spécialement :
Rédémarrer ensuite les services comme vu au dessus ..
Par exemple pour vérifier les dernières IP qui ont visité votre site web vous pouvez faire un petit tail
Et Voila !!!!!!!!!
Un version plus user friendly ici avec Webmin
Installation de Webmin
Apache dans Webmin
Pour aller plus loin :
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 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 {} \;
Dimensionnement Serveur Exchange 2013
Dixit Technet : Exchange 2013 utilise plus de ressources système que les versions antérieures d’Exchange. En dimensionnant correctement votre infrastructure Exchange 2013, puis en vérifiant certaines configurations recommandées pour les composants liés à Exchange dans cette infrastructure, vous pouvez créer les conditions d’un déploiement aux performances optimales.
un outil de dimensionnement :
Les indispensables de l’Admin système sous Debian #Rappels
-- Download Les indispensables de l'Admin système sous Debian #Rappels as PDF --
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)
Gestion des comptes utilisateurs
- su
sudo
- adduser
- useradd
/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 :
- 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.
- 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 :
- Les 5 premiers ensembles de caractères */15 * * * * définissent la fréquence « toutes les quinze minutes ».
- 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 -laeptu
- netstat -taupe
- netstat -nao
Debian Jessie – Administration Samba4
SAMBA 4 :
Prérequis pour l’installation de Samba 4 :
- Installation des dépendances :
- Téléchargement de la dernière release :
- Décompression et Compilation des sources :
Ajouter les binaires Samba dans $PATH :
Information : Permet de saisir directement les binaires samba sans passer par /usr/local/samba/bin/
Les fonctionnalités de samba-tool :
Afficher la liste des utilisateurs :
- UNIX :
- SAMBA :
Afficher les enregistrements de type A depuis le fichier dns_update_cache :
Afficher le rôle du serveur Active Directory (AD) :
Afficher les rôles FSMO du serveur AD :
Afficher la liste des GPO d’un utilisateur :
Afficher la politique de mot de passe du domaine :
Afficher la liste des groupes :
Debian Jessie :
Afficher l’architecture matériel du serveur :
Vider le cache DNS :
Information : Le service nscd n’est pas installé par défaut sur debian 8
Afficher la consommation des ressources physiques :
- Avec top :
- Avec htop :
- et avec glances -> :
Réplication Sysvol entre 2 SAMBA 4
Samba officiel
Répliquer automatiquement le dossier sysvol entre 2 DC Samba 4
https://wiki.samba.org/index.php/Bidirectional_Rsync/Unison_based_SysVol_replication_workaround
Audit de sécurité de votre serveur Linux avec Lynis
Lynis est un outil qui est très complet et il peut être utile aux administrateurs système.
il effectue plusieurs dizaines de vérifications sur votre système et fabrique un rapport final avec des suggestions sur la sécurisation du système.
Pour installer Lynis sur Centos
yum install lynis
Pour installer Lynis sur Debian apt-get install lynis
Attention aux versions sur les dépots.
Lancement de Lynis:
Vérification des mises à jour
Install depuis l’éditeur : https://cisofy.com/documentation/lynis/#installation-package
Quelques exemples de vérification :
A la fin de l’audit Lynis montrera les failles réelles référencées et non corrigées :
Il est possible de “crontaber” Lynis biensur avec l’option “-cronjob” qui permettra l’exécution de l’audit sans intervention de l’utilisateur à chaque étape..
Vous allez donc pouvoir signer et horodater votre Audit
Afficher les infos matériel sous Linux #RIR#TIPS
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.
Installer et Configurer 2012 Server
VERSIONS : Les informations essentielles
- Edition Standard
- Edition Datacenter
- Edition Foundation
- Edition Essential
Edition Standard
- 4 To de Ram Max
- Inclus 2 licences Hyper-V
- La plupart des rôles
Edition Datacenter
- Jusqu’a 640 Coeurs
- 4 To de Ram Max
- Nombre Illimité de Machines Hyper-V
- Fonctionnalités de Cluster
Edition Foundation
- Ne peut être jointe à un Domaine
- Un seul processeur
- 32 Go de Ram Max
- Petite Entreprise
- Nombre limité de Rôles
Edition Essential (Remplacante des Versions SBS)
- 25 Utilisateurs Max
- 64 Go de Ram Max
- Pas de Hyper-V
- Pas de Cluster
Les Nouveautés marquantes dans les rôles de 2012 Server:
- Nouveau Gestionnaire de Serveur => Soit gérer un serveur, soit plusieurs Serveurs.
- Fonctionnalité : Expérience Windows Server Essential
- Fonctionnalité :WDS amélioré ==> Déploiement Windows (RIS)
- Fonctionnalité :WSUS amélioré et intégré d’origine
Les Nouveautés marquantes dans les Fonctionnalités de 2012 Server (42 Fonctionnalités)
- Clustering avec basculement
- Equilibrage de Charge
Rappels des prérequis pour l’installation d’un AD:
- Serveur Windows supportant ADDS
- IP Fixe
- Nom de Domaine valide
- Formatage NTFS
Rappels Fondamentaux AD
Rappels sur les Maîtres D’opérations (FSMO)
Rappels sur les Stratégies de groupe (GPO)
Dimensionner un serveur Terminal Server 2008 (RDS) #CRC14
Il revient souvent les mêmes questions au sujet du dimensionnement d’un Serveur RDS 2008 R2.
- Combien de sessions par serveur ?
- Même question en fonction de la version de RDP ?
- Même question dans un environnement Hyper-V ?
- Combien de RAM par sessions ?
- Combien de RAM en fonction du mode d’affichage ?
On peut ainsi se poser de nombreuses questions…
Il existe une documentation officielle : http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=23236
et également : http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=17190
Pour le maquettage il existe également des outils de monter en charge pour similer une utilisation intensive des serveurs RDS : http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=2218
Fonctionnalité Rôle RDS #Connection Broker #RARE #CPI
Après le petit billet sur RemoteApp une autre fonctionnalité dans le rôle RDS :
Connection Broker
Sous 2003 on parlait de Session Directory, sous 2008 de TS Session Broker avec 2008 R2, on parle désormais de Conection Broker.
Le but de Connection Broker est de répartir la charge au sein d’une ferme TSE en redirigeant au besoin les nouvelles connexions vers le serveur le moins chargés.
On distingue 2 parties pour le fonctionnement de Connexion Broker:
- La partie équilibrage de charge avec (NLB, le tourniquet DNS, où des produits tiers)
- L’orientation de la session utilisateur en fonction de la charge des serveurs où si c’est une session déconnectée
Regardons par exemple le paramétrage du Tourniquet DNS avec 2 serveurs RDS,2 serveurs Active Directory et un serveur de doc qui héberge la fonctionnalité de rôle Connection broker
La partie GPO :
Les propriétés de RDS:
http://technet.microsoft.com/fr-fr/library/cc753630.aspx
Fonctionnalité RDS #RemoteApp #RARE
RemoteApp
Remoteapp est une fonctionnalité dans le rôle RDS qui permet d’exécuter des application depuis le menu démarrer des poste de travail utilisateur. Elle apparait alors comme une véritable application.
Pour donner l’accès aux applications plusieurs méthodes sont disponible:
- Lien dans une page web
- Fichier .rdp
- Icône dans le menu démarrer via un .msi
- Association d’un fichier de travail dont l’extension a été associé à une application via .msi également
Rôle RDS (Terminal Server) #Protocole RDP #Côté Client
Rappels
Lors de la première demi-journée nous avons introduit le rôle RDS sur les serveurs utilisés pour le maquettage.
Le protocole utilisé est :RDP (Remote Desktop protocol)
Par défaut les serveurs écoutent sur le port TCP 3389,La quasi totalité des Versions de Windows implémentent celui-ci et nous le retrouvons dans des versions un peu plus en retrait sous Linux, Macosx, Android …
La première version était la 4.0 (NT 4.0 basée sur le protocole T.128)
La version actuelle est la 7.X
Il est bien sur tout a fait possible de modifier le port d’écoute TCP pour accroitre la sécurité ou optimiser les accès NAT venant de l’extérieur .
- Lancer REGEDIT
- Chercher la ruche : HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control \TerminalServer\WinStations\RDP-Tcp\PortNumber
- Passez en décimal et remplacer la valeur ex:3390
Sur le poste client procédez comme ceci:
Fonctionnalités de RDP:
- Support des couleurs 24-bits, équivalent à 16,7 millions de couleurs. (couleurs 8, 15 et 16 bits également supportées.)
- Chiffrement 128 bits (sécurité par défaut; des versions plus anciennes peuvent utiliser un chiffrement moins fort.)
- Support du son : les utilisateurs peuvent écouter sur l’ordinateur local le son produit par un programme exécuté sur l’ordinateur distant.
- Mappage des fichiers de l’ordinateur local sur l’ordinateur distant par le biais de la session RDP.
- Mappage d’une imprimante locale sur l’ordinateur distant, pour imprimer sur l’imprimante locale des documents ouverts sur l’ordinateur distant.
- Mappage des ports série et parallèle de l’ordinateur local sur l’ordinateur distant.
Le principal concurrent de RDP est le protocole ICA est un produit de la société Citrix systems.
Globalement le protocole RDP améliore le coût TCO (Total cost of ownership) de votre système d’informations.Mais comme un logiciel n’est pas réellement possédé (c’est plutôt son autorisation sous licence), il convient de parler de coût total d’utilisation plutôt que de coût total de possession.
RDS 2008R2 #POSTER pour vos toilettes
Au fil de ma préparation un poster et un pdf bien sympa pour faire le tour des fonctionnalités RDS de 2008 R2
Pour avoir le poster et le pdf en original chez Microsoft c’est par ici
TD Préparation Evolution + Etude RDS TSE #CRC12 #C20
Pour mettre en place le TD il faut 2 machines en dur pour les serveurs, (il y aura donc 2 hôtes virtuels par machine), et il faut également prévoir un adressage complet en “bridge” (pour pour faire communiquer les 2 machines).
Commencez par vous concentrer sur la mise en place des Hosts 1 et 2.
La structure Administrative de l’Active Directory devra ressembler au projet évolution.
Théoriquement vous êtes capable d’installer et de configurer les hosts 1 et 2 avec la structure AD, la partie DNS ainsi que des GPOs
Attention une grande rigueur est de mise pour parvenir à faire communiquer tout ce petit monde.
Ensuite nous étudierons la partie RDS / TSE
Dans un second temps on rajoutera un poste client.
Et dans un troisième temps on rajoutera des rôles supplémentaires comme par exemple un serveur DHCP.