You are on page 1of 84
ADMINISTRATION SYSTEME & RESEAU NOV. / DEC. 2020 FRANCE METRO, :790€ BELUK:8.90€ CH: 13.40 CHF ESPIIT/PORT-CONT: 890€ DOM/S:8.90€ ‘TUN:207TND MAR:98 MAD CAN: 14,99 SCAD PRATIQUE ili ACTUALITES StopCovid et consorts : décryptage et enjeux des applications de santé p.74 DEVOPS Automatisez vos taches d'administration systéme répétitives avec Fabric p.68 tsi Wea METTEZ EN ) PLACE VOTRE FIREWALL AVEC NFTABLES ! + installez et prenez en main nftables * configurez votre premier pare-feu p.34 RESEAU LIGNE DE COMMANDES Installez et administrezun | Corrigez automatiquement vos derniéres serveur d'impression CUPS | commandes shell p.64 p.52 ry 4 Fy FI Ee 5 3 SGBDR ORCHESTRATION / CONTENEURS Comprendre les Weed MRA Ce Ce Lenaedenaeradabial TT Ee MR ie (< ED tam PETC Te me) MORRO sans Sac & oe * A : WZ" OCHETTES CADEAUX ! Le COFFRET DE P POUR EMBELLIR VOS . fl Coe aon © © LINUX PRATIQUE est édité par Les Editions Diamond Natoreriowas | acener oa al: caledcaroncom feaeuseie rsimecom omen prataue can Se: mi nein on earaneernes sspears Saeoere abe ‘scanner ESEELIT snannpeen ears iim Iman en Alemsgre-PRNTEDIn Germany ep iga:Aparn traders mest ate tt eaetces is Eons Camere Sout or pre ts anu ilies Sie Sree ree eee eaten Retest tear Eeis Seeieeene ee oth meee ale co EDITIONS perce Retrouver-nous sur: linuxpratiue @eationsdiamond Q crvvnise @ wrtertnncn Linux Pratique n°122 Mieux vaut tard que jamais. face aux géants américains et chinois, Europe a “enfin choisi de passer Foffensive en langant officiellerent le projet de cloud ‘européen Gaia-X un an environ aprés son annonce. Ses 22 membres fondateurs parm lesquels OVH, Atos, Amadeus, Bosch, ED, institut Mines-Telécom, Orange, Satran, Scaleway ou encore Siemens ont signé mi-septembre a Bruxelles les sta- ‘tuts permettant de fixer a création dune association internationale & but non lucratf pour encadre ce projet. Vorganisation devrait se réunir misnovernbre Pour un premier sommet avant de proposer de premiers services coud euro péens courant 2021. Lintiative deveat permettre a fEurope daffirmer sa sowveraineté numérique ‘tout en mettant en exergue le respect des données des utisateurs, notamment avec le RGPD. La forme associative adopiée devrait encourager arrivée de nou- ‘eaux membres, Uun des premiers chantiers mis en ceuvre sera.un moteur de recherche qui permettra de mettre en valeur les offres des fournisseurs de cloud ‘européens. Gaia-X devrait ainsi booster & la fis la compeéttvté et la collabora ‘ton a Féchelle européenne, “Trop tard ? Cesta question que fon pourrait se poser tant favance prise par les -) 39 ABONNEMENTS unsrraineriaa @ BS () cTUALITES & NOUVEAUTES 99 Brey Take GitHub tothe command ine UNE INTERFACE EN = LIGNE DE COMMANDES POUR GITHUB Ce nest pas chose nouvelle, puisque la version béta de GitHub CLI sortait au mois de février, cependantil a été annoneé récemment |a publication de la mouture 1.0 de ce projet open source et multiplateforme (Linux, macOS. et Windows), Vous le trouverez sur https://cll.github.com/ oi) vous attendent toutes les instructions dinstallation sous Linux, GitHub CLI devrait vous simplifier les choses en vous permettant de gérer tout votre workflow depuis un terminal, 'accéder aussi a GitHub Enterprise Server et de tirer parti de TAPI pour créer des scripts pour vos actions et des alias personnalisés pour vos commandes, m= DU NOUVEAU DU COTE DU NUAGE PERSONNEL COZY CLOUD Cozy Cloud est une plateforme de stockage en ligne open source qui permet de stocker, gérer et synchro- riser ses données sur chacune de ses machines, mais aussi de profiter de divers services. Le projet a annoncé dernigrement arrivée de nouveau- ts pour ses utilsateurs + le service Cozy Pass qui fat figure de gestionnaire de mots de passe et qui stockera tous vos mots de passe chiffrés dans votre espace en ligne, il se présente aussi comme une application mobile et une extension pour ; (ee votre navigateur web pour vous permettre d'accéder facliement 3 tous vos mots de passe ; A omnes + Notes qui, on 'aura compris, se présente comme un gestionnaire de notes qui vous facilitera le partage de ces derniéres avec vos contacts; + et enfin Banks qui vous assistera dans la gestion de vos finances personnelles et vous permetira de mieux suivre vos diverses opérations. La version gratuite du projet (une adresse mail est uniquement requise) permet de disposer de 5 Go d'espace et tester ainsi toutes ces fonctionnalités. Des affres payantes sont aussi proposées si vos besoins sont plus importants. m @ iruerrtiue ce sation ABANDON DES SERVICES __Sendettiretortctes FIREFOX SEND ET FIREFOX NOTES Nous vous les avions présentés dans de précédents numéros ‘un permettait de partager facilement et de maniere chiffrée ses fichiers volumineux en ligne, lautre faisait figure d'outil de prise de notes chiffré pour synchroniser celles-ci entre vos divers appareils. Hélas, la fondation Mozilla a récemment annoncé Fabandon des services Firefox Send et Firefox Notes, Dans le cas de Firefox Send, Cest un recours maiveillant au service, qui était utilisé notamment pour lancer des campagnes de phishing et diffuser des logiciels malveillants, qui a motivé cette décision, Suite & cela, Send a été immédiatement stoppé le 17 septembre dernier et tous les fichiers présents sur le serveur supprimés. Pour Firefox Notes, le contexte est différent, Mozilla explique que loutil a été développé pour expérimenter des méthades de synchronisation de données chiffrées et ne souhaite plus le maintenir dans le cadre de sa nouvelle stratégie: le service est stoppé le 1er novembre. Il ny aura plus de mises & jour, fapplication mobile sera elle aussi arrétée tout comme les fonctions de synchronisation de Foutil, Pour ne pas perdre ses notes, on pourra exporter celles-ci en HTML, Lobjectif de la fondation est désormais de focaliser ses efforts sur d'autres projets avec Mozilla VPN, Firefox Monitor et Firefox Private Network. m= ayaa) day bee) Oe) ac SE POURSUIT PO ree ec s fd Coe ut ean Cee a ee ee est la référence libre en la matiére, or comme bon nombre de projets phares, il a aussi un fork dont on entend de plus en plus parler : Glimpse, créé dans le but d'expérimenter Penta Pre oes eee Pe eet ery publication de sa mouture 0.2. Cette derniére se base sur GIMP 2.10.18, propose donc les mémes performances et Ce eee eng COUP ceed eget nee eee actos diic6nes personnalisées, la résolution de divers bugs, plusieurs améliorations du cété de sa version pour Windows et sa disponibilité pour Linux sur les plateformes Flathub et Snap Store. Rien de bien Cee ee a ee oe ee ee eae tt oer ea eed ieee ie an aed Pee ey 3” Bi @@) OGITHEQUE & APPLICATIF 9% Extensions pour navigateurs web OneTab TOUS VOS ONGLETS OUVERTS SOUS LA FORME D'UNE LISTE Si vous avez tendance & ouvrir une multitude d'onglets au risque de ne plus vous en sortir et de voir les perfor- mances de votre navigateur web en patir, OneTab pourrait vous étre utile. En un clic, il vous permettra ay voir plus clair et de rebooster votre navigation en ligne. Son fonctionnement est des plus simples. Une fois installé (OneTab est compatible Firefox et Chrome/Chromium), il prendra la forme d'une icéne dans la barre de menu de votre navigateur. II suffra de cliquer sur celle-ci pour voir immédiatement tous vos onglets ouverts réunis au sein dlune méme liste. Un clic sur lun des liens ainsi répertoriés ouvrra la page dans un nouvel onglet. option Tout restaurer vous permettra de retrouver tous vos onglets comme précédemment. Tout supprimer vous permettra de faire le ménage dans tout cela et option Partager en tant que page web générera un QR Code quil vous sera possible de flasher avec votre mo tablette pour retrouver toutes les pages qui vous intéressent sur ces appareils « Qwee ——— Wikipéata Les autres fonctions disponibles permettent de controler plus finement le module, Vous pourrez ainsi choisir denvoyer Fonglet actuellement consulté sur OneTab, dlenvoyer tous les onglets ouverts sauf celui sur lequel ‘yous vous trouver, d'envoyer tous les onglets de droite ou tous les onglets de gauche... et méme dlenvoyer tous les onglets de toutes les fenétres de votre navigateur web. Bref, voici un outil trés simple d'emploi et particule rement utile pour alléger votre exploration en ligne! m= VERSION TESTE : 1.39 SITE DU PROJET : httpsv/wwwwrone-tab.com/ —_COMPATIBILITE: Firefox, Chrome/Chromium © iruerrtiue ee sai nefab - Grammalecte > .. ™= 1124 https://grammalecte.net/ ILITE : Firefox, Chrome/Chromium, lamond Linux Pratique n*122 Bs @@ oGiTHEOUE & APPLICATIF 9» Communication fiambox REUNISSEZ TOUS VOS COMPTES DE MESSAGERIE EN UN SEUL ENDROIT Gérer vos mails, vos divers réseaux sociaux, vos comptes de messagerie instantanée... que ce soit dordre pro- fessionnel ou simplement personnel (oire les deux) est quelque chose qui rend beaucoup de temps. Ce sont aussi des taches qui généralement sont réalisées au sein d'outils divers et qui nécessitent donc que vous éparpilliez votre énergie a plusieurs endroits, Rambox entend apporter une solution & ce cas de figure en vous proposant de centraliser tous vos comptes en un seul endroit. ‘d+ BAGHDOB® i i Z#O9@H\000 HoU50O0ee8B8 Le projet, open source et multiplateforme, se décline en plusieurs versions : la Community Edition qui est grate ine ein Popova sve des encnnale spent et uneven ep rore En course erelopeent a mament onus edges ts igre Coeanat a Cur aon es Seven supports srt eavernet hombre oe es eson eles ue Peon Hartodon ST Grol Geel Hangouts stom Dec ned MesaggFacbock Messenger Reunazbe Sr Teton, heh, Wech Wtchop || 2012122012, Pour chon es seve quevour setae ie Sita co conngarequaguesoptors Ggeston des retestons ge Se te) rence! vos aril . deconneson Yard choqe saves — saffichera dans un nouvel onglet, ce qui = =D vous permettra facilement de passer de oo fun a fautre. Un mode « Ne pas déranger » est proposé pour vous permattre de ne pas recevoir de sons au de notifications et une option de verrouillage (par mat de passe) est dis- ponible pour sécuriser un minimurn fouti lors de vos absences. Le comportement du logiciel pourra par ailleurs étre paramétré plus finement dans les préférences. = SITE DU PROJET: https//rambox.pro/thome _ COMPATIBILITE : Linux, macOS, Windows. Q trvcreiquert2 sree nov. DE, 2H eee Chez votre marchand de journaux et sur www.ed-diamond.com BG) VSTEME & CONFIGURATION 99 Contoncurs METTEZ EN PLACE VOTRE SYSTEME D’ORCHESTRATION DE CONTENEURS avec Kubernetes et CRI-O NICOLAS GRENECHE he) aco Vanda Aol DONNER LES CLES Lays (ET TESTER) VOTRE PROPRE SYSTEME D’ORCHESTRATION DE [oS Uy SUR KUBERNETES, CLASSIQUE, ET CRI-O, BEAUCOUP MOINS CLASSIQUE. Sur beaucoup de documentations, y compris foffcielle de Kubernetes (abrégé en ks dans la suite de tarticle, le moteur de conteneurs par défaut est Docker. Oril existe une alternative & Docker nommée CRL-O. Cette alternative est maintenant le moteur de conteneurs par défaut sur la solution Openshift qui est un K8s package par Red Hat [f]. llexiste beau- coup de documentations pour intégrer CRI-O avec KBs, mais beaucoup sont fausses, obsolétes et surtout assez morcelées. Cet article va vous donner toutes les étapes ainsi que quelques éléments théo- riques pour installer votre propre Infrastructure K8s + CR-O en local. wr inux-pratique.com 1, PREAMBULE Cette section introduit les termes avec une définition de chacun succincte, mais suffisante pour la com- préhension générale de Varticle, Cette introduction est sulvie de la présentation du laboratoire utilisé pour les manipulations et des manipulations a effec- tuer sur les nceuds pour les préparer 3 installation de Kgs. 1.1 Terminologie Un premier travail est de se mettre accord sur la terminologie, Nous allons partir de la définition dun orchestrateur et expliciter chaque notion lune apres autre, Un orchestrateur est un systéme dlordon- nancement de conteneurs sur une infrastructure. Je ne vais pas prendre les termes dans ordre volon- tairement. Commencons par définir la notion de conteneur. Un conteneur est une boite dans laquelle on enferme un programme. Cette boite est étanche et contient toutes les dépendances nécessaires 8 son fonctionnement. L’étanchéité (par rapport au systéme héte et vis-d-vis des autres conteneurs) est garantie par des mécanismes disolation dans le noyau [2]. Une fois remplie, cette boite se pré- sente sous la forme dlune image. En pratique, elle Contient un fet, i, i, ete. Une fois créée, elle est mise & disposition dans un registre qui est un dépot accessible par votre infrastructure KBs. Le dépot public le plus classique est celui de Docker, docker. io, qui fournit des images prétes & remplot Une infrastructure est un ensemble de machines physiques ou virtuelles. Pour forchestrateur, i Sagit des ressources disponibles pour y placer ‘ses conteneurs. Dans des environnements type Cloud, il est classique d'exécuter les conteneurs dans des machines virtuelles, car elles sont plus faciles & provisionner. Le provisionnement est action de mettre automatiquement a disposition des machines virtuelles configurées a lorchestra- teur sur lesquelles exécuter ses conteneurs. Ce principe est complémentaire a la fonction de mise ‘aféchelle automatique orchestrateurs (autoscale) qui instance automatiquement des conteneurs en wow.ed-dlamond.com en place vatie sme d'orchestration de canteneurs avec Kuberneta: cas de surcharge du service. Attention, provision- nement ne rime pas forcément avec virtualisation, Une provision des machines physiques est tout a fait réalisable. Chaque machine physique ou virtuelle est appelée un neud, Lordonnancement est utilisation d'un algorithme PAR lorchestrateur POUR placer les conteneurs sur infrastructure physique, Vorchestrateur dispose donc dune vision globale des ressources disponibles sur linfrastructure. llvayy placer les conteneurs en confrontant Fétat des ressources avec les contraintes attachées au conteneur formulées par lutilisateur. Lalgorithme consiste & évaluer différents critéres pour calculer un score pour chaque nceud et élire le plus propice & accueil le conteneur. Une fois placé et lancé, le conteneur exécute le programme contenu. dans la boite. 1.2 Préparation de l'environnement de test Notre infrastructure de test est composée de trois neuds virtualisés. Le premier nommé api-server va etre dédié a héberger le cerveau de notre orches. trateur. Cest-d-dire le composant qui va ordon- nrancer les conteneurs. Nous allons suivre une des premigres bonnes pratiques a observer lors de la mise en place d'un orchestrateur qui est dinterdire ordonnancement de conteneurs sur ce naeud, Les deux autres naeuds nommés nodet et node2 seront utilisés par ap sorce pour y exécuter les conteneurs. Ces trois nceuds tournent sur une Debian Buster (10), Linstallation de KBs nécessite une préparation sur chaque noeud de notre laboratoire de test. Ces actions sont a effectuer en root évidemment. Nous allons commencer par le réseau. Cette phase est intimement liée au plugin usité par la suit. Dans cet article, fai choisi Calico. Cependant, je don- nerais les directives nécessaires aux principaux plu- gins (ca codite pas cher). Pour Calico, il faut autoriser Vip-tonvard, Cette directive est une variable du noyau autorisant (ou non) le transfert de paquets entre les interfaces réseau (physiques ou virtuelles). En conséquence, Cest souvent un préambule & la confi- ‘uration de tables de routage. Cest le cas ic, car les unuxrrineniz2 BS @STEME & CONFIGURATION 99 Contoncurs paquets ont besoin d'étre routes entre les interfaces virtuelles associées aux conteneurs. Tout cela se passe dans le fichier tls. tora cont eo oe ecard eee eed Pate TACT ey Pour d'autres plugins plus simples que Calico, iptables doit accéder au trafic des ponts (bridge). On commence par activer le module noyau br flier dédié au filtrage des ponts ee Puls on rend la manipulation persistante en ajoutant le module dans le fichier /es/nodues: een ee Une fois ce module chargé, il faut initaliser ses variables pour autoriser iptables a fitrer le trafic des ponts. Vous pouvez les renseigner dans un fichier letlsysel.dhs-brcont ear) Sete ere eee eee reso ed On indique au noyau de relire les fichiers pour ajus- ter les variables en fonction de nos réglages Ea (On notera que ton peut afficher toutes les variables disponibles avec leurs valeurs respectives Toujours pour la partie réseau, il faut repasser de nftables a iptables pour Calico [3] Snot # updai Petre ty eee sbin/arptables-Legacy # update-alternstives sbin/abtables-legacy Pn C Sei ee Cw Lo Pace Steed La demiére étape est de désactiver le swap. Cette tape est nécessaire & Finstallation future de KBs On rend cette manipulation persistante en le désacti- vant dans le fstab (ern eae eed Pour verifier: # mount | grep swap Je vous conseille & cette étape de redémarrer la machine et de vérifier que tous les changements sont bien persistants. Ces manipulations dolvent tre réa- lisées sur TOUS les noeuds de Hinfrastructure 2. INSTALLATION DE CRI-O RIO est un moteur de conteneurs. C'est lui qui est chargé de prendre une image et de Vexécuter sur la machine. Docker est autre moteur plus célebre que CRO. Cet article n'a pas pour but de faire un com- paratif entre les deux. Pour positionner implement CREO, on peut dire quilla été développé spécifique- ‘ment pour uniquement exécuter des conteneurs, Docker s‘envisage plus comme une trausse & outils autosuffisante de gestion des conteneurs. Par rap- Porta CRI-O, Docker intégre des outils de gestion des images (création, modification et gestion des apartirde 120 €HT < se a niveau Suivi et garantie matériel inclus fe] poe LX contactez-nous www.domtechnologies.com contact@domtechnologies.com +33 (04 72.83.5228, and eoiec Sees On fixe la version des paquets, ce qui empéchera quils soient installés, mis 8 jour ou supprimés auto- matiquement SSS Enfin, il faut créer un fichier contenant les para matres par défaut utilsés au lancement du service Kubelet pour quill sadresse correctement au service CRI-O. Il 'agit du paradigme de gestion des cgroups (systemd) et du socket local de communication ( )) mis disposition par CRO. pour recevoir des instructions. eee De att Acie Orcas eed La configuration commune est terminge, Passons & celle de VAPI Server. LPI Server est le composant central de K8s. Nous Rous connectons sur la machine api-server. La com- mande prend un paramétre init qui installe tout ce quil faut pour que la machine prenne le rle de « control plane » (cerveau) dans linfrastructure, Dans la commande, il faut fixer la plage réseau uti- lisée par les Pods et Femplacement du socket local de communication avec le moteur de conteneur. Examinons la sortie de la commande : oer pecrenreet eka aera Cee hee eect ee Cnog [init] Using Kubernetes version: vi.19.0 [preflight] Pulling images required for peer eas eed ete eae rere ry Ceneertnes eee feet fe] oC croc eR OU Croc Deere etn Linux Pratique n°122 [control-plane] Creating static Pod manifest for "kube-apiserver’ eee aren eres C TT manifest for "kube-controller-manager" ere eRe eu mci Pree sateen erent Ree Cnr ae Setar erety ia] eee eR rt msn or oe ese mtg poem ether eng pee tl ian omen esters erro ee eee ns ced Your Kubernetes control-plane hae initialized successfully! ee ea Serotec te eStores mkdix -p $HOME/.kube sudo op -i /etc/kubernete Eee ‘sudo chown $(id -u):$(id -g) $HOME/.kube/ corey Sane Re es tare nec ones oe eeu nrg eae coer ns ened Crees Tete etrerteg Cee en eee eee nodes by running the following on each as oe kubeadm join 192.168.45.2:6443 ~-token Eee erent nN rt ne teeaaiae mee CeO eee Deere Daprés les sorties, nous sommes en mesure de retracer le déroulement de installation. Kubeadm com- mence par récupérer les images des conteneurs qui compasent le control-plane a savoir Fapi-server, le controller-manager et le scheduler (ordonnanceur) ainsi le service DNS (CoreDNS) et Proxy (kube-proxy). La ligne est intéressante, elle indique qufaucun Pod ne sera ordonnancé sur le controt-plane, Enfin, nous avons la commande & entrer sur les noeuds pour les lier au control-plane, Regardons les Pods en exécution sur le noeud api-server avec la commande crit) qui interroge directement le moteur de conteneurs See eee greed Poke} coed Piven} Peer eee) pest ied ee eee pemenneerst years oe eee perme te Ty ee ed poe eenteerstrang cee eee kube-controller-manager-api- Crease) renesy erent eer eee Configurons tutllitaire ke! pour tutilisateur nico mkdir -p /home/nico/.kube Pew ee eaten UNE ee Seea ce antze) pte ever tee cney acs! Nous allons passer sur le compte nico pour les manipulations. Commengons par affcher les noeuds disponibles nlootapi-server:-$ kubectl get. nodes crt) er ee Md Ce ee Installons le module réseau Calico pour gérer les communications entre les Pods, mats aussi des Pods vers Vextérieur. Pour étendre les fonctionnalités dlun cluster KBs, il sufft 'appliquer un fichier via la com- mande kubect1 apply Sion liste les Pods en exécution sur la machine api-server, on voit que deux nouveaux protagonistes sont Coe Pop 10 Cd Cd re een a Ce ee tee erect et ster meron ere ae eee ee eee ard ere Ce sont les Pods nécessaires au bon fonctionnement de Calico. lls vont gérer la couche de virtualisation du réseau en utilisant la plage que nous avons passée au moment du Sur les noeuds, nous devons donc utiliser Kubeadm avec targument, fin de Finstanciation du control-plane et je la lance sur le Je prends la commande indiquée & la Linux Pratique n*122 root@nodel:-# kubeadn join 192.160.45.2:6443 See eree ered Se ee ery Cee er eee en Pree oe cue toc Cece ete Ete oti] Cero [kubelet-start] Writing kubelet. cree Cnr wee Sea ot7 piryper tte ert ae stereo ese Ce ese One eee Esme crot rere erent ee enon eta) Cee ee ee rere ne ter secure connection details. ee eo plane to see this node join the cluster. LLassoclation entre le noeud et le controk-plane est réussie, On devine d'apres les sorties qu'une PKI assez complexe est & ceuvre pour authentifer les naeuds par rapport au controkplane et chiffrer les changes. On réitére le méme processus pour la machine KBs de test Enfin, on peut visionner notre cluster eee eed ptt Ce ae} ed eS rd api-server ery pend Notre infrastructure est maintenant fonctionnelle, nous pouvons lancer notre premier Pod dessus. Vidée est de créer un fichier décrivant le Pod & lan. cer, Nous allons créer un Pod tras simple contenant un seul conteneur basé sur Debian 10, Ce fichier, que hous nommerons est au format YAML Pen er enero apiversion: vi err! poor ame: debian co containers: rere stric) peaeernerny err cy a args: [ "while true; do sleep 30 Cae eae prouertcr ee] La premiere ligne fixe la version de VAP! utilisée pour parler au controler-plane. En effet, le composant apiserver est, comme son nom lindique, un ser- veur API permettant de requéter le service K8s. I convient donc de préciser la version des échanges, La deuxieme ligne est le kind de lobjet a créer, ici il Zagit d'un Pod. Ensuite, nous avons les metadata avec comme attribut le nom du Pod ( 1 Name) et enfin la spécification du conteneur. La premiére chose & fixer est limage. Ii, il ‘agit dune Debian 10. Une fois la demande de création du Pod partie, il est de la responsabilité du moteur de conteneur (CRl-0) daller chercher limage (cf. section 2, configuration du dép6t docker.i). Ensulte, cette image doit avoir un nom qul fait sens a fintérieur du Pod. La combinaison des attri- buts et args Indique la commande exécutée dans le conteneur. Sila commande savére étre un service type Nginx, la bonne pratique est de Fexé- cuter en avant plan et surtout de rvexécuter qu'un ‘seul service par conteneur. Si on veut monter un LANP, ilest tout fait possible de créer un Pod avec deux conteneurs, un pour Apache / PHP et autre pour MySQL comme discuté dans la section, relative aux Pods (section 3). Dans notre exemple, le conteneur lance un shell qui exécute une boucle infinie, Nous nous y connecterons pour illustrer utilisation des Pods. La derniére section active la capacité Lactivation de cette capacité est nécessaire pour créer un objet raw socket afin de permettre & la commande ping dlenvoyer des paquets ICMP. Créons notre Pod ee ee Geena m Sard caster Pe OSeee cic! Sion liste directement les Pods disponibles, on voit que le n6tre n’est pas instancié de suite. En effet, faut laisser au moteur de conteneurs le temps de récupérer image et Cae rt ed Cn TS ct ay 6 Revenons quelques secondes plus tard See ed Cm a eran 6 Nous allons lancer un shell bash 3 Fintérieur du conteneur eee eos ren Sete] La commande exec de kubectl va lancer Ia commande La combinaison des arguments -iet lie entrée standard (notre clavier) & la commande. Le résultat est bien un shell bash stexécutant dans le conteneur. Testons une commande dedans [SE CURUTEROE Sy Eo irc vairl cae pa ornate Toujours disponible sur www.ed-diamond.com eked PING www.google.fr (216.58.215.35) 56(84) bytes of data. 64 bytes from par2ist7-in-f3,1e100.net (216.58.215.35): icmp _sequi ttle118 tine=3.45 ms 64 bytes from parZisI7-in-f3.1e100.net (216.58.215.35): icmp _seqe2 ttlell8 time=3.14 ms Notre conteneur fonctionne ! Nous pouvons tarréter Toutes les données générées par le Pod sont perdues 8 moins davoir attaché un volume, La gestion des volumes est hors du scope de cat article. Langons un Pod Nginx. A instar de notre Pod Debian, il faut créer un fichier manifest erent apiVersion: vi ea paces oat a ‘containers: aginx oo eee ee ee Ce we) Cn ot ca) 698 192.168.166.130 nodel paar 1/L Running 0 Pee aes as LIP de notre serveur Nginx est la Nous allons tenter un «uri depuis le Pod debian vers le pod Installons curl dans le Pod debian Porno bere nmurae root@debian:/# apt-get install curl root#debian:/f curl hetp://192.168.104.3 rec eet eet pers Nos Pods communiquent donc bien tun avec fautre, Cependant, le service est inaccessible depuis lextérieur. Nous pouvons exposer des ports de conteneurs vers lextérieur avec la commande Cette commande est souvent utilisée pour dSboguer taccés 2 un service nicotapi-: eer) eereee eer St mea) eee Linux Pratique n°122 . X " stration de conteneurs avec Ki Cette commande reste en avant-plan. Elle effectue une redirection du ort 8080 de Finterface de rebouclage 1270.01 vers le port 80 de notre Pod Nginx. Essayons prea een) prect neat prone SS eee eed Sion revient sur la premiére console ol! on a lancé la redirection, une nouvelle ligne sest affichée eed TTant quion parle de déboguer, une autre possibilté intéressante est afficher les logs du programme localisé dans le conteneur. Ouvrons un troisiéme ter- ‘minal pour aficher les logs du conteneur Nginx. Il sagit de la commande de atecl (le! pour Sattacher a la sortie et afficher les logs quand ils arrivent), ‘Sion relance un sui, on vot bien qutune ligne est produite ee ser Pee nether Sc ake CONCLUSION Nous avons mis en place un cluster Kas reposant sur le moteur de conteneurs CRI-O. Nous avons également lancé des Pods basiques pour valider le fonctionnement systéme et réseau et danné quelques com- mandes pour aider au débogage. Cest une base solide pour vous lancer dans Vexpérimentation d'une infrastructure KBs. Je conselle au lecteur souhaitant approfandir le sujet de se référer au dossier trés complet, présenté dans le hors-série n°98 de GNU/Linux Magazine consacré. orchestration de conteneurs [2]. m= REFERENCES [1] httpsi//www.redhat.com/fr/blog/red-hat-openshift-container- platform-4-now-defaults-cri-o-underlying-container-engine [2] Comprenez enfin tout sur ... Les conteneurs ! GNU/Linux Magazine Hors-série n°98 : https://connect.ed-diamond.com/ (GNU-Linux-Magazine/GLMFHS-098 [3] https://github.com/projectcalico/calico/issues/2322 [4] https://kubernetes.io/fr/docs/concepts/storage/ volumes/#emptydir worw.ed: diamond com Linux Pratquen'122 @ Bs @)STEME & CONFIGURATION 9» Comprendre les BASES DE DONNEES RELATIONNELLES JULIEN DELPLANQUE & OLIVIER AUVERLOT Ia ante aoe) ae STOCKAGE ET LE TRAITEMENT LSD Ty DE DONNEES RELATIONNELLES SONT PARTOUT. SI ELLES SONT asda alone POUR L'INFORMATIQUE DE GESTION, ON LES RENCONTRE VE ey DLN SPU iene UA ee) Po Re Vile en a aay aU aU ee rae Lae ete moa PCO MRM ay Nd oe) aero Co DNs LEUR FONCTIONNEMENT. Les bases de données relation: dement de gros volumes dinfor- nelles sont souvent vues & tort ‘mations structurées, mais cette comme des outils lourds et com- puissance peut étre domptée, plexes. Elles sont certes riches Pour cela, il faut accepter de se en fonctionnalltés et capables plier aux ragles du jeu en pensant cde manipuler aisément et rapl- organisation des données selon le modeéle relationnel, Ce travail suppose de comprendre ce qu’est une donnée et par la pratique, dlentrainer notre cerveau a agen cer les informations en fonction des relations potentielles pouvant wr inux-pratique.com Comprendre les bases de données relationnelles 39 tre établies. Ce mode d'organi- Les données semi-structurées: de segment et de champ. Laccés SLONperMECE Naren! | SERUTOTMECEMOMEERSIAS. la inISnT des denies base dedonnées elatonneltréesquiriesont ps conformessontéalaés fale dun angoge parfaitement structurée. aun modéle de données formel, dédié nommé DL1. Ala fin des mais qui, néanmoins, contiennent —_ années 60, le modéle réseau desméiadonnées permetane appara Leschéma dune base Fm - de distinguer des éléments de données réseau est un graphe TAQUESTEQUUNE Ssrartquesetceet sins ute. ange I esthesd sur don andoen DONNEE ? hiérarchie dans les données. Par —_représentant les entités et les vant partsladdconmna eve ae page cin ste iter- Sts qulsontlsazocttons heantda partalaécowieria FTE ceed parr dunfcler ene omits a ngage de trcodttdansUnformstde dor. pfednedteni aa eninler la conception d'une base de données, il est nécessaire de siinterroger sur ce que sont les données. Plusieurs définitions nées semstructurées: Hyper modle est alors DBTG-COBOL. text Markup Language (HTML). Ce format est un compromis entre un traitement facile pour un ordi- nateur et la possibilté pour un humain de re/comprendre/éditer les données facilement. En 1970, farticle « A relational model of large shared data banks » [2] du mathématicien Edgar Frank Codd, défint le modéle relationnel dans leque! existent dans la littérature, mais celle qui semble la plus adé- quate est la « Représentation conventionnelle d'une inforrna- les données sont organisées sous tion en vue de son traitement Le dernier type concerne les don- la forme de tables. Pour manipu- Informatique »[f]. Vous alez nées sructurées, cest-idireles ler les données, e langage SQL découvrir quillexiste différentes données disposées de fagon tre (Structured Query Langage) est approches pour structurer les traitées automatiquement et effi- _créé par IBM. Dans le modeéle données afin obtenir un résul- _cacement par un logiciel, mals pas __relationnel, e programmeur tat efficient. nécessairement par un humain, ra plus besoin de connate la Ces données sontconformes8 _structure physique des données \Grimodélesde donne formal pour les exploiter, Leur format 1.1 Structurer les ‘Cestce type dorganisation qulest est entigrement décrit parla base données uilisé dans le cadre des bases de de données et ne contient pas On distingue trois types de structu- _ Somnées relationnelies. ambiguité. rations :les données non structu- Dans les années 90 sont apparus rées,les données semistructurées 1.2 Historique rapide des —_ tes modes Relationnel-objet et et les données structurées. modéles de données Orienté-objet. Le premier est une extension du modele relationnel auquel des concepts de la pro- _grammation orientée objet sont Intégrés. Le second offre une per- Des données non structurées sont Peu de temps aprés quiAlan des données représentées sans Turing ait posé les bases de i. format prédéfini. Un courrier élec- _formatique maderne, le besoin tronique ou un document bureau- de structurer et de stocker les tique tel qulun fichier ODF sont données est apparu. La fagon sistance aux instances objets debbons exemples dedonnées _ de structurer des données est Enfin, début 2010, apparait NoSQL non structurées.Certesle fichier _décrite parle modéle de données pour répondre au besoin de contenant les données peut avoir utilisé. Ansi, dans les années 60, _stockage massif. Ce moddle, plus lune structure définie, mais parle moddle hiérarchique organise flexible que le mode relationnel, contre, les données quillcontient les données sous la forme dun _est issu dune concession permet- ne sont pas organisées selon un arbre dans lequel les objets sont ___tant des traitement plus rapides modéle représentés alaide des notions pour certains types applications. omens unuxrraiveniz2 @ Ms @)STEME G CONFIGURATION 9» Dans cet article, nous nous intéressons au modele relation- nel qui repose sur des bases mathématiques solides affinges depuis plusieurs décennies par la communauté scientifique. Les bases de données relationnelles restent largement utilisées dans tindustrie, De nombreux ROBMS (Gystéme de Gestion de Base de données) existent et sont toujours activement développés (par exemple, MariaDB, MySQL, Oracle, PostgresQl, etc.) et poursuivent leur évolution. Ainsi, PostgreSQL [3] a évolué vers un modele hybride en intégrant certains concepts du modéle orienté objet ainsi que de NoSQL {stockage et indexation native de données au format JSON). 2. LE MODELE RELATIONNEL PAR LA PRATIQUE Pour appréhender le modele relationnel, la meilleure facon de faire est probablement de le pratiquer. Nous vous proposons donc un exercice simple destiné vous aider & comprendre ce modale et & assimiler le vocabu- laire associé. 2.1 Un scénario festif Dans le cadre de organisation de votre féte danniversaire, vous décidez d'inviter votre famille et vos amis. Désireux de rendre la soirée la plus agréable possible, vous orga sez un sondage pour connaitre la bolsson préférée de chacun de vos convives. La réponse doit se faire par courrier électronique et chacun est libre de choisir la boisson de son choix. Une fois les mails, requs, Se pose 8 vous la question de leur traitement. Comment organi: ser et analyser les données ? 2.2 Structurer les données Le moyen le plus évident est de construire un tableau dont les colonnes sont le nom, le prénom et la dénomination de la boisson préfeérée de linvité, Cest simple et rapidement construit a Faide de quelques copier/coller. Nom Prénom Préférence Delplanque Julien Limonade Auverlot Olivier Jus dorange Doe John limonade ‘Vous remarquerez rapidement des problémes avec la colonne « Préférence » dans laquelle une méme boisson peut étre orthogra- phiée différemment selon les individus (ct. « Limonade » et « limonade » dontlla casse du premier caractére est différente), II est donc nécessaire dhomogénéiser les données afin de permettre certaines opérations telles que le tri alphabétique de la colonne. 2.3 Gérer les cots ‘Maintenant que vous connaissez les choix de vos invités, vous pouvez estimer le coat financier de votre soirée. Pour cela, il suffit d'associer le prix de la boisson & chaque préférence en ajoutant une nouvelle colonne votre tableau, Nom Prénom _Préférence __Prixunitaire Delplanque Jullien Umonade 1 ‘Auverlot Olier Jus dorange 2 Doe John Limonade 1 Une fois le tableau terminé, vous vous apercevez que vous avez commis une erreur sur le prix de la limonade qui est de 1.5 euro et non pas un euro. La seule solution est de corriger le tableau en modifiant le prix uni- taire indiqué pour chaque invité ayant choisi cette boisson. Aprés avoir dd gérer la cohérence des noms des boissons, vous voici encore face 3 un travail fastidieux. Quelle est la solution & ce probléme? wr inux-pratique.com Comprendre les bases de données relationnelles 39 2.4 Etablir des relations La relation entre les deux tables précédentes est appelée relation «ten», En effet, pour chaque boisson (1) plusieurs personnes peuvent considérer que celle-ci est leur boisson préférée (n). Uarrive que la relation entre des données soit « n-m », Par ‘exemple, si fon souhaite stocker dans la base de données tes plats que les invités ont consom- més précédemment. La relation Intuitivement, vous devez en venir & la conclusion que vos problémes sont liés au couplage fort des données nominatives sur vos invités & celles concernant les boissons, La solution doit étre de les dissocier dans deux tableaux différents dont les valeurs dans une colonne de un font référence aux lignes de autre, Pour chaque invité, une relation unique doit étre définie entre la personne et sa boisson préférée. Cette organi- sation est la base du modéle relationnel dans lequel chaque tableau est nommé une table, composée de lignes qui sont le résultat de lassem- blage de colonnes nommées. Lintégralité des valeurs d'une colonne doit appartenir au méme domaine : les cellules sont typées. II vous faut donc définir une table des boissons dont les colonnes sont entre les invités et les plats est le nom de la boisson ainsi que son prix. Cette table doit contenir une tune relation n-m puisquiun plat colonne dans laquelle chaque valeur est unique. Ceci permet de sass» peut avoir &té consommé par rer que chaque ligne est identifiable de fagon distincte dans la tablet plusieurs personnes (n per- de définir une association équivoque entre la valeur de cette colonne et —_sonnes) et une personne peut celle dune autre colonne contenue dans une autre table. Implicitement, avoir consommeé plusieurs plats vous associez donc es lignes des deux tables par régalité des valeurs (m plats). Pour implémenter contenues par une ou plusieurs de leurs colonnes. Dans une base de cette situation dans la base données relationnelle, ce type de colonne est nommé une clé primaire de données, une table inter- pouvant étre dite composite si elle est définie parla combinaison de médiaire serait uilisée (par colonnes (le nom et le prénom par exemple). lI vous est possible d'utli-. exemple, une table nommée ser le nom de la boisson, mais une pratique courante consiste & ajouter _consoninati) et elle contiendrait tune colonne numérique auto-incrémentée. Dans cet exercice, elle per-_une clé étrangere qui référence met de gérer simplement la problématique de rhomonymie. le plat consommé et une clé Id Dénomination Prix unitaire clean Mews 1 Limonade 1 approche relationnelle pré- 5 Jus dorange B sente de nombreux avantages. Les données sont regroupées ‘thématiquement avec une méthodologie prache de celle dela programmation objet. Une table peut étre assimilée 2} une classe, une ligne & une Instance et chaque colonne peut étre considérée comme tant une variable instance. ‘Comment faire maintenant Fassociation entre les choix de vos invités et la liste des boissons? Il est nécessaire d'ajouter une colonne dont la valeur établit une jointure entre les deux tables. Ce tyne de colonne est nommé une clé étrangare, Au passage, vous pouvez en profiter pour ajouter également une clé primaire simple qui identifiera de maniére unique et formelle chaque ligne de cette table. td Nom Prénom #bolsson.id est également plus simple de 1 Deblenque "ullen 1 mettre a jour les données. Sile nom ou le prix d'une boisson 2 wet er 2 dot tre chang dst alors 3 Doe John 1 de le modifier dans la colonne correspondante (Figure 1, page a suivante), omens unuxrraiveniza ms @ystive G CONFIGURATION >> a a : (coetoere eS Saget Mode de données Sorat p Coneapton owen schema) prraave_) | Cos apse a ree | cantas FIGURE 1. Conception d'une base de données relationnelle a Vaide de la méthode synthétique, Dans cet exemple, vous avez travaillé de maniére intuitive en vous basant sur des entités modélisant au mieux le monde réel, Cette approche illustrée ci-dessus est nommée la méthode synthétique et est utlisée par les architectes de base de données. Celle-cise déroule en 3 étapes. Premigrement, en démarrant des spécfications de la base de don- rnées (habituellement écrites en langage naturel, par exemple en francais), 'étape de conceptual: sation est réalisée. Le résultat de cette premiére étape est un schéma abstrait de la base de don- niées qui est indépendant d'un modéle de don- rnées en particulier. La seconde étape démarre du schéma conceptuel et le spécialise pour obtenir le schéma logique. Ce dernier contient des informa- tions suppiémentaires qui permettent de décrire comment stocker les données dans un modéle de données particulier (par exemple, pour le modele relationnel tout en restant indépendant dune impiémentation particulére (le schéma obtenu peut étre implémenté avec rvimporte quel RDBMS) Finalement, la derniare étape va spécialiser le schéma logique pour devenir un schéma physique fortement lié 3 une implémentation particuligre dun moteur de base de données. Ce dernier schéma est décrt 8 'aide du langage SQL et peut tre exécuté directement par le moteur de base de données afin dinstancier la base correspondante. 3. CREER UN SCHEMA AVEC SQL ‘Vous avez maintenant acquis les notions essentielles du modéle relationnel. Nous vous proposons donc dimplémenter la base de données présentée pré- cédemment 8 Faide de SQLite [4]. Cet exemple vous permettra de découvrir les concepts du modéle relationnel avec le langage utilisé par les moteurs de base de données : SQL [5}. 3.1 Le schéma de la base de données La premiere étape pour implémenter la base de données consiste a décrire son schéma. Celui-i est la description de toutes les tables quielle contient et, pour chaque table, la description de chacune de ses colonnes (nom et type) ainsi que la description de ses contraintes diintégrité référentielles (clé primaire et clés étrangeres). Dans texercice proposé précédemment, deux tables sont présentes dans la base de données a table invite et la table boisson. Vous allez décrire chacune de ces tables via les requétes SQL. Das lors, une ques- tion se pose : par quelle table faut-il commencer ? Une facon de répondre & cette question est d'abser- ver les relations de clé étrangére entre les tables. En effet, pour déclarer une clé étrangere, il faut que la table contenant la clé primaire référencée par la clé ww inux-pratique.com Poles Ua sd PTT Le code proposé dans cet article peut @tre exécuté par divers moteurs de base de données. Pour vous permettre Cee eect Pere Toes enn Let ay Petey util en ligne gratuit permettant de créer er eet ey ee once cd étrangbre existe. Dans notre exemple, la table lille possde une clé étrangire qui référence la colonne denomination de la table boissor. De par cette configura- tion, il est nécessaire de commencer par déclarer la table brisson ea = ek See > a Comprendre les bases de données relationnelles 9 Lapremigre ligne permet de spécifier au moteur de base de données que on veut créer une table. I faut done préciser le nom de cette table et ensuite décrire les différentes colonnes quila composent entre parenthéses. Pour déclarer les colonnes de la table, la méthode est la suivante : on spécifie tout dabord le nom de la colonne, puis le domaine de la colonne et enfin les contraintes dintégrité référentielles qui peuvent sappliquer & celle-c lest important de roter que les noms de colonnes ne peuvent pas contenir de caractéres spéciaux tels que des accents, et ce principe ‘applique aussi au nom des tables. Le domaine d'une colonne permet de restreindre ensemble des valeurs pouvant étre stockées dans la colonne. Par exemple, le domaine TEXT permet de sassurer que la colonne ne peut contenir que des chaines de caractéres de longueur variable, le domaine \i0NEY permet de restreindre les cellules de la colonne aux valeurs monétaires (cest des nombres décimaux avec une précision de deux chiffres aprés la virgule). Dans le code ci-dessus, une contrainte de clé pri- aire est appliquée sur la colonne i qui a le domaine NTEGER (nombre entier). Cela signifie que pour chaque ligne de la table bolsson, un numéro unique sera attribué 3 la boisson. Dans cette configuration, ~oe noevoe = Pee History "pn iy FIGURE 2. Création d'une table dans sqliteonline. wow.ed-dlamond.com Linux Pracique ni2z @ Ms @)VSTEME & CONFIGURATION 9» SEBDR on pourrait facilement ajouter une colonne fosrisseur {la table boison et stocker le fournisseur de chaque boisson en tant quinformation supplémentalre sans aucun probleme. Utiliser une colonne i (identifiant) de domaine INTEGER comme clé primaire est une convention largement répandue chez les administra- teurs de base de données, La table boisson étant maintenant implémentée, il vous est possible dajouter la table inte: Prenom TEXT, Preference _ id INTEGER REFERENCES boisson(id) Le principe pour implémenter la table inite est similaire 8 celui utilisé pour a table poison. La diffé- rence principale concerne la colonne preference. id de domaine INTEGER. En effet, celle-ci est contrainte par une clé étrangére qui référence la colonneii dela table boisson. Cest exactement ce que décrit fa cin- quime ligne de Vextrait de code ci-dessus. 3.2 Insérer des données dans la base Le schéma de la base de données étant implémenté, ilest temps de remplircelle-ci de données, Insérer des informations dans la base va nous permettre dillustrer de facon coneréte feffet des contraintes de cé primaire et de clé étrangere sur le stockage des. données. Vous allez commencer par ajouter les différentes boissons citées par nos invités, Pour ajouter des lignes dans la table bois, il vous faut utiliser des requétes !NSERT comme ci-dessous : INSERT INTO boisson(id, denomination, prix) VALUES (1, 'Limonade', 1); Une requéte 1liSERT doit spécifier: la table cible (la table boson dans notre cas), les colonnes pour les- quelles des données sont fournies (i, denomination et vi) et, finalement, a valeur de chaque colonne (1, « Limonade » et 1 par exemple), Notez que les valeurs doivent apparaftre dans le méme ordre que fordre de déclaration des colonnes spécifié dans la requéte. Lorsqu'une requeéte insérant des données est exécu- ‘tée par le moteur de base de données, celui-i vérifie que les données respectent les contraintes définies dans le schéma, Par exemple, sion exécute une seconde fois la requéte INSERT précédente, le moteur de base de données va signaler une erreur, carla contrainte de clé primaire sur la colonne ji de la table boisson ne serait pas respectée par insertion des données (1, “Linorai, 1) une seconde fois. En effet, la valeur | apparaitrait deux fois dans la colonne i et cela est formellement interdit par la contrainte. La requéte instr permet aussi de spécifier plusieurs lignes & insérer en une seule fois. sufft de décrire plusieurs lignes séparées par des virgules dans la clause VALUES. Néanmoins, les contraintes seront -vérfies parle moteur de la base pour les données de toutes les lignes. Si une seule de ces lignes ne respecte pas une contrainte du schéma, aucune des lignes spécifiges dans la requete INSERT ne sera ajoutée 3 la table, pas méme celles qui satisfontla contrainte, Ajoutez done d'autres lignes & la table boisson via la requéte suivante INSERT INTO boisson(id, denomination, prix) ALES (2, ‘Jus d'orange’, 2), (, 'Biere’, 1.5), (4, ‘maw’, 3); Maintenant que la table ioiscn contient des données, livous est possible diinsérer des lignes dans la table invite, Ajoutez directement plusieurs lignes a cette table via la requéte suivante INSERT THTO invite(id, nom, prenon, preference _id) VAWES (1, ‘Detplanque', ‘Julien', 1), (2, ‘Auverlot', ‘olivier", 2), (G, "Doe!, ‘gohan’, 1); Comme pour la requéte INSERT précédente qul ajou- tait des lignes dans la table poison, le moteur de la base de données va vérifier que les données candi- dates & linsertion respectent les contraintes dinté- agrité spécifiges dans le schéma de la base. Dans le cas de la table nits, deux contraintes sont vérl- ‘iées la contrainte de clé primaire pour les données de ww inux-pratique.com la colonne jet la contrainte de clé étrangére pour les données de la colonne pe(ersice_ ll, Cette demiére va sSassurer que les données apparaissant dans la colonne: sont toujours des références 8 des données contenues dans la colonne i de la table bnssn. En autres termes, siune donnée apparait dans la colonne prelerence id de la table ini, alors existe une ligne dans la table bosson telle que la donnée pour la colonne iiest égale a la donnée de la colonne prefererve 3.3 Interroger la base de données Pour terminer les manipulations pratiques de votre base de données relationnelle, nous vous proposons Lun exemple de requéte qui interroge la base pour évaluer le coat de la soirée en considérant que chaque lnvité peut consommer un maximum de cing boisson: seecr ‘poisgon.denomination AS denomination, Ccomm(s) * 5 * boisson prix AS prix estine ROM boisson, invite ‘WHERE boisson.id = invite.preference _id GROUP BY boisson.. La premiére étape consiste 8 récupérer, pour chaque boisson, le nombre dinvités qui la consomme, Celle- est réalisée via les clauses FR0H), WHERE et GROUP BY. La clause FROW permet de spécifier les tables interrogées (onion et init). La clause WHERE permet de définir une condition de filtre sur les don- nes lues, Dans notre cas, nous voulons faire corres- pondre les données de la colonne ide la table boison avecles données de la colonne preference de la table nite, Cette correspondance est réalisée en spécifiant Végalité entre les valeurs des deux colonnes. Une telle égalité ne fait sens que si une contrainte de clé étrangére lie les deux colonnes. Finalement, la clause GROUP BY permet de grouper les lignes résultantes selon Fidentifiant unique i de la boisson. La seconde étape consiste en révaluation du coot pour chaque boisson. Celleciestimplémentée dans la clause SeLECT de la requéte. Pour chaque ligne, la colonne donation est extrate, suivie de festimation de ‘son cod (ri estine). Pour le caleuler, a fonction ctagré- gation COUNT0 compte le nombre de lignes regroupées pour chaque boisson. Le résultat de COUNT) est alors ‘multiplié par 5 puts parle prix de la boisson, Comprendre les bases de données relationnelles 9 CONCLUSION Vous voici au terme de la découverte des principaux concepts du modele relationnel. Vous connaissez maintenant ses concepts fondamentaux que sont la table, la colonne, le domaine, la clé primaire et a clé trangére. Ces connaissances sont probablement les plus importantes pour utiliser les bases de don- 1nées relationnelles et sont valables pour toutes les implémentations de RDBMS (SQLite, PostgreSQL, MariaDB, etc). approche méthodologique pour concevoir le ‘schéma dune base de données présentée dans cet, article vous permet maintenant denvisager la créa- tion de bases de données plus complexes qui facilte- ront la conception applications performantes pour letraitement dinformations. REFERENCES [1] Dictionnaire Larousse 2019 [2] Larticle dtEdgar Frank Codd : https://www.seas.upenn.edu/~zives/03f/ cis550/codd.pdf [3] Site officiel de PostgreSQL. https://www.postgresql.org [4] Site officiel de SQLite : https://www.sqlite.org [5] Auverlot Olivier, « Découvrir SQL avec SQLite », Linux Pratique n°116, novembre- décembre 2019: https://connect.ed-diamond.com/Linux- Pratique/LP-116/Decouvrir-SQL-avec-SQLite POUR ALLER PLUS LOIN Tie ay tae ed eee Le livre de Carlo Batini, Stefano Ceri and Ree ees design: an entity-relationship approach », Cee aero Unuxratiquensi22 @) oO} CONNECT LA DOCUMENTATION TECHNIQUE DES PROS DE L'IT PRATIQUE JE M’ABONNE * 189 €HT*/AN i} soit: 15,75 €HT/MOIS /LECTEUR Merci de consultees tafser France Métro. su: ‘Tatas er SORE enn = NO aoe - Reese ene - on on cee (Ce POS oecanenecne Wi on voce eee ~ Pays: econ a ce an on \Veuile indiquer sv fadesse ena du référent neque bancalre ou postal fore csaon lamar querer France t OOM TON} Pores réglsmersparvrement Par phone | Cr] ESEAU & ADMINISTRATION 99 Pare-feu Cue} | PASSEZ A NFTABLES, LE « NOUVEAU » FIREWALL DE LINUX We INTRODUCTION Le firewall est censé protéger rentreprise contre les attaques venues de lextérieur. Certes, la mode du BYOD [1] permet doffrir aux malfaisants une poterne utllisable, mais utilisation d'un firewall limitera les problémes. II faut done choisir son firewall et le configurer cor- rectement. Crest un élément de sécurité. Les admi- nistrateurs utilisant Linux comme firewall depuis un certain temps ont recours & iptables. Cela falt dé quelques années que nftables promet d‘étre un bon, successeur, Nous allons voir ici comment franchir le pas et débuter avec nftables [2] Nous commencons par présenter la cohabitation centre les deux versions des commandes et du firewall et comment traduire lancienne version vers la nouvelle. Ensuite, nous verrons Varchitec- ture du firewall et comment appliquer des régles ‘en fonction des protocoles du modéle TCP/P. Nous nous intéresserons alors aux paramatres de la commande wi, Enfin, nous proposerons un exemple dutlisation du firewall 1. COHABITATION Le firewall Linux fonetionne dans espace noyau et dispose de commandes en espace utlisateur. Lancienne version, cest iptables ; la nouvelle, nftables. Cette nouvelle version est plus efficace (dans un premier temps pour un firewall trés com plexe) et corrige des défauts de ancienne version. La version iptables avait les limitations sulvantes : + du code dupliqué et inconsistant ; + des extensions spécifiques & chaque protocole ; + une séparation entre IPv4 et IPV6 ; + une dégradation des performances avec des jeux de ragles complexes (au-del de 1000 régles). Le nouveau systéme regroupe dans une seule com- ‘mange, sli, les anciennes commandes jpiaies,ipbiabes, chiables etarpables, ainsi que leurs dérivées. Il permet détre plus concis en utilisant des expressions, des cartes et des ensembles. wow.ed-diamond.com Passez a nftables, le « nauveau » firewall de Linux 9 Pour faciliter la transition, il est possible dutiiser les anciennes commandes qui peuvent manipuler le nouveau firewall, Ainsi, la commande ip.le. lesecy pilote fancien firewall et iptables! gare le nouveau en utilisant fancienne syntaxe. La distribu tion GNU/Linux peut proposer une ou fautre par défaut. Ainsi, avec Debian Buster, le systéme des alternatives lie la commande ipisbles 8 iptables, Pour convertir un firewall utilisant iptables en nftables, ily a plusieurs solutions, Pour un firewall déja confi- ure en iptables, Il est possible utiliser oft pour afficher [état courant. La commande piahlesransste permet de convertir une régle iptables en nftables SEC er. peer ners een ECE etre R I a eee ene’ lest possible de mixer les commandes nit et intales- fe qui pilotent le nouveau firewall, Par contre, utilisation simultanée des deux firewalls aura des résultats non prévus et probablement aléatoires. 2. ARCHITECTURE architecture du nouveau firewall est trés similaire a Fanclenne. Quand un paquet arrive sur le routeur ou est généré par celui, alors une décision de rou- tage est prise. La partie firewall ajoute des hooks (erochets) sur lesquels les chaines de régles peuvent etre accrochées. architecture est présentée dans la figure 1, page suivante Quand un paquet arrive dans le routeur, quil viene de extérieur ou dun processus local une décision de routage est prise. Le paquet sortira par une interface spécifique ou sera délivré & un processus local, Les chatnes du firewall pourront s‘accrocher & plusieurs endroits. Selon le chemin du paquet, celui traver- sera certaines chaines. Les crachets sont * INPUT :le paquet est & destination dun processus local; + OUTPUT : le paquet est généré par un processus local; unucrraiquenniz2 BE) ESEAU & ADMINISTRATION 99 Pare-feu en couverture “wens ence) —> S28" 5 Fominio > Posen | I | om (ame) L restau | Decn ms aa + FORWARD : le paquet traverse le routeur; + PREROUTING : le paquet est modi- {6 avant la décision de routage; + POSTROUTING : le paquet est modifié aprés la décision de routage ; + INGRESS: permet de fitrer du trafic entrant selon les para- matres Ethernet, 2.1 Mise au point La mise au point dun firewall est une tache complexe, Le nombre de régles devient rapidement trop ‘grand pour mattriser le comporte- ment en lisant seulement celles- Gi Lire le jeu de régles et croire que tout va bien se passer est voué a Féchec. autre méthode consiste & tester si ga marche ou ‘si ga ne marche pas en vérifiant sila connexion réussit ou échoue (suivant une décision dautorisa- tion ou interdiction), Mais des FIGURE 1. architecture du firewall ‘comportement imprévus vont énérer des problemes. La bonne méthode de test consiste 3 examiner le paquet qui rentre et vérifier ce qui se passe + le paquet ne sort par aucune interface + le paquet sort par interface prévue; + le paquet est altéré conformé. ment ala spécfiation... Il serait encore mieux de disposer dun jou de test permettant de verifier souvent que le comparte- ment prévu reste conforme aux specifications, 2.2 Rappels du fonctionnement IP Pour pouvoir maftriser un firewall, i faut comprendre le fonction- rnement dun routeur, Nous nous limiterons aux réseaux IP sur Ethernet, Le WiFi peut étre consi- déré, pour le firewall et le routeur comme de fthernet. Le modele TCP/IP est un modele fen couches. Chaque couche ruti- lise que les services de la couche Immédiatement au-dessous et fournit un service & la couche Immédiatement au-dessus. Les quatre couches sont: + Application ; + Transpor + Réseau; + Liaison de données. Nous allons présenter tutiisation du firewall pour chaque couche. 2.2.1 La couche Ethernet, La couche liaison de données cor- respond ala partie locale du réseau, Nest possible (et méme conseilé) de séparer le réseau de rentreorise en plusieurs segments. Cela permet dlisoler les partes distinctes et dap pliquer des regles de fitrage. wor inux-pratique.com Passez a nftables, le « nauveau » firewall de Linux 9 Sur un segment, tous les équipements peuvent communiquer entre eux. Chaque équipement dispose dune adresse MAC, censée étre Unique. Cette adresse est constituée de 6 octets, généralement écrits en hexadécimal, séparés par des double-points. Les trois premiers, octets identifent le fabricant. Cela fournit un indice pour repérer une carte. Le premier octet peut indiquer une adresse locale, géné. re par fadministrateur. Une adresse spécifique, dite adresse de diffusion (broadcast) permet dlenvoyer une trame & tous les équipe- ments d'un segment. Ces adresses peuvent aussi étre modifiges. Il n'est donc pas possible détre sir quune adresse MAC identifie un équipement. I rrest pas ‘non plus possible dempécher des trames émises par un équipe- ment datteindre un équipement spécifique. Les commutateurs et autres bridges peuvent néanmoins bloquer quelques trames, Ceci peut protéger contre d'éventuelles erreurs de manipulations, comme un serveur DHCP ajouté, par mégarde, dans un réseau, 2.2.2 La couche réseau La couche réseau fournit un service identifiant interface réseau sglobalement. Dans le cas ots un équipement ne dispose que dune interface, alors par abus de langage, cette adresse désigne aussi Iréquipement. Une interface particuliére, dite de bouclage (loopback) permet dlutiliser les services réseaux méme sans interface physique. La seule destination est alors la machine locale. C'est utilisé, pour des raisons de sécurité, pour limiter exposition dun serveur. Son adresse est 127.0.0.1 existe deux versions dP. La villlissante version 4, et la version 6 cen train drarriver depuis le siécle dernier. En premiére approxima- ton, le seul changement se situe dans la longueur des adresses. Ceci ‘est prévu pour pallier au manque dadresses. La mise en place de la version 6 arrive avec son lot de problémes. Pour un firewall, le prin- cipal consiste & remarquer que les adresses privées ont disparu et donc que tous les hotes deviennent atteignables depuis internet et doivent étre protégés. Un routeur dispose de plusieurs interfaces (physiques ou virtuelles). Chacune de ces interfaces dispose dlune adresse IP et d'une adresse MAC. Certains routeurs utlisent la méme adresse MAC sur plusieurs Interfaces, ce qui peut générer quelques bugs. 2.23 La couche transport I existe principalement deux protocoles de transport. Ce sont UDP (User Datagram Protocol) et TCP (Transmission Control Protocol, TCP est un protocole qui essaie de garantir la sécurité de la trans- mission et il adapte le débit demandé en fonction des ressources du réseau, UDP ne fournit pas de service assurant la transmission anna unuxrraiveniza @ BE) ESEAU & ADMINISTRATION 99 Pare-feu Cy correcte et les paquets peuvent arriver dans un ordre quelconque. La plupart des protacoles applica- tifs vont utiliser TCP, mais certains services essentiels (DHCP, DNS, NTP, téléphonie, streaming, etc.) utlisent UDP. ‘TCP définit trois phases = éta- blissement de la connexion, connexion et fin de la connexion. La phase détablissement utilise trois paquets (étiquetés : syn syn-ack; ack). La phase finale utilise des paquets étiquetés fin. Le firewall peut donc déterminer Finitialsation d'une communica- tion et sa fin, En UDP, le premier paquet indiquera le début dtune ‘communication et elle sera consi- dérée comme terminée quand aucun paquet ne passera avant expiration dtun délai En général, un serveur va ouvrie tun port (TCP, UDP ou les deux) en écoute et attendre. Le client va ouvir un port aléatoire et se ‘connecter vers le port du serveur. Cette communication sera ident- fige par les deux adresses IP et les deux numéros de ports. Pour le firewall, une communica tion sera établie aprés le passage du premier paquet. La fin de la communication sera détectée soit par le passage des paquets de fin, soit par Yexpiration dun détal 2.2.4 La couche application La couche application définit en général le protocole de transport et le numéro de port utilisé parle serveur. Autoriser un protocole ‘applicatif revient donc & autori- ser le port UDP ou TCP vers le serveur. Il est donc possible de contourner un firewall bloquant les sorties vers les serveurs SSH, mais autorisant les connexions vers un serveur web en activant le serveur web sur un port autorisé. lly @ aussi de nombreuses implémentations dun protocole dans un autre pour contourner les régles du firewall. La détection de ce genre de contournement reste difficile, Certains protocoles, comme FTP ou SIP, violent le principe des couches en ajoutant dans la couche application des informations concernant autres couches. Ainsi, dans le comportement dforigine du protocole FTP, le port FTP (21) est utilisé pour échanger les commands et les données sont transmises en ouvrant une connexion secondaire pour le transfert de données sur le port ftp-data (20). Le firewall doit done exa- miner le contenu applicatif pour autoriser la connexion secondaire, 2.2.5 Les protocoles exotiques Certains protocoles exotiques ne respectent pas vraiment ces couches, ‘mais sont cependant indispensables, Nous allons présenter ARP et ICMP, Le protocole ARP permet cétablr la correspondance entre une adresse |P et une adresse Ethernet. Ce protocole ne traverse pas les routeurs, i reste local au segment. Une communication & destination dune adresse IP (locale) doit envoyer une trame Ethernet vers fadresse Ethernet de

You might also like