Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.

Linux Administrateur

277 vues

Publié le

Open Source School - Bachelor 3
Supports de cours Linux Administrateur
Ce support est sous licence Creative Commons (CC BY-SA 3.0 FR)
Attribution - Partage dans les Mêmes Conditions 3.0 France

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
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'administrateu : ping, netstat, arp, netcat, traceroute, nmap, ...
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

Publié dans : Technologie
  • Soyez le premier à commenter

Linux Administrateur

  1. 1. Linux Administrateur
  2. 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. 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. 4. Linux Administrateur Programme Bachelor 3ème Année Parcours Open Source
  5. 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. 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. 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
  8. 8. Programmation Bash avancée
  9. 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...
  10. 10. 10 Le shell
  11. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 42 Utilisation Bash sait aussi gérer nativement les expressions régulières: A="Hello World" [[ $A =~ H.*o ]] && echo "trouvé"
  43. 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. 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. 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. 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. 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. 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. 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. 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
  51. 51. Utilisateurs et groupes
  52. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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.
  63. 63. Administration du système
  64. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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
  91. 91. TCP/IP et configuration réseau
  92. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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
  102. 102. Iptables
  103. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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).
  114. 114. OpenSSH
  115. 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. 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. 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. 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. 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. 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. 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. 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.
  123. 123. Sécurité
  124. 124. 124 Quotas
  125. 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. 126 Fail2ban Installation: #debian apt-get install fail2ban # fedora - redhat - centos dnf ou yum install fail2ban
  127. 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

×