SlideShare une entreprise Scribd logo
1  sur  127
Télécharger pour lire hors ligne
Linux Administrateur
2
La 1ère école 100 % dédiée à l'open source
Open Source School est fondée à l'initiative de Smile, leader de
l'intégration et de l'infogérance open source, et de l'EPSI,établissement
privé pionnier de l’enseignement supérieur en informatique.
Dans le cadre du Programme d’Investissements d’Avenir (PIA), le
gouvernement français a décidé de soutenir la création de cette école en
lui attribuant une première aide de 1,4M€ et confirme sa volonté de
soutenir la filière du Logiciel Libre actuellement en plein développement.
Avec une croissance annuelle de plus de 10%, et 4 000
postes vacants chaque année dans le secteur du Logiciel
Libre, OSS entend répondre à la pénurie de compétences du
secteur en mobilisant l’ensemble de l’écosystème et en
proposant la plus vaste offre en matière de formation aux
technologies open source tant en formation initiale qu'en
formation continue.
3
Les formations du plein emploi !
 Formation Continue
Open Source School "Executive Education" est un organisme
de formation qui propose un catalogue de plus de 200
formations professionnelles et différents dispositifs de
reconversion permettant le retour à l’emploi (POE) ou une
meilleure employabilité pour de nombreux professionnels de
l’informatique.
 Pour vos demandes : formations@opensourceschool.fr
 Formation Initiale
