Upload
open-source-school
View
912
Download
0
Embed Size (px)
Citation preview
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 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.
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: 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.."
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é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...
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 é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
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.
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 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.
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
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 scriptgrep -v '^#' mon_script.sh
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].?
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 $HOMEcd
# Va dans le répertoire /opcd /opt
# liste le répertoire courantls# 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 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 *"
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é.
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"
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 STDOUTsed 's/foo/bar/' fichier
# idem mais remplace dans le fichiersed -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'utilisateurusermod -a -G sudo username# change le mot de passe du comptepasswd 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é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
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 /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.
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 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
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.
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":
$ 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".
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 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:$
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
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_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
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.
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
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 AMat 9:00 PM December 21at 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..
$ 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).
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-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=
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
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 loiface lo inet loopbackiface 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:8CTYPE=EthernetBOOTPROTO=dhcpDEFROUTE=yesIPV4_FAILURE_FATAL=noNAME=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.
ifconfigifconfig eth0ifconfig eth0 192.168.1.20 netmask 255.255.255.0
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
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
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
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 -Lipatbles -Siptables -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 ACCEPTiptables -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 -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
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
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
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:
#debianapt-get install fail2ban# fedora - redhat - centosdnf ou yum install fail2ban
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