127
Linux Administrateur

Linux Administrateur

Embed Size (px)

Citation preview

Page 1: Linux Administrateur

Linux Administrateur

Page 2: 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.

Page 3: Linux Administrateur

3

Les formations du plein emploi !

Formation Continue

Open Source School "Executive Education" est un organisme de formation agréé 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 : [email protected]

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.

Page 4: Linux Administrateur

Linux Administrateur

Programme Bachelor 3ème Année Parcours Open Source

Page 5: Linux Administrateur

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

Page 6: Linux Administrateur

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

Page 7: Linux Administrateur

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

Page 8: Linux Administrateur

Programmation Bash avancée

Page 9: Linux Administrateur

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

Page 10: Linux Administrateur

10

Le shell

Page 11: Linux Administrateur

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)

Page 12: Linux Administrateur

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

Page 13: Linux Administrateur

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

Page 14: Linux Administrateur

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/*"

Page 15: Linux Administrateur

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: manet 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.."

Page 16: Linux Administrateur

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

Page 17: Linux Administrateur

17

Les options

Exemple:

# affichage de la liste des fichiers et répertoiresls

# affiche "tout" (all), y compris les fichiers cachés ls -a

# affiche les informations des fichiers/répertoiresls -l

# Retenir le mode le plus employé en administration système ls -ltrqui permet de trouver le dernier fichier modifié !!!retenir : list long, time, reverse order...

Page 18: Linux Administrateur

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

Page 19: Linux Administrateur

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

Page 20: Linux Administrateur

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.

Page 21: Linux Administrateur

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 égauxc1 != c2, vrai si c1 et c2 sont différentsc1 > 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

Page 22: Linux Administrateur

22

Les tests

Tests numériques

n1 -eq n2, vrai si n1 et n2 sont égauxn1 -ne n2, vrai si n1 et n2 sont différentsn1 -lt n2, vrai si n1 est strictement inférieur à n2n1 -le n2, vrai si n1 est inférieur ou égal à n2n1 -gt n2, vrai si n1 est strictement supérieur à n2n1 -ge n2, vrai si n1 est supérieur ou égal à n2.

Page 23: Linux Administrateur

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

Page 24: Linux Administrateur

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

Page 25: Linux Administrateur

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

Page 26: Linux Administrateur

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"

Page 27: Linux Administrateur

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

Page 28: Linux Administrateur

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

Page 29: Linux Administrateur

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.

Page 30: Linux Administrateur

30

Entrées/Sorties

On peut rediriger les entrées/sorties

# envoie le contenu de "fichier" sur STDIN de la commandecommande <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.

Page 31: Linux Administrateur

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 fichiercommande 2>&1 >fichier

Page 32: Linux Administrateur

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"

Page 33: Linux Administrateur

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"

Page 34: Linux Administrateur

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

Page 35: Linux Administrateur

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"

Page 36: Linux Administrateur

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

Page 37: Linux Administrateur

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

Page 38: Linux Administrateur

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

Page 39: Linux Administrateur

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 scriptgrep -v '^#' mon_script.sh

Page 40: Linux Administrateur

40

Exemples

# foo suivi d'au moins un chiffrefoo\d+

# foo suivi d'une lettre entre "a" et "f" suivi d'un caractère maximumfoo[a-f].?

Page 41: Linux Administrateur

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}'

Page 42: Linux Administrateur

42

Utilisation

Bash sait aussi gérer nativement les expressions régulières:

A="Hello World"[[ $A =~ H.*o ]] && echo "trouvé"

Page 43: Linux Administrateur

43

Les commandes à connaitre

Nous allons voir quelques commandes très importantes et fortement utilisées:● cd, ls

● cp, mv, rm, ln

● grep

● sed

Page 44: Linux Administrateur

44

Manipuler - se déplacer dans les répertoires

# Va dans le répertoire $HOMEcd

# Va dans le répertoire /opcd /opt

# liste le répertoire courantls# liste un autre répertoire "rep"ls rep

Page 45: Linux Administrateur

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'

Page 46: Linux Administrateur

46

Manipuler - déplacer des fichiers

# copie un fichiercp source destination

# déplace un fichiermv source destination

# supprime un fichierrm source

# supprime un répertoirerm -r rep# en forcantrm -rf rep# autre commandermdir rep

# bonne pratique pour supprimer un répertoire :rm -rf rep/*rmdir rep # permet d'éviter de lancer "rm -rf *"

Page 47: Linux Administrateur

47

Manipuler - créer des liens

# créer un lien ln source destination

# créer un lien symboliqueln -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é.

Page 48: Linux Administrateur

48

Grep

"grep" est une commande de recherche de "pattern".

# cherche "foo" dans le fichier filegrep "foo" file

# cherche "foo" dans le répertoire dirgrep -r "10\.1\.8" /etc

# ignore la casse et recursifgrep -ri "nom_host" /etc

# cherche "foo" dans STDINcommande | grep "foo"

Page 49: Linux Administrateur

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"

Page 50: Linux Administrateur

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 STDOUTsed 's/foo/bar/' fichier

# idem mais remplace dans le fichiersed -i 's/foo/bar/' fichier

Page 51: Linux Administrateur

Utilisateurs et groupes

Page 52: Linux Administrateur

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

Page 53: Linux Administrateur

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'utilisateurusermod -a -G sudo username# change le mot de passe du comptepasswd usermod

# adduser en mode interactif# adduser smile

Page 54: Linux Administrateur

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étairechown user fichier1 fichier2...chown répertoire# changer récursivementchown -R répertoire

#changer le groupechgrp groupe fichier1 fichier2...chgrp répertoire# changer récursivementchgrp -R répertoire

Page 55: Linux Administrateur

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

Page 56: Linux Administrateur

56

Manipuler - les droits

Pour voir les attributs de fichier, l'option "-l" de "ls" affiche les informations nécessaires:

ls -l /etctotal 1728drwxr-xr-x. 1 root root 126 15 févr. 12:28 abrt/-rw-r--r--. 1 root root 16 17 oct. 21:43 adjtimedrwxr-xr-x. 1 root root 16 17 oct. 20:09 akmods/-rw-r--r--. 1 root root 1518 13 mai 2015 aliasesdrwxr-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.

Page 57: Linux Administrateur

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)

Page 58: Linux Administrateur

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

Page 59: Linux Administrateur

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.

Page 60: Linux Administrateur

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

Page 61: Linux Administrateur

61

Sticky bitDeux 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 -ladrwxr-xr-x. 1 foo foo 0 16 févr. 11:42 shared/

# on change le groupe du répertoire$ chgrp users$ ls -ladrwxr-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

Page 62: Linux Administrateur

62

Sticky bit

Corrigeons le souci en appliquant un "sticky bit" sur le groupe:

$ rm shared/foo$ chmod g+s shared$ ls -ladrwxr-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.

Page 63: Linux Administrateur

Administration du système

Page 64: Linux Administrateur

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"

Page 65: Linux Administrateur

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"

Page 66: Linux Administrateur

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

Page 67: Linux Administrateur

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

Page 68: Linux Administrateur

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

Page 69: Linux Administrateur

69

Les mails - Client

Pour lire les mails locaux sur une machine Unix, on tape la commande "mail":

$ mailHeirloom 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".

Page 70: Linux Administrateur

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é

Page 71: Linux Administrateur

71

Les mails - Exim

Prérequis pour envoyer du mail avec Exim

Donner un FQDN au serveur et mettre à jour les PTR dans le DNSVérifier que 'hostname -f' renvoie correctement le FQDN

Lancer la commande# dpkg-reconfigure exim4-config

définir les emails de réception dans /etc/aliasesdéfinir les emails émetteurs dans /etc/email-addresses

Pour envoyer un mail à un utilisateur du système:

$ mail -v vraie_boite_aux_lettresSubject : TestIci le contenu... Pressez CTRL+D ou créer une ligne ne contenantqu'un point.CC:$

Page 72: Linux Administrateur

72

Les mailsLe mail est envoyé à l'utilisateur avec une trace de la forme :aa2@kawa2:~$ mail -v [email protected]: TestBonjour.EOTaa2@kawa2:~$ LOG: MAIN <= [email protected] U=aa2 P=local S=456delivering 1aeQgu-0004On-ChR: smarthost for [email protected]: remote_smtp_smarthost for [email protected] 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:<[email protected]> SIZE=1494 SMTP>> RCPT TO:<[email protected]> 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>> QUITLOG: MAIN => [email protected] 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 protected]" C="250 2.0.0 Ok: queued as A71631EE036A"LOG: MAIN Completed

Page 73: Linux Administrateur

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.

Page 74: Linux Administrateur

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.

Page 75: Linux Administrateur

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

Page 76: Linux Administrateur

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

Page 77: Linux Administrateur

77

Les service SystemV

Les distributions utilisant SystemV proposent une commande "service" pour démarrer, éteindre ou redémarer un service.

service start nom_serviceservice 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

Page 78: Linux Administrateur

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.serviceAfter=docker.service

[Service]ExecStartPre=commande à lancer avant ExecStart=commande de serviceExecStop=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.

Page 79: Linux Administrateur

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.servicesystemctl stop mon.servicesystemctl status mon.service

journalctl -xejournalctl -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

Page 80: Linux Administrateur

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"

Page 81: Linux Administrateur

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.

Page 82: Linux Administrateur

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

Page 83: Linux Administrateur

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.

Page 84: Linux Administrateur

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

Page 85: Linux Administrateur

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 AMat 9:00 PM December 21at now +2min

Page 86: Linux Administrateur

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

Page 87: Linux Administrateur

87

At

Les commandes suivantes permettent de lister les tâches, supprimer un job, etc..

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

Page 88: Linux Administrateur

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)

Page 89: Linux Administrateur

89

Localisation et internationalisation

La localisation système se défini via des variables d'environnement:

LANG=fr_FR.UTF-8LC_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=

Page 90: Linux Administrateur

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 systemddpkg-reconfigure locale# avec systemdlocalectl set-local fr_FR.UTF8

Page 91: Linux Administrateur

TCP/IP et configuration réseau

Page 92: Linux Administrateur

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

Page 93: Linux Administrateur

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

Page 94: Linux Administrateur

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 loiface lo inet loopbackiface eth0 inet dhcp

Page 95: Linux Administrateur

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

Page 96: Linux Administrateur

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:8CTYPE=EthernetBOOTPROTO=dhcpDEFROUTE=yesIPV4_FAILURE_FATAL=noNAME=enp3s0...

Page 97: Linux Administrateur

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

Page 98: Linux Administrateur

98

Ifconfig

ifconfig permet de lire et modifier la configuration d'une interface réseau.

ifconfigifconfig eth0ifconfig eth0 192.168.1.20 netmask 255.255.255.0

Page 99: Linux Administrateur

99

ip

ip permet de modifier la configuration de routage, des interfaces, tunnels...

ip addrip route

Exemple

$ ip route192.168.1.0/24 dev wlp2s0 proto kernel scope link src 192.168.1.29 metric 600

Page 100: Linux Administrateur

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

Page 101: Linux Administrateur

101

netstat

netstat est un outil qui permet de connaître l'état des ports réseau en cours.

Exemple:

netstat -taupenConnexions 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

Page 102: Linux Administrateur

Iptables

Page 103: Linux Administrateur

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

Page 104: Linux Administrateur

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.

Page 105: Linux Administrateur

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

Page 106: Linux Administrateur

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)

Page 107: Linux Administrateur

107

Principe de commande

Une commade IPTables fonctionne ainsi:

iptables [-t table] command [match] [target]

Pour lister les règles:

iptables -Lipatbles -Siptables -t table -L

Page 108: Linux Administrateur

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 ACCEPTiptables -A OUTPUT -t filter -p tcp --sport 80 -j ACCEPT

dport signifie "destination port" sport signifie "source port"

Page 109: Linux Administrateur

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

Page 110: Linux Administrateur

110

Un exemple complet

iptables -Fiptables -P OUTPUT ACCEPTiptables -P INPUT DROPiptables -A INPUT -i lo -j ACCEPTiptables -A OUTPUT -o lo -j ACCEPTiptables -A INPUT -m conntrack --ctstate ESTABLISHED -j ACCEPTiptables -A INPUT -p tcp -t filter --dport 80 -j ACCEPT iptables -A INPUT -p tcp -t filter --dport 443 -j ACCEPTiptables -A INPUT -p tcp -t filter --dport 22 -j ACCEPT

Page 111: Linux Administrateur

111

Création de règle

Tout comme ACCEPT, DROP, etc., il est possible de créer ses propres règles.

iptables -N LOG_DROPiptables -A INPUT -t filter -p tcp --dport 8888 -j LOG_DROP

# On traire ensuite cette règleiptables -A LOG_DROP -j LOG --log-prefix 'MYDROP 'iptables -A LOG_DROP -j DROP

Page 112: Linux Administrateur

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:8080iptables -A FORWARD -p tcp -d 192.168.1.2 --dport 8080 -j ACCEPT

Page 113: Linux Administrateur

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

Page 114: Linux Administrateur

OpenSSH

Page 115: Linux Administrateur

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

Page 116: Linux Administrateur

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

Page 117: Linux Administrateur

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

● ...

Page 118: Linux Administrateur

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.

Page 119: Linux Administrateur

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

Page 120: Linux Administrateur

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

Page 121: Linux Administrateur

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"

Page 122: Linux Administrateur

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.

Page 123: Linux Administrateur

Sécurité

Page 124: Linux Administrateur

124

Quotas

Page 125: Linux Administrateur

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.

Page 126: Linux Administrateur

126

Fail2ban

Installation:

#debianapt-get install fail2ban# fedora - redhat - centosdnf ou yum install fail2ban

Page 127: Linux Administrateur

127

Fail2ban

Le fichier /etc/fail2ban/jail.conf fourni les détails de configuration.

Exemple SSH:

[ssh]enabled = trueport = sshfilter = sshdlogpath = /var/log/auth.logmaxretry = 6