100% logiciels libres et 100% alternance, le cursus Open
Source School s’appuie sur le référentiel des blocs de
compétences de l’EPSI.
Il est sanctionné par un titre de niveau I RNCP, Bac+5.
Le programme est proposé dans 6 campus à Bordeaux, Lille,
Lyon, Montpellier, Nantes, Paris.
Linux Administrateur
Programme Bachelor
3ème Année Parcours Open Source
5
Plan
Programmation Bash Avancée
●
Expressions logiques & boucles
●
Paramètres d’entrée et valeurs de retour
●
Environnements d'exécution
●
Expressions régulières
Gestion des utilisateurs et des groupes
●
L'utilisateur et le groupe POSIX
●
Gestion des comptes
6
Plan
Administration du système
●
Les logs et les mails
●
Fichiers de configuration du système
●
La gestion des paquets et des mises à jour
●
Les services
●
Exécution automatique de tâches (cron, at, ...)
●
Localisation et internationalisation
TCP/IP et configuration du réseau
●
Adressage IP et routage
●
Protocoles réseaux (ICMP, TCP, UDP, …) et ports
●
Configuration réseau (adresses, hooks, vlan, ...)
●
Les outils de l'administrateur : ping, netstat, arp, netcat, traceroute,
nmap, ...
7
Plan
Services système et Sécurité
●
Permissions du système de fichiers, quotas utilisateurs
●
Sécurité réseau
Iptables
OpenSSH et fail2ban
Authentification du serveur et des utilisateurs
Programmation Bash avancée
9
Le terminal de commande
C'est l'interface de commande.
Il existe plusieurs terminaux:
●
TTY qui est le terminal de commande "de base" (CTRL+ALT+F1)
●
Terminaux virtuels (xterm, gnome-terminal, terminator, terminology...)
Il permet de gérer les "entrées/sorties" et d'y exécuter des "commandes"
Des logiciels savent utiliser le terminal et le placement de caractère pour y afficher
des interfaces plus complexes (curses) par exemple: vim, mutt, top...
10
Le shell
11
Le BASH
Bourne Again SHell, du nom du créateur du "Bourne shell" (Stephen Bourne, 1977
sur Unix 7)
Réécrit en 1988 par Brian Fox
C'est le SHELL POSIX généralement par défaut sur la plupart des distributions.
Il permet:
●
d'exécuter des commandes
●
de créer des scripts
●
vérifier le résultat d'une commande
●
interfacer l'homme et la machine (système)
12
Le SHELL en général
C'est l'un des outils les plus importants pour un administrateur UNIX/Linux
Il permet d'effectuer la totalité des travaux - installation, mise à jour, contrôle,
paramétrage, etc.
Maîtriser les outils SHELL est indispensable à la vie d'un administrateur
système/réseau dans un environnement UNIX
13
Le terminal et le SHELL
Un terminal est une interface de commande qui permet de lancer un SHELL
Ce SHELL permet à l'utilisateur d'exécuter des commandes
Une commande peut être:
- un exécutable binaire (un programme)
- un script (bash, perl, python...)
- un alias
- une fonction
- des instructions de contrôle (if, then, case, until...)
Bash est un SHELL
14
TTY/PTY
Vous avez peut-être entendu les termes "tty" et/ou "pty"
Le mot "TTY" vient de teletype
Le mot "PTY" vient de pseudo-teletype
Pour faire simple: le TTY ou le PTY sont des "interfaces" connectées au système.
Voir les répertoires "/dev/tty*" et "/dev/pts/*"
15
Les commandes
Les commandes sont prévues pour exécuter des tâches.
Une commande = une tâche (principe UNIX)
Les commandes de bases:
●
cd - change directory
●
ls - list directory
●
cp - copy
●
mv - move
●
rm - remove
●
cat - afficher un contenu (concatenate files)
Et la plus importante de toutes: man
et ses dérivées : "man man" et "man -k pattern"
Pour chaque commande, retenir le libellé long de la commande !!!
pour "cd" retenir "change directory", ls "list", pwd "print working dir.."
16
Les commandes de base
Elle peuvent accepter :
- des paramètres
- des options
Les paramètres sont des arguments de commandes et ne sont pas spécifique.
Les options sont spécifiques à la commande. Elles modifient le comportement de
la commande. Elles commencent par un ou deux tirets "-" (-a, --all, -f, etc.)
17
Les options
Exemple:
# affichage de la liste des fichiers et répertoires
ls
# affiche "tout" (all), y compris les fichiers cachés
ls -a
# affiche les informations des fichiers/répertoires
ls -l
# Retenir le mode le plus employé en administration système
ls -ltr
qui permet de trouver le dernier fichier modifié !!!
retenir : list long, time, reverse order...
18
Les options
Les options sont (si la commande respecte la norme POSIX), de deux formes:
au format court, un seul tiret et une lettre "-a"
au format long, deux tirets et un "terme" "--all"
POSIX permet de "concaténer" les options courtes, par exemple:
ls -l -a
# équivaut à
ls -la
19
Expressions logiques
On appelle "expression logique" une expression qui permet de "tester" un résultat.
La commande de base est "test", Bash permet de simplifier cela en l'intégrant
dans des crochets
test $A = $B
[ $A = $B ]
Mais bash propose depuis une version "double crochets" qui est plus avancée:
[[ $A == $B ]]
20
Simple ou double ?
La version "simple crochet" est POSIX, elle fonctionne sur d'autres SHELL sans
souci. C'est un alias à la commande "test"
La version "double crochet" est plus poussée, elle permet de respecter une syntaxe
plus proche d'autres langages.
De plus, elle évite de forcer l'utilisation de guillemets.
21
Les tests
Bash fait la distinction entre un test de chaine de caractères et un test numérique
(entiers)
[[ "1" == 01 ]] => faux
[[ "1" -eq 01 ]] => vrai
Les tests de chaines de caractères sont:
c1 == c2, vrai si c1 et c2 sont égaux
c1 != c2, vrai si c1 et c2 sont différents
c1 > c2, vrai si c1 est ordonné avant c2
... etc...
-z c, vrai si c est la chaîne vide
-n c, vrai si c n'est pas la chaîne vide
22
Les tests
Tests numériques
n1 -eq n2, vrai si n1 et n2 sont égaux
n1 -ne n2, vrai si n1 et n2 sont différents
n1 -lt n2, vrai si n1 est strictement inférieur à n2
n1 -le n2, vrai si n1 est inférieur ou égal à n2
n1 -gt n2, vrai si n1 est strictement supérieur à n2
n1 -ge n2, vrai si n1 est supérieur ou égal à n2.
23
Opérations après un test
Les opérateurs logique suivant permettent de contrôler le résultat d'un test:
"&&" = ET logique (and)
"||" = OU logique (or)
C'est donc assez simple:
# commande executée si condition vraie
[[ condition ]] && commande
# commande executée si condition fausse
[[ condition ]] || commande
Ces opérateurs permettent surtout d'écrire des commandes "mono-lignes"
(inline), qui peuvent être lancées par des outils comme cron
/etc/init.d/apache stop && sleep 20 && /etc/init.d/apache start
24
Tests systèmes
[ -e $FILE ]
# vrai si $FILE existe dans le répertoire courant
[ -s $FILE ]
# vrai si $FILE existe dans le répertoire courant et si sa taille est
supérieure à zéro
[ -f $FILE ]
# vrai si $FILE est un fichier dans le répertoire courant
25
Tests systèmes
[ -r $FILE ]
# vrai si $FILE est un fichier lisible dans le répertoire courant
[ -w $FILE ]
# vrai si $FILE est un fichier inscriptible dans le répertoire courant
[ -x $FILE ]
# vrai si $FILE est un fichier exécutable dans le répertoire courant
[ -d $FILE ]
# vrai si $FILE est un répertoire dans le répertoire courant
26
Valeurs de retour
Bash permet de vérifier si une commande a bien terminée sans erreur.
La variable "$?" vaut:
●
0 si tout s'est bien passé
●
tout autre valeur correspond à une erreur
Les tests savent utiliser par défaut cette valeur.
[[ ls ]] && echo "j'ai réussi à lister le répertoire"
27
Opérations
Bash sait calculer mais seulement avec des entiers:
echo $((1+5))
for ((i=0;i<10;i++)); do commande; commande; done
Sinon, on passe par l'outil "bc".
28
Entrées/Sorties
Bash utilise au moins 3 "flux":
●
STDIN => entrée standard, numéroté "0"
●
STDOUT => sortie standard, numéroté "1"
●
STDERR => sortie erreur, numéroté "2"
STDIN est par défaut une entrée au clavier
STDOUT est par défaut un affichage écran
STDERR est aussi affiché à l'écran
29
Entrées/Sorties
Par exemple, la commande "cat" peut lire STDIN si aucun argument (nom de
fichier) n'a été donné.
Dans ce cas, le terminal se met en mode "lecture de flux standard" et attend un
signal de coupure (CTRL+D)
"cat" affiche alors l'entrée sur la sortie standard.
30
Entrées/Sorties
On peut rediriger les entrées/sorties
# envoie le contenu de "fichier" sur STDIN de la commande
commande <fichier
# envoie la sortie standard de la commande dans un fichier (qui sera vidé
avant)
commande >fichier
# envoie la sortie standard à la fin du fichier (le fichier n'est pas
vidé)
commande >>fichier
Comme vue précédemment, les entrées/sorties ont des numéros. Bash propose
cette écriture:
commande 1>fichier_out 2>fichier_err
Le "1" est optionnel, c'est le cas par défaut.
31
Entrées/Sorties
Dans le cas où l'on désire fusionner des sorties, on peut utiliser la notation:
commande N>&M
N: flux à rediriger M: flux qui reçoit
Exemple:
# envoit le flux d'erreur dans STDOUT
# et envoit STDOUT dans fichier
commande 2>&1 >fichier
32
Environnement
Bash fonctionne dans un environnement d'exécution. Cela signifie qu'il a des
repères système.
Les variables d'environnements sont très utiles
●
HOME qui défini le répertoire utilisateur (en cours)
●
PWD qui défini le répertoire courant
●
UID
●
SHELL désigne le shelle en cours (bash, sh, zsh...)
●
etc..
Voir la commande "env" et "printenv"
33
Environnement
L'environnement peut être manipulé dans différents fichiers tels que:
$HOME/.bashrc
$HOME/.bash_profile
/etc/profile
/etc/profile.d/*.sh
Les variables d'environnements sont modifiées par les processus. Par exemple la
commande "cd" impacte la variable "$PWD"
34
Environnement d'exécution
On parle aussi d'environnement d'exécution pour définir la manière dont le
système intègre la session.
Rappelez vous qu'un shell lance un programme: le SHELL
Il est lui même un processus enfant.
Tapez:
ps faux (version BSD)
ps -edfH (version Système V)
ps -w id_proc pour afficher la ligne de commande complète
top
35
Définition
Une expression régulière permet de "matcher" une patron et une chaîne
Pour faire simple, cela permet de vérifier si une chaîne de caractère respecte un
certain format
On s'en sert dans bash pour tester des chaînes, soit nativement, soit avec des
outils tels que "sed", "awk" ou "grep"
36
Définition
Les "regexp" (autre nom) sont de deux formes:
●
expression POSIX
●
expression PCRE
La version "PCRE" est relativement plus puissante.
C'est un langage en soit...
37
Le langage regexp
On définit un pattron en suivant ces principes:
●
on défini un "matcher" (caractère, chiffre...)
●
on défini un "répétiteur" (une fois, au moins N fois...)
On peut aller très loin... mais pour le moment nous allons rester sur les bases
38
Le langage regexp
Les "matchers":
●
"." (point) pour "n'importe quel caractère"
●
"d" pour "n'importe quel chiffre de 0 à 9"
●
"w" n'importe quel mot
●
"[n-m]" un caractère allant de "n" à "m"
Les répétiteurs:
●
"*" de 0 à l'infini
●
"?" 0 ou une fois
●
"+" au moins une fois
●
"{N}" N fois
●
"{N,M}" de N à M fois
●
"{N,}" au moins N fois
●
"{,N}" au plus N fois
39
Limiteurs
Un dernier point sur les regexp:
●
si "$" est positionné en fin d'expression, il sert à identifier une "fin de
ligne"
●
si "^" est positionné en début de ligne, il sert à identifier un début de
ligne
Exemple:
# on ne veut pas afficher les commentaires dans un shell script
grep -v '^#' mon_script.sh
40
Exemples
# foo suivi d'au moins un chiffre
food+
# foo suivi d'une lettre entre "a" et "f" suivi d'un caractère maximum
foo[a-f].?
41
Utilisation
Avec grep:
echo "Hello world" | grep "^H.*o"
avec sed:
echo "Hello World" | sed 's/^H.*o/Hi/'
avec awk:
echo "Hello World" | awk '/H.*o/{ print $1}'
42
Utilisation
Bash sait aussi gérer nativement les expressions régulières:
A="Hello World"
[[ $A =~ H.*o ]] && echo "trouvé"
43
Les commandes à connaitre
Nous allons voir quelques commandes très importantes et fortement utilisées:
●
cd, ls
●
cp, mv, rm, ln
●
grep
●
sed
44
Manipuler - se déplacer dans les répertoires
# Va dans le répertoire $HOME
cd
# Va dans le répertoire /op
cd /opt
# liste le répertoire courant
ls
# liste un autre répertoire "rep"
ls rep
45
Manipuler - précautions -i
En administration système, l'usage est de travailler avec un filet de sécurité.
Les commandes de suppression, remplacement, écrasement, sont configurées par
défaut pour demander une confirmation avec l'option -i.
Le fichier .bashrc contient au moins les lignes suivantes :
alias cp='cp -i'
alias mv='mv -i'
alias rm='rm -i'
alias ln='ln -i'
46
Manipuler - déplacer des fichiers
# copie un fichier
cp source destination
# déplace un fichier
mv source destination
# supprime un fichier
rm source
# supprime un répertoire
rm -r rep
# en forcant
rm -rf rep
# autre commande
rmdir rep
# bonne pratique pour supprimer un répertoire :
rm -rf rep/*
rmdir rep
# permet d'éviter de lancer "rm -rf *"
47
Manipuler - créer des liens
# créer un lien
ln source destination
# créer un lien symbolique
ln -s source destination
Si le lien est une lien "hard" (non symbolique), supprimer la source ou la
destination n'impacte pas le fichier. Les deux entrées ne sont pas "discernables" en
tant que lien
Le lien symbolique peut référencer une source "supprimé", on dit que le lien est
cassé.
48
Grep
"grep" est une commande de recherche de "pattern".
# cherche "foo" dans le fichier file
grep "foo" file
# cherche "foo" dans le répertoire dir
grep -r "10.1.8" /etc
# ignore la casse et recursif
grep -ri "nom_host" /etc
# cherche "foo" dans STDIN
commande | grep "foo"
49
Sed
"Sed" est un éditeur en ligne
Il permet de manipuler des flux ou des fichier en remplaçant du texte, insérant des
lignes, supprimant des lignes, etc.
Voir "man sed"
50
Sed
La commande "s" pour "substitute"
echo "Hello" | sed 's/o/a/' Hella
echo "foo bar baz" | sed 's/ba./toto/'
# Remplace foo par bar dans fichier
# et affiche le résultat dans STDOUT
sed 's/foo/bar/' fichier
# idem mais remplace dans le fichier
sed -i 's/foo/bar/' fichier
Utilisateurs et groupes
52
Utilisateur et groupes POSIX
Un utilisateur POSIX se défini par:
●
un login
●
un mot de passe
●
un identifiant numérique
●
un groupe principal
●
un ou plusieurs groupes secondaires
53
Gestion de comptes
Pour créer et modifier un compte:
# crée un compte avec un "home"
useradd -m username
# ajoute le groupe secondaire "sudo" à l'utilisateur
usermod -a -G sudo username
# change le mot de passe du compte
passwd usermod
# adduser en mode interactif
# adduser smile
54
Manipuler - changer les droits
Nous le verrons plus tard, mais les fichiers et répertoires ont des permissions.
Pour changer les permissions:
# change le propriétaire
chown user fichier1 fichier2...
chown répertoire
# changer récursivement
chown -R répertoire
#changer le groupe
chgrp groupe fichier1 fichier2...
chgrp répertoire
# changer récursivement
chgrp -R répertoire
55
Manipuler - changer les droits
Pour changer le "owner" (propriétaire) et le groupe, la commande "chown" peut
permettre de le faire en une fois:
chown user:groupe fichier ou répertoire
# prendre le groupe par défaut - notez le ":"
chown user fichier ou répertoire
chown user:groupe fichier ou répertoire
56
Manipuler - les droits
Pour voir les attributs de fichier, l'option "-l" de "ls" affiche les informations
nécessaires:
ls -l /etc
total 1728
drwxr-xr-x. 1 root root 126 15 févr. 12:28 abrt/
-rw-r--r--. 1 root root 16 17 oct. 21:43 adjtime
drwxr-xr-x. 1 root root 16 17 oct. 20:09 akmods/
-rw-r--r--. 1 root root 1518 13 mai 2015 aliases
drwxr-xr-x. 1 root root 58 10 févr. 02:52 alsa/
drwxr-xr-x. 1 root root 1726 18 févr. 09:40 alternatives/
-rw-r--r--. 1 root root 541 13 juil. 2015 anacrontab
Le premier tiret donne le type, "-" signifie "fichier standard", "d" signifie
"répertoire", "l" signifie "lien" etc...
Les 9 autres attributs indiquent quels droits sont appliqués au propriétaire, au
groupe et autres utilisateurs.
57
Manipuler - les droits
Les attributs
un fichier peut être:
●
lisible (r)
●
modifiable (w)
●
executable (x)
un répertoire peut être:
●
listable (r)
●
modifiable (w)
●
traversable (x)
58
Manipuler - les droits
Pour modifier les attributs d'un fichier, il y a deux écritures possibles. Soit avec le
mode "octal", soit avec les "raccourcis".
Un attribut octal est une addition de 3 chiffres:
●
4 = lisible pour les fichiers ou listable pour un répertoire
●
2 = modifiable
●
1 = exécutable pour les fichiers ou traversable pour les répertoires
La modification se fait pour les 3 possibilités: owner, groupe et other
On additionne les valeurs voulues pour chaque groupe de contrôle.
●
6 = 4+2 => le fichier est lisible et modifiable
●
7 = 4+2+1 => le fichier est lisible, modifiable et exécutable
●
5 = 4+1 => lisible est exécutable
59
Manipuler - les droits
Pour un répertoire, le fait d'être traversable signifie qu'un utilisateur ne voit pas le
contenu du répertoire mais peut le traverser pour lire les sous-répertoires.
Par exemple:
Le répertoire "/var" peut n'être lisible que pour "root", mais il faut laisser l'accès à
"/var/www" à l'utilisateur apache "www-data".
De ce fait, "/var" à l'attribut "x" pour tous, et "/var/www" a pour attributs "rwx"
pour "www-data" (user et group)
En général, c'est plutôt "r-x" qui est appliqué pour permettre le listing de
répertoires.
60
Manipuler - les droits
Quelques commandes utiles :
$ chmod a+x /usr/local/bin/*.sh
$ chmod -R a+X /var/www/mon_projet
$ chmod -R u+rw,g+r /var/www/mon_projet
$ chmod -R o-rw /var/www/mon_projet
$ chmod -R 777 un_répertoire # n'est jamais une bonne idée !
Il faut toujours savoir pourquoi on lance une commande !!!
61
Sticky bit
Deux modes, seul le 2) est utilisé dans la pratique :
1) le sticky bit sur l'utilisateur, qui permet d'étendre les privilèges :
-rwsr-xr-x 1 root root 47032 janv. 27 01:50 /usr/bin/passwd
2) le sticky bit sur le groupe, qui permet de conserver les droits du groupe
Par défaut, un fichier prends les droits appliqués à l'utilisateur. Par exemple
l'utilisateur "foo" du groupe primaire "foo"
$ mkdir shared
$ ls -la
drwxr-xr-x. 1 foo foo 0 16 févr. 11:42 shared/
# on change le groupe du répertoire
$ chgrp users
$ ls -la
drwxr-xr-x. 1 foo users 0 16 févr. 11:42 shared/
$ touch shared/foo
# le fichier n'a pas pris les droits du répertoire
$ ls -la share/foo
-rw-r--r--. 1 foo foo 0 16 févr. 11:41 foo
62
Sticky bit
Corrigeons le souci en appliquant un "sticky bit" sur le groupe:
$ rm shared/foo
$ chmod g+s shared
$ ls -la
drwxr-sr-x. 1 foo users 0 16 févr. 11:42 shared/
# remarquez le "s" désormais à la place de "x"
$ touch shared/foo
$ ls -la shared
-rw-r--r--. 1 foo users 0 16 févr. 11:44 foo
Le sticky-bit (bit collant) permet aux attributs de répertoire de "coller" aux fichiers
qui seront créés.
Administration du système
64
Administration système
L'objectif de l'administrateur système est de fournir les ressources
nécessaires aux utilisateurs.
Les utilisateurs utilisent la ressource informatique, CPU, RAM, stockage, réseau,
etc.
Les administrateurs gèrent ces ressources au mieux.
L'objectif de l'administrateur n'est pas de bloquer les utilisateurs.
Les utilisateurs n'ont pas vocation à gaspiller les ressources.
=> Il faut trouver le bon équilibre.
"With Great Power Comes Great Responsibility"
65
Les logs et les mails
GNU/Linux journalise beaucoup d'informations, du boot à l'exécutions de services,
en passant par les erreurs système, ou les événements
Les logs se trouvent généralement dans le répertoire "/var/log"
66
Les Logs et les mails
La commande "dmesg" permet de lire les événements du noyau.
L'option "-w" permet de lire en continue les logs
L'option "-H" rend plus lisible les valeurs pour un humain (temps différentiels,
message plus lisibles, ...)
dmesg -wH
67
Les mails
Les "mails" sont des messages au format mBox envoyés aux utilisateurs du
système. Le format mBox est supporté par beaucoup de logiciels de gestion d'e-
mail.
Attention: un mail n'est pas un "e-mail" en soit. Cela dit, si un service de gestion de
courrier est installé, les messages peuvent être envoyés comme des e-mail
traditionnels.
La gestion des mails est composée de 3 parties :
1) le routage des emails, travail réalisé par les serveurs SMTP
2) le service de gestion des boites aux lettres, travail réalisé par les applications de
messagerie, protocoles POP3, IMAP (Dovecot, Cyrus, Zimbra, Bluemind…)
3) les clients mails, pour lire ou envoyer du mail (Mutt, Thunderbird, etc...)
L'objectif du chapitre est de configurer proprement l'envoi d'un email depuis un
serveur.
La réception des emails est un service complexe qui ne sera pas abordé.
68
Les mails - Clients
Pour voir les mails d'un utilisateur local à une machine, il est possible d'utiliser la
commande "mail" en ligne de commande.
Les outils de mail sur un poste proviennent souvent du serveur SMTP.
Il est fondamental pour un serveur de savoir envoyer du mail.
Le paquet "mailx" permet d'envoyer du mail en ligne de commande, ce qui permet
à un serveur d'envoyer des emails "administratifs".
69
Les mails - Client
Pour lire les mails locaux sur une machine Unix, on tape la commande "mail":
$ mail
Heirloom Mail version 12.5 7/5/10. Type ? for help.
"/var/mail/foo": 2 messages 2 unread
>U 1 To foo Wed Feb 17 09:30 12/265 "test de mail"
U 2 To foo Wed Feb 17 09:30 11/260 "autre mail"
&
En pressant la touche "ENTER", on lit le mail pointé par ">". Le "U" signifie
"Unread".
70
Les mails
Pour envoyer un mail, il faut un serveur "smtp" et un client mail. Il existe beaucoup
de serveurs SMTP, mais les plus utilisés :
●
PostFix pour gérer les messages entrants ou pour faire du mass mailing
●
Exim pour envoyer des messages administratifs (par défaut sur Debian)
●
Sendmail, le serveur SMTP historique n'est plus utilisé
71
Les mails - Exim
Prérequis pour envoyer du mail avec Exim
Donner un FQDN au serveur et mettre à jour les PTR dans le DNS
Vérifier que 'hostname -f' renvoie correctement le FQDN
Lancer la commande
# dpkg-reconfigure exim4-config
définir les emails de réception dans /etc/aliases
définir les emails émetteurs dans /etc/email-addresses
Pour envoyer un mail à un utilisateur du système:
$ mail -v vraie_boite_aux_lettres
Subject : Test
Ici le contenu...
Pressez CTRL+D ou créer une ligne ne contenant
qu'un point
.
CC:
$
72
Les mails
Le mail est envoyé à l'utilisateur avec une trace de la forme :
aa2@kawa2:~$ mail -v alain.arditi@smile.fr
Subject: Test
Bonjour
.
EOT
aa2@kawa2:~$
LOG: MAIN
<= aa2@smile.fr U=aa2 P=local S=456
delivering 1aeQgu-0004On-Ch
R: smarthost for alain.arditi@smile.fr
T: remote_smtp_smarthost for alain.arditi@smile.fr
Connecting to idris.smile.fr [91.216.209.19]:25 ... connected
SMTP<< 220 idris.smile.fr ESMTP Postfix (BlueMind)
SMTP>> EHLO kawa2
SMTP<< 250-idris.smile.fr
250-PIPELINING
250-SIZE 12582912
…..
SMTP>> STARTTLS
SMTP<< 220 2.0.0 Ready to start TLS
SMTP>> EHLO kawa2
SMTP<< 250-idris.smile.fr
SMTP>> MAIL FROM:<aa2@smile.fr> SIZE=1494
SMTP>> RCPT TO:<alain.arditi@smile.fr>
SMTP>> DATA
SMTP<< 250 2.1.0 Ok
SMTP<< 250 2.1.5 Ok
SMTP<< 354 End data with <CR><LF>.<CR><LF>
SMTP>> writing message and terminating "."
SMTP<< 250 2.0.0 Ok: queued as A71631EE036A
SMTP>> QUIT
LOG: MAIN
=> alain.arditi@smile.fr R=smarthost T=remote_smtp_smarthost H=idris.smile.fr [91.216.209.19]
X=TLS1.2:DHE_RSA_AES_128_CBC_SHA1:128 DN="C=FR,ST=IDF,L=Levallois-Perret,O=Smile,CN=bluemind-
mta.smile.fr,EMAIL=pki@smile.fr" C="250 2.0.0 Ok: queued as A71631EE036A"
LOG: MAIN
Completed
73
Fichiers de configuration du système
Les fichiers de configuration se trouvent généralement dans "/etc" (Editable Text
Configuration).
Les plus utilisés:
●
/etc/passwd : liste des utilisateurs
●
/etc/groups : liste les groupes utilisateurs
●
/etc/resolv.conf : liste des serveur DNS
●
/etc/rc.* : fichier de services au démarrage
●
/etc/fstab : points de montage du système de fichier
●
/etc/profile* : fichiers d'environnements SHELL
●
/etc/crontab : tâches planifiées
●
/etc/apache2 et /etc/httpd: selon la distribution, répertorie de
configuration apache
●
/etc/nginx/: répertoire de configuration nginx
Et bien d'autres.
74
Les services
Un service, souvent nommé "démon" (mauvaise traduction de "daemon", qui
signifie en réalité "Disk And Execution MONitor ") est un processus exécuté en
arrière plan qui va proposer un service réseau et/ou des procédures système.
Jusqu'alors, Linux implémentait "SystemV" pour gérer les services.
Depuis 2009, un nouveau système nommé "SystemD" a vu le jour et remplace,
peu à peu, l'ancien système.
75
Les services SystemV
Avec SystemV, un script exécutable est déposé dans le répertoire
"/etc/rc.d/init.d". Par convention, ces scripts doivent supporter en argument "start"
et "stop". Il est recommandé de supporter "restart".
Les script exécutent alors un programme. Par exemple: apache-httpd, nginx,
postfix, ...
76
Les services SystemV
Pour permettre l'exécution d'un service au démarrage, il faut faire un lien
symbolique dans un des répertoire "/etc/rc.d/rcN.d" où "N" est un nombre allant
de 0 à 6 correspondant aux "runlevel" Linux:
Les runlevel:
●
0 - exctinction du système
●
1 - démarrage "single", root sans mot de passe, aucun disque monté
(recovery)
●
2 - non utilisé
●
3 - démarrage avec couche réseau
●
4 - non utilisé
●
5 - démarrage avec X (serveur graphique)
●
6 - reboot
77
Les service SystemV
Les distributions utilisant SystemV proposent une commande "service" pour
démarrer, éteindre ou redémarer un service.
service start nom_service
service stop nom_service
...
En réalité, les commandes "start, stop, restart, status..." sont arbitraires. C'est le
script qui défini les arguments acceptés
Il est d'ailleurs possible d'exécuter:
$ /etc/init.d/nom_service start
78
Les services SystemD
SystemD remplace peu à peu SystemV. Les services sont définis dans des fichier
"unit" au format "ini" dans les répertoire "/lib/systemd" et "/etc/systemd". Le
premier étant l'emplacement des fichiers "par défaut" et le second pour les
services surchargés ou créés par l'administrateur.
Exemple:
[Unit]
Requires=docker.service
After=docker.service
[Service]
ExecStartPre=commande à lancer avant
ExecStart=commande de service
ExecStop=commande pour éteindre le service
Il est possible de préfixer les commandes avec un tiret pour ne pas prendre en
compte l'état de la commande. Ainsi une commande de préparation dont le
résultat n'est pas important ne va pas définir le service comme étant en
disfonction.
79
Les services SystemD
SystemD propose une série de commandes pour démarrer, lire l'état, lire les logs,
etc... des services
systemctl start mon.service
systemctl stop mon.service
systemctl status mon.service
journalctl -xe
journalctl -u mon.service
Les options de "journalctl" sont, par exemple:
●
"-e" pour aller à la fin des logs
●
"-x" pour paginer
●
"-u" pour définir quel service loguer
●
"-f" pour lire en continue et en temps réel
80
Exécution automatique de tâches (cron,
at, ...)
Un "cron" est une tâche planifiée. Le principe est de définir un fichier de
configuration de tâche planifiée qui entre dans la table de tâches (crontab)
Il existe différentes manières de créer un cron:
●
soit en écrivant un script dans les repertoires /etc/cron.WHEN où WHEN
peut être "hourly", "daily", "weekly", "monthly")
●
soit en écrivant une ligne dans le crontab avec la commande "crontab -e"
81
Crontab
En utilisant la commande "crontab -e", un éditeur propose l'écriture de ligne au
format "cron".
Elle se présente en 6 colonnes qui définissent quand exécuter une commande.
* * * * * commande 2>&1 >/dev/null
^ ^ ^ ^ ^
| | | | |
| | | | +-- jour de la semaine 0-6
| | | +---- mois 1-12
| | +------ jour du mois 1-31
| +-------- heure 0 23
+---------- minute 0-59
Notez: /dev/null est un fichier qui ne pointe sur rien, la sortie de commande est
donc envoyée nulle part. Cela permet de se débarrasser de la sortie pour ne pas la
loguer - d'autant que sans redirection, la sortie standard est envoyé par mail à
root. Cela dit, vous pouvez rediriger la sortie dans un fichier de log pour vous tenir
informer des erreurs qui peuvent survenir lors d'une tâche planifiée.
82
Crontab
La syntaxe permet des intervales:
●
"*/5" = toutes les 5 <minutes, heures, jours>
●
"10-20-45" = à 10, 20 et 45 <minutes, heures, jours>
Exemple:
*/5 * * * * commande_toute_les_5_minutes
* 1-2-28-29 * * * commande
83
Crontab - Les bonnes pratiques
Règle 1: Toutes les tâches doivent être regroupées dans le cron de l'utilisateur de
livraison, ceci afin de "voir" clairement ce qui se passe sur le serveur
Règle 2: Toutes les tâches 'non systèmes' doivent logger leur sortie standard
dans /tmp/nom_du_script.log
Règle 3: Les tâches systèmes (/etc/cron.*) doivent être maîtrisées. Les crons ne
sont pas tous dans le crontab de l'utilisateur. Il faut savoir ce qui se passe…
Règle 4: Mettre de l'aléa dans les séquencements. Il faut éviter les heures exactes
(minutes à 0) et les heures des crons système : *H17 hourly, 6H25 daily, 6H47
weekly et 6H52 monthly.
Règle 5: Les relances/reboots/etc... sont fait le matin, pas trop tôt.
84
Crontab
Exercices:
Créer un crontab qui écrive la date dans le fichier /tmp/crondate tous les jours à
midi
Créer un crontab qui écrive la date dans le fichier /tmp/crondate tous les lundi à
14h
85
At
La commande "at" permet d'exécuter une commande à un moment précis.
Elle reconnaît une syntaxe pratique pour calculer une date.
at 10:00 AM
at 9:00 PM December 21
at now +2min
86
At
S'en suit une ouverture d'un shell "at" qui permet de définir la ou les commandes à
exécuter.
Pour terminer, il suffit de presser CTRL+D
87
At
Les commandes suivantes permettent de lister les tâches, supprimer un job, etc..
$ atq
13 Tue Feb 9 10:31:00 2016 a pferlet
$ atrm 13
$ atq
"q" signifie "queue", on retrouve cette notion dans plusieurs outils, par exemple
"lpq" affiche la queue "lp" (Linux Printing).
88
Batch
Conjointement à la commande "at", il existe la commande "batch" qui exécutera
une commande seulement quand la machine n'est pas surchargée (load < 0.8)
89
Localisation et internationalisation
La localisation système se défini via des variables d'environnement:
LANG=fr_FR.UTF-8
LC_CTYPE="fr_FR.UTF-8"
LC_NUMERIC="fr_FR.UTF-8"
LC_TIME="fr_FR.UTF-8"
LC_COLLATE="fr_FR.UTF-8"
LC_MONETARY="fr_FR.UTF-8"
LC_MESSAGES="fr_FR.UTF-8"
LC_PAPER="fr_FR.UTF-8"
LC_NAME="fr_FR.UTF-8"
LC_ADDRESS="fr_FR.UTF-8"
LC_TELEPHONE="fr_FR.UTF-8"
LC_MEASUREMENT="fr_FR.UTF-8"
LC_IDENTIFICATION="fr_FR.UTF-8"
LC_ALL=
90
Localisation et internationnalisation
Pour modifier les locales, vous pouvez modifier ces variables.
La méthode la plus adaptée est de reconfigurer le paquet "locale" sous debian, ou
utiliser "localectl" sur les systèmes supportant "systemd"
# debian sans systemd
dpkg-reconfigure locale
# avec systemd
localectl set-local fr_FR.UTF8
TCP/IP et configuration réseau
92
Adressage et routage
L'adresse IP d'une interface réseau se configure de plusieurs manières
●
via la commande ifconfig
●
via des fichiers de configuraiton
●
via "NetworkManager"
On peut assigner statiquement une ip, ou utiliser un serveur DHCP
93
Rappel sur les protocoles
La couche 4 du modèle OSI propose le "transport".
Les plus utilisés sont TCP et UDP.
●
TCP permet de faire un échange d'informations
●
UDP n'attend pas de "handshake", pas de sessions réelles
94
Configuration réseau, vlan, hooks
La configuration réseau peut donc se faire de différentes manières. Sous debian
(sans systemd) le fichier /etc/network/interfaces fournie la configuration des
interfaces:
auto lo
iface lo inet loopback
iface eth0 inet dhcp
95
Adresse Statique sous debian
Pour assigner une addresse statique, on peut définir ce type de fichier:
iface eth0 inet static
address 192.168.1.12
netmask 255.255.255.0
gateway 192.168.1.1
96
Autres distributions
Sur la plupart des autres distributions, systemd (conjointement à NetworkManager)
va créer un fichier par interface. Par exemple /etc/sysconfig/network-
scripts/ifcfg-eth0
HWADDR=3C:97:0E:EF:7D:8C
TYPE=Ethernet
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
NAME=enp3s0
...
97
Les outils de l'administrateur
L'administration du réseau, contrôle et analyse se fait avec une série importante
d'outils.
Parmis, voyons:
●
ifconfig
●
ip (ip route, ip addr, ...)
●
route (qui est remplacé par ip)
●
netstat
●
arp
98
Ifconfig
ifconfig permet de lire et modifier la configuration d'une interface réseau.
ifconfig
ifconfig eth0
ifconfig eth0 192.168.1.20 netmask 255.255.255.0
99
ip
ip permet de modifier la configuration de routage, des interfaces, tunnels...
ip addr
ip route
Exemple
$ ip route
192.168.1.0/24 dev wlp2s0 proto kernel scope link src 192.168.1.29
metric 600
100
ip
Par exemple pour ajouter une route vers le réseau 192.168.200.0/24 en passant
par la carte réseau eth1:
$ ip route add 192.168.200.0/24 dev eth1
Pour connaitre la route qu'empruntera un paquet pour aler vers 1.2.3.4:
$ ip route get 1.2.3.4
1.2.3.4 via 192.168.1.1 dev eth0 src 192.168.1.29
cache
Cela signifie que le paquet passera pas la carte eth0, aura l'ip 192.168.1.29 et
utilisera la passerelle 192.168.1.1
101
netstat
netstat est un outil qui permet de connaître l'état des ports réseau en cours.
Exemple:
netstat -taupen
Connexions Internet actives (serveurs et établies)
Proto Recv-Q Send-Q Adresse locale Adresse distante Etat
Utilisatr Inode PID/Program name
tcp 0 0 192.168.100.1:53 0.0.0.0:* LISTEN
0 120934 1482/dnsmasq
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
0 119078 1295/sshd
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN
0 130623 2142/cupsd
Iptables
103
Firewall
Iptables, anciennement ipfilters, est un firewall intégré au noyau permettant le
filtrage fin de paquets réseau.
Il permet de faire, entre autres:
●
filtrage ip source et destination
●
filtrage de port source et destination
●
préroutage et postroutage
●
journalisation
●
etc..
104
Principe de règles
Iptables permet de créer des règles dans un ordre précis qui vont s'appliquer à une
trame réseau
Les règles de base:
●
ACCEPT
●
REJECT
●
DROP
●
LOG
Iptables propose un principe de "chaînes" et de "tables" auxquels s'appliquent les
règles.
105
Chaines
Une chaine est, en quelques sortes, la direction que prend une trame réseau.
On distingue, des directions:
●
INPUT
●
OUTPUT
●
FORWARD...
Des états:
●
NEW
●
ESTABLISHED...
106
Tables
Les tables sont les sous-ensembles de chaines. C'est le traitement à infliger à une
trame.
On distingue:
●
raw ou conntrack
●
nat (net address translation)
●
filter (par defaut)
●
mangle (pour modifier le paquet)
107
Principe de commande
Une commade IPTables fonctionne ainsi:
iptables [-t table] command [match] [target]
Pour lister les règles:
iptables -L
ipatbles -S
iptables -t table -L
108
Exemple, ouvrir un port
Voici un exemple d'ouverture de port 80 TCP en entrée et sortie:
iptables -A INPUT -t filter -p tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -t filter -p tcp --sport 80 -j ACCEPT
dport signifie "destination port" sport signifie "source port"
109
Quelques principes de bases
Il convient de faire ces opérations en général:
●
on vide les règles
●
on définie des règles "par défaut" (-P)
●
on autorise ou ferme des ports
110
Un exemple complet
iptables -F
iptables -P OUTPUT ACCEPT
iptables -P INPUT DROP
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp -t filter --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -t filter --dport 443 -j ACCEPT
iptables -A INPUT -p tcp -t filter --dport 22 -j ACCEPT
111
Création de règle
Tout comme ACCEPT, DROP, etc., il est possible de créer ses propres règles.
iptables -N LOG_DROP
iptables -A INPUT -t filter -p tcp --dport 8888 -j LOG_DROP
# On traire ensuite cette règle
iptables -A LOG_DROP -j LOG --log-prefix 'MYDROP '
iptables -A LOG_DROP -j DROP
112
Forward
Iptables permet de créer des règles de "forward":
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j DNAT --to
192.168.1.2:8080
iptables -A FORWARD -p tcp -d 192.168.1.2 --dport 8080 -j ACCEPT
113
Autres gestion de firewall
Iptables est une commande bas niveau, parfois complexe à mettre en place. Des
services tels que Docker ou Fail2ban vont impacter vos règles "à la volée".
De nos jours, les distributions orienté entreprises et/ou plus à jour utilisent
"firewalld" qui va injecter les règles de manière plus souple:
firewall-cmd --add-port=80/tcp --permanent
Conseil: si vous avez firewalld installé sur un système, évitez d'utiliser directement
iptables. D'autres services (par exemple docker) vont manipuler le firewall via un
bus système (dbus) et vous risquerez d'entrer en conflit avec, ou de sauver des
règles iptables temporaires (via iptables-save par exemple).
OpenSSH
115
SSH
SSH est un protocole réseau sécurisé permettant l'ouverture de Shell distant, le
transfère de fichier, le "tunnelling" et le transit d'affichage.
Le service "openssh" propose un serveur et un client SSH
116
Authentification
Afin de se connecter à un serveur, la machine distante doit exécuter le service
"sshd"
service sshd start
#
systemctl start ssh
Pour se connecter, il suffit, depuis la machine cliente, de taper:
ssh user@serveur
117
Login ou paire de clefs
Deux méthodes d'authentification sont proposée par SSH:
●
login et mot de passe
●
paire de clefs
SSH peut utiliser plusieurs types de paire de clefs:
●
rsa
●
dsa
●
...
118
Paire de clefs
Pour générer une paire de clefs:
ssh-keygen -t dsa -b 2048
L'utilisation d'une passphrase permet de sécuriser l'ouverture de shell SSH depuis
le poste.
119
Ajout de la clef sur le serveur
Le serveur peut autoriser un client à se connecter avec sa clef RSA ou DSA en
déposant la clef publique dans le fichier "~/.ssh/authorized_keys"
Les droits sur le répertoire ".ssh" sont très restrictifs. Il faut qu'ils soient en lecture
seul pour tous.
chmod -R a-rw .ssh chmod -R a+r .ssh
120
Ajout de la clef sur le serveur
Autre méthode si le serveur permet l'authentification par login (au moins le temps
de mettre les clefs en place)
ssh-copy-id user@serveur
121
Copie de fichier
Il est possible de copier des fichiers au travers du protocole ssh.
Les clients
●
sftp: client ssh de transfert de fichier
●
scp: commande capable d'utiliser le protocole ssh
●
rsync: commande de synchronisation capable d'utiliser le protocole ssh
Les outils de navigation de fichier peuvent aussi utiiser le protocole sftp: dans
nautilus (gnome) presser CTRL+L et entrez une addresse de la forme
"sftp://user@server"
122
Execution de commande via SSH
SSH ouvre, par défaut, un shell. Mais on peut spécifier une commande à exécuter:
ssh user@serveur commande
"commande" sera exécutée et la connexion sera fermée juste après.
Sécurité
124
Quotas
125
Fail2ban
Un des outils de sécurité réseau très répandu et efficace est "fail2ban".
Le principe est simple: il utilise les logs du système pour trouver des tentatives en
erreur d'accès répétées. Selon la configuration, il va alors mettre en liste noire
l'adresse source.
Fail2ban utilise, entre autres, "iptables" pour fermer l'accès à l'attaquant.
126
Fail2ban
Installation:
#debian
apt-get install fail2ban
# fedora - redhat - centos
dnf ou yum install fail2ban
127
Fail2ban
Le fichier /etc/fail2ban/jail.conf fourni les détails de configuration.
Exemple SSH:
[ssh]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 6

Contenu connexe

Tendances

A la découverte de redo
A la découverte de redoA la découverte de redo
A la découverte de redoThierry Gayet
 
Shell sans les coquilles
Shell sans les coquillesShell sans les coquilles
Shell sans les coquillesÉdouard Lopez
 
Présentation unix linux
Présentation unix linuxPrésentation unix linux
Présentation unix linuxEmmanuel Florac
 
Compilation noyau linux depuis les sources
Compilation noyau linux depuis les sourcesCompilation noyau linux depuis les sources
Compilation noyau linux depuis les sourcesThierry Gayet
 
les Commandes linux/Unix (giants networks)
les Commandes linux/Unix (giants networks)les Commandes linux/Unix (giants networks)
les Commandes linux/Unix (giants networks)Souhaib El
 
Formation Linux lpi 101
Formation Linux lpi 101 Formation Linux lpi 101
Formation Linux lpi 101 Kais Baccour
 
Admin linux
Admin linuxAdmin linux
Admin linuxbekhti
 
Pratique de la programmation en go
Pratique de la programmation en goPratique de la programmation en go
Pratique de la programmation en gokader15
 
Presentation langage go_19022015
Presentation langage go_19022015Presentation langage go_19022015
Presentation langage go_19022015Stéphane Legrand
 
log file sous Netbeans et J2ME
log file sous Netbeans et J2MElog file sous Netbeans et J2ME
log file sous Netbeans et J2MEZied
 
SdE 2 - Langage C, Allocation de memoire
SdE 2 - Langage C, Allocation de memoireSdE 2 - Langage C, Allocation de memoire
SdE 2 - Langage C, Allocation de memoireAlexandru Radovici
 

Tendances (20)

A la découverte de redo
A la découverte de redoA la découverte de redo
A la découverte de redo
 
Tp n 5 linux
Tp n 5 linuxTp n 5 linux
Tp n 5 linux
 
Tp n 6 linux
Tp n 6 linuxTp n 6 linux
Tp n 6 linux
 
Shell sans les coquilles
Shell sans les coquillesShell sans les coquilles
Shell sans les coquilles
 
Présentation unix linux
Présentation unix linuxPrésentation unix linux
Présentation unix linux
 
Compilation noyau linux depuis les sources
Compilation noyau linux depuis les sourcesCompilation noyau linux depuis les sources
Compilation noyau linux depuis les sources
 
les Commandes linux/Unix (giants networks)
les Commandes linux/Unix (giants networks)les Commandes linux/Unix (giants networks)
les Commandes linux/Unix (giants networks)
 
Formation Linux lpi 101
Formation Linux lpi 101 Formation Linux lpi 101
Formation Linux lpi 101
 
2020 (1)
2020 (1)2020 (1)
2020 (1)
 
Admin linux
Admin linuxAdmin linux
Admin linux
 
s de base
s de bases de base
s de base
 
Python avancé : Lecture et écriture de fichiers
Python avancé : Lecture et écriture de fichiersPython avancé : Lecture et écriture de fichiers
Python avancé : Lecture et écriture de fichiers
 
Développement informatique : Programmation réseau
Développement informatique : Programmation réseauDéveloppement informatique : Programmation réseau
Développement informatique : Programmation réseau
 
Tp n 4 linux
Tp n 4 linuxTp n 4 linux
Tp n 4 linux
 
Pratique de la programmation en go
Pratique de la programmation en goPratique de la programmation en go
Pratique de la programmation en go
 
Presentation langage go_19022015
Presentation langage go_19022015Presentation langage go_19022015
Presentation langage go_19022015
 
Tp n 1 linux
Tp n 1 linuxTp n 1 linux
Tp n 1 linux
 
log file sous Netbeans et J2ME
log file sous Netbeans et J2MElog file sous Netbeans et J2ME
log file sous Netbeans et J2ME
 
SdE 2 - Langage C, Allocation de memoire
SdE 2 - Langage C, Allocation de memoireSdE 2 - Langage C, Allocation de memoire
SdE 2 - Langage C, Allocation de memoire
 
Boot
BootBoot
Boot
 

Similaire à Linux Administrateur

Scripting Linux avec Python partie1.pptx
Scripting Linux avec Python partie1.pptxScripting Linux avec Python partie1.pptx
Scripting Linux avec Python partie1.pptxFrancisRUKAN
 
Cours c#
Cours c#Cours c#
Cours c#zan
 
UNIX_SE4_2023 (1).pdf
UNIX_SE4_2023 (1).pdfUNIX_SE4_2023 (1).pdf
UNIX_SE4_2023 (1).pdfYassineZouin
 
Processus pére fils
Processus pére filsProcessus pére fils
Processus pére filsSelman Dridi
 
Cours_C_for_Etudiant.pdf
Cours_C_for_Etudiant.pdfCours_C_for_Etudiant.pdf
Cours_C_for_Etudiant.pdfHailisara
 
Python For Data Science - French Course
Python For Data Science - French CoursePython For Data Science - French Course
Python For Data Science - French CourseHaytam EL YOUSSFI
 
Support Formation Samsung - Python - Session 1 - 2022.pptx
Support Formation Samsung - Python - Session 1 - 2022.pptxSupport Formation Samsung - Python - Session 1 - 2022.pptx
Support Formation Samsung - Python - Session 1 - 2022.pptxbpmana
 
Formation python
Formation pythonFormation python
Formation pythonj_lipaz
 
Comment analyser une machine linux compromise
Comment analyser une machine linux compromiseComment analyser une machine linux compromise
Comment analyser une machine linux compromiseTarek MOHAMED
 
Chap 1 Initiation.pptx
Chap 1 Initiation.pptxChap 1 Initiation.pptx
Chap 1 Initiation.pptxolfaharrabi2
 
Al32 g formation-aix-unix-langages-de-commandes-korn-shell-et-bash
Al32 g formation-aix-unix-langages-de-commandes-korn-shell-et-bashAl32 g formation-aix-unix-langages-de-commandes-korn-shell-et-bash
Al32 g formation-aix-unix-langages-de-commandes-korn-shell-et-bashCERTyou Formation
 

Similaire à Linux Administrateur (20)

Scripting Linux avec Python partie1.pptx
Scripting Linux avec Python partie1.pptxScripting Linux avec Python partie1.pptx
Scripting Linux avec Python partie1.pptx
 
Cours c#
Cours c#Cours c#
Cours c#
 
Introduction à Python
Introduction à PythonIntroduction à Python
Introduction à Python
 
Langage C
Langage CLangage C
Langage C
 
Td pascal tdD
Td pascal tdDTd pascal tdD
Td pascal tdD
 
langage C++
langage C++langage C++
langage C++
 
UNIX_SE4_2023 (1).pdf
UNIX_SE4_2023 (1).pdfUNIX_SE4_2023 (1).pdf
UNIX_SE4_2023 (1).pdf
 
Chapitre 4 Linux
Chapitre 4 LinuxChapitre 4 Linux
Chapitre 4 Linux
 
Processus pére fils
Processus pére filsProcessus pére fils
Processus pére fils
 
Cours_C_for_Etudiant.pdf
Cours_C_for_Etudiant.pdfCours_C_for_Etudiant.pdf
Cours_C_for_Etudiant.pdf
 
Python For Data Science - French Course
Python For Data Science - French CoursePython For Data Science - French Course
Python For Data Science - French Course
 
Support Formation Samsung - Python - Session 1 - 2022.pptx
Support Formation Samsung - Python - Session 1 - 2022.pptxSupport Formation Samsung - Python - Session 1 - 2022.pptx
Support Formation Samsung - Python - Session 1 - 2022.pptx
 
C++ 11/14
C++ 11/14C++ 11/14
C++ 11/14
 
Formation python
Formation pythonFormation python
Formation python
 
COURS_PYTHON_22.ppt
COURS_PYTHON_22.pptCOURS_PYTHON_22.ppt
COURS_PYTHON_22.ppt
 
Formation python
Formation pythonFormation python
Formation python
 
Comment analyser une machine linux compromise
Comment analyser une machine linux compromiseComment analyser une machine linux compromise
Comment analyser une machine linux compromise
 
Langage Perl
Langage PerlLangage Perl
Langage Perl
 
Chap 1 Initiation.pptx
Chap 1 Initiation.pptxChap 1 Initiation.pptx
Chap 1 Initiation.pptx
 
Al32 g formation-aix-unix-langages-de-commandes-korn-shell-et-bash
Al32 g formation-aix-unix-langages-de-commandes-korn-shell-et-bashAl32 g formation-aix-unix-langages-de-commandes-korn-shell-et-bash
Al32 g formation-aix-unix-langages-de-commandes-korn-shell-et-bash
 

Plus de Open Source School

Strategie de Virtualisation Open Source
Strategie de Virtualisation Open SourceStrategie de Virtualisation Open Source
Strategie de Virtualisation Open SourceOpen Source School
 
Kerberos : The network authentification protocol
Kerberos : The network authentification protocolKerberos : The network authentification protocol
Kerberos : The network authentification protocolOpen Source School
 
LDAP : Theory and OpenLDAP implementation
LDAP : Theory and OpenLDAP implementationLDAP : Theory and OpenLDAP implementation
LDAP : Theory and OpenLDAP implementationOpen Source School
 
Monitoring : The art of knowing when and why things go wrong
Monitoring : The art of knowing when and why things go wrongMonitoring : The art of knowing when and why things go wrong
Monitoring : The art of knowing when and why things go wrongOpen Source School
 
Varnish : Advanced and high-performance HTTP caching
Varnish : Advanced and high-performance HTTP cachingVarnish : Advanced and high-performance HTTP caching
Varnish : Advanced and high-performance HTTP cachingOpen Source School
 

Plus de Open Source School (12)

PHP & Initiation Symfony
PHP & Initiation SymfonyPHP & Initiation Symfony
PHP & Initiation Symfony
 
Strategie de Virtualisation Open Source
Strategie de Virtualisation Open SourceStrategie de Virtualisation Open Source
Strategie de Virtualisation Open Source
 
IPSEC
IPSECIPSEC
IPSEC
 
GIT pour développeur
GIT pour développeurGIT pour développeur
GIT pour développeur
 
Kerberos : The network authentification protocol
Kerberos : The network authentification protocolKerberos : The network authentification protocol
Kerberos : The network authentification protocol
 
LDAP : Theory and OpenLDAP implementation
LDAP : Theory and OpenLDAP implementationLDAP : Theory and OpenLDAP implementation
LDAP : Theory and OpenLDAP implementation
 
Monitoring : The art of knowing when and why things go wrong
Monitoring : The art of knowing when and why things go wrongMonitoring : The art of knowing when and why things go wrong
Monitoring : The art of knowing when and why things go wrong
 
PostgreSQL : Introduction
PostgreSQL : IntroductionPostgreSQL : Introduction
PostgreSQL : Introduction
 
Redhat enterprise Linux
Redhat enterprise LinuxRedhat enterprise Linux
Redhat enterprise Linux
 
Redis : NoSQL key-data store
Redis : NoSQL key-data storeRedis : NoSQL key-data store
Redis : NoSQL key-data store
 
SSL : Theory and practice
SSL : Theory and practiceSSL : Theory and practice
SSL : Theory and practice
 
Varnish : Advanced and high-performance HTTP caching
Varnish : Advanced and high-performance HTTP cachingVarnish : Advanced and high-performance HTTP caching
Varnish : Advanced and high-performance HTTP caching
 

Linux Administrateur

  • 2. 2 La 1ère école 100 % dédiée à l'open source Open Source School est fondée à l'initiative de Smile, leader de l'intégration et de l'infogérance open source, et de l'EPSI,établissement privé pionnier de l’enseignement supérieur en informatique. Dans le cadre du Programme d’Investissements d’Avenir (PIA), le gouvernement français a décidé de soutenir la création de cette école en lui attribuant une première aide de 1,4M€ et confirme sa volonté de soutenir la filière du Logiciel Libre actuellement en plein développement. Avec une croissance annuelle de plus de 10%, et 4 000 postes vacants chaque année dans le secteur du Logiciel Libre, OSS entend répondre à la pénurie de compétences du secteur en mobilisant l’ensemble de l’écosystème et en proposant la plus vaste offre en matière de formation aux technologies open source tant en formation initiale qu'en formation continue.
  • 3. 3 Les formations du plein emploi !  Formation Continue Open Source School "Executive Education" est un organisme de formation qui propose un catalogue de plus de 200 formations professionnelles et différents dispositifs de reconversion permettant le retour à l’emploi (POE) ou une meilleure employabilité pour de nombreux professionnels de l’informatique.  Pour vos demandes : formations@opensourceschool.fr  Formation Initiale 100% logiciels libres et 100% alternance, le cursus Open Source School s’appuie sur le référentiel des blocs de compétences de l’EPSI. Il est sanctionné par un titre de niveau I RNCP, Bac+5. Le programme est proposé dans 6 campus à Bordeaux, Lille, Lyon, Montpellier, Nantes, Paris.
  • 4. Linux Administrateur Programme Bachelor 3ème Année Parcours Open Source
  • 5. 5 Plan Programmation Bash Avancée ● Expressions logiques & boucles ● Paramètres d’entrée et valeurs de retour ● Environnements d'exécution ● Expressions régulières Gestion des utilisateurs et des groupes ● L'utilisateur et le groupe POSIX ● Gestion des comptes
  • 6. 6 Plan Administration du système ● Les logs et les mails ● Fichiers de configuration du système ● La gestion des paquets et des mises à jour ● Les services ● Exécution automatique de tâches (cron, at, ...) ● Localisation et internationalisation TCP/IP et configuration du réseau ● Adressage IP et routage ● Protocoles réseaux (ICMP, TCP, UDP, …) et ports ● Configuration réseau (adresses, hooks, vlan, ...) ● Les outils de l'administrateur : ping, netstat, arp, netcat, traceroute, nmap, ...
  • 7. 7 Plan Services système et Sécurité ● Permissions du système de fichiers, quotas utilisateurs ● Sécurité réseau Iptables OpenSSH et fail2ban Authentification du serveur et des utilisateurs
  • 9. 9 Le terminal de commande C'est l'interface de commande. Il existe plusieurs terminaux: ● TTY qui est le terminal de commande "de base" (CTRL+ALT+F1) ● Terminaux virtuels (xterm, gnome-terminal, terminator, terminology...) Il permet de gérer les "entrées/sorties" et d'y exécuter des "commandes" Des logiciels savent utiliser le terminal et le placement de caractère pour y afficher des interfaces plus complexes (curses) par exemple: vim, mutt, top...
  • 11. 11 Le BASH Bourne Again SHell, du nom du créateur du "Bourne shell" (Stephen Bourne, 1977 sur Unix 7) Réécrit en 1988 par Brian Fox C'est le SHELL POSIX généralement par défaut sur la plupart des distributions. Il permet: ● d'exécuter des commandes ● de créer des scripts ● vérifier le résultat d'une commande ● interfacer l'homme et la machine (système)
  • 12. 12 Le SHELL en général C'est l'un des outils les plus importants pour un administrateur UNIX/Linux Il permet d'effectuer la totalité des travaux - installation, mise à jour, contrôle, paramétrage, etc. Maîtriser les outils SHELL est indispensable à la vie d'un administrateur système/réseau dans un environnement UNIX
  • 13. 13 Le terminal et le SHELL Un terminal est une interface de commande qui permet de lancer un SHELL Ce SHELL permet à l'utilisateur d'exécuter des commandes Une commande peut être: - un exécutable binaire (un programme) - un script (bash, perl, python...) - un alias - une fonction - des instructions de contrôle (if, then, case, until...) Bash est un SHELL
  • 14. 14 TTY/PTY Vous avez peut-être entendu les termes "tty" et/ou "pty" Le mot "TTY" vient de teletype Le mot "PTY" vient de pseudo-teletype Pour faire simple: le TTY ou le PTY sont des "interfaces" connectées au système. Voir les répertoires "/dev/tty*" et "/dev/pts/*"
  • 15. 15 Les commandes Les commandes sont prévues pour exécuter des tâches. Une commande = une tâche (principe UNIX) Les commandes de bases: ● cd - change directory ● ls - list directory ● cp - copy ● mv - move ● rm - remove ● cat - afficher un contenu (concatenate files) Et la plus importante de toutes: man et ses dérivées : "man man" et "man -k pattern" Pour chaque commande, retenir le libellé long de la commande !!! pour "cd" retenir "change directory", ls "list", pwd "print working dir.."
  • 16. 16 Les commandes de base Elle peuvent accepter : - des paramètres - des options Les paramètres sont des arguments de commandes et ne sont pas spécifique. Les options sont spécifiques à la commande. Elles modifient le comportement de la commande. Elles commencent par un ou deux tirets "-" (-a, --all, -f, etc.)
  • 17. 17 Les options Exemple: # affichage de la liste des fichiers et répertoires ls # affiche "tout" (all), y compris les fichiers cachés ls -a # affiche les informations des fichiers/répertoires ls -l # Retenir le mode le plus employé en administration système ls -ltr qui permet de trouver le dernier fichier modifié !!! retenir : list long, time, reverse order...
  • 18. 18 Les options Les options sont (si la commande respecte la norme POSIX), de deux formes: au format court, un seul tiret et une lettre "-a" au format long, deux tirets et un "terme" "--all" POSIX permet de "concaténer" les options courtes, par exemple: ls -l -a # équivaut à ls -la
  • 19. 19 Expressions logiques On appelle "expression logique" une expression qui permet de "tester" un résultat. La commande de base est "test", Bash permet de simplifier cela en l'intégrant dans des crochets test $A = $B [ $A = $B ] Mais bash propose depuis une version "double crochets" qui est plus avancée: [[ $A == $B ]]
  • 20. 20 Simple ou double ? La version "simple crochet" est POSIX, elle fonctionne sur d'autres SHELL sans souci. C'est un alias à la commande "test" La version "double crochet" est plus poussée, elle permet de respecter une syntaxe plus proche d'autres langages. De plus, elle évite de forcer l'utilisation de guillemets.
  • 21. 21 Les tests Bash fait la distinction entre un test de chaine de caractères et un test numérique (entiers) [[ "1" == 01 ]] => faux [[ "1" -eq 01 ]] => vrai Les tests de chaines de caractères sont: c1 == c2, vrai si c1 et c2 sont égaux c1 != c2, vrai si c1 et c2 sont différents c1 > c2, vrai si c1 est ordonné avant c2 ... etc... -z c, vrai si c est la chaîne vide -n c, vrai si c n'est pas la chaîne vide
  • 22. 22 Les tests Tests numériques n1 -eq n2, vrai si n1 et n2 sont égaux n1 -ne n2, vrai si n1 et n2 sont différents n1 -lt n2, vrai si n1 est strictement inférieur à n2 n1 -le n2, vrai si n1 est inférieur ou égal à n2 n1 -gt n2, vrai si n1 est strictement supérieur à n2 n1 -ge n2, vrai si n1 est supérieur ou égal à n2.
  • 23. 23 Opérations après un test Les opérateurs logique suivant permettent de contrôler le résultat d'un test: "&&" = ET logique (and) "||" = OU logique (or) C'est donc assez simple: # commande executée si condition vraie [[ condition ]] && commande # commande executée si condition fausse [[ condition ]] || commande Ces opérateurs permettent surtout d'écrire des commandes "mono-lignes" (inline), qui peuvent être lancées par des outils comme cron /etc/init.d/apache stop && sleep 20 && /etc/init.d/apache start
  • 24. 24 Tests systèmes [ -e $FILE ] # vrai si $FILE existe dans le répertoire courant [ -s $FILE ] # vrai si $FILE existe dans le répertoire courant et si sa taille est supérieure à zéro [ -f $FILE ] # vrai si $FILE est un fichier dans le répertoire courant
  • 25. 25 Tests systèmes [ -r $FILE ] # vrai si $FILE est un fichier lisible dans le répertoire courant [ -w $FILE ] # vrai si $FILE est un fichier inscriptible dans le répertoire courant [ -x $FILE ] # vrai si $FILE est un fichier exécutable dans le répertoire courant [ -d $FILE ] # vrai si $FILE est un répertoire dans le répertoire courant
  • 26. 26 Valeurs de retour Bash permet de vérifier si une commande a bien terminée sans erreur. La variable "$?" vaut: ● 0 si tout s'est bien passé ● tout autre valeur correspond à une erreur Les tests savent utiliser par défaut cette valeur. [[ ls ]] && echo "j'ai réussi à lister le répertoire"
  • 27. 27 Opérations Bash sait calculer mais seulement avec des entiers: echo $((1+5)) for ((i=0;i<10;i++)); do commande; commande; done Sinon, on passe par l'outil "bc".
  • 28. 28 Entrées/Sorties Bash utilise au moins 3 "flux": ● STDIN => entrée standard, numéroté "0" ● STDOUT => sortie standard, numéroté "1" ● STDERR => sortie erreur, numéroté "2" STDIN est par défaut une entrée au clavier STDOUT est par défaut un affichage écran STDERR est aussi affiché à l'écran
  • 29. 29 Entrées/Sorties Par exemple, la commande "cat" peut lire STDIN si aucun argument (nom de fichier) n'a été donné. Dans ce cas, le terminal se met en mode "lecture de flux standard" et attend un signal de coupure (CTRL+D) "cat" affiche alors l'entrée sur la sortie standard.
  • 30. 30 Entrées/Sorties On peut rediriger les entrées/sorties # envoie le contenu de "fichier" sur STDIN de la commande commande <fichier # envoie la sortie standard de la commande dans un fichier (qui sera vidé avant) commande >fichier # envoie la sortie standard à la fin du fichier (le fichier n'est pas vidé) commande >>fichier Comme vue précédemment, les entrées/sorties ont des numéros. Bash propose cette écriture: commande 1>fichier_out 2>fichier_err Le "1" est optionnel, c'est le cas par défaut.
  • 31. 31 Entrées/Sorties Dans le cas où l'on désire fusionner des sorties, on peut utiliser la notation: commande N>&M N: flux à rediriger M: flux qui reçoit Exemple: # envoit le flux d'erreur dans STDOUT # et envoit STDOUT dans fichier commande 2>&1 >fichier
  • 32. 32 Environnement Bash fonctionne dans un environnement d'exécution. Cela signifie qu'il a des repères système. Les variables d'environnements sont très utiles ● HOME qui défini le répertoire utilisateur (en cours) ● PWD qui défini le répertoire courant ● UID ● SHELL désigne le shelle en cours (bash, sh, zsh...) ● etc.. Voir la commande "env" et "printenv"
  • 33. 33 Environnement L'environnement peut être manipulé dans différents fichiers tels que: $HOME/.bashrc $HOME/.bash_profile /etc/profile /etc/profile.d/*.sh Les variables d'environnements sont modifiées par les processus. Par exemple la commande "cd" impacte la variable "$PWD"
  • 34. 34 Environnement d'exécution On parle aussi d'environnement d'exécution pour définir la manière dont le système intègre la session. Rappelez vous qu'un shell lance un programme: le SHELL Il est lui même un processus enfant. Tapez: ps faux (version BSD) ps -edfH (version Système V) ps -w id_proc pour afficher la ligne de commande complète top
  • 35. 35 Définition Une expression régulière permet de "matcher" une patron et une chaîne Pour faire simple, cela permet de vérifier si une chaîne de caractère respecte un certain format On s'en sert dans bash pour tester des chaînes, soit nativement, soit avec des outils tels que "sed", "awk" ou "grep"
  • 36. 36 Définition Les "regexp" (autre nom) sont de deux formes: ● expression POSIX ● expression PCRE La version "PCRE" est relativement plus puissante. C'est un langage en soit...
  • 37. 37 Le langage regexp On définit un pattron en suivant ces principes: ● on défini un "matcher" (caractère, chiffre...) ● on défini un "répétiteur" (une fois, au moins N fois...) On peut aller très loin... mais pour le moment nous allons rester sur les bases
  • 38. 38 Le langage regexp Les "matchers": ● "." (point) pour "n'importe quel caractère" ● "d" pour "n'importe quel chiffre de 0 à 9" ● "w" n'importe quel mot ● "[n-m]" un caractère allant de "n" à "m" Les répétiteurs: ● "*" de 0 à l'infini ● "?" 0 ou une fois ● "+" au moins une fois ● "{N}" N fois ● "{N,M}" de N à M fois ● "{N,}" au moins N fois ● "{,N}" au plus N fois
  • 39. 39 Limiteurs Un dernier point sur les regexp: ● si "$" est positionné en fin d'expression, il sert à identifier une "fin de ligne" ● si "^" est positionné en début de ligne, il sert à identifier un début de ligne Exemple: # on ne veut pas afficher les commentaires dans un shell script grep -v '^#' mon_script.sh
  • 40. 40 Exemples # foo suivi d'au moins un chiffre food+ # foo suivi d'une lettre entre "a" et "f" suivi d'un caractère maximum foo[a-f].?
  • 41. 41 Utilisation Avec grep: echo "Hello world" | grep "^H.*o" avec sed: echo "Hello World" | sed 's/^H.*o/Hi/' avec awk: echo "Hello World" | awk '/H.*o/{ print $1}'
  • 42. 42 Utilisation Bash sait aussi gérer nativement les expressions régulières: A="Hello World" [[ $A =~ H.*o ]] && echo "trouvé"
  • 43. 43 Les commandes à connaitre Nous allons voir quelques commandes très importantes et fortement utilisées: ● cd, ls ● cp, mv, rm, ln ● grep ● sed
  • 44. 44 Manipuler - se déplacer dans les répertoires # Va dans le répertoire $HOME cd # Va dans le répertoire /op cd /opt # liste le répertoire courant ls # liste un autre répertoire "rep" ls rep
  • 45. 45 Manipuler - précautions -i En administration système, l'usage est de travailler avec un filet de sécurité. Les commandes de suppression, remplacement, écrasement, sont configurées par défaut pour demander une confirmation avec l'option -i. Le fichier .bashrc contient au moins les lignes suivantes : alias cp='cp -i' alias mv='mv -i' alias rm='rm -i' alias ln='ln -i'
  • 46. 46 Manipuler - déplacer des fichiers # copie un fichier cp source destination # déplace un fichier mv source destination # supprime un fichier rm source # supprime un répertoire rm -r rep # en forcant rm -rf rep # autre commande rmdir rep # bonne pratique pour supprimer un répertoire : rm -rf rep/* rmdir rep # permet d'éviter de lancer "rm -rf *"
  • 47. 47 Manipuler - créer des liens # créer un lien ln source destination # créer un lien symbolique ln -s source destination Si le lien est une lien "hard" (non symbolique), supprimer la source ou la destination n'impacte pas le fichier. Les deux entrées ne sont pas "discernables" en tant que lien Le lien symbolique peut référencer une source "supprimé", on dit que le lien est cassé.
  • 48. 48 Grep "grep" est une commande de recherche de "pattern". # cherche "foo" dans le fichier file grep "foo" file # cherche "foo" dans le répertoire dir grep -r "10.1.8" /etc # ignore la casse et recursif grep -ri "nom_host" /etc # cherche "foo" dans STDIN commande | grep "foo"
  • 49. 49 Sed "Sed" est un éditeur en ligne Il permet de manipuler des flux ou des fichier en remplaçant du texte, insérant des lignes, supprimant des lignes, etc. Voir "man sed"
  • 50. 50 Sed La commande "s" pour "substitute" echo "Hello" | sed 's/o/a/' Hella echo "foo bar baz" | sed 's/ba./toto/' # Remplace foo par bar dans fichier # et affiche le résultat dans STDOUT sed 's/foo/bar/' fichier # idem mais remplace dans le fichier sed -i 's/foo/bar/' fichier
  • 52. 52 Utilisateur et groupes POSIX Un utilisateur POSIX se défini par: ● un login ● un mot de passe ● un identifiant numérique ● un groupe principal ● un ou plusieurs groupes secondaires
  • 53. 53 Gestion de comptes Pour créer et modifier un compte: # crée un compte avec un "home" useradd -m username # ajoute le groupe secondaire "sudo" à l'utilisateur usermod -a -G sudo username # change le mot de passe du compte passwd usermod # adduser en mode interactif # adduser smile
  • 54. 54 Manipuler - changer les droits Nous le verrons plus tard, mais les fichiers et répertoires ont des permissions. Pour changer les permissions: # change le propriétaire chown user fichier1 fichier2... chown répertoire # changer récursivement chown -R répertoire #changer le groupe chgrp groupe fichier1 fichier2... chgrp répertoire # changer récursivement chgrp -R répertoire
  • 55. 55 Manipuler - changer les droits Pour changer le "owner" (propriétaire) et le groupe, la commande "chown" peut permettre de le faire en une fois: chown user:groupe fichier ou répertoire # prendre le groupe par défaut - notez le ":" chown user fichier ou répertoire chown user:groupe fichier ou répertoire
  • 56. 56 Manipuler - les droits Pour voir les attributs de fichier, l'option "-l" de "ls" affiche les informations nécessaires: ls -l /etc total 1728 drwxr-xr-x. 1 root root 126 15 févr. 12:28 abrt/ -rw-r--r--. 1 root root 16 17 oct. 21:43 adjtime drwxr-xr-x. 1 root root 16 17 oct. 20:09 akmods/ -rw-r--r--. 1 root root 1518 13 mai 2015 aliases drwxr-xr-x. 1 root root 58 10 févr. 02:52 alsa/ drwxr-xr-x. 1 root root 1726 18 févr. 09:40 alternatives/ -rw-r--r--. 1 root root 541 13 juil. 2015 anacrontab Le premier tiret donne le type, "-" signifie "fichier standard", "d" signifie "répertoire", "l" signifie "lien" etc... Les 9 autres attributs indiquent quels droits sont appliqués au propriétaire, au groupe et autres utilisateurs.
  • 57. 57 Manipuler - les droits Les attributs un fichier peut être: ● lisible (r) ● modifiable (w) ● executable (x) un répertoire peut être: ● listable (r) ● modifiable (w) ● traversable (x)
  • 58. 58 Manipuler - les droits Pour modifier les attributs d'un fichier, il y a deux écritures possibles. Soit avec le mode "octal", soit avec les "raccourcis". Un attribut octal est une addition de 3 chiffres: ● 4 = lisible pour les fichiers ou listable pour un répertoire ● 2 = modifiable ● 1 = exécutable pour les fichiers ou traversable pour les répertoires La modification se fait pour les 3 possibilités: owner, groupe et other On additionne les valeurs voulues pour chaque groupe de contrôle. ● 6 = 4+2 => le fichier est lisible et modifiable ● 7 = 4+2+1 => le fichier est lisible, modifiable et exécutable ● 5 = 4+1 => lisible est exécutable
  • 59. 59 Manipuler - les droits Pour un répertoire, le fait d'être traversable signifie qu'un utilisateur ne voit pas le contenu du répertoire mais peut le traverser pour lire les sous-répertoires. Par exemple: Le répertoire "/var" peut n'être lisible que pour "root", mais il faut laisser l'accès à "/var/www" à l'utilisateur apache "www-data". De ce fait, "/var" à l'attribut "x" pour tous, et "/var/www" a pour attributs "rwx" pour "www-data" (user et group) En général, c'est plutôt "r-x" qui est appliqué pour permettre le listing de répertoires.
  • 60. 60 Manipuler - les droits Quelques commandes utiles : $ chmod a+x /usr/local/bin/*.sh $ chmod -R a+X /var/www/mon_projet $ chmod -R u+rw,g+r /var/www/mon_projet $ chmod -R o-rw /var/www/mon_projet $ chmod -R 777 un_répertoire # n'est jamais une bonne idée ! Il faut toujours savoir pourquoi on lance une commande !!!
  • 61. 61 Sticky bit Deux modes, seul le 2) est utilisé dans la pratique : 1) le sticky bit sur l'utilisateur, qui permet d'étendre les privilèges : -rwsr-xr-x 1 root root 47032 janv. 27 01:50 /usr/bin/passwd 2) le sticky bit sur le groupe, qui permet de conserver les droits du groupe Par défaut, un fichier prends les droits appliqués à l'utilisateur. Par exemple l'utilisateur "foo" du groupe primaire "foo" $ mkdir shared $ ls -la drwxr-xr-x. 1 foo foo 0 16 févr. 11:42 shared/ # on change le groupe du répertoire $ chgrp users $ ls -la drwxr-xr-x. 1 foo users 0 16 févr. 11:42 shared/ $ touch shared/foo # le fichier n'a pas pris les droits du répertoire $ ls -la share/foo -rw-r--r--. 1 foo foo 0 16 févr. 11:41 foo
  • 62. 62 Sticky bit Corrigeons le souci en appliquant un "sticky bit" sur le groupe: $ rm shared/foo $ chmod g+s shared $ ls -la drwxr-sr-x. 1 foo users 0 16 févr. 11:42 shared/ # remarquez le "s" désormais à la place de "x" $ touch shared/foo $ ls -la shared -rw-r--r--. 1 foo users 0 16 févr. 11:44 foo Le sticky-bit (bit collant) permet aux attributs de répertoire de "coller" aux fichiers qui seront créés.
  • 64. 64 Administration système L'objectif de l'administrateur système est de fournir les ressources nécessaires aux utilisateurs. Les utilisateurs utilisent la ressource informatique, CPU, RAM, stockage, réseau, etc. Les administrateurs gèrent ces ressources au mieux. L'objectif de l'administrateur n'est pas de bloquer les utilisateurs. Les utilisateurs n'ont pas vocation à gaspiller les ressources. => Il faut trouver le bon équilibre. "With Great Power Comes Great Responsibility"
  • 65. 65 Les logs et les mails GNU/Linux journalise beaucoup d'informations, du boot à l'exécutions de services, en passant par les erreurs système, ou les événements Les logs se trouvent généralement dans le répertoire "/var/log"
  • 66. 66 Les Logs et les mails La commande "dmesg" permet de lire les événements du noyau. L'option "-w" permet de lire en continue les logs L'option "-H" rend plus lisible les valeurs pour un humain (temps différentiels, message plus lisibles, ...) dmesg -wH
  • 67. 67 Les mails Les "mails" sont des messages au format mBox envoyés aux utilisateurs du système. Le format mBox est supporté par beaucoup de logiciels de gestion d'e- mail. Attention: un mail n'est pas un "e-mail" en soit. Cela dit, si un service de gestion de courrier est installé, les messages peuvent être envoyés comme des e-mail traditionnels. La gestion des mails est composée de 3 parties : 1) le routage des emails, travail réalisé par les serveurs SMTP 2) le service de gestion des boites aux lettres, travail réalisé par les applications de messagerie, protocoles POP3, IMAP (Dovecot, Cyrus, Zimbra, Bluemind…) 3) les clients mails, pour lire ou envoyer du mail (Mutt, Thunderbird, etc...) L'objectif du chapitre est de configurer proprement l'envoi d'un email depuis un serveur. La réception des emails est un service complexe qui ne sera pas abordé.
  • 68. 68 Les mails - Clients Pour voir les mails d'un utilisateur local à une machine, il est possible d'utiliser la commande "mail" en ligne de commande. Les outils de mail sur un poste proviennent souvent du serveur SMTP. Il est fondamental pour un serveur de savoir envoyer du mail. Le paquet "mailx" permet d'envoyer du mail en ligne de commande, ce qui permet à un serveur d'envoyer des emails "administratifs".
  • 69. 69 Les mails - Client Pour lire les mails locaux sur une machine Unix, on tape la commande "mail": $ mail Heirloom Mail version 12.5 7/5/10. Type ? for help. "/var/mail/foo": 2 messages 2 unread >U 1 To foo Wed Feb 17 09:30 12/265 "test de mail" U 2 To foo Wed Feb 17 09:30 11/260 "autre mail" & En pressant la touche "ENTER", on lit le mail pointé par ">". Le "U" signifie "Unread".
  • 70. 70 Les mails Pour envoyer un mail, il faut un serveur "smtp" et un client mail. Il existe beaucoup de serveurs SMTP, mais les plus utilisés : ● PostFix pour gérer les messages entrants ou pour faire du mass mailing ● Exim pour envoyer des messages administratifs (par défaut sur Debian) ● Sendmail, le serveur SMTP historique n'est plus utilisé
  • 71. 71 Les mails - Exim Prérequis pour envoyer du mail avec Exim Donner un FQDN au serveur et mettre à jour les PTR dans le DNS Vérifier que 'hostname -f' renvoie correctement le FQDN Lancer la commande # dpkg-reconfigure exim4-config définir les emails de réception dans /etc/aliases définir les emails émetteurs dans /etc/email-addresses Pour envoyer un mail à un utilisateur du système: $ mail -v vraie_boite_aux_lettres Subject : Test Ici le contenu... Pressez CTRL+D ou créer une ligne ne contenant qu'un point . CC: $
  • 72. 72 Les mails Le mail est envoyé à l'utilisateur avec une trace de la forme : aa2@kawa2:~$ mail -v alain.arditi@smile.fr Subject: Test Bonjour . EOT aa2@kawa2:~$ LOG: MAIN <= aa2@smile.fr U=aa2 P=local S=456 delivering 1aeQgu-0004On-Ch R: smarthost for alain.arditi@smile.fr T: remote_smtp_smarthost for alain.arditi@smile.fr Connecting to idris.smile.fr [91.216.209.19]:25 ... connected SMTP<< 220 idris.smile.fr ESMTP Postfix (BlueMind) SMTP>> EHLO kawa2 SMTP<< 250-idris.smile.fr 250-PIPELINING 250-SIZE 12582912 ….. SMTP>> STARTTLS SMTP<< 220 2.0.0 Ready to start TLS SMTP>> EHLO kawa2 SMTP<< 250-idris.smile.fr SMTP>> MAIL FROM:<aa2@smile.fr> SIZE=1494 SMTP>> RCPT TO:<alain.arditi@smile.fr> SMTP>> DATA SMTP<< 250 2.1.0 Ok SMTP<< 250 2.1.5 Ok SMTP<< 354 End data with <CR><LF>.<CR><LF> SMTP>> writing message and terminating "." SMTP<< 250 2.0.0 Ok: queued as A71631EE036A SMTP>> QUIT LOG: MAIN => alain.arditi@smile.fr R=smarthost T=remote_smtp_smarthost H=idris.smile.fr [91.216.209.19] X=TLS1.2:DHE_RSA_AES_128_CBC_SHA1:128 DN="C=FR,ST=IDF,L=Levallois-Perret,O=Smile,CN=bluemind- mta.smile.fr,EMAIL=pki@smile.fr" C="250 2.0.0 Ok: queued as A71631EE036A" LOG: MAIN Completed
  • 73. 73 Fichiers de configuration du système Les fichiers de configuration se trouvent généralement dans "/etc" (Editable Text Configuration). Les plus utilisés: ● /etc/passwd : liste des utilisateurs ● /etc/groups : liste les groupes utilisateurs ● /etc/resolv.conf : liste des serveur DNS ● /etc/rc.* : fichier de services au démarrage ● /etc/fstab : points de montage du système de fichier ● /etc/profile* : fichiers d'environnements SHELL ● /etc/crontab : tâches planifiées ● /etc/apache2 et /etc/httpd: selon la distribution, répertorie de configuration apache ● /etc/nginx/: répertoire de configuration nginx Et bien d'autres.
  • 74. 74 Les services Un service, souvent nommé "démon" (mauvaise traduction de "daemon", qui signifie en réalité "Disk And Execution MONitor ") est un processus exécuté en arrière plan qui va proposer un service réseau et/ou des procédures système. Jusqu'alors, Linux implémentait "SystemV" pour gérer les services. Depuis 2009, un nouveau système nommé "SystemD" a vu le jour et remplace, peu à peu, l'ancien système.
  • 75. 75 Les services SystemV Avec SystemV, un script exécutable est déposé dans le répertoire "/etc/rc.d/init.d". Par convention, ces scripts doivent supporter en argument "start" et "stop". Il est recommandé de supporter "restart". Les script exécutent alors un programme. Par exemple: apache-httpd, nginx, postfix, ...
  • 76. 76 Les services SystemV Pour permettre l'exécution d'un service au démarrage, il faut faire un lien symbolique dans un des répertoire "/etc/rc.d/rcN.d" où "N" est un nombre allant de 0 à 6 correspondant aux "runlevel" Linux: Les runlevel: ● 0 - exctinction du système ● 1 - démarrage "single", root sans mot de passe, aucun disque monté (recovery) ● 2 - non utilisé ● 3 - démarrage avec couche réseau ● 4 - non utilisé ● 5 - démarrage avec X (serveur graphique) ● 6 - reboot
  • 77. 77 Les service SystemV Les distributions utilisant SystemV proposent une commande "service" pour démarrer, éteindre ou redémarer un service. service start nom_service service stop nom_service ... En réalité, les commandes "start, stop, restart, status..." sont arbitraires. C'est le script qui défini les arguments acceptés Il est d'ailleurs possible d'exécuter: $ /etc/init.d/nom_service start
  • 78. 78 Les services SystemD SystemD remplace peu à peu SystemV. Les services sont définis dans des fichier "unit" au format "ini" dans les répertoire "/lib/systemd" et "/etc/systemd". Le premier étant l'emplacement des fichiers "par défaut" et le second pour les services surchargés ou créés par l'administrateur. Exemple: [Unit] Requires=docker.service After=docker.service [Service] ExecStartPre=commande à lancer avant ExecStart=commande de service ExecStop=commande pour éteindre le service Il est possible de préfixer les commandes avec un tiret pour ne pas prendre en compte l'état de la commande. Ainsi une commande de préparation dont le résultat n'est pas important ne va pas définir le service comme étant en disfonction.
  • 79. 79 Les services SystemD SystemD propose une série de commandes pour démarrer, lire l'état, lire les logs, etc... des services systemctl start mon.service systemctl stop mon.service systemctl status mon.service journalctl -xe journalctl -u mon.service Les options de "journalctl" sont, par exemple: ● "-e" pour aller à la fin des logs ● "-x" pour paginer ● "-u" pour définir quel service loguer ● "-f" pour lire en continue et en temps réel
  • 80. 80 Exécution automatique de tâches (cron, at, ...) Un "cron" est une tâche planifiée. Le principe est de définir un fichier de configuration de tâche planifiée qui entre dans la table de tâches (crontab) Il existe différentes manières de créer un cron: ● soit en écrivant un script dans les repertoires /etc/cron.WHEN où WHEN peut être "hourly", "daily", "weekly", "monthly") ● soit en écrivant une ligne dans le crontab avec la commande "crontab -e"
  • 81. 81 Crontab En utilisant la commande "crontab -e", un éditeur propose l'écriture de ligne au format "cron". Elle se présente en 6 colonnes qui définissent quand exécuter une commande. * * * * * commande 2>&1 >/dev/null ^ ^ ^ ^ ^ | | | | | | | | | +-- jour de la semaine 0-6 | | | +---- mois 1-12 | | +------ jour du mois 1-31 | +-------- heure 0 23 +---------- minute 0-59 Notez: /dev/null est un fichier qui ne pointe sur rien, la sortie de commande est donc envoyée nulle part. Cela permet de se débarrasser de la sortie pour ne pas la loguer - d'autant que sans redirection, la sortie standard est envoyé par mail à root. Cela dit, vous pouvez rediriger la sortie dans un fichier de log pour vous tenir informer des erreurs qui peuvent survenir lors d'une tâche planifiée.
  • 82. 82 Crontab La syntaxe permet des intervales: ● "*/5" = toutes les 5 <minutes, heures, jours> ● "10-20-45" = à 10, 20 et 45 <minutes, heures, jours> Exemple: */5 * * * * commande_toute_les_5_minutes * 1-2-28-29 * * * commande
  • 83. 83 Crontab - Les bonnes pratiques Règle 1: Toutes les tâches doivent être regroupées dans le cron de l'utilisateur de livraison, ceci afin de "voir" clairement ce qui se passe sur le serveur Règle 2: Toutes les tâches 'non systèmes' doivent logger leur sortie standard dans /tmp/nom_du_script.log Règle 3: Les tâches systèmes (/etc/cron.*) doivent être maîtrisées. Les crons ne sont pas tous dans le crontab de l'utilisateur. Il faut savoir ce qui se passe… Règle 4: Mettre de l'aléa dans les séquencements. Il faut éviter les heures exactes (minutes à 0) et les heures des crons système : *H17 hourly, 6H25 daily, 6H47 weekly et 6H52 monthly. Règle 5: Les relances/reboots/etc... sont fait le matin, pas trop tôt.
  • 84. 84 Crontab Exercices: Créer un crontab qui écrive la date dans le fichier /tmp/crondate tous les jours à midi Créer un crontab qui écrive la date dans le fichier /tmp/crondate tous les lundi à 14h
  • 85. 85 At La commande "at" permet d'exécuter une commande à un moment précis. Elle reconnaît une syntaxe pratique pour calculer une date. at 10:00 AM at 9:00 PM December 21 at now +2min
  • 86. 86 At S'en suit une ouverture d'un shell "at" qui permet de définir la ou les commandes à exécuter. Pour terminer, il suffit de presser CTRL+D
  • 87. 87 At Les commandes suivantes permettent de lister les tâches, supprimer un job, etc.. $ atq 13 Tue Feb 9 10:31:00 2016 a pferlet $ atrm 13 $ atq "q" signifie "queue", on retrouve cette notion dans plusieurs outils, par exemple "lpq" affiche la queue "lp" (Linux Printing).
  • 88. 88 Batch Conjointement à la commande "at", il existe la commande "batch" qui exécutera une commande seulement quand la machine n'est pas surchargée (load < 0.8)
  • 89. 89 Localisation et internationalisation La localisation système se défini via des variables d'environnement: LANG=fr_FR.UTF-8 LC_CTYPE="fr_FR.UTF-8" LC_NUMERIC="fr_FR.UTF-8" LC_TIME="fr_FR.UTF-8" LC_COLLATE="fr_FR.UTF-8" LC_MONETARY="fr_FR.UTF-8" LC_MESSAGES="fr_FR.UTF-8" LC_PAPER="fr_FR.UTF-8" LC_NAME="fr_FR.UTF-8" LC_ADDRESS="fr_FR.UTF-8" LC_TELEPHONE="fr_FR.UTF-8" LC_MEASUREMENT="fr_FR.UTF-8" LC_IDENTIFICATION="fr_FR.UTF-8" LC_ALL=
  • 90. 90 Localisation et internationnalisation Pour modifier les locales, vous pouvez modifier ces variables. La méthode la plus adaptée est de reconfigurer le paquet "locale" sous debian, ou utiliser "localectl" sur les systèmes supportant "systemd" # debian sans systemd dpkg-reconfigure locale # avec systemd localectl set-local fr_FR.UTF8
  • 92. 92 Adressage et routage L'adresse IP d'une interface réseau se configure de plusieurs manières ● via la commande ifconfig ● via des fichiers de configuraiton ● via "NetworkManager" On peut assigner statiquement une ip, ou utiliser un serveur DHCP
  • 93. 93 Rappel sur les protocoles La couche 4 du modèle OSI propose le "transport". Les plus utilisés sont TCP et UDP. ● TCP permet de faire un échange d'informations ● UDP n'attend pas de "handshake", pas de sessions réelles
  • 94. 94 Configuration réseau, vlan, hooks La configuration réseau peut donc se faire de différentes manières. Sous debian (sans systemd) le fichier /etc/network/interfaces fournie la configuration des interfaces: auto lo iface lo inet loopback iface eth0 inet dhcp
  • 95. 95 Adresse Statique sous debian Pour assigner une addresse statique, on peut définir ce type de fichier: iface eth0 inet static address 192.168.1.12 netmask 255.255.255.0 gateway 192.168.1.1
  • 96. 96 Autres distributions Sur la plupart des autres distributions, systemd (conjointement à NetworkManager) va créer un fichier par interface. Par exemple /etc/sysconfig/network- scripts/ifcfg-eth0 HWADDR=3C:97:0E:EF:7D:8C TYPE=Ethernet BOOTPROTO=dhcp DEFROUTE=yes IPV4_FAILURE_FATAL=no NAME=enp3s0 ...
  • 97. 97 Les outils de l'administrateur L'administration du réseau, contrôle et analyse se fait avec une série importante d'outils. Parmis, voyons: ● ifconfig ● ip (ip route, ip addr, ...) ● route (qui est remplacé par ip) ● netstat ● arp
  • 98. 98 Ifconfig ifconfig permet de lire et modifier la configuration d'une interface réseau. ifconfig ifconfig eth0 ifconfig eth0 192.168.1.20 netmask 255.255.255.0
  • 99. 99 ip ip permet de modifier la configuration de routage, des interfaces, tunnels... ip addr ip route Exemple $ ip route 192.168.1.0/24 dev wlp2s0 proto kernel scope link src 192.168.1.29 metric 600
  • 100. 100 ip Par exemple pour ajouter une route vers le réseau 192.168.200.0/24 en passant par la carte réseau eth1: $ ip route add 192.168.200.0/24 dev eth1 Pour connaitre la route qu'empruntera un paquet pour aler vers 1.2.3.4: $ ip route get 1.2.3.4 1.2.3.4 via 192.168.1.1 dev eth0 src 192.168.1.29 cache Cela signifie que le paquet passera pas la carte eth0, aura l'ip 192.168.1.29 et utilisera la passerelle 192.168.1.1
  • 101. 101 netstat netstat est un outil qui permet de connaître l'état des ports réseau en cours. Exemple: netstat -taupen Connexions Internet actives (serveurs et établies) Proto Recv-Q Send-Q Adresse locale Adresse distante Etat Utilisatr Inode PID/Program name tcp 0 0 192.168.100.1:53 0.0.0.0:* LISTEN 0 120934 1482/dnsmasq tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 0 119078 1295/sshd tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 0 130623 2142/cupsd
  • 103. 103 Firewall Iptables, anciennement ipfilters, est un firewall intégré au noyau permettant le filtrage fin de paquets réseau. Il permet de faire, entre autres: ● filtrage ip source et destination ● filtrage de port source et destination ● préroutage et postroutage ● journalisation ● etc..
  • 104. 104 Principe de règles Iptables permet de créer des règles dans un ordre précis qui vont s'appliquer à une trame réseau Les règles de base: ● ACCEPT ● REJECT ● DROP ● LOG Iptables propose un principe de "chaînes" et de "tables" auxquels s'appliquent les règles.
  • 105. 105 Chaines Une chaine est, en quelques sortes, la direction que prend une trame réseau. On distingue, des directions: ● INPUT ● OUTPUT ● FORWARD... Des états: ● NEW ● ESTABLISHED...
  • 106. 106 Tables Les tables sont les sous-ensembles de chaines. C'est le traitement à infliger à une trame. On distingue: ● raw ou conntrack ● nat (net address translation) ● filter (par defaut) ● mangle (pour modifier le paquet)
  • 107. 107 Principe de commande Une commade IPTables fonctionne ainsi: iptables [-t table] command [match] [target] Pour lister les règles: iptables -L ipatbles -S iptables -t table -L
  • 108. 108 Exemple, ouvrir un port Voici un exemple d'ouverture de port 80 TCP en entrée et sortie: iptables -A INPUT -t filter -p tcp --dport 80 -j ACCEPT iptables -A OUTPUT -t filter -p tcp --sport 80 -j ACCEPT dport signifie "destination port" sport signifie "source port"
  • 109. 109 Quelques principes de bases Il convient de faire ces opérations en général: ● on vide les règles ● on définie des règles "par défaut" (-P) ● on autorise ou ferme des ports
  • 110. 110 Un exemple complet iptables -F iptables -P OUTPUT ACCEPT iptables -P INPUT DROP iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT iptables -A INPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT iptables -A INPUT -p tcp -t filter --dport 80 -j ACCEPT iptables -A INPUT -p tcp -t filter --dport 443 -j ACCEPT iptables -A INPUT -p tcp -t filter --dport 22 -j ACCEPT
  • 111. 111 Création de règle Tout comme ACCEPT, DROP, etc., il est possible de créer ses propres règles. iptables -N LOG_DROP iptables -A INPUT -t filter -p tcp --dport 8888 -j LOG_DROP # On traire ensuite cette règle iptables -A LOG_DROP -j LOG --log-prefix 'MYDROP ' iptables -A LOG_DROP -j DROP
  • 112. 112 Forward Iptables permet de créer des règles de "forward": iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j DNAT --to 192.168.1.2:8080 iptables -A FORWARD -p tcp -d 192.168.1.2 --dport 8080 -j ACCEPT
  • 113. 113 Autres gestion de firewall Iptables est une commande bas niveau, parfois complexe à mettre en place. Des services tels que Docker ou Fail2ban vont impacter vos règles "à la volée". De nos jours, les distributions orienté entreprises et/ou plus à jour utilisent "firewalld" qui va injecter les règles de manière plus souple: firewall-cmd --add-port=80/tcp --permanent Conseil: si vous avez firewalld installé sur un système, évitez d'utiliser directement iptables. D'autres services (par exemple docker) vont manipuler le firewall via un bus système (dbus) et vous risquerez d'entrer en conflit avec, ou de sauver des règles iptables temporaires (via iptables-save par exemple).
  • 115. 115 SSH SSH est un protocole réseau sécurisé permettant l'ouverture de Shell distant, le transfère de fichier, le "tunnelling" et le transit d'affichage. Le service "openssh" propose un serveur et un client SSH
  • 116. 116 Authentification Afin de se connecter à un serveur, la machine distante doit exécuter le service "sshd" service sshd start # systemctl start ssh Pour se connecter, il suffit, depuis la machine cliente, de taper: ssh user@serveur
  • 117. 117 Login ou paire de clefs Deux méthodes d'authentification sont proposée par SSH: ● login et mot de passe ● paire de clefs SSH peut utiliser plusieurs types de paire de clefs: ● rsa ● dsa ● ...
  • 118. 118 Paire de clefs Pour générer une paire de clefs: ssh-keygen -t dsa -b 2048 L'utilisation d'une passphrase permet de sécuriser l'ouverture de shell SSH depuis le poste.
  • 119. 119 Ajout de la clef sur le serveur Le serveur peut autoriser un client à se connecter avec sa clef RSA ou DSA en déposant la clef publique dans le fichier "~/.ssh/authorized_keys" Les droits sur le répertoire ".ssh" sont très restrictifs. Il faut qu'ils soient en lecture seul pour tous. chmod -R a-rw .ssh chmod -R a+r .ssh
  • 120. 120 Ajout de la clef sur le serveur Autre méthode si le serveur permet l'authentification par login (au moins le temps de mettre les clefs en place) ssh-copy-id user@serveur
  • 121. 121 Copie de fichier Il est possible de copier des fichiers au travers du protocole ssh. Les clients ● sftp: client ssh de transfert de fichier ● scp: commande capable d'utiliser le protocole ssh ● rsync: commande de synchronisation capable d'utiliser le protocole ssh Les outils de navigation de fichier peuvent aussi utiiser le protocole sftp: dans nautilus (gnome) presser CTRL+L et entrez une addresse de la forme "sftp://user@server"
  • 122. 122 Execution de commande via SSH SSH ouvre, par défaut, un shell. Mais on peut spécifier une commande à exécuter: ssh user@serveur commande "commande" sera exécutée et la connexion sera fermée juste après.
  • 125. 125 Fail2ban Un des outils de sécurité réseau très répandu et efficace est "fail2ban". Le principe est simple: il utilise les logs du système pour trouver des tentatives en erreur d'accès répétées. Selon la configuration, il va alors mettre en liste noire l'adresse source. Fail2ban utilise, entre autres, "iptables" pour fermer l'accès à l'attaquant.
  • 126. 126 Fail2ban Installation: #debian apt-get install fail2ban # fedora - redhat - centos dnf ou yum install fail2ban
  • 127. 127 Fail2ban Le fichier /etc/fail2ban/jail.conf fourni les détails de configuration. Exemple SSH: [ssh] enabled = true port = ssh filter = sshd logpath = /var/log/auth.log maxretry = 6