Vous êtes sur la page 1sur 88
AVRIL 2009 CREEZ ET PERSONNALISEZ VOTRE SYSTEME ST ee AS SUR CD/DVD OU CLEF USB CODE / SHELL KERNEL / 2.6.29 | SYSADMIN [>| Testez votre code shell grace [>| Leyte ray [>| Cela Re Ce EUR Ces ia EU TE Coe 3 CaM Me ela (p.84) CoN (SCCUMNUIEE Lg du noyau Linux SSN Ii¢ L19275-115-F.660€ an) een) ‘AMON A == Sommaire [EIQ compte-rendu du FOSDEM 2009 , ) ny ee Beaters [EEEZS) contribuer & Debian, une double récompense Pe crenoeteeetna Saar rea cea terre: Bees ete eee et =. Cee DEE) Analyse de données : participation au Challenge 2008 Pelee SETH Espionnez vos ap, eke Hf) Garder historique des changements de /ete grace aux outils See soe ee rer t de sulvi de version (svn, svk) Perens emo eat Peers Teeccrn rite tt) Coens a ea San} « CASification » de SquirrelMail : authentifica J) WEBmail IMAP Co Le test logiciel J Perles de Mongueurs Seat BEEZ ces tests en shell avec shUnit Seer Ste une autre ie de ia base ce données EXGORSAM Bons d’abonnement et de commande Poona eer Travracaso thie Dinet ee ce ‘ ‘Sri earn TH: 096858808 tee cre mmm ise nes INFN oA PINTEDin Gem ia welga Dain ce Dill Ape SSN 54 oe eee Re deere Coenen ter caret Bade Ps ees eB Bre jen Pace 6€ sional = Laurent Gautrot Pour cette édition 2009 du FOSDEM, 5 000 visiteurs étaient attendus. Ce compte-rendu ne rapporte qu'une infime partie de tout ce qui Pee eerie ee olen ence On de 8 conférences étaient données en paralléle, sur des themes Fel oO ILC AI ae a ROE ACHE graphiques, en passant par la sécurité ou les discussions spécifiques a des distributions ou aux bases de données. Premier jour Durant la keynote d’ouverture, tune annonce rappelle que Google a sponsorisé les bidres gratuites du beer event, Il y a das fans qui expriment leur enthousiasme, La classique dense d’ouverture (synchronisée) est aussi l'occasion d'inviter les visiteurs, mais aucun visiteur n’a osé monter briler les planches avec les organisateurs. Los différents parrains sont passés en revue, dont CISCO qui a assuré infrastructure réseau, mais ily avait clairement des soucis de connexion la premiére journée qui ont été résolus ‘assez tard. ly aeu une discussion sur le code des RPC qui était initialoment la propriété de Sun, avec une alerte du projet Debian qui ne voyait pas d'un bon ceil du code non libre, et Vintervention de Fedora. Au final, tout est bien qui finit bien. Un pou d’humour, pour commencer, avec ce panneau. affiché dans les toilettes des hommes (voir Fig. 1), Cotte keynote aborde le parcours do Mozilla, on s’arrétant & quelques périodos troubles, commo en 2003, it a situation des navigateurs était préoccupante, quand Ie monopole de Microsoft Intornet Explorer sur le web engendrait des sites « faits pour » Microsoft Internet Explorer, ct surtout qui ne fonctionnaient pas avec d'autres navigateurs web. C’était aussi le moment oli 'émergence d'une technologie comme Macromedia Flash a jeté un peu d’huile sur le feu en bloquant I'interopérabilitd, et oii on avait des contenus « protégés » qu'il n’était pas possible de consulter ou indexer sans la technologie propriétaire, Depuis quelques années, la situation de monopole est bien alténuée, et & nouveau les ullisateurs peuvent partager dos connaissances. Pouraller plus loin, Mark Surman aimerait que les utilisateurs aient plus de poids dans le développement, qu’ils puissent orienter et améliorer Ie logiciel Ga parlait beaucoup de valeurs. Cette keynote a aussi parlé de valeurs. On peut retenir cote citation Never und stlmate the value af values! Two Th Hings fy, gs ¢ Leame * Never unde : Mletestiate the sah Values, then Vision then $1 io. ide ancho pase ‘Simon Riggs devait parler de réplication, mais il est arrivé en retard. La présentation a été échangée avec celle de David Fetter sur les fonctions de fenétrage (windowing functions) dans PostgreSQL, En fait, cos fonctionnalités existent déja depuis un bon moment dans certains autres moteurs de SGBD, comme DB2 ou SQL. Server. C'est pas pour dire, mais David, qui vient de Californie, était 18 avant Simon, qui vient pourtant du Royaume-Uni Les fenétres de données sont davantage orientées listes que multi-lots (enregistrement). Un exemple est donné sur le décompte des lignes dans un resuitset. En général, pour les comptages, il faut utiliser des astuces tordues base d’opérations de groupement, La nouvelle mode, en utilisant les fonctions de fenétrage, c'est plutot o- re | ER (ORDER 9 satay DESC ALLS LAST) ER BY sa ‘Toujours avec des exemples bien sentis, David continue sur les partitions, les agrégats et los fondtres. aaussi parié des fonctions Lead () ettag() pour calculer des valeurs. partir des groupes denregistrements pracédents ‘ot suivants, Dans PostgreSQL 8.4, on trouve les Common Table Expressions. Pour le momont, on pout écrire ses propros fonctions de fenétrage en C, et, & partir de 8.5, il devrait tre possible de les écrire aussi dans d’autres langages. La présentation débute sur Iutilité des TTY, et ce qu’ils permettent de faire, du login au pseudo-terminal. Toute lintelligence, et en particulierla gestion des travaux, n'est pas implémentable uniquement dans un processus. I est nécessaire dintégrer des choses dans le noyau La rééoriture devenait nécessaire parce que certaines limitations devenaient pesantes. Le code n’était pas MP- safe. II n'y avait pas de support correct du hotplugging, la gestion des buffers n’était pas tres efficace et ily avait des, ‘morceaux pas trés beaux dans |'implémentation, En falt, pour la gestion du multiprocesseur, le verrou géant (Giant lock) était utilisé, Désormais, il y a des mutex par ‘TTY, et le Giant est utilisé uniquement en cas de besoin, =e ‘Méme sile sous-systémo TTY n'ost pas vraiment problématique pour les performances, ily a finalement des améliorations dont bénéficient los autres sous-systemes. Quelques limitations persistent (il reste du pain sur le planche) : ‘= Tous les pilotes n'ont pas été portés (surtout pour les matériels ISA). & PPP/SLIP n‘ont pas encore été portés. 1 syscons utilise toujours le Giant look. Unautre chantier concerne le support d’Unicode. Unicode en soi r’est pas parfait. A ce moment-la, Fad fait un aparté sur la question qui a été posée lors ce la keynote de Mark. Surman surle support de caractares qui n’existent pas dans Unicode. Un des encodages les plus couramment utilises d'Unicode est UTF-8, mais ca ne reste qu'un encodage pour loquel il y a une compatibilité avec ASCII, les caractéres non-ASCII apparaissant dans une plage au-dela de celle utilisée pour ASCH. Ed souléve un probléme de sécurité potentiel avec les conversions d’Unicode, par exemple dans un script shell, ‘avec un codage du caractare « ° » sur plus d'un octet. Comme pour toute présentation *BSD qui se respecte, ily a des comparatifs classiquos ontro Linux et FreeBSD. Ici, forcément, c'est sur la gestion de ‘Unicode surles consoles. Cette nouvelle couche devrait étre implémentée dans FreeBSD 8, Replication replication replication — Simon Riggs ‘Simon débute sa présentation sur un evertissement. Certain détails tres techniques pourraient rebuter les auditeurs. En fait, /auditoire est tout oute. La réplication qui faicait partic de la fouille de roste de PostgreSQL 8.4 n'a pas été intégrée finalement. Il y avait d'autres choses en route, comme les PITR (Point In Time Recovery), et la Log-based Replication on a fait les frais. La notion de hot-standby est utilisée pour désigner une architecture dans laquelle un serveur est capable de reprendre, sans interruption, le traitement des requétes, dun autre serveur auquel il est associé. Les archives sont stockées sur un serveur part, par exemple un simple serveur de fichiers. Dans les différents modes de réplication, il y ale stream- ‘mode, C'est une réplication synchronisée, les écritures sont doublées (ou plus), ot tout ce qui doit étre écrit lest ‘Sur tous les espaces de stockage avant de retourner du ‘commit a l'utilisateur. Compte-rendu du FOSDEM 2009 1 sera possible de cholsir la robustesse trensaction par transaction, Cette fonctionnalité n'est disponible dans aucune autre base de données, y compris les bases de données commerciales. ILy a dos problémes sur les identifiants de transaction, surtout quand il ya eu beaucoup de transactions, Que faire quand on ne peut plus en créer ? Une solution partielle est de ne pas créer d’identifiant pour les transactions en lecture uniquement, Le probléme a été détecté assez tot, fet par consequent la solution a été implémentée, Un autre probleme conceme les conflitsen cas de suppression des données par un HOT-STANDBY ou un VACUUM. En fait, bn traite ces cas de la méme maniére que pour un acces classique. On ne supprime pas les données qu'un utilisateur peut voir. Aucune solution de réplication ou de haute-disponibilits n'est parfaite et il y a toujours des compromis & faire. ‘Simon adresse ses remercioments @ Florian et & Google quia sponsorisé ce travail. Pour la résolution des confits, le made opératoire est wait-then-cancel Pour ceux qui ont déja vu le message « snapshot too old » dans une célbbre base de données propriétaire, il indique ‘une réponse tardive, Un message similaire sera implémenté ‘pour avertir en cas d’accés & une donnée en conflit dans Pg. Ilyaunautre petit souci avec les identifiants de transaction absents. Par exemplo, si un identifiant 32 arrive, ¢a doit vouloir dire que le 31 existe méme si on ne I'a pas vu. Le probléme est courant, il faut alors consigner ces Xidsdans une liste Beaucoup de problames sant posts par les sous-transactions. ‘Simon les déteste (les sous-transactions), mais il faut bien faire avec. Los optimisations pour éviter les mises a jour de cachelog sont profitables méme en I'absence de réplication. Le patch pour la réplication concerne 80 fichiers et plus de 10 000 lignes de code. Il a été implémenté a partir de ce qui avait été demandé l'année précédente, Pour Simon, le but ultime est que PostgreSQL soit la meilleure base de données dans l'absolu, pas uniquement Ja meilleure des bases open source. Dernier conseil : « Act with urgency and do Big Things! » Absolument pas 6, mais tant qu‘on parle de SOL, voici une blague : « An SQL query comes into a bar and sees two tables. It then comes to them and says : Can Tjoin you?» Deuxiéme jour La deuxiéme journée commence avec des échanges de salles, Les conférences de sécurité et celles du systéme font 16 inversées. ra FrmelPA sigiifie Free Identity Polley Audit. Cest un ensemble Intégré d'outils existants quia pour butde rendre transparent FreelPA - Simo Sorce Yutilisation de sources d’authentifications diverses de maniére unifige tout en restant simple a administrer, méme si architecture sous-jacente est complexe. Jusqu’a présent, dans ce domaine, on trouve surtout des ‘solutions propriétaires, ce qul fait qu’en grosles clefs d'une ‘organisation ou d'une entreprise sontentre lesmainsd‘an éditeur, Le constat est donc qu'il n'est pas possible d'avoir un environnement libre sila partie gestion de Videntité n'est pas libre elle-méme. “Avec des bases diverses pour Vauthentification, il y a des risques de doublon et de confusion, Les besoins portent sur : = SSO/single password. 1 single datastore pour l'audit (s’assurer que la politique do sécurité est respoctée) ; 1 single point of management (vue unifiée). Les problémes d'implémentation les plus contraignants ‘concernent la synchronisation des informations, La solution FreeIPA intagre des composants classiques dans ce type d'architecture, a commencer par un annuaire. Ce dernier permet de stocker les informations surl'identité et les authentifications (penser passwd et shadow pour une analogie avec une implémentation locale), de maniére sécurisée a aide de contréle d‘accés. Il doit pouvoir structurer des groupes et des relations, diffusion les informations sur des clients, et, sinécessaira, répliquer les données sur des servours multiples, Avec LDAP on dispose déja d'un standard, méme sicertaines implémentetions sont « plus ou moins » siandards, et, globalement, cos annuaires arrivent & se parler. LDAP est extensible, dans le sens qu'll est possible d’étendre les schémas, etd'utiliser des schémas standards pour joindre des informations complémentaires sur les comptes d’utlisateurs, est tout autant extensible dans les opérations & réaliser, par exemple pour étendre les opérations de création. FreeIPA est architecturé autour d'un royaume Kerberos et d'un annuaire, Kerberos fournit : = un S80 «= les informations d’authentification pendant l'utilisation du systéme pour les utilisateurs ou les administrateurs ; ‘8 un standard éprouvé ot solution sécurisée qui marche ; 1 la possibilité d’utiliser des nouvelles technologies dauthentification, comme des smarcardsou de nouveaux algorithmes de cryptage s'lls sont disponibles exemple classique est celui de SSH avec propagation des tickets pour une seule authentification, LDAP est une alternative possible pour I'authentification. Les autres composants indispensables sont = le DNS pour le nommago ot des associations entre certaines entités de Kerberos ; = NTP, au moins pour avoir une référence commune de temps pour tous les systémes et c'est un pré-requis pour Kerberos. En plus de ces composants,iLseraitintéressent d’ajouter un systeme de définition des régies (policy), ot eventuclioment uno autorité de certification. Pour disposer dune interface web dadministration, il faudrait aussi ajonter un serveur web. Enfin, il faudrait ajouter un systeme d’audit pour Sfassurer quo les régles sont rospectées. Dans la version 1 do FroolPA, méme s'iln'y apas dautorité de certification, nid’audit de regles, les composants utilisés sont les suivants, wm Fedora Directory Server = MIT Kerberos; = Apache mod nss mod_auth krb mod_proxy 1 Python Turhogoars = pam_Mdap pam_krb5 = ISC BIND, ISC NIPA Les données d'identification et d’authentification sont stockées dans deux espaces séparés, ce qui s‘avére plus facile pour définir des ACI (Access Control Information). 11 est possible d’utilisor un en=compat pour los vieilles implémentations (en particulier Solaris ou des vieux Linux) qui ne respectent pas ou na connaissent pas la RFC 2307, Tn'y a pas de souel de synchronisation de données parce que l'annuairo contiont tous les mots de passe, et le KDC (Key Distribution Center) va utiliser les informations de Yannuaire & Vaide d’un plugin LDAP. ipa_kpassud va metire Ajourle mot de passe dans la base LDAP également, etil n'y aura pas non plus de réplication.. En version 1, pour l'interface en ligne de commands, on utilise XMLRPC, et pour l'interface web, le cheminement est: ‘yace (wo nso eth kr-me po > ng mare > dears Srensuitune séria de quelques captures décran deV'interface ‘web ainsi qu’uno énumération des 20 commandes. En plus de interface web et de Ia CLI, on peut aussi utiliser les ‘commandas du client LDAP et mame éditer le LDIF a la ‘main et tout casser si on veut. Mais le but est de faire simple. A 'installation, il faut juste installer les paquets, puis lancer ipa-server-install, répondre aux questions sur le domaine DNS et le royaume Kerberos. Des valeurs par défaut sont suggérées. Il faut ensuite définir les mots de passe du manager et de Yadministrateur LDAP, et c'est tout. C'est vraiment simple 3 mettre en ceuvre. Dans le schéma de base, ily a simplement besoin de pam_ dap pour les informations des utilisateurs et des groupes ct pam_Krb5 pour I'authentification. Pour l'intorfaco wob administration, le navigateur web sufi. est un peu plus complexe quand on envisage d’utiliser plusieurs serveurs. Le serveur d/annuaire doit supporter la réplication multi-maitre. Toutes les informations sont répliquées dans le KDC (pas besoin de kpropd). La réplication fest faite au niveau attribut. La version 1 a été testée avec 4 sorveurs répliques sans probleme. Enversion2,1!infrastructure est considérablement remaniée Ty aen plus 1 un agent client qui prend en charge la mise en cache et les opérations hors-ligne ; = Vinfrastructure de regies (policy infrastracture), a savolr le traitement et l'interface de gestion ; ‘= les contréles sur les machines (host-based controls). En outro, Vinterface web a été améliorée, at le DNS a été intégré, avec les signatures de transactions TSIG, et le plugin LDAP-BIND. Laplus grosse différence est l'utilisation d’un agent au liew des modules PAM classiques en version 2 Pour audit, ly a de nombreuses informations qui peuvent @tre collectées dans audit log du noyau ow dans syslog. Upstart — Scott James Remnant yer) Difficile de naviguer entre les salles. I] arrive toujours le moment ou Von rate le début d'une présentation. Upstart estun processus de démarrage qui vise remplacer Jevénérable init. La keynote présente des astuces d'Upstart pour démarrer plus vite. Pour commencer, il fautbien étre consciont que steep() ne fait pas booter plusvite. Il faut aussi éviterles race conditions. Upstart intervient dans toute la couche entre la session duu bureau et le noyau, La premiere version de 2006 permet de faire des choses trés simples et exécuter des scripts, mais aussi définir un certain nombre d'attributs pour des évenements. Laversion suivante (0.2.7) permetde définir plus simplement les évenement, et ajoute start on et stop on Fn2.3,lesscriptspre/post stop/start IPC ont encore changé. Upstart 0.5 n'est pas encore déployé dans les distributions, mais utilise D-Bus pour l'IPC. Il y a aussi un nouveau comportement pour les instances, Suivent ensuite une série d’exemples qui défilent a toute vitesse sur Ie suivi des forks, les opérateurs pour les évenements, une vraie gestion des jobs. Start on staring Stop on stoi or starting Compte-rendu du FOSDEM 2009 Pour les services, ily a une gestion du multi-user. start an runeve] £2368] stop on runecel (12245) start on rueie? [248] ele runlevel [2385] Les dépendances sont gérées : start on started dbus shup wt ska db De méme que les dépendances multiples Sart an startee dus and started utes stop on stoping dus \ stopping utes vile dus and ater ‘On peut aussi combiner des conditions avec des opérateurs Togiques Te er and (osfore fal ar bafare devicekit) and fran sunrise to sunset hal et devicekit dépondent de udev, mais ne tourneront pas de nuit. Ily a aussi des raccourcis d’écriture. En conclusion, les runievels, c’est du passé. Mais, Upstart va plus loin, C’est aussi un remplacant pour cron. Les exemples suivants portent sur la gestion des évanements planifiés, soit a une fréquence particuliére tay tb very 2 hours soit par rapport a un autre évenement Tb wns {Ss after startup every 18 ville netaart-device eth up Dans le futur immédiat, le but est surtout d’améliorer le code, mais sans ajouter de nouvelles fonctionnalités. La version 0,10, prévue pour juin, apporte (encore) une nouvelle syntaxe pour le traitement des jobs. La prochaine version importante portera le numéro 0.50 si la version 1.0 n’est pas satisfaisante en termes de fonctionnalités. Un auditeur demande si les changements de syntaxe seront facilement intégrables dans les distributions. Reponse «oui, peut-étre .. » Une question est posée sur lo remplacement de cron, et notamment le partitionnement pourles utlisatewrs différents. Test réalisé avec PolicyKit. Securing CentOS with SELinux — Ralph Angenendt Ralph commence par rappeler que toutes les nouvelles fonctionnalités ne sont pas implémentées dans CentOS, par opposition Fedora. va) Dans le vieux et vénérable modéle de sécurité de Limux. les restrictions sont limitées. En revanche, le modéle est simple, compréhensible et facile & mettre en ceuvre. Les groupes sont une maniéro de raffiner les acc’s, mais avec les noyaux 2.6, on atteint encore une limite pour plus de 65535 groupes, et c’est encore pire pour NFS avec une limite de 16 groupes. est toutefois possible d'ajouter des ACL, avec la possibilité dutliser les attributs étendus pour stocker des métadonnées supplémentaires. ‘Avec SELinux, tousles objets ont un contexte quileurestassocié, Aveo RBAC (Role-Rased Access Control), on ajoute la possibilité de définir dos vrais réles pour restreindre l'accés| ‘des ressources a dos utilisateurs qui:n'auraient pase réle approprié. Dans la pratique, ca ne fonctionne pas vraiment, bien ou, plutét, c'est assez complexe & metire en ceuvre, ce qui revient tin peu au méme. Avec MLS (Multi-Level Security), SELinux peut aussi permetire de classifier les documents (comme dans les films d’espions, avec Top Secret) SELinux est transparent, ce qui fait que V'application ne sait pas pour quolle raison I'aceas a ét6 refusé, Certaines applications savent pourquoi ellos ont 616 refusées, mais la plupart des applications normales ne sont pas au courant, Les trois modes de SELinux (ou plutét les deux modes + un) sont 1 Désactivé : les applications qui dépendent de SELinux ne fonctionnent plus, par exemple chcon cu satenforce, = Permissive:le filtrage n'a pas vraiment lieu, mais toutes les infractions & la politique de sécurité sont-consignées dans le journal du systéme. & Enforcing: La politique do sScurité s‘applique pleinement, et ce qui doit étro rofusé I’est offectivement, Ace moment, Ralph présente un certain nombre d'outils pour gérer SELinux, Suivent alors des exemples classiques autourdes ressources d'un serveur web Apache. exemple porte sur des fichiers quin’ont pas le contexte SELinux appropris. A ce moment Ia, le serveur web ne peut pas servi le contenu, Pour corriger ce probléme, la commande chcon permet de rectifier le tir en appliquant un contexte correct @ partir d'un fichier ou répertoire qui possade Ie bon contexte, par exemple Ghcon A sreference /arhaw /arDwwipacehia) est possible utiliser senanage pour un ajout persistant de contexte a la base de référenca, Sovaege feotart a -t Mtg evra Un autre exemple porte sur l'utilisation des booléens de ‘SELinux pour autoriser le serveur web & servir du contonu des répertoires personnels des utilisateurs : SetstoalAitpi_enble hanadiresd Quelques exemples de booléens sont fournis sans beaucoup explication. On notera tout de méme le booléen allow. ‘execstack. La présentation aborde ensuite un sujet intéressant qui est 'écriture d'un module. En version 4, la recompilation de toute la politique était indispensable. En version 5, il est possible d’utiliser des modules et de ne recompiler et recharger qu'un module, quitte & le développer sur une ‘machine tierce et. & le déposer sur ke serveur pourle charger La commande audit2aLLow faciliteI'écriture des policies. (On peut touner avoc SELinux en mode Permissive, collecter Jes ave :denied dans les journaux etalimenter audit2altow avec les messages avc pour produire un module etle charger, Ralph enchaine sur une petite démonstration avecles outils exploration. Enfin,iljoueavecun autre exemple classique assignation d’un port TCP d'écoute pour le serveur web. Le démarrage plante, et avec un semodule bien senti, 1 charge son module. Le serveur web peut alors démarrer, et dés qu'il décharge le module a l'aide de senodule -r, le serveur web ne peut & nouveau plus démarrer. SYSLINUX — Peter Anvin Un peu d’humour pour commencer avec le rappel de la licence d'utilisation de la présentation sur le premier slide. On se demande d'ailleurs si c’est vraiment de humour, mais, en tout cas, ga amuse beaucoup l'auditoire, Les différentes émanations de bootloader dérivées de SYSLINUX sont : = SYSLINUX ~ FAT = PXELINUX = ISOLINUX - CDROM = EXTLINUK - oxt2/oxt3 Actuellement, SYSLINUX fonctionne uniquement pour x86/ BIOS. Le corur est en assembleur: Ily a du travail en cours pour remplacer ca, en supprimant tout le code spécifique en assembleur, méme si certaines portions doivent rester en Vétat, Parmi les fonctionnalités intéressantes, ily ale systéme de ‘menus sophistiqués. Potor cite d’autros projets liés |= MEMDISK est un émulateur de disque en mémoire. 11 permet de démarrer les vieux systemes comme DOS qui utilisent l'interruption 13h. gPXELinux vient d’une collaboration avec le projet Etherboot. Il imtégre le support réseau, ISCSI, Ethernet, HTTP FTP, NFS. = ISOHYBRID pormot do démarrer ISOLINUX depuis des clefs USB. Larchitecture x86 est vieille. Ca nous raméne en 1981. C'est une plateforme ouverte, ot ily a beaucoup de clones. La plupart des interfaces BIOS datont.de cette époque. Le ‘bootdepuis un disque ou une disquette tient sur 510 octets. Pour les CD, El-Torito date de 1993. Il était peu supporté Jusqu’a la fin des années 90, PXE date de 1997 et a été révisé en 1999. Les premieres versions étaient bien pourries. Enfin, ily beaucoup de bugs pourle support de ramorgage a partir des clefs USB, Peter continue sur un historique des implémentations. = 1994 ~La premiére implémentation de SYSLINUX est la conséquence d'une installation problématique de Linus. 1 était fait pour démarrer sur disquotie, ot, compte tenu des contraintos, dovait étre tout petit, ot a 6t6 écrit en assembleur, Compte-rendu du FOSDEM 2009 = 1999 PXELINUX~La spécification PXE autorise seulement 32 k pour le programme de boot réseau. SYSLINUX est, ‘assez pelt, et les utilisateurs le comprennent. = 2001 - ISOLINUX ELTorito (CDROM) = 2004 -EXTLINUX est un chargeur générique pour ext2/ ext3, Ila une API modulaira, est extensible, et posséde un systéme de menus. 1 2006 - gPXELINUX, ISOLINUX aveo le support Hybrid. Los grandes forces des systémes dynamiques est la découverte du matériel au démarrage, pas a installation. Ils fonctionnent bien avec les autres (s'intdgrent bien). En plus, V'interface utilisateur ost plut6t élaborée, avec un support du framebuffer avec de « beaux » menus. En revanche, ils ne supporvent pas bien les configurations ‘exotiques (la dynamicité a un prix) {gPXELINUX est un ensemble logiciels contenant gPXE ot PXELINUX qui permet de démarrer sur plein de choses. Ace moment, Peter fait une démonstration assez bluffante d'un boot sur HTTP a partir d'un serveur en Californie. Bien ‘entendu, le boot est graphique, avec des menus, c'est le grande classe, J’aurais bien aimé prendre une photo, mais les bras m’en sont tombés Peter aborde alors I'API des modules SYSLINUX COM32. Elle utilise kLibe. Lavantage est que ca ressemble & du code C userspace. Ily a des limitations, comme Ja lecture séquentielle en lecture seule des fichiers (pas de seek0). ‘Les modules classiques sont : ‘= Interface utilisatours (menus). Il y a deux modules de menus. Le premier est le classique que tout le monde utilise, Mais, ilya un autre module beaucoup plus élaboré ‘qui fait tout du sol au plafond. Ce module a été écrit par ‘Murali Krishnan Ganapathy, alors a I'université de Chicago. La bibliotheque graphique permet. d'utiliser Ie méme code pour du texte du graphique ou des consoles série, | Modules de formats de fichiers (file format modules). Ce module permet dajoutor le support de nouveaux fichiers binaires. Par exemple, Microsoft SDI (System Deployment Interface). Le support de ce nouveau format, {a été demandé par un utilisatour. Iin'y a que 199 lignes, de code pour le supporter, avec 139 lignes de code utile et la plupart est de la gestion d’erveurs. a Modules de régles (policy modules) qui permettent de décrire des choses comme « booter le kernel truc sur lune machine x86 32 bits, booterle kernel... surl'archi... booter le kernel... sinon ». IIn'y a que 127 lignes de code pour ce module. & Modules de diagnostics, par exemple pour avoir des informations du BIOS. Bien entendu, il est aussi possible de combiner des modules, comme dans la cas d'utilisation suivant : 1 probe Dus PCI; ‘= associor les périphériques & des modules ; 1 construire tn initramfs avec les modules nécessaires, ala volée, Crest malheureusement plus compliqué avec les périphériques USB ou Firewire. La feuille de route est tout aussi intéressante = Interpréteur Lua en module pour pouvoir ajouter des nouvelles fonctionnalités sous forme de script plutot que des modules, C'est surtout utile pour les modules de régles, 1 Support readdir(). = Suppression de tout le code assembleur (surtout pour le support de brtfs). Les composants centraux qui ont besoin de rester en assembleur sont le first stage loader, les entrées/sorties disque ou réseau, le BIOS extender et le Shuffle system (qui fait le tr), Les autres composants, comme interface en ligne de commandes, pourront étre réécrits en C. Peter termine sur un appel @ contributions, parce que le chantier de réécriture du core est beaucoup trop important pour une seule personne, La présentation est en ligne a Vadresse htipiisysinuxzytor ccomifosdem2008.pat Pew EXT4- Theodore Ts’o ‘Theodore démarre sa présentation en disant que ext3 est lo systime de fichiers le plus souvent utilisé, toutes distributions confondues. La communauté est varie, ce (qui se révele étre un avantage en cas de crise économique, Ly a aussi un support commercial, avec des entreprises comme SuSE ou Red Hat. Ilya dans ext3 un certain nombre de limitations, comme colle de 16 To par exemple. En fait, ext4 ost un ensemble de nouvelles fonctionnalités (ES features) qui peuvent étre activées ou désactivées ‘option par option. ext peut méme ne pas avoir has_journal ;) Le forkd’ext4 est survenu en 2.6.19. Etextidev est devenu extd en 2.6.28. Parmi les nouvelles fonctionnalltés, on trouve les extents, {ala place des associations de blocs indirects. Pourles gros fichiers, les indirections (simple, doubles, triples) ont un impact 6norme sur les performances. Les extents permettent de gérer des allocations plus efficaces pour des systdmes de fichiers de plus en plus gros. Les indirections sont pénalisantes sur les gros fichiers, parce que, justement, on doit lire les blocs indirects. On le sont bien quand on supprime des gros fichiers. ya une nouvelle structure ext4_extent. Pour un total de 46 bits (physical block number>), Ia taille maximale d'un extent est de 128 Mo (16 bits) et d'un fichier 16 To (32 bits logical block number), Lallocateur de blocs a été amélioré pour pouvoir allouer plus efficacement des fichiers contigus. ‘Quand on aborde la question des performances, il y a plusieurs questions inévitables tm Est-ce que les benchmarks sont honnétes ? = Est-ce qu'lls sont répétables ? 1 Est-ce quills sont représentatifs d'un cas d'utilisation dela vraie vie? Pour présenter ses résultats, Théodore a utilisé les outils quise trouvent sur hito:ftrs.boxacle.nell. Dans les graphiques résultants, il y en a un qui présente des performances clairement avantageuses pour ext, mais Theodore modere ‘en expliquant que, dans cette série de tests, sa machine 4 aussi planté violemment, donc qu'il n'y a pas que des vantages. ;) Pour pouvoir utiliscr ext, il est recommandé d'aveir au ‘moins un noyau Linux 2.6.28. Il est possible de convertir lunext3 avec tune2Fs on ajoutant tout ou partie des options extents, huge file, dir_nLink, dir_isize. On peut aussi ajouter des options complémentaires. Enfin, pour créer un nouveau systéme de fichiers, on peut tout simplement utiliser mkfs -t ext. My system is slow — Kris Kennaway Cette keynote aborde le probleme des performances dans FreeBSD et va passer en revue un certain nombre dindicateurs et d’outils pour identifier des haisses do performance et présenter quolquos solutions. Généralement, sion se pose la question des performances, c'est que I'on a en téte une charge particuliére m nombre de hits sur un site web ; = nombre de requétes sur une base ; | nombre de transactions sur un systéme bancaire, Pour commencer, ll faut Identifier les interactions avec le systéme (CPU, disques, réseau, autres entrées/sorties). S'il y 2 des problomes, ils peuvent provenir d'une mauveise ‘configuration d'une application, aussi bien que d'une limitation, du matériel, des appels systéme et des interactions avec Je noyau, une mauvaiso gestion duu multithreading et des verrous, ou que, tout simplement, quelqu'un a été fainéant. Enutilisantle vénérable top. on peut observer pratiquament en temps réel des indications. Les colonnes paging from: to swap permettront de voir lo perf kiss of doath. Beaucoup de temps passé dans le kernel signifie un grand nombre interruptions Pour les processus ou threads qui utilisent Je kernel, on aura des grandes valeurs d’interruptions. Pour les valeurs brutes surles accés disques, II faut observer les colonnes biord/biowr /wdrain. sbwait indique une attente de socket, ucond:umtx signale un thread Jock. Etily a plein d’autres chosos documontées dans les sources, Pourles disques, iostat et sysstat sont aussi d’un grand intérét, top -m io n’est pas encore supports par ZFS, Pour limiter la contention, il est conseillé de répartir les accés sur plusieurs axes et utiliser gstripe. Il faudra aussi aligner les bandes sur les limites du systéme de fichiors pour éviter de répartirlos accés sur plusiours bandes. Ces ‘onsidérations logicielles ne dispensent pas de choisir duu bon matériel. Pourlles systémes de fichiers, on peut utiliser Yoption async ‘au montage, mais, évidemment, on s’expose a des problemes encasde crash, Pour configurer un swap-backed memory- device, on peut utiliser une commande comme ndconfig, sa -t swap 4g ; mount -o async. De nombreux outils permettent de surveiller le réseau, netstat -i/-w/-s, ntop, tcpdump, wireshark. Apart les options sur les sockets (setsockopt()), on peut ‘configurer des parametres du noyau (kern.ipe.maxsockbuf, net inet. udp. recvspace). Pournet..inet. tcp. inflight. enable, des problémos pouvent survenir dans certaines configurations. faut aussi surveiller’état du matériel. Pourles périphériques dentrées/sorties, avec la commande vnstat -i, on pout voir parfois un +, qui indique une IRQ partagée. La sortie de daesg donne aussi ces informations. Le probleme est, qu’en cas de Giant locked device, les performances peuvent fortement baisser. La meilloure solution est de supprimer le pilote etjou supprimer le matériel. Sil‘on observe beaucoup trop de context switchinvolontaires, lly a peut-étre un probleme de conception. Lapplication a trop peu de travail ou elle gére mal les threads. ktrace et truss permettent de montrer los appels systéme c'un processus. procstat donne des informations détaillées sur les processus, dont la stack trace. On pout analyser les verrous & l'aide de sysctl debug. lock.prof-state | sort -n -k 3 DTrace est supports. 37 000 probes sont disponibles dans FreeBSD. Pour collecter des compteurs surle matériel, on peut utiliser les PMC hardware performance counters. Il faut avoir option HWPMC_HOOKS et le module noyau hwpme. Ensuite, ‘nn choisit les instructions & comptor a l'aide de pmestat +S instructions. Sched_graph est un script écrit en Python pour visualiser activité a partir de le kernel trace, Dans FreeBSD 8.0, ily aura la surveillance de la sloepqueue, Cette fonctionnalité s’active avec sysctl debug.sleepq. enable=1. Globalement, FreeBSD est auto-tuning. Uordennanceur des taches par défaut est ULE depuis 7.1. lest plus réactif fn utilisation interactive. Pour l’affinité aux CPU, ily a un peu plus d’ overhead que dans 4BSD. Il est généralement préférable d’activer les superpages et debugging, et utiliser un timecounter rapide, comme TSC sila charge ‘et le matériel lo pormettent (CE. java). ‘Kris termine pardes consolls classiques. I|invite a avoirdes ‘mesures répétables, en utilisant une période d' observation et une charge de travail constante. Ilne faut bien sir changer qu'une chose a la fois, répéter les mesures, et utiliser des grands intervalles de mesure pour valider los résultats. En premiére approche, /usr /bin/ministat est aussi précioux. Ito co ton tonl hy Mee une ee tray orate eee oorat tats Contribuer a Debian, une | Afloccasion de la publication de la quatriéme édition du celébre | Cahier de l'Admin Debian, mis a jour pour Debian 5.0 « Lenny », | ses auteurs et GLMF se sont associés pour une campagne ie cece taco ai ciey cer). eo eri ali | | | Comme & chaque fois qu'une nouvelle édition du Cahier de Admin Debian est publiée, ses auteurs ont droit & un certain nombre d’exemplaires du livre pour en assurer sa promotion. Cette fois-ci, Roland Mas et moi-méme avons décidé de les utiliser d'une maniére originale [1]. Nous allons offrir dix livres a dix nouveaux contributeurs Debian. Les régles Pour participerce jeu, ilfaut tout d’abord étze unnouveau contributeur a Debian, c'est-a-cire ne pas avoir contribué de maniere réguliére ‘auprojet avant le promior janvier 2009. Nous considérons que quelqu‘un estuncontnbuteur régulier lorsqu’ll contribue selon un rythme quasi hebdomadaire au moins. Quelques rapports de bogue de temps en temps ne font donc pas de vous un contributeur régulier, vous étes sauvé ! Ladeuxibme condition de participation estd’avoir contribué a Debian au moins 30 minutes par semaine pendant six semaines (pas forcément consécutives) entre aujourd’hui et fin juin Fal Lenny » Le Cahier de I’Admin Debian [2] en est déja a sa quatriéme édition, avec plus de 12000 exemplaires vendus depuis sa premiére publication en 2004. Il a contribué la formation de nombroux utiisateurs Debian quien ont souvent fait leur livre de référence sur Debian/Linux. Loin d’étre réservé & un public d’administrateurs professionnels, la premiére moitié du livre permet a tout un chacun de maitriser son systéme Debian et de comprendre tous les concepts lies & administration de son ordinateur, et notamment Ja gestion de paquets (dépendances, usage de plusieurs dépéts APT, « pinning », etc.| La deuxiéme moitié du livre passe en revue Ja configuration de nombreuxservices (Web, SMT, DNS, pare-fou, proxy, VPN, partages Windows, annuaire LDAP etc.) et présente des solutions pour gérertout un pare de machines Et comme I'éguipe de GLMF a trouvé que c’était une honne initiative, elle a décidé de doublerlarécompense en offrant en supplément 10 abonnements d’un an & un magazine de son choix (entre GLMF, Linux Pratique et Miso) 2009. Afin de pouvoir vérifior le respect de ce critére, chaque participant doit noter toutes ses contributions sur une page dédiée du vil Debian : htp:lwikidebian.orgiRaphaelHertzog! NewContributorame. Il faut.dono, au préalable, se créer un compte sur le wiki Debian, Et c'est tout, il n’y pas d'autres conditions. Debut juillet, pour obtonir la liste des dix ‘gagnants, six seront sélectionnés aléatoirement parmiles participants tandis que quatre autres seront sélectionnés par Roland et moi. Nous tcherons de retenir les contributeurs les plus méritants selon des critéres parfaitement subjectifS bien & nous. =) (installation automatisée, supervision, NSS/ PAM avec serveur LDAP, etc.). A chaque fois, accent est mis surla maniére la plus propre de configurer le service (celle quis’intagrele mieux avec ce que lo concopteur du paquet a prévu) afin que les mises a jour soient aussi aisées que possible. Un an nement offert Le deuxiéme lot nest rien de moins qu'un an d’sbonnement un des magazines de la rédaction, & savoir GNU/Linux Magazine France, Linux-Pratique ou Misc. Si vous lisez ces lignes, vous connaissez daja le premier, mais peut-étre pourriez-vous faire bon sacle du second pour convertir & Linux quelqu’un de votre entourage. Ou alors, vous retenez Mise pour parfaire vos connaissances dans Te domaine de la sécurité, Pourquoi contribuer ? [ot A cause des lots hien sir. mais news avens hon espnir ane leur atirait ne constitue qu’un élémont déclonchour et que les Jeunes recrues continuentau~ela du jeu, parce que contribuer 4 Debian est souvent un plaisir ot rarement une corvée. C'est d’abord le plaisir d'avoir fait quelque chose d’utile, une de ces petites choses que Y'on sait intrinséquement bonne (comme éteindro la lumiére dans une piece vide ou aider une personne agée dans le rue). Comment contribuer ? Cesta question & 100 euros tellement il y a de réponses possibles, Cela dépend de vos compétences, de votre temps Aisponible et surtout de vos envies. En effet, contribuer & Debian doit restor ua plaisir. I1n'y a que dans ces conditions que l'on donne le meilleur de soi-méme, et chez Debian, nous aimons le travail bien fait. ») ‘Quoi quillen soit, la premiére étape consiste se familiariser avec los différentes activités possibles et le fonctionnement interne de Debian, Cela nécessitera un peu de temps et quelques heures de lecture/navigation des sites offciels, Les paragraphes suivants abordent briévement quelques domaines et fournissent des liens pour aller plus loin, Empaquetage et maintenance des paquets. C’estla partio la plus visible du travail effectué dans une distribution Linux. Pour débuter dans cette activité, le plus simple est de rejoindre une équipe [3] responsable de plusieurs paquets dont cortains vous intéressent ou une équipe qui pourrait accueillires (nouveaux) paquets sur lesquels vous travaillez. Trier les bogues [4], les corriger, empaqueter une nouvelle version amont sont autant de moyens d‘aider. ‘Traduction. Le contonu a traduire (descriptions de paquets, installateur, logiciels spécifiques, site web, documentation, etc.) ne manque pas et|'équipe de traduction francaise [5] ne refusera pas votre aide du moment que vous maitrise2 Yorthographe et la grammaire francaise. Développement/programmation. De nombroux logiciels ont été créés spécifiquement pour Debian (dpkg. apt, buildd, debian-installer, lintian, etc.) et les équipes [3] chargées de leur maintonance sont toujours a la recherche de volontaires pour les aider Support technique. De nouveaux utilisateurs ne cessent de rejoindre nes rangs et ils ont parfols besoin d’étre épauls. Vous pouvez partagor votro oxpérience ot vos connaissances en leur apprenant a résoudre leurs problémes. II suffit de répondre & leurs questions sur la liste de diffusion debian- userfrench [6] ou sur le canal IRC #dobian-ir sur irc. debian.org. Uroste beaucoup d'autres activités qui mériteraientd’étre citées (rédaction de documentation, testsd’assurance qualité, Crest la forts da faire partin d'une communauté riche de ses idéaux (le fameux contrat social de Debian) et qui les applique au quotidien. C’est la satisfaction d’apprendre au contact de personnes douges dans ce qu’elles font, et le plaisir d’étre félicité pour co qu’ona fait pour Debian (¢a n‘arrive pas assez souvent, mais c'est toujours apprécié). rapports de bogues, promotion de Debian en participant aux événements du libre, etc.) mais la place est limitée. Pour obtenir d‘autros ides, on pout consulter la catégorie «Contribuer » [7] sur mon blog. Nous essaierons de revenir plus en détail sur certaines de ces activités dans un prochain numéro, En attendant, si vous avez des questions alors que vous essayez de contribuer a Debian, vous pouvez toujours ‘vous tourner vers la liste des développeurs francophones [8] oule canal IRC #debian-level-fr sur irc.debian.org ! Pnokentow noyau 2.6.29 Ilarrive & grands pas, chevauche une allée bordée de tourments Teles RPM OEPAoI) ok MTEC CCS LIL bien que, Potael ae eum at eter nea ela Cie Mie xed ake eurm eR TALIA) changements ? Aucun, si ce n’est l'importance (sic) de nos économies. En effet, il faudra disposer d’une machine de plus d'un millier de CPU pour ressentir les effets positifs de la phytothérapie Pe RIM coil at OOM sip MteY] ig-men elie leo (elt (Vek TES LIAL oe elo Reel eveileteHiilect lege ete ell MOSM RK LITT) Cee eM OMIA eM CIRC SEL ea el SMe Te PMR Make ee ORO eae ell agréablement. 1 Bric Lacombe = Matthieu Barthélemy RCU (Read-Copy Update) est un mécanisme de synchronisation quia éta intégré au noyau Linux durant le développement de la branche 2.5. RCU améliore le passage a’échelle vis vis des autres mécanismes de synchronisation on autorisant les lectenrs A Stexécuter en. méme temps que les écrivains. Les primitives de synchronisation classiques requiérent une attente des lecteurs lorsqu'un écrivains‘exécute et inversement. De plus, ces mécanismes (comme les seqlock) emploient des verrous (contrairement au RCU). Ainsi, la mise 4 jour de leur compteur entraine de nombreuses invalidations de cache entre les différentes CPU dans un syst@me multiprocesseur et provoque alors une diminution sensible des performances globales. CU garantitla cohérence pour les accés en lecture en maintenant en mémoire différentes versions des structures de données protégées cot en ne les libérant que lorsque toutes les sections critiques ée code les employant sont torminées. Les atouts des RCU viennent avec quelques limites également. Tout d’abord, une section critique en lecture RCU doit se situer dans Vespace noyau et ne doit pas bloquer,c’est-i- dire qu’elle doit continuer de s’exécuter sur le processeur sans étre interrompu et sans s'interrompre volontairement (c’est-2-dire s'endormir). Enfin, los données a protéger par le mécanisme RCU doivent obligatoirement étre conservées dans une structure, et I'acc’s ces données doit étre effectué uniquement a partirde l'adresse mémoire de cetre structure. Lanécessité de ces deux conditions d'utilisation deviendra claire par la suite. ‘Une section critique de lecture d'une structure de données protégée par le mécanisme RCU doit débuter par l’appel a reu_read_Lock() (qui désactive simplement la préemption) ot seterminer parl'appel a rcu_read_unlock(). Lorsqu’un écrivain soubaite modifierla structure de données, il en effectue une copie, modifie cette copie est ensuite écrase le pointeur référencant ’ancienne structure avec adresse de cette copie modifiée. Cette opération étant ‘atomique, ilne peut survenir aucun probleme de synchronisation. C'est pour cela que la seconde condition est importante : ’acces en lecture aux structures de données par les sections critiques dolt toujours s‘effectuer & partirde/'adresse de la structure, afin qu'une lecture ayant débutée dans une structure termine toujours dans cetto structure, méme s'ilne s'agit plus de la demniére version a jour Cola permet de garantir la cohérence des lectures. Il en résulte que plusieurs versions de la structure protégée peuvent se trouver en mémoire en méme temps. Le probleme ‘maintenant est de pouvoir ibérer les anciennes versions lorsque les lectures sont terminées. Crest ici que la premiere condition d'utilisation entre en jeu. La condition de non-blocage lors des lectures est, en effet, un élément-clé pour le fonctionnement des RCU, Si cette condition est toujours vérifiée, alors, a chaque fois qu’on observe une CPU effectuor un changement de contexte ou. exécuter le tache idle ou enfin passer en mode utilisateur, on sait que toute section critique de lecture RCU quis‘exécutait précédemment sur cotte CPU s'est terminée. Des états CPU de ce type sont appelés états tranquilles (quiescent state). Lorsque toutes les CPU du systéme sont passées par ‘au moins un état tranquille, depuis le remplacement via le mécanisme RCU d’une structure S1 par une structure $2, on peut libérer la structure $1, car plus aucun lecteur no Vemploie. Cette attente de libération mémoire est appelée Période de grace du RCU, Remarquons que la libération au moment opportun des structures obsolétes se fait au travers d'une fonction callback, enregistrée au début de la période de grace par le code de mise a jour RCU. Enfin, mentionnons qu'il existe une variation des RCU, les Sleepable RCU qui autorise une section critique en lecture RCU a s‘endormin. Co type de RCU est utilisé lorsque on, souhaite améliorer la préemptibilité du noyau dans le cas, a priori, d’applications temps réel, Lasection suivante explique les prablémes que comportent Timplémentation des Classic RCU dansles versions antérieures du noyau et justifiant ainsi ladoption des Tree RCU. Deux problémes liés & limplémentation des Classic RCU La structure la plus importante danse mécanisme des Classic RCU est reu_etrUbtk. Elle contient le champ epumask qui comporte un bit pour chaque CPU du systime. Chacun des bits de CPU est positionné a 1 au début de chaque période de grace, et chaque CPU positionne & 0 son bit apres tre. passé dans un état tranquille. Afin d’éviter la corruption du champ epumask, & causo des écritures simultanées pouvant survenir depuis les différentes CPU, un spinlock (champ Lock de reu_ctrLbLk) ost omployé pour protéyer ce champ. Cependant, ce verrou peut étre sévérement disputé ar les CPU si le systéme en comporte plusieurs centaines (a tendance aux processeurs multi-core devrait rendre ce type de systéme plus commun a l'avenir), entrainant une dégradation nette des performances globale (cache bouncing, ete.). Un autre probléme de l'implémentation Provient du fait que chaque CPU doit effacer son bit, ce ‘qui implique que les CPU ne peuvent pas dormir durant une période de grace, et limite ainsi la capacité de Linux & conserver l’énergie. Notamment, le mécanisme dynticks, préservant le repos des CPU oisifs en désactivant les ticks réguliers de l'horloge, devient alors inopérant. cer La nouvelle implémentation des Classic RCU, baptisée Tree RCU, et intégrée au 2.6.29, résout a la fois le probléme de passage a I’échelle et celui de la surconsommation énergétique. Tree RCU : une implémentation plu: les Classic RCU aid aine Une fagon efficace de diminuer la dispute sur un verrou X est de créer une arborescence de verrous dans laquelle la, racine est le verrou X, ctes noouds intermédiaires (reu_node) sont des verrous qui doivent étre acquis (le long d'une rancho) pouratteindre la racine depuis les neeuds feuilles, Chacune de ces feuilles contient également un verrou qui ‘met en compétition une fraction des CPU présents dans le systéme. Par exemple, pour un systéme composé de six CPU, on pout imaginer un arbre de verrou a un seul niveau et trois branches, partant de a racine jusqu’a trois feuilles, Jesquelles mettent chacune en concurrence deux CPU sur un verrou. Afin d’acquérir le verrou racine, les CPU doivent: alors d'abord acquérir le verrou de la feuille & laquelle ils sont assoviés. Ainsi, dans notre exemple, le verrou racine ne peut étre disputé par plus de trois CPU a la fois (un amoindrissement de la dispute de 50%) et soulement deux our les verrous des feulles (correspondant une diminution de la dispute de 66,6%). Les Tree RCU protagent de la sorte 'accés au champ cpumask pour l'enregistremant de Yétat tranquillo doo CPU durant une périude de yrdve, ot améliore grandement les performances pour un systéme disposant de plus d’un millier de CPU, Limplémentation des Tree RCU maintient également des données propres & chaque CPU (les per-CPU data), telles que les listes do callbacks RCU, qui sont organisées dans dos structures rcu_data accessibles depuis les reu_node du dernier niveau de l’arbro (c'est-a-dire les feuilles) Nous n’avons examiné pour Instant que la solution apportée au probléme du passaye & I'échelle. En ca qui conceme Ja réduction de la consommation énergétique, il s'agit de ne pas réveiller les CPU endormis lors d'une période de réce, car ils ne se trouvent pas, de toute évidence, au ccour dune section critique de lecture RCU, Cele est accompli en requérant que chaque CPU modifio un compteur situs dans une structure reu_dynticks propre & chaque CPU (accessible depuisles struct rcu_data). En bref, un compteur est positionné & une valeur paire lorsque le CPU associé a 6t6 mis en sommeil par le mécanisme dyntick. Sinon, il est ositionné & une valeur impaire. Pour terminer une période de gréco, RCU attend alors seulement l'enregistrement a’états tranquilles de la part des CPU ayant un compteur rcu_dynticks impair, [EL] Sécurité Introduction : Objets, sujets et ‘olitiques de sécurité ‘Au sein d'un systéme informatique, on distingue deux catégories d’entités : les objets et les sujets, La réorganisation des credentials Un objet est une entité passive sur laquelle des sujets ceffectuent des actions, Les sujets peuvent également jouer Ie rdle d’un objet. On note comme objets, notamment » les fichiers/inodes, les sockets, les files de messages, les segments de mémoire partagé, les sémaphores, les clés ; ‘mais également les processus qui sont aussi les principaux sujets d’un systéme. Une partie des informations sur un ‘objet consiste en ces références, en la description de son ‘identité (credentials). Un sous-ensemble de ces credentials fournit un contexte pour cet objet. Ce contexte intervient dans la décision d’accepter ou de rejeter une action qui cible Yobjet. Un sujet est un objet opérant sur un autre objet. Les processus sont les sujets les plus représentatifs d'un systéme informatique. Un sujet dispose d'une vision additionnelle de ses credentials que I’on ne retrouve pas dans un objet inactif. Les credentials sont alors vus comme des capacités, des aptitudes, fournies au sujet pour opérer sur des objets. Une partie de ces credentials fournit un contexte pour les sujets sur lnquel le systéme de sécurité du noyau se fonde pour valider ou non les actions du sujet. Parmi ces actions, ‘on remarque notamment :I'écriture, la lecture, la création et la suppression de fichiers, 'acte de se dupliquer (fork ()), Venvoi de signaux et le tracage de processus. Finolement, une politique de sécurité dans le systéme est ‘mise on place via la création de regles de sécurité, lesquelles dictont les lois que les sujets sont contraints de respecter dans leurs actions sur les objets. Une telle politique peut tre discréte (DAC - Discretionary Access Contro). Dans ce cas, les régles ne sont pas érigées pour I'ensemble du systéme, mais @ la discrétion de chaque objet. Ainsi, les ‘ACL (Access Control List) autorisent la oréation d’une politique de type DAC, Les systémes Unix traditionnels proposent une forme limitée d’ACL au travers du masque fe permissions associé A chaque objet et définissant los actions permises per le propriétaire do l'objet, le groupe, etle reste du monde. Une forme d’ACL plus riche et flexible est incamée par les POSIX ACL. A chaque objet est alors associé une liste des sujets qui peuvent agir dessus et les actions qui leur sont autorisées. La politique de sécurité peut sinon étre globale (MAC ~ ‘Mandatory Access Contro).11s'agit dans ce cas non pas de ‘spécifier des rogles pour chaque objet individuellement, mais Kernel Corner : noyau 2.6 plutét de spécifier des réglas générales qui s‘appliquent & Yensemble des actions qui s’effectuent au sein du systéme. Pour parvenir a cela, SELinux ou Smack mettent en oeuvre lun étiquotage des sujats et dee ohjets du systéme. La politique de sécurité globale est alors définie au travers de régles faisant intorvenir ces étiquettes. Lorsqu’une action est sur le point d’étre offactuée, le module de sécurité (responsable de l'application des ragles) récupére les Gtiquettes de objet et du sujet en question et parcourt ‘ensuite 'ensemble des régles a la recherche de celles qui s‘appliquent ala situation, Par exemple, les fichiers obtenus & partir du disque ou du réseau peuvent contenir un certain nombre d’annotations (UID, GID, ACL, étiquette LSM, SUID, SGID, ete.) qui forment le contexte de sécurité de l'objet. Pour valider ‘une opération d'une tache sur un fichier, ce contexte est comparé au contexte du sujet. Apres cette introduction replagant la notion de credentials tdans le contexte d’un systime informatique, nous abordons dans ce qui suit la restructuration de Vorganisation des credentials que subitle noyau Linux pour sa version 2.6.29. Dans la section précédento, les credentials ont été décrits comme la carte d'identité d’un objet ou encore comme les aptitudes, les capacités dont disposent les sujets. Voyons & present ces différents types do credentials. Une nouvelle structure pour regrouper les credentials = Les credentials Unix trac LUID (User ID) et le GID (Group ID) sont associés a 1a plupart des objets du systéme et définissent le contexte basique d'un objet. D’autres credentials sont uniquement employés par les taches du systéme. On y trouve notamment I'EUID et 'EGID (Effective UID et GID) qui sont généralement utilisés en lieu et place du UID et du GID lorsque objet agit en tant que sujet. Une liste de groupes additionnels peut également faire partie du contexte subjectifd’une tache (ce quilui permetd'effectuer des actions sur des objets de groupes différents). = Les capabilities = Les capabilities sont des aptitudes que I'on peut associer ‘ux taches et quileur permettent d’outrepasserles droits qui lours sont habituellement donnés (par exemple CAP__ SYS_RAWLO permet & une tache d’effectuer des opérations sur les ports d’E/S). Chaque tache du systéme dispose do quatre ensembles de capabilities : les effective qui contiennent les capabilities que peut employerla tache ; les permitted sont celles que la tache peut s'octroyer dire placer dans l'ensemble effective) ; les inheritable sont celles qui sont héritées par la tache lors. d'un execve() & l'exception des capabilities présentes dans le dernier ensemble, le bounding set. = Les securebits : Les securebits sont un champ de bits qui est associé ‘@ chaque tache et qui gouverno l'intoraction entre les cepobilities et setuid(), Par exemple, activation du flag 'SECURE_NOROOT permet do fairo on sorte qu'une tiche uid 0 n’ait aucun privilage et I'activation de SECURE_ NOROOT_LOCKED empéche les futures modifications du flag SECURE_NOROOT. fm Les « keys Ces credentials sont associés uniquement aux taches du systéme, Il s'agit de clés cryptographiques, de tokens dauthentification, etc. 1 Les étiquettes LSM : Les deux principaux LSM, SELinux et Smack fondent leur decision sur I’étiquetage des objets du systéme (of. section précédente), Ainsiles credentials de chaque objet. contiennent aussi une étiquette, AF_KEY: Is‘agitd’une approche basée « socket » pourla gestion des credentials au sein des piles réseau. Ces credentials ne sont as ceux d'un objet en particulier, mais coux du systéme, Pour les tiches du systéme, l'ensemble des credentials étaient jusqu’alors dispersds dans leurs task_struet. Ils se retrouvent a présent (a exception de UID et de GID) au sein d'une structure struct cred laquelle est accessible partir du champ cred des task_struct. Quelques subtilités sont introduites avec l'utilisation de cette strictirs, notamment 18 Une structure struct cred, une fois créée et associée a un processus ne peut plus étre modifiée, al'exception de son compteurda références, des compteurs de références dos structures filles et des keyrings qu'elle contient. = Poureffectuer une modification de la struct cred, il est nécessaire de la copier, puis de modifier cette copie et, enfin, de changer lo pointour cred de la task_struct via le mécanisine de RCU (cf. Tree RCU dans la section « Synchronisation ») pour qu'elle pointe sur cette nouvelle copie. Enfin, une téche ne peut modifier que ses propres credentials (Par exemple capset() prond maintenant uniquement le PID du processus courant). La modification des credentials d’'une tache ne nécessite pas l'emploi de verrou, car une tache ne peut modifier que sa propre struct cred. Los différentes étapes nécessaires ‘Ja modification sont données ci-essous : 1. Onappelle la fonction prepare_creds() qui retourne une copie de la struct cred du processus courant. 2. Onmodifie la structure renvoyée en fonction des critéres de sécurité que’on s’est donné (current_cred() permet de récupérer le jeu avtuel de credentials et ainsi de le comparer & la copie modifiée) 3, Quand le nouveau jeu de credentials est prét, il faut alors Yenregistrer dans le descripteur du processus courant. Cela est effectué via la fonction commit_creds(), A cet instant, le LSM, si présent, prend la main pour valider ‘ou non cet enregistrement. S'l est validé, la fonction Feu_assign_pointer() est employée afin d’écraser le pointour current->cred, 4. Siune erreurou un échec de validation dela modification survient entre Vappel & prepare_creds() et commit_ reds(), la fonction abort_creds() doit étre appelée. Un exemple typique de modification de credentials est le suivant (check modify_suid() matérialise la fonction de vérification de la modification) int mifysuietuid.t suid) struct cred teu | intrity | | | nav = prepare_creds(); iF (new) return E0404 req auld = aud; ret = security fy cuisine Hinben | art sre); return ty ) retum carit_creds(nen; Perspectives Cotte réorganisation ost un travail préliminaire effeotué par David Howells pour Iintégration future de son mécanisme FS-Cache, un cache local pour les systémes de fichiers réseau, Ce cache local doit respector los mémes contraintes de sécurité que le systéme de fichiers distant. Linfrastructure struct cred est justement prévue pour garantir de cela, yea Nouveaux hooks pour LSM Kentaro Takeda a ajouté des hooks LSM (Linux Security Module) au niveau du VFS (Virtual File System) olt les structures vfsmount sont disponibles. Avant de mentionner ces différents hooks, nous rappelons brigvementles structures du VFS mises en jou. Chaque syst2me de fichiers est représenté en mémoire par un ensemble de structures inodes et dentry. Les inodes représentent les eae Gece ions lluen om sy fichiers (et népertoires) sous-jacents, physiques. Les entries, {quant Aeux, sont construits au-dessus des inodes ot forment Yarborescence du systéme de fichiers. C'est par eux que ‘va passer la recherche de fichiers. Ainsi, un dentry dispose d'un pointeur sur un inode (¢_inode), d'un pointeur sur un dentry parent (d_parent) et d'un nom (d_name pointant sur ‘une chaine de caractores). Pour compléter ce schéma, les ‘nodes ont un pointeur (i_sb) vers une structure représentant le systéme de fichiers les regroupant : le superblock, Co superblock représente le plus souvent soit un systéme de fichiers stocké surune partition d’un périphérique bloc du systéme, soit un systéme de fichiers présent sur un systéme distant (cas de NFS par exemple). Vespace de noms de fichiers associé & um processus, Cest-a-dire espace de noms qu’l pergoit est composé (généraloment de plusieurs systémes de fichiers, lesquels Sont montés les uns sur los autres. Cette arganisation est représentée par un arbre de structures vfsnount qui sont Gefinies pour chaque point de montage. En plus des Hens pareffils qui relient ces structures, chacune dispose d’un Inombre pointant sur la dentry définissant le racine du ‘fsnount (ant_root) etd'un membre pointant surla dentry sur laquelle est montée ce vFsmount (nnt_nountpoint). ‘Les hooks qui ont été rajoutés, autorisent observation des ‘opérations intervenant ce niveau par un LSM, Ces hooks sont un pré-requis a 'intégration des modules de sécurité tels que AppArmor ou TOMOYO Linux, lesquels fondent leurs décisions de sécurité en fonction des chemins d’acces ‘aux fichiers. Ces LSM ont donc besoin d’observer et de Contréler les opérations do « modification de répertoires » quand les vfsmount sont impliqués. Les différents hooks définis sont donnés ci-dessous. Leur nom est directement en rapport avec ceux des opérations Gu VES quills « contrélent.». Leur activation se fait a la configuration du noyau via CONFIG SECURITY_PATH. nt ceurity panei strut ath ir, struct dent lsh, int roel ‘nk seavity_gathoraiestruc pa Air, rut dentey *fenny)s ‘nt sesarty pth noel struct path dir, struct dentry tert, int no, | unsigned nt Ge; ‘ist security path-teanetetstruc path "path, T0fF Tenth, instanad int tine sttes) Ant security pate syann(stuct path *étr, struct dentey Adetry, onst ther old ane): nt secur Sty_path_iok(stract entry Aovd entry, siruct path tec, trust denny ‘neu detry}; | nt secarity.pethrmane(stract path Pole dir, sarut detry old Aentry | strutt path Yeu dir, stvct detry “nee dent) Soe seury pth onismtstack pate dir struct derby sentry); | Support pour SMACK des réseaux et systemes distants non étiqueté: Commencons tout d’abord par mentionner que CIPSO (Commercial IP Security Option), créé por IETF, définit un format et des procédures pour supporter une (a priori) yes] quelconque politique de sécurité globale au sein d'un réseau IP. La mise en couvre de cela passe par un étiquetage des ‘paquets IP. et parune interprétation simiaire dos étiquettes, par les différents systémes du réseau. Afin de supporter ‘CIPSO, Linux intogre l'infrastructure NetLabel qui effectue le travail d’étiquetage et de vérification des paquets, via des hooks LSM. Smack est un TSM permettant do définir une politique de sécurité globale au travers de régies (ct. la section sur les Credentials) s‘appliquant sur un étiquetage de tous les objets du systéme. Lorsqu’un systéme sous Ia tutelle de Smack communique avec des machines ou réseaux distant, il est important que les paquets envoyés et recus soiont étiquetés afin que la politique de sécurité puisse étre appliquée. Cependant, certaines machines communiquant avec un systéme sous la tutelle de Smack n’ont peut-étre ‘pas mis en ceuvre de politique de sécurité globale ot done n’étiquettent peut-étre pas les paquets réseau. Pour cos réseaux et machines distantes, un étiquetage automatique peut étre définiau sein du systéme mettanten oeuvre Smack, depuis cette version 2.6.29 dunoyau. Cet étiquetage s'appule principaloment sur I'infrastructure NetLabel. Lagestion de cet étiquetage se faitdepuis espace utilisateur ‘au travers du systéme de fichiers mis en place par Smack, Une nouvelle entrée nommée netlabel prend place dans /smack. Lajout automatique d’étiquettes aux paquets IP se fait via Vécriture dans /snack/netLabel de chaine de caractares ayant 'une des deux formes suivantes = ou 800m Bel A.B. C.Dreprésente une adresse réseau, un entier entre Oet 32, et LABEL correspond Al’étiquette Smack que l’on souhaite employer pour ce réseau ou cette machino. N spécifie le masque réseau pour I'adresse (s'il est omis, comme dans la premiére forme, la valeur 32 est prise par défaut). Les entrées, spécifiées dans /swack/netLabel, sont prises en compte pour I’étiquetage des paquets on partant des plus spécifiques. La régle d’étiquetage la plus générique est définie par une chaine qui débute par exemple par 0.0.0.0/0, alors que les régles les plus spécifiques ontla valeur de 8 32, comme 192.168-1.5/32 par exemple. ‘Une étiquette particulidre « @ » a 6t6 definie et ne peut fatre associée qu’ des adresses. Nimporte quel processus pout envoyer des paguets a destination d'une telleadresse, Etles paquets en provenance de cee adresse peuvent étre fournis an importe quelle socket du systéme, Remarquons toutofois que I'atilisation do cette étiqueite particullére tend la mise en placo d'une politique de sécurité globale Stricte impossible. est done souhaitable de s’en passer. (E13 Gestion Mémoire Exclusive 1/0 memory Afin de limiter les dégats sur l'espace noyau qui peuvent, provenir de l'espace utilisateur, un mécanisme (activé via option de configuration CONFIG_STRICT_DEVMEH) aété mis en place dans le noyau 2.6.26 afin d’empécher le mapping de la mémoire noyau depuis espace utilisateur, c’est-a-dire via utilisation de mmap() surle périphérique virtuel /dev/ ‘nen, Ce mécanisme (une simple liste de régions bannies de /dev/nen) a été étondu dans la version 2.6.29 afin de couvrir les régions mémoire d’E/S. Toutefois, co comportement n'est pas effectué par défaut, Les pilotes souhaitant réserver exclusivement les portions de l'espace d’adressage gu'ils emploient pour le pilotage de leur périphérique doivent employer les primitives : pei_request_region_ exclusive(3), pei_request_regions_exclusive(2) ou encore pci_request_selected_regions_exclusive(3). Pour des raisons de développement/débogage d'un pilate, illest possible de spécifier au démarrage l'option de boot iomea=relaxed, afin de rendre possible le mapping via / dev/nem do régions d'E/S, méme sile pilote associé emploie Jos primitives précédentas, Information supplémentaire dans /proc/pid/smaps a 8 eee So —— ao ae ae ee a aie oe a a a =a =a == [EL] gi Appels systéme f_op->poll() peut maintenant bloquer Parmi les apérations du VFS, f_op->pol() était la seule ano pas étre autorisée & bloquer. Cela pouvelt poser des problimosd’implémentation do cette opération pour certains pilotes. Cola est désormais possible dopuisla version 2.6.29 ‘du noyau oi implémentation des fonctions sys_select () et sys_polt() (leoquelles appellent f_op->potl()) a sts revue. Ce changement est profitable notamment pour Timplémentation des systémes de fichier en espace utilisateur comme FUSE (Filesystem in Userspace) ou 9p, cat; pources systémes, il est tros difficile d'implémenter f _op->poll() de facon non bloquante. [EL] Initialisation du systéme Infrastructure pour l’appel asynchrone de fonctions ‘Afin de rendre le démarrage d'un systéme plus rapide, la tache la plus ardue, mais aussi la plus bénéfique, concemne la parallélisation de la détection du matériel. La découverte des périphériques peut on effet s‘avérer étre une taiche longue et fastidieuse, Lidée de paralléliser co travail n'est pas nouvelle (cf. le projet fastboot d’Arjan van de Ven), ‘mais de multiples problomos ont empéchée d’étre intégrée & la maintine. Par exemple, l'erdre de découverte des périphériques peut varier d'un démarrage al'autre et ainsi peut changer la fagon dont ils sont nommés. De plus, les, ‘accés concurrents et d’autres soueis ont affecté la stabilité du systéme, ayant pour conséquence que I'nitialisation du systeme reste pour sa majeure partio séquentielle. Cette situation est en train de changer grace & Arjan van do Ven, avec I'intégration dans Ie noyau 2.6.29 d’une infrastructure permettant I'appel asynchrone de fonctions noyau (que l'on doit pour I'instant activer via Y'option do boot fastboot, car la stabilité de I'infrastructure est prévue pour la version 2.6.30 du noyau). Afin de résoudre les problémes rencontrées lors des précédentes tentatives, Arjan a choisi de suivre une approche contrélée de 1a parallélisation en évitant de tout paralléliser en une seule fois, eten concevant une API qui tente de masquer les effets problématiques de la parallélisation au reste du systéme. Ainsi, dans cette version, seulement les sous-systémes de ‘découverte des périphériques SCSI et ATA ont été modifiés. ‘Aussi, 'APIa été concu afin de garantir quel’enregistrement des périphérique se fasse toujours dans le méme ordre & chaque démarrage du systéme. LAPI est simple d'utilisation. Le code noyau souhaitant en profiter doit inclure le fichier async.h et écrire des fonctions pour traitement asynchrone respectant le prototype suivant. Typetet void (async tue ptrl (vod Mista, async contle,t smoke) Le pointeur data pointe sur des données privées et cookie est une donnée opaque que renvoie le noyau pour la synchronisation futuredes appels. Afinde lancer le traitement asynchrone d'une fonction du type asyne_func_ptr, un appel a la fonction suivante doit étre effectué. asyne_cookie asym schednleosyne_funptr ‘pir, vid “data; Lorsque cet appel est déclenché, la fonction pointée par ptr est exécutéo durant I’exécution de async_schedule() ou plus tard, La valeur que renvoie async_schedule() permet d'identifier 'appel asynchrone que l'on vient d’effectuer. IL est alors possible d’attendre qu'une ou plusieurs fonctions asynchrones se terminent avant de continuer dans le code. Pour cela, l'une des fonctions suivantes est employée. ail ene synchronize ceokielonyne outlet okey vot axyte syohranze ANI Q0i8)s San MO eo mMe One LUmen OA La premibre permet de s/assurer que tous les appels asynchrones ayant été effectués avant celui identifié par cookie sont terminés. (Elle ne retourne qu’a partir de cet instant.) La deuxidmo, quant a elle, retourne quand tous les appels asynchrones ont &té traités. Ces fonctions sont employées notamment pour garantir ‘ordre d’enregistrement des périphériques. .plémentation de cette infrastructure emploie deux listes chainées : asyne_pending ot async_running, qui contiennent respectivement les appols asynchrones qui sont en attente d’exécution et ceux qui sont en cours dexéoution, Lorsque la fonction async_schedule() est appelée, elle place dans la liste async_pending le travail a traiter, et démarre si besoin un thread noyau pour Yeffectuer. Lorsqu'un de ces threads a fini le traitement un appel asynchrone, iIvérifie que la liste async_pending est vide avant de se terminer. Sinon, il traite un nouvel appel dans cette liste. Une déclinaison des primitives précédentes existe afin de rendre possible la synchronisation sur différents lots d'appels asynchrones. Ainsi, les fonctions suivantes sont définies. Tyce ane seele sical ine forept er, d iaa, | Sra Heed toni; | roid seyn-ayneheonze_ccokte spetalasjnesnohiet ecoie, struct Tist feed running] ole esyne synchronize full apacial (struct Tist tea *Tist); La seule variation consiste en la création (par l'utilisateur de l'infrastructure) de sa propre liste async_running (il s‘agit du paramétre running dans le prototype des fonctions précédantes) afin de pouvoir surveiller la terminaison d'un ensemble spécifique d’appels asynchrones. [EL] Virtualisation ma Le systéme de fichiers XenFS Le systéme de fichier XenFS a 6t6 créé afin de permettre interaction entre 'hyperviseur Xen et l’espace utilisateur. L1permet l'exportation de diverses interfaces vers espace utilisateur. Notamment, il permet a l'espace utilisatour d'interagir avec Xenbus/Kenstore. Xenstore est une sorte d’'inventaire hiérarchique des données de configuration relatives aux domaines. 11 est employé pour de multiples opérations comme la négociation au démarrage dela connexion aux pilotes de périphériques ou ‘encore V’ajustement de l’empreinte mémoire d'un domaino, sa terminaison, etc. Les informations présentes dans cet inventaire ne sont pas statiques. Elles sont notamment scrutées par les différents domaines afin d’agir en conséquence. Xenbus est tout simplement l'interface spécifique & Linux pour 'acots & Xenstore. Lappellation vient du fait que le ‘Xenstore est vu par Linux comme une sorte de « bus », lequel peutétre sondé a la recherche de périphériques virtuels. I fournit également une API pour los pilotes paravirtualisés afin quills recoivent des notifications et informations de la part de Xenstore et qu'il puissent y inscrire des données. Linteraction entre Xen et l’espace utilisateur se fait traditionnellement via Vaco’s & /proc/xen. Afin de ne as rompre cette habitude et sans pour autant étendre les fonctionnalités de procfs, un point de montage sur / proc/xen a été rendu possible afin de monter un systeme de fichiers de type XenFS. [E. LJ 7 | Fonctionnalités de Tragage/Débogage Introduction a Ftrace Firace est une infrastructure de tracage congue dans optique d'aider les développeurs Linux déboguer le noyau et analyser les problemes de latences et de performances qui s’y trouvent. Bien qu’a la base Ftrace soit un mécanisme de tragage de fonctions, son architecture a été pensée pour etre extensible via des plugins, lesquels implémentent d'autres types de tracage. On trouve notamment parmi ces plugins un qui trace les changements de contexte, un autre qui mesure le temps qu'il faut pour qu’une tache de haute prionité s‘exécute apres avoir été réveillée, un qui mesure le durée pendant laquolle los intorruptions sont désactivées, ete. Ftrace emploie le syst8me de fichiers debugfs pour son pilotage, ainsi que pour l'affichage des résultats. Pour utiliser, il faut monter debugfs, et, pour cela, il suffit dexécuter la commande suivante sur un systéme oit le noyau a été compilé avec Firace. Est alors disponible dans /sys/kerneL/debug, un dossier ‘tracing quicontient tous les fichiers de contréle du tracage, ainsi que les fichiers de résultats. ‘Les premiers traceurs & avoir vu le jour sont les suivants : f= ftrace qui trace toutes les fonctions noyau. & sched_switch qui trace les changements de contexte entre aches irgsoff qui trace les régions de code qui désactivent Jes interruptions, et sauvegarde 1a trace ayant Ta plus grande latence. © preempt _off est similaire & irqsoff, mais s‘occupe des régions de code oit la préemption est désactivée. = preemptirqsoff effectue un travail similaire aux dewx traceurs précédents, mais confond la désactivation des interruptions et celle de la préemption. 1 wakeup trace et enregistre la latence maximale dont est victime la tache de plus haute priorité pour étre ordonnancée apras avoir été réveillée, Pour activer un traceur, il faut écrire son nom dans le fichier current_tracer. Pour tous les désactiver, il suffit d’y écrire la chaine « none ». La version 2.6.29 du noyau voit I'arrivée de nombreuses améliorations et nombreux ajouts de mécanismes & Améliorations apportées & Ftrace et nouveautés infrastructure de Ftrace. Nous en détaillons quelques-uns dans la suite de cette section. Un nouveau traceur mesure la durée d’exécution des fonctions noyau en nanosecondes. II faut compllerle noyan avec option CONFIG FUNCTION_RET_TRACER pour I'utiliser. Le traceurde pile stack-tracer employant 'infrastructure Ftrace examine & chaque appel de fonction la taille de la pile. Sta taille excéde la valeur positionnée dans le fichior stack_max_size, alors elle y est enregistrée. La pile des appels est également visualisable. Alors que ce type de tragage n’a été implémenté que pour architecture x86, 1 ne lui est pas spécifique. C'est pourquoi un nouveau flag .générique de configuration a été mis en place pour prévoir les futures implémentations. Un autre traceur, nommé power-tracer, voit le jour dans cette version du noyau. Il permet d’aider @ traquer les excés de consommation électrique. Pour cola, il géndro des statistiques détaillées sur les états de consommation énergétique dans lesquels se trouvent les CPU. Il est ainsi possible d’observer précisément les décisions quo prend le code de gestion de l’énergie, et non de se contenter des moyennes de trop haut niveau qui étaient jusqu’alors les seules disponibles. Lexemple suivant montre la fagon utilisor ce tracour, Uno nouvelle requéte systime Syshq-2 a été définio pour Affichar tons les tampons da tragage. Le mécanisme de System Request (fonction de débogage & activer dans, Ja configuration du noyau), s‘utlise via une séquence «échappement du clavier et permet d'effectuer diverses taches telles que Vaffichage d'informations sur tous les processus du systém, le remontage des eystimes de fichiers ‘en lecture seule, leredémarrage brutal de la machine, etc. Test ésormais possible de faire tracer un unique PID parle function graph tracer. Co tracer onregistre les adresses de retour de la tache courante dans sa structure thread_info. 1 est alors possible de récupérer la pile ordonnée des fonctions qui ont été appelées durant l'exécution du code ela tache, Les commandes suivantes illustrent ‘utilisation du mécanisme. Ges deux commandes déclenchent le tracage des appels de fonctions effectués par le shell courant. Ses processus fils seront également tracés. Notons que le tracage exclusif des processus swapper (idle task) de toutes les CPU peut étre activé en inscrivant la valeur 0 dans le fichier set_ftrace_pid. Un nouveau fichier permet au function graph tracer de tracer une unique fonction. Si le fichier /sys/kernel/ debug/tracing/set_graph_function est vide, le tracer se comporte normalement, sinon il trace uniquement la fonction spécifiée. exemple suivant illustre le cas du tragage de la fonction bLK_unplug. fest actuellement possible d’ajouter 32 fonctions dans ce fichier: Lajout se fait de la fagon suivante Le redesign de la gestion de Vaffichage graphique sous Linux poursuit son chemin : aprés l'interface de gestion mémoire des périphériques graphiques (GEM) apparue dans le précédent noyau, c'est cette fois-ci un autre composant majeur, nommé KMS pour Kernel Mode Settings qui est inclus. 11 donne la possibilité de déléguer la gestion des modes (résolution, profondeur de couleurs) de la carte graphique au noyau, Plusieurs avantages de taille ¥y sont associés, Tout d’abord, la possibilité d’avoir une résolution optimale du moniteur dés le boot, de la console jusqu’au bureau, sans clignotements de I’écran lors du passage console — framebuffer~ serveur X. Jusqu’alors les différentes infrastructures d’affichage n‘avaient aucune connaissance I'une de l'autre, et aucun moyen centralisé de savoir I’état d’initialisation et de paramétrage de la carte graphique ; ainsi, chacune d’entre elles (re)faisait sa propre configuration du matériel. KMS fournit un moyen commun de gérer cotte problématique, Ensuite, le temps de boot s'en trouve réduit. Enfin, cetto infrastructure va 29 utilisation du caractére « > » efface, quant a lui, Ia liste des fonctions a tracer et en inscrit une nouvelle. ‘Un nouveau profilera été ajouté sur les macros Likely et unlikely employées par Ie noyau. Ces macros spécifient ‘au compilateur qu’une condition a soit de fortes chances de se produire (Likely), soit au contraire peu de chance de se produire (uLikely). Is'ensuit que le compiloteur peut alors effectuer des choix judicleux pour optimiser’exécution du code en favorisant les branchements conditionnels les plus probables. Ce profiler associe & presque toutes les macros Likely ot unlikely un compteur. Les conditions évaluées au travers de oes macros sont alors la cible de ce profiler. Pour chaque condition, est compté le nombre de fois ait elle a été satisfaite ot lo nombre de fois oit cola n’était pas Te cas. Les résultats en cours d’exécution sont disponibles dans les fichiers profile_Likely ot profile_unLikely. Une illustration sur le fichier profile_unlikely est donnée ci-dessous. [e.L3 Gestion des cartes graphiques également permettre & court terme, pour les matériels disposant de pilotes sachant en tirer profit, d’exécuter le serveur Xorg en tant qu’utilisateur normal. Attention, actuellement KMS ne fonctionne qu’avec les cartes graphiques Intel et requiert la derniére version du projet Xorg ; pour le tester, il faut activer option CONFIG_DRM_I915_KMS. En ce qui concerne les matériels des deux concurrents Nvidia et ATI, !implémentation de KMS pour le pilote Radeon (ATI) open source est en cours. Cété Nvidia, aucune déclaration concernant Ie pilote propriétaire ; quant au projet Nouveau, 'implémentation de KMS est également en cours, mais rien de fonctionnel, ni stable n'est a attendro dans Iimmédiat. La difficulté pour ces deux projets est qu'utiliser KMS nécessite également tun gestionnaire de mémoire graphique dans le noyau, et que leurs besoins sont plus complexes que ce que fournit pour I'instant GEM. [M.B] Réseau Cola faisait quelque temps que cette section n’avait pas été aussi chargée, le noyau 2.9.29 voyant on offot apparaitre plusieurs évolutions significatives ayant trait au réseau, ‘Le menu commence par !'infrastructure nomnée Generic Receive Offload, qui ontro dans la branche officielle de Linus. Destine & diminuer le coiit de traitement des paquets sur un systeme recevant un fort trafic, elle intercale entre le pilote du matériel (carte Ethernet...) et le pile réseau du noyau. Elle intercepte les données entrantes et, si possible, se propose de grouper en un seul paquet, plus gros, jusqu’ uit paquets recus. Elle parse trés rapidement leurs en- totes ct les relaio a la pile réseau qui, elle, effectue des traitements plus complexes, et se trouve donc soulegée den avoir moins & analyser. Pour I'instant, seul le pilote ©1000 peut en profiter, les autres devraient étre portés ‘dans les versions & venir du noyau. Cotte technologie vient compléter TSO, qui a un fonctionnement similaire, mais pour les paquets sortants. Deuxigme nouveauté marquante de cette rubrique, le support du WiMax fait son apparition & compter de cette version du noyau. Rappelons qu'il s‘agit d'une norme de transmission de données a haut débit. et sur de Tongues distances, sans fil. Vinfrastructure incluse dans Linux répond pour 'instant aux besoins des matériels Intel. Elle sera enrichie et améliorge dans le futur, lorsque d’autres pilotes voudront profiter de ses fonctionnalités. La solution de virtualisation par containers intégrée au noyau s‘améliore extrémement rapidement ; pour le noyau 2.6.29, ilest possible d’activer los « Network Namespaces» et d’assigner des interfaces réseau a un container sans avoir a desactiver complétement sysfs & la compilation du noyau. On comprendra que cette limitation était un frein pour nombre dutilisateurs. Le mode point d’accés, jusqu‘alors désactivé dans la pile Wifi générique mac80211 du noyau, est désormals actif par défaut. Ce mode ne peut cependant fonctionner sans Vaide du démon hostapd, en charge de toutes les procédures dauthentification, Lapile TCP se dete d’ume version amélionéo de algorithme de gestion de la congestion par défaut, CUBIC 2.3, qui devrait permettre une montée en vitesse plus rapide d’un transfert (phase dite de « slow start», lorsqu'un transfert commence oa été perturbe on ateignant le débit maximum du médium de transmission), en particulier lorsque lo receveur a Vautro bout est un systime MS-Windows. Enfin, Linux implémente le protocole FCoE, permettant de faire transiter le protocole de transmission Fiber Channel sur une liaison Ethernet, A noter que ce protocolo n’ost pas routablo, ni administrable de maniére classique, car nvutilse pas TCPAP IM.B] 10 | Stockage et systémes de fichiers Nous voici a présent dans la rubrique qui est la plus, médiatisée pour cotte nouvelle version du noyau, Ceux qui suivent, mémo do Join, ’évolution de Linux, n‘auront pu rester sans savoir qu’un futur poidslourd des systémes de fichiers, nommé Birfs et déja présenté dans notre Kernel Corner du numéro 106, fait une arrivée fracassante et per la grande porte, Avant toute chose, nous nous devons de signaler qu’il doit étre considéré comme un composant hautement expérimental, auquel il ne faut donc confier aucune donnée importante. Coté fonctionnalités, voici en ‘quelques points un rappel de ses qualités = Redondance : Btrfs inclut sa propre gestion duu RAID, et permet une redondance des données et/ou des métadonnées, pour I'instant en miroir (RAID1) et en RAIDS. Le stripping (RAIDO) est également possible 1 Intégrits des données le FS effactue une somme de contréle de chaque bloo écrit, qui permetira de vérifior quo Jes données ne sont pas corrompues at on cas de besoin do los liro dopuis un autre endroit si une redandance de données existe. ‘= Gestion de volumes: par besoin d'espace supplémentaire ou envie de redondance, il est possible dajouter une nouvelle partition, & chaud, & un volume, et meme de ‘décidera'y dupliquerles données eou les métadonnées cexistantes sur le volume. ‘= Snapshotting et copy-on-write: il est possible de réaliser tout instant un nombre illimité de clichés d’un volume ou d'un répertoire, par exemple avant une manipulation dangereuse ou avant une suppression dont on n'est pas siirdes conséquences... de maniére instantanée et sans gaspiller d’espace grace au CoW : le cliché, ou snapshot, nfoccupera aucun espace au début. Lorsqu’on modifiera un fichier inclus dans lo snapshot, les données modifies seront écrites & un autre endroit du volume, et les anciennes préservées et attribuées au snapshot. Chaque snapshot se présente sous la forme d’un répertoire & la racine d’un volume Btrfs monté, rendant extrémement facile leur utilisation ot leur gestion. Ils sont accessibles en écriture ot cux-mémes snapshotables. ‘= Los petits plus qui fontsaliver : compression des données {la voléo, utilisation optimisée des disques SSD, stockage ‘optimisé des petits fichiers, fsck @ chaud, conversion réversible d’un volume Ext on Btrfs. Pourle tester; on ne recommandera jamais assez delui dédier une partition ne recevant que des données récupérablos via d'autres supports de stockage en cas de problémo. I faut également disposer des outils en espace utilisateur, télécharger & T'adresse httpifwwy-kernel.org/oublinuxikernell eopleimasonirts! Non, ce n’est pas le seul petit nouveau apparaitre dans ce nouveau noyau... Il nous faut également compter avec ‘Squashfs, qui est un systéme de fichiers compressé, en lecture seule. Les données sont décompressées ala volée. Test souvent utilisé dans les matériels dits « embarqués », ot le systéme n’a pas de raisons de changer et ou les ccontraintes en espace de stockage sont fortes. mer : u 26.29 Parmile reste, onne manguera pas de remarquer qu’eCryptis permet dorénavant de chiffrer les noms de fichiers en plus de leur contenu, et que Ext4, qui devrait devenir le systéme de fichiers par défaut de la future Fedora 11, permet pour das raisons de performance de fonctionner sans journal (bien que l'information permettant de savoir comment faire soit inoxistanto). [M. B.] 11 | Mise en veille et hibernation Dans son long et difficile chemin vers un fonctionnement ‘fiable de hibernation et de la mise on veille, le noyau intégre tun ensemble de patchs géneriques touchant a la gestion des périphériques PCI. Linux Torvalds a diagnostiqué que dans le cas oii un pllote gére correciement les phases de suspend/resumesur certains systémes, mais pas surd’autres, Ie problame était souvent lié a la gestion des interruptions matérielles. Il estime qu’a partir de cette version ce genre ¢’ennuis devrait étre réglé, et novs invite cordialement, nous les utilisateurs, & signaler les problémes rencontrés lors de la mise en veil, de I'hibernation ou du réveil de nos machine, dans le cas olt la faute incombe a un pilote. Rappelons qu'il existe un moyen basique et, il faut bien Yavouer, un peu rustique, pour tester'le (bon) fonctionnement de Ja mise en veille d'un systéme, Il nous faut disposer d'un noyau compilé avec I'option CONFIG PH_DEBUG. Graco & elle, une entrée sysfs /sys/power /pm_test est créée. Pour tester seulement I'étape concernant les périphériques et leurs pilotes, nous effectuons un : Bech devices > /sys/pwer/n.test Le noyau doit alors geler tous les processus en cours d'exécution sur le systeme, puis les périphériques, attendre 5 secondes puis réveiller tout ce beau monde en commencant par le matériel. Si le test ne fonctionne pas, §l faut le recommencer, au besoin plusieurs fois, apres avoir déchargé manuelloment un ou plusieurs pilotes, Jusqu’a trouver le coupable : sile test fonctionne en ayant ‘au préalable retiré manuellement un module, o’est tres certalnement le coupable, [M. B.] Gestion du matériel et périphériques Une fois de plus, les nouveautés sont nombreuses cbt pilotes, faisant encore la part belle au Wifi. Sil’arbre « staging » apporte plusieurs nouveaux pilotes, il faut rappeler que leur qualité est considérée comme insuffisante. Pour les compiler et les utiliser, il faudra activer 'option Device Drivers --> Staging Drivers, puis, dans le sous-menu, desactiver option « Exclude Staging drivers frum beiuy built». A présent, place au rapide résumé des changements Jes plus significatifs de ce kernel. = Pas moins de cing nouveaux pilotes Wifi sont inclus, mais ‘on tant que staging, Trois d’entre oux (rt2860, rt2870 et rt18187SE) se destinont aux produits de Realtek. Le quatriéme, répondant au nom de otus, se destine aux puces UBB1, UBG2 et UB83 du méme fabricant, tandis que le dernier, agnx, gére les puces Airgo AGNX00, implémentant la norme 802.11n (MIMO). Quant au module déja existant at76_usb, ila été réécrit pour utiliser la ‘couche Wifi générique du noyau. Attention, le pilote eeproi00, prenant en charge les, cartes Ethemet Intel Pro 100, ost retiré, Le module 2106 le remplace. = Lo module ath9k prend désormais en charge les puces Atheros ar9285. ‘8 Trois nouveaux pilotes de cartes Ethernet font leur entrée ‘sms¢9426 pour les cartes SMSC LAN9420, ks8695net (puce Ethernet multiport) etbenet (arbre staging) destiné ‘aux interfaces ServerEngines 10GB. = Le pilote graphique 1915 (Intel) gére la sortie HDMI sur les matériels de type G4X. 1 Ta nétroéeclairage de plusieurs modéles de portables Dell est maintenant géré grace au nouveau module deUt_ ‘Laptop, A partir de co noyau 2.6.29, les codes sources de ces pilotes spécifiques, appelés platform drivers et prenant en charge les batteries, rétroéclairages et boutons spéciaux ont été déplacés du dossier drivers/ misc au dossier drivers/platforn/x86. 1» Notons pour terminerque plusieurs webcams, périphériques audio otd’acquisition vidéo supplémentaires sont désormais gérés, ainsi que les cartes iSCSI 10GB Chelsio T3. Pour conclure, il ne fait pas de mal de rappeler qu’é chaque nouveau noyau, de nombreux matériels supplémentaires sont gérés sans ajout de nouveau pilote, et ne sont donc pas cités dans ces colonnes ; il s’agit de matériels contenant des puces dja gérables par un module existant, mais dont Jedit module ne connaissait pas existence, c'est-a-dire ne disposait pas des identifiants uniques (Vendor ID et Product 1D) du produit. $'il vous manquait une raison de compiler ot tester =)... [M. B.] 13 | Divers Pour compiler le noyau avec GCC, & compter de cette version, il faudra disposer d'une version au moins égale & 1a4.2, les versions 4.1.0 et 4.1.1 ayant des bugs empéchant a compilation d'un noyau fonctionnel. [M Denis Bodor Avec l’arrivée de la version 5.0 de Debian sont apparues un grand nombre de nouveautés. Debian est mature : le projet, a politique d’intégration de logiciels, sa gestion interne... On le sait, Debian est une valeur sare. Mais, c’est avec plaisir qu’on a chaque fois étonné de voir apparaitre de nouvelles fonctionnalités. Ce qui nous intéresse ici, c’est le mécanisme de construction de versions live du systéme, aussi bien pour CD que pour clefs USB. Quitte & passer pour un adorateur dela petite spirale rouge, autant le faire bien. Certes, la derniére version d’Ubuntu, la 8.10, intégre une entrée de menu permettant de créer un. systéme live sur clef USB. Debian semble donc arriver un peu en retard avec son live-helper, mais, aprés un simple coup d’cei, on voit bien quelle distribution est dérivée de autre. Live CD/USB oui, mais via tho Debian’s way | Pas de convi-menu, pas de bureau surchargé. C'est l'esprit Unix. Cotte philosophie qui dit que les choses doivent étre faites simplement, Pré-requis Le principe de fuuttionnementduconstructour de systéme live est fort simple. Créer un systéme de fichiers racino, télécharger les paquets, déboostraper une installation, la configurer et fusionner le tout en live CD ou en image pour clef USB. Uncertain nombre de choses sont nécessaires. Pour réussir ce tour de magie, il vous faut Un accés au compte du super-utilisateur root (Login, su, sudo, c'est vous qui voyez). Lelive-helper jour (installable via aptitude, mais il oxiste des paquets pour d’autres distributions). Un shell POSIX (Bash oule shell minimaliste Dash. = debootstrap pour construire un systéme ‘minimaliste (installation avec le paquet du méme nom, eta méme remarque que pour live-helper sapplique ial). Un noyau Linux 2.6. ‘Avec une distribution Debian, entrée en matiére consiste donc en cas quelques commandes séparément et proprement, C'est ce qu’on aime chez Debian. Mais, tréve de passage de pommade, passons aux choses sérieuses. Petite précision avant de commencer Le projet Debian Live (httpldsbiar-liv.aloth.debian.org)) ne date pas d’hier, mais c'est avec l'arrivee de la 5.0 qu'il a gagné ses lettres de noblesse. En cela, Debian est bel et bien en avance sur les distributions sceurs, fussent-elles plus populaires que V’original auprés des utilisateurs lambda. opm, rena Brakes ‘Nous partonsicisurla construction d'une image pour clefou disque USB et nous commengons par créer l'arborescence nécessaire & la fabrication de ensemble : Nous constatons qu’un certain nombre de répertoires et fichiers ont été or lesquels config contenant : Seen creat ee ner Sea Gating aie a an eat a coe een ‘hrootleelpresaea Personnalisation Ace stade, nous pourrons trés bien lancer la construction d'un systdme minimaliste avec Uh_build, mais ce n'est pas Intéressant. Nous devons, en boas franco-francophones, configurer les locales de maniére adéquate. Ceci so fait via la commande Un_config qui se chargera de modifier les fichiers dans config. Ce qui ne vous prive pas d'y eter un ceil ‘Nous configurons les locales francaises par défaut (UTF-8) Certains préféreront pout dtro lo hon vieux ISO-8859-15 via fr_FReeuro, On peut également configurer l'ensemble en uno fois, co qui nous permet de mettre en avant la syntaxe de Uh_config (ne pas oublier les guillemets) SYSADMIN Tous ces sous-répertoires ne sont pas intéressants. Nous reviendrons sur certains d’entre eux en temps voulu, Le fichier modifié est config/binary, variable LH_BOOTAPPEND. Lave Maintenant, nous pouvons créer notre premidre image avec Un_buitd. Aprés un long, long, trés long temps d'attente (téléchargement, installation, chroot, copie, squashfsisation, etc.), on trouve un magnifique fichier binary.ing dans le répertoire courant. Fichier qu'on s‘empressera de tester avec, par exemple, kvm -hda binary. ing (e kvm -cdrom binary. iso pour une image ISO). Point d'interface graphique, clest un systéme minimaliste en mode console. Minimaliste et parfaitement localisé ot fonctionnel. C’est beau. Un bureau léger ? Pas de probléme ! Que diriez-vous d’ajouter quelques éléments graphiques. Lalenteur d’un périphérique USB impose raisonnablement, utilisation que quelque chose do lager. Les gestionnaires de fenétres de ce type ne manquent pas pour peu que Yon sorte du chemin un peu trop balisé tracé par KDE et GNOME. XFCE serait un tres bon choix, mais LXDE a tendance & lui volerla vedette en ce moment et pour cause, Plus qu'un gestionnaire de fenétres, c’est également un Créez votre live CD Debian 5.0 Lenny desktop complet, ce qui pourtant ne gache en rien ses performances. Gageons que cet état de fait perdurera avec Jos futures versions, méme si les fonctionnalités venaient ase multiplier. Comme les développeurs sont des personnes consciencieuses etintelligentes, ls ont anticipé vos (mes) désirs, On trouve ainsi des listes de paquets directement utilisables dans Jusr/share/tave-helper/Lists. gnome, rescue ou encore xfce sont, en quelque sorte, des profils tout fait que nous pouvons directement utiliser. Celui qui nous intéresse maintenant, c'est Lxde que nous utilisons eins! = Le fichier modifié est config/chroot, variable LH_ PACKAGES_ LISTS. Toute contenu de /usr/share/Live-helper/Lists/ Lude sera intégré & la distribution live. C’est-a-dire le contenude /usr/share/Live-helper /Lists/standard-x11 plus les paquets gda, Lxde, Lxnm et desktop-base. Si vous Tegardez dans standard-x11, vous trouvezun autre include concernant standard, Iui-méme incluant minimal et ainsi de suite, Le systéme do résolution des dépendances entre ‘paguets se charge du reste. On peut ainsi construire brique par brique un syst8me sur mesure. De cette facon, plutét quedinclure manuellementle paquet ‘openvpn avec Lh_config ~packages openvpn, parexemple, on peut créer son propre fichier de liste et le placer dans / usr/share/Live-helper/Lists. Ainsi, sije crée un fichier HyLivesys contenant ilmo suffitd'utiliser Lh_config -p KyLiveSys et,j‘obtiendrai une distribution contenant la méme chose que Lxde avec les paquets openvpn et mutt en plus. Pour remasteriser une nouvelle image, nous commengons par effacer les éléments précédonts avec Un_clean. Les répertoires chroot, binary, stage et source seront vidés, ‘mais le contenu de cache sera conservé. Ce qui évite une nouvelle longue étape de téléchargement. On construit ensuite comme précédemment avec Un_buitd. Personnaliser l’installation Nous sommes maintenant capables de créer un systime de toutes piéces contenant absolument tous les éléments ‘ui nous sont nécessaires. Comme vous I'avez remarqué, dans exemple précédent, j'ai décidé d’inclure le paquet ‘openvpn afin de pouvoir, depuis n’importe quelle machine ‘diémarrée surla clef USB, entrer en contact avec les autres machines de mon VPN en toute sécurité. Il me faut cependant ajouter uno configuration pour ‘qw’OpeaVPN puisse fonctionnor correctement. En regardant dans arborescence, vous trouverez un répertoire magique (gelon la définition de M. Arthur C. Clarke) : config/chroot_ Local-includes. Celui-ci est destiné & contenir des fichiers et des répertoires qui seront copiés lors de la construction del’environnement chrooté. config/chroot_Local~includes ‘est, en quelque sorte, la racine de nos ajouts. Ainsi, il nous Un systéeme live, fait : la persistance suffit de créer etc/openvpn et de le remplir avec les fichiers utiles (certificats, clef, fichier de configuration). ‘Nous en profitons également pour ajouter etc/default/ openvpn avec une version du fichier qui remplacera celle installée parle paquet, Notre version empéchera le démarrage ‘automatique du démon openvpn grace @ une simple ligne : Nous voyons ainsi qu'il est trés simple de modifier la ‘configuration pré-construite pares installations de paquets dans l'environnement chrooté. Nous pouvons procéder de méme avec tout le systéme et obtenir un systéme de fichiers en lecture seule utilisant squashFs et un systime de fichiers tmpfs (en mémoire) en CoW (Copy on Write) mais qui se souvient bien de ce qu’on Le dernier point précisé est trés important. Le systéme sur clef USB est un systme live au sens strict du terme. Il est constitué d'un systéme de fichiers en lecture seule ‘qui est monté en squashFS (systime de fichiers fusionné). Un autre systéme de fichiers est également monté afin de stocker les différences entro la version en lecture seule et Ja version utilisée post-démarrage. Ce second systéme de fichiers est de type tmpfs et son contenu sera donc perdu on cas d’arrét ou de redémarrage du systéme. Par défaut, nous sommes donc obligé de construire un systéme parfaitement configuré contenant tous les éléments pour'utlisateur user installé par défaut. Cectesttout aussi valable pour les services comme openvpn, mais également pour les fichiers de configuration d'applications ou outils comme Mutt, Vim, etc. IL est toutefois possible de procéder autrement grace 8 Ia persistance des données. Lune des solutions consiste a utiliser une seconde clef USB ou un disque dur installé sur l’hote ot le systéme sera démarré. Dans le cas d'une seconde clef USB, il suffira d’y créer une partition de type Linux (83) contenant un systéme de fichiers ext2/ext3 utilisant un label Live-rw (On démarrera alors le systme live surla premiére clef an spéciflant Live persistent alinvite boot: du bootloader, Ainsi, automatiquement, le systéme Debien cherchera un systéme de fichiers possédant Ie label défini (Live-rw) et Yutilisera en mode CoW pour conservor toutes les différences avec le systéme de fichiers en lecture seule, Bien entendu, ceci pose quelques problémes. Lefait ‘utiliser deux clefs USB est déja un soucien soi, auquel i faut ajouter ‘que, généralement, on utilisera deux clefs identiques, La, Crest du cté du BIOS et de la sélection du périphériqua de boot que nous nous heurtons a une limitation. Difficil fn effet, de faire le différence entre les deux clefs dans Ie menu présenté au démarrage. Dans tous les eas, cette solution est passablement éprouvante. Une autre solution, plus ergonomique et plus économique Consiste utiliser, non pas un disque, mais une imago Gisque. La, c'est son nom, Live-rw, et son omplacement ‘qui sont importants. 1I suffit que cette image de systéme Ge fichiers ext3/ext3 soit placée & la racine dun systame de fichiers supporté (méme NTFS) pour que celle-ci soit automatiquement montée en Joop puls utilisée en CoW. Voici comment procéder : option -F nous permet simploment de forcerla commande comme il ne s'agit pas d'un véritable périphérique bloc (ou lun systéme de fichiors monté). Nous placerons ensuite ce fichier n'importe oi puis démarrerons le systdme live avec Yoption persistent et la magie opérera a nouveau, Ceci suppose, la encore, l'utilisation d’une autre unité de stockage avec, toutefois, le bénéfice de pouvoir déplacer le ‘Achier n’importe oi trés facilement. N’importe oi signifiant, par exemple, la clef USB elle-méme, Pour la procédure, nous avons Vembarras du choix ; = Etendre la partition FAT générée par la commande dd sur la clef, = Créer une nouvelle partition et un systéme de fichiers ext2/ex13 pour y copier le fichier, = Ajouter une seconde partition FAT (donc lisible sur un grand nombre de plateformes) et y copier le fichier. Dans tous les cas, fdisk, cfdisk et/ou Gparted sont vos ‘amis, ainsi que nke2Fs et mkdos ts, i Petit bug Jai remarqué un petit bug dans chroot/usr/share/ initranfs-tools/scripts/Live-helpers (version 1,0.3-1). En effet, au cours du processus de démarrage, le systéme inspecte los systémes de fichiers a la rcherche d'images pour /hone et /Live/cow (contenant le complément CoW en lecture/écriture). Ensuite, il ajoute un point d’accbs pour trouver un snapshot, Malheureusement, si les images hone-rw ot Live-rw se trouvent sur le méme systéme de fichiers, la commande grep "*${device} " /proc/mounts | cut -f2 -d‘* retourne deux lignes identiques. Pour pallier le probleme, A sufft d’ajouter un petit | tail -n 1, Pour contournerle probléme sans toucher aux fichiers installés par le paquet Live-helper, le plus simple est de copier chroot/usr/ share/initranfs-tools/scripts/live-helpers dans config/chroot_local-includes/usr/share/initranfs- tools /scripts/Live-helpers pour Ie remplacer lors de Ja génération du systéme. Mais ceci n'est pas suffisant, Ce script est inclus dans |’ initramfs, II faut donc ajouter un hook qui déclenchera la mise & jour da I'initrants ; ‘config/chroot_Local-hooks/ny contenant simplement aininish pte initrans -tu fat) Ne pas oublier de passer ce script on oxécutable avec un chmod +x config/chroot_Local-hooks/my. S'en suit un petit Lh_clean et un Uh_build et le tour est joud, Le probléme initial vient de chroot/usr/share/initranfs- tools/scripts/Live et dela fonction try_snap() appelée depuis setup_unionfs() du méme fichier. Cette fonction appelle try_mount () (script Live-helpers) qui utilise where_ is_mounted() oi:se trouve le fameux grep dans /proc/nounts, 52 | Snapshot est possible dutiliserla persistance d'une autre maniére, Cotte technique consiste a utilisor des « instantanés » du aysthme da fichiers taps et da les archiver. Contrairement au systéme de persistance précédent, celui-ci présente Yavantage de moins solliciter les supports, ce qui est intéressant dans le cas do mémoire flash, Siune partition avec Ie label Live-sn oi: un fichiernommé de la sorte est trouvé, son contonu sera copié dans Ie systéme de fichiers tmpfs. Lors de l'errét du systme, un redémarrage ou l'utilisation de la commande live- snapshot —refresh, l’opération inverse est effectuée. Notez cependant que la suppression de fichier n'est pas, prise en charge contrairement. au CoW (Live-rw) et au montage d'un home-rw sous forme de systéme de fichiers ou de fichier image. Autre point important, en cas d’arrét brutal du systéme, les changements seront perdus. Une autre maniére de contourner Ie bug précédent peut oncétre, tout simplement, de désactiver cette fonctionnalité en commentant los appels a try_snap() Astuces Changer le splash screen de SysLinux Limage de fond utilisée par SysLinux ost trds belle (si, si), mais en décidant de personnaliser son systéme sur clef USB, autant le faire jusqu'au bout. Il suffit pour cela de créer une belle image en 640X480, puis d'utiliser : eee i ea Pees aap ne ppmtolss16 vient du paquot syslinux, Si le résultat n’est pas la hauteur de vos attentes, c'est tout simplement que la réduction du nombre de couleurs par ppntolssié n'est pas optimale, Tournez-vous alors vers The Gimp pour créer un fichier n’utilisant qu’une palette de 14 couleurs, puis réutilisez ppmtolss16 Et voila, il n'y a plus de message concernant I'élimination des quelques 1200 autres couleurs et le résultat est sensiblement meilleur I suffi, ensuite, de placer le fichier obtenu dans config/ binary syslinux et de spécifier ’emplacement dans la configuration (fichier config/binary) Ly SISLTAUC LAS Fatigué de taper Live persistent & chaque démarrage? il suffit d'ajouter le paramétre & ceux déja pessés par défaut comme ceux pour les locales dans config/binary THLBNOTAPPENT_LIVE=*Tacele=trFeuro Keyi-tr erst stem” 6.3 1 suffit de créer, & I'instar de Live-rw, un systéme de fichiers utilisant un label home-rw ou un fichier appelé hone-rw Ceci peut se combiner avec le mode persistent détaillé précédemment, Par défaut, seul le dépét principal est utilisé. Si vous souhaitez construire une distribution live comprenant, par exemple, le paquet transcode, il vous faudra ajouter Je dépdt http:iwwi.deblan-multimedia.org de Christian Marillat. Procédez alors comme cecl en ajoutant ce dernier au /etc/ apt/sources. List du systéme héte ees Geb itpe/)wm. deb tan-multiedtasarg siable vin deb-sre Hip: //nw.debian-aultintia.org stable main Installez ensuite les clefs permettant d’authentifier les paquets, puis configurez votre installation pears) Pane Sie ee Ajoutez ensuite le nouveau dépot dans la configuration courante (qui sera chrootée) E ene eee ene) Pe ene ac er ener Selonla version du live-helper, il est possible que 'utilisetion do Uh_build conduise & une erreur, Un bogue semble, en effet, interdire T'installation/utilisation des clefs GnuPG adéquates nnn Peete ane eee aera Teese: sure Dene eee ee Pour contourner le probléme, il suffit de copier les fichiors provenant de|'installation du paquet debian-multimedia- keyring depuis le systéme hote on ean ener eae ese) Ronen ger enno in See eae On pout ensuite modifier sa sélection de paquets etrelancer le processus de construction ene atest Cee eet eee PUES CUNT one participation au Challenge DFRWS 2008 Lors de la derniére DFRWS (Digital Forensics Re: Christophe Grenier SYSADMIN rch Conference) en aodt 2008 a Baltimore était organisé un Colter Rig eM Creme ieC tiene NAta Co TR SmeoN NORM (LOL THON MMOL OTIS CECE eel aur eI Kua ara ag Senet ete eee elglete Dans le scénario DFRWS 2008, une sociétés'est rendu compte qu’un ters non identifié cherchait obtenir des informations confidentiolles sur son systeme informatique. En réponse, un monitoring de son infrastructure @ été mis en place. Lanalyse do cos données ainsi que des eniretiens avec différents employes ont conduit l’équipe dela sécurité informatique a soupconner un des employés de collaboration avec ce tiers externe. Des captures réseau du trafic du poste utilisateur sous Linux ont 6té réelisées, Io contenu de son répertoire Uutilisateur copié ainsi que la mémoire de son poste. Les données Surle site du challenge (tpn ave esten contact par messagerie avec Fas Tali tsaihotmah tam Le message comporte un échange précédent, selon celui, Vogon a envaye le 16 décembre 21:53 GMT -8 URL pouracoéder a Negotiate, le document Google Docs. = A22:35, vogon demande le montant minimum pour ouvrit un compte a la banque polonaise Noblebank. rile, can sou please tell ne wit the minima lance Teqireent 4s for open an overseas acount at sour bank? ran you, Steve Ke owon = A 22:36, Vogon indique & Faa Tali qu’ll enverra les informations comme discuté, qu'llutilisera ’emplacement 219. Rien ne décrit ce dernier. Historique de navigation historique de navigation s‘obtient en sélectionnant Disk Forensics, puis Browser History © 2007-12-09 00:53:39, Recherche de « private banking » sur googiecome = Consultation du site Noble Bank suite cette recherche 1 2007-12-09 00:59:03. Consultation de htt:wwwstat. gows6182.in sur Vextration 1 Recherche surgooglecon ga « non-extradition countries > 1 Extradition Costa Rica = Maldives 01:18, une recherche sur privitege elevation 2.6.19 ost effoctuse. Lutilsatour veut devenir root de son poste Son historique de navigation indique la consultation ce sites comme + 1 htplevemite org = htpuimetaspoitorg Laderniére page consultée est htip:/imivOrm.comiexplots/1596 {L1R7.0) Local Root Privilege Escalation Exploit” Mest 02-42, A.02:47, le site travelocity.com est consulté et des places sur un vol vers Ie Costa Rica sont réservées. Lo 14 0t16 décembre, un documentestaccédé sur GoogleDocs ainsi que des messageries Hotmail et Gmail. La derniére page visitée est une page du site Web de Walt Disney. a Firefox Recherche Par et Firefox sauvegarte toute information saisie dans tun champ texto dun formulaire web. Ainsi, le paramétre searchbar-history utilisé lors des recherches contient les valours sauveganiées suivantes 1 private banking = panana extradition non-extradition countries m extradition costa rica = maldives '§ privilege elevation 2.6.19 = CAN-2005-1263, m overseas credit card payments Lutilisateur rechercherait une banque discréte (secret bancaire), se renseigne surles conditions d’extredition avec le Panama et le Costa Rica, s‘informe sur les Maldives et les payemonts par carte de crédit /étranger, mais aussi cherche des failles surle noyau Linux 2.6.19 et sur la faille CAN-2005-1263. Remarquo : cotte faille du noyau Linux ne fonctionne plus depuis la version 2.6.12. Réservation d’un vol D’autres valeurs sont visibles : 1m firstNameForFlight1 Steve 1 firstNaneForFlight2 Catherine m= goingTo Costa Rica stNameForFLight1 Vogon = lastNameForFlight2 Lagrande ‘= Leavinadate 12/30/2007 = LeavingFrom Dulles m returningDate 1/30/2008 m seate 16 m seat 168 mm telephonellumber 202 555 9900 = tripcontactFirstNane Steve 1 tripContactLastNane Vogon Ces différentes valeurs sauvegardées et la consultation du site travolocity.com indiquent Ia réservation de 2 places pour Stove Vogon ot Cathorino Lagrande, départle 30 décembre 2007 depuis Vaéroport de Dulles (IAD) a destination de Kaéroport de San Jose Juan Santamaria (SJO) au Costa Rica avec hillet retour le 30 janvier. Dulles est un aéroport proche de Washington DC, Ie numéro de téléphone 202 555 9900 correspond aussi 4 un numéro de Washington DC ou de ses environs. Information intéressante, Firefox a mémorisé la réponse permettant en cas de perte de son mot de passe Gmail de réinitialiser le compte : TdentityAnswer binky. Un des participants sest permis do lo faire, mais cola pose plusieurs problemes : = Le propriétaire légitime voit son accés bloqué et peut reagir en conséquence, 1 Le service web peut mémoriser Vheure, l'adresse IP et les caractéristiques du navigateur web de la personne ayant réinitialiser acces. = Cet acte peut étre considéré comme un acces et maintient frauduloux et done légalemont punissable. ‘= Donnerunavantage& ce concurrent parrapport auxautres ) Mot de passe Firefox ‘Aprds avoir créé une machine virtuelle sous CentOS 5, j ‘ajouté un utilisateur stevev, recopié son répertoire .mozitla et lancé Firefox pour découvrir que celui-ci stockait les mots de passe entrés dans les formulaires, mais protégeait ceux-ci par un mot de passe général. Aprés avoir essayer participatior quelques mots de passe triviaux, j'ai tenté une attaque par dictionnaire du mot de passe, puis par force brute avec FireMaster (iti://securtyxploded.comi). Attention, pour Yattaque par dictionnaire, celui-ci doit utiliser des retours ala ligne Windows et non Unix, utiliser unix2dos (NDRL: ou recode directement) pour la conversion au besoin, ive Firsostercve -q-b nd 161 ts 20N response. aata/ser_fMles? mal Va/efon/nSghtfue.dfanltf Le mot de passe n’a pas été trouvé, mais le mot de passe faisait soit plus de 6 caractéres, soit utilisait d’autros caractéres que ceux par défaut. Aucun participant au challenge n’a été capable de retrouver ce mot de passe, nnais il n’est pas Impossible que analyse de la mémoire puisse permetire de récupérer ce mot de passe ou méme les mots de passe pour chaque site. 5 | Fuite d’information ‘Comme on soupconne que des documents confidentiels ont été sortis du systmed’information pour rejoindre la concurrence, analysons le trafic réseau avec Wireshark (ex-Ethereal). i Wireshark Le résumé (Statistics/Summary) disponible sous Wireshark indique la capture va du 17 décembre 04:32 & 05:31 (heure francaise). I1s'agit principalement de trafic HTTP avec un peu de trafic HTTPS vers Yahoo. En observant un échange DHCE on identine 3 machines im Vinware_c2:2f:0¢ 192.168.151.130 goldfinge tm Vinware 4:56:48 192.168.151.254 Serveur DHCP ; 1m Vmware ed:9d:3¢ 192.168.151.2 DNS, gateway. La derniére machine présente n’a pas 'intérét pour le challenge. Elle a uniquement répondu a un ping im Vmware 00:00:08 192.168.151.1 Les adresses Mac indiquent que le réseau a été simulé par des servours virtuelles VMWare. Avoir un poste de travail ‘dans une machine virtuols n’est pas un scénario trés réaliste,, mais facilite grandement la préparation du challenge. Lorsqu’un serveur émet un paquet IP il positionne le Time- To-Live (TTL), sa valeur par défaut est souvent 64 pour Jes machines Sous Linux et 128 pour les machines sous Windows. Le TTL est décrémenté & chaque routeur et, donc io fait, on devrait observer différentes valeurs reflétant les différentes distances entre les sources et la machine réalisant la capture réseau. Or. ici, chaque paquet recu par 192.168.151.130 a un TTL de 128. Cela ost peut-Btre lié la configuration réseau mise en place pour le challenge, ‘mais on na pas de detail la-dessus... Anomalie de 219.168.151.130 Ladresse 219.168.151.130 rocoit plus de trafic IP que les autres, Elle Tecoit des connexions pour différents sites internet. Ie serveur 219,168.151.130 servirait de proxy. En regardant de plus pres, on peut remarquer que le champ ‘User-Agent qui idontifie le navigateur lors des requétes HITTP est User-Agent: Mozilla/5.@ (X11; U; Linux 4686; en-US) Gecko/20071126 alors qu'il est User- Agent: Mozilte/5.0 (X11; U; Linux i686; en-US; rv:1.8.0,.12) Gecko/20071020 Cent0S/1.5.0.12-6.eL5. centos Firefox/1.5.0,12 pourles requétes vers d’autres machines. S'agit-il d'une autre version du navigateur ? Un script Perl est retrouvé en mémoire. Lice Hesoncode |S Sees ate ae indiqueque | sci att Serie | ce ScTiDt |e nai rucm transforme cements wunfichioren base64 et Tetransmet sous forme de cookies nommés cVal, Sessid et RMID Nous, Analyse de la mémoire au “hallenge 200 venons de mettre Ja main sur un outil permettant de faire sortir discrétement des informations, Continuons analyse doa mémoire. En regardant directement enmémpire a aide de hexdunp, des traces de commandes shell sont visihles Pec fee nen os tie Cie out cv te Ei Erte nes i eal conn oe een ‘Mais ces bouts de mémoire ne sont pas toujours exploitables, comme le bloc 467656 SYSADMIN La zone mémoire 2556 laisse & penser qu’en faites données n'ont pas été récupérées sur un partage réseau Remarque : les zones mémoire d'une machine {386 sous Linux sont organisées par blocs de 4x, mais ici ces zones sont indiquées par blocs de 512 octets. ‘Nous avons découvert la présence din script Perl permettant dexfitrer des données via des cookies. Générons un rapport listant les différents cookies afin de retrouver ces données. Dans le menu Disk Forensies, sélectionne? Generie Report et cochez les cases -Moctned dans inode Table stores information elated to VFS inode URL et Status dans HTTP Tablo- Stores al HTTP transactions Parameter et Value dans HTTP Parameters - Stores request details een Ajoutons le filtre (Icdne en forme d’entonnoir) "Parameter RNID or “Parameter” = CVal or "Parameter" = Sessid pour nafficher quo les cookies quinous intéressent. Maintenant, ila falloir extraire la valeur de ces cookies et les décoder Trions par date croissante et commencons parrécupérerla requéte SOIL. en cliquant sur Vieéme Sau Used et écrivonsim posit script Python utilisant cette requéte pour récupérer le fichier. eGHE Sai Te nes Pere Ce script va se connecter 8 la base DFRWS2008 (nom de Yaffaire), extraire les cookies, décoder les données et les sauvegarder dans le fichier output .zip. Eroneeen enrages Brea) es Tea ai reer eames Maladrosse d'un organisateur du challenge, sou 1 apparait comme créateur du fichier Excel listant les plus gros clients, Point troublant, la colonne « Balance > qui doit lister le solde de chaque compte est renseignée a l'aide de la fonction RAND() ;les données sontaléatcires. On peut en déduire qv s’agit d'une nouvelle erreur des organisateurs nee ne Ce ae er pea cas ubien quo Steve K Voyon reve des informations ictives Le fchicr domain xUs centiont un listo de comptes futtisateurs interes lasocete Le fichier ftp.peapa'est gos au format peap mlgre 4h aom, mais Wireshark est Rapahl J irelcetie capture sesest a format NA Sniffer (Windows) 2.00% archive ZIP est protégée parmot de posse. Fffections une Ainque par dictonnaite aide du programme ferackeip | actin) Cette capture réseau montre une connexion FTP réussie depuis 10.2.0.2 vers 10.2,0.1, mais aucun listing de fichi n'est effoctué et aucun fichier transféré. Juste connexion et déconnexion... Sans intérét. iidition du fichier . Lesshst conservant en principe un historique dela commande Less. Actuellement, celui-ci ‘comporte aucune information. Ila sans doute été purué. Le nom de fichier ELF exploit.sh est signe d'une tentative d’exploitation d'une faille Linux locale. _IcSnome Edition du fichier .hash_history. Vraisemblablement rari des commandes ont été supprimées de historique. En dehors du premier fichier et du .bash_re, ils sont tous “doen visio seve | sentry ker*psition™ a absents des fichiers fournis, | cares i= elms camille tne? TT “entry eye fasi tien” alue="F> | |stmmnats/nin, stare cinetadst> |semetia Imei c/éisk Co fichier indique plusieurs éléments suspects i kT (coaline) feed Imbhats Jed jet (Dir Fist ew Left Parl] ope sterey/ Trash Tethose/stren cafe Efwe/sveren/_eaccups Sthoelstevet/eeTition eine stevet/-acnt honesterew-gxenfe ethne(stover/ptremer-t.18 ‘inine steve gnenez rvvate este! steven/ anne 5-/hone/stevet/-anane/anone-rfs ‘Me/tenstovev- gran =fhone/ steven 12 fhon/stevey historique des répertoiresindique notemment les répertoires ‘/unt/gf's/Acmin_shareet /nedia/disk/OFFWS. Ase demander Gui a utilisé le compte, Steve Vogon, une personne de son département informatique ow un oryanisateur duchallenge ) Quoi qu'il en soit le nom des répertoires est cohérent avec les informations trouvées directement en mémoire. Loi} Ekiga est un logiciel de voix et de téléconférence sur IP Pour fonctionner correctement au travers des firewalls et routeurs, il interroge un site web pour connaitre Vadresse IP publiquo utilisée sur Internet, et justement la capture réseau contient la trace d'une telle connexion. Du coup, nous retrouvons aussi |'IP publique. ——— Adresse IP publique Google Doc permet de travailler en ligne sur des fichiers Dureautiques simples. Le 16 décembre, un échange de ‘mail entre Steve Vagon et Faa Tali indique la présence d’un ‘document appelé Negotiate sur Google Docs. Connaissant URL, nous pouvons nous aussi sccéder ce document par URL sans étre authentiné : Conclusion Pyflag est un outil assez complet quia permis de récupérer de ‘nombreuses informations sans recourir'a des autils tiers. Le challonge DFRWS 2008 a encore été ts intressantet, Pour ceux quisouhaitent poursuivre Ienquéte, une suite est disponible sur itt og2008todeo shtmiitiwwcdws.or2008hodea sh ‘Aprés authontification sur un compte Google quolconque, Vhistorique du document devient accessible SSS oes On remarque que le document a été modifié par Nicola Dilorenzo, un organisateur du challenge. La réservation de billets d/avion permet de se situer dans les environs de Washington D = Dulles est un aéroport proche de la capitale américaine, ‘= Le numéro de téléphone 202 555 9900 correspond aussi un numéro de Washington DC ou de ses environs. Le fuseau horaire correspondant est done US/Eastern. En théorie, il est aussi possible d’extraire cette information de la mémoire et de confirmer le fuseau horaire, Cela fall partie des fonctions de Volalility. Ladresse IP publique 24.3.109.26 (c-24-3-109-26 .hsdi.pa. comcast.net), récupérée grace au trafic généré par Ekiga, correspond & a région de Pennsylvanie (US-PA), mais, la, pas de chance, Crest la céte Est, Auteur : Christophe Grenier eaten a coe teat eee ert strace est ce que Ion appelle un « system call tracer » (moniteur d’appels systéme), un programme qui intercepte et enregistre les appels systéme effectués par un programme PTT N ofan Sere) od eda Soo elem 1 Lcd 210 ec cL suivre pas a pas l’exécution d'un programme, mais placé du point de vue des bibliothéques partagees. Strace I]estunprogrammelncontournable Ltrace [2], qui s'inopre directement do anole bolto outils du doveloppeur Linx, strace, permet do tracor de son cOt8 les Carilpennetdetacertouslesappelssystime _appels ats bibiotheques partagées comme wis on enue parm progranme, asi que Ingle (surtout ne pas mélanger les appels tous es signa dis 00004, systeme avec ls fonctions des bibiotheques uchaine strace # i6 purté tnttntoment PArtan6es G8 Ee font saeco : nent Sppels systemic). Coprojeta démarre on 1997 sans Liter bronco Lankostor en 19a (2 SERIA as comee Dantr do Tout homonyme gort pour suns ¢2.°St 8 PNGpSIon a a far Poul Kraneniburg) en méme tempe qui Cxpedes, son esconpe tear Implémentat Ie support de Vappel systome ° PIRACE dans lo noyau (éisponble a moins Ces deux ubitalres ulisent Yappel systéme Gepuis le noyau 10), Cehacker nest pas un PTRACE, abordé dans unprécédenteticle, qui fnconma (meme sileunpeudsparudeserans permet 8 un processus eppelant dobserver radar ces derniers temps), puisque c'est lui ~ et surtout de contréler ~ Y'exécution d’un quia écrit des utilitaires aussi pratiques que autre processus (permet de consulter son ps ou ndSsum sous Linux. image mémpire ou de modifier ses registres). | STRACE Gudte & strace, nous allons obtenir pour Cot out, & Vinstar de vat grind on gdb. ne ‘hiaque appel systéme leur nom, la liste de _nécessite aucune recompilation de code ce qui Jours arguments etenfin leur code retour. Ce _estappréciable, carne nous limitant pas nos qui fait que nous allons pouvoir suivre pas & _propresprogrammes. Ilestparticuligrement utile pasl'exécution d'un programmeetcomprendre pour détecter des terminaisons de programmes © do l'intérieur » les raisons d'un éventuel & cause de l'absence de certains fichiers. dysfonctionnement. Si strace n'est pas installé, vous pourrez le trouver aisément par Je moyen habituel de strace prend en argument le nom du votre distribution Linux (un simple apt-get programme que l'on souhaite superviser, install strace sous es distributions dérivées ainsi que tous ses paramétres. C’est un de la Debian), utiltaire rapidement indispensable pour le développeur ou I’administrateur systeme ; il offre en outre une formidable opportunité, pour ceux quise demandent.comment tout ce joli monde fonctionne, de pouvoir descendre ‘un eran plus bas, & la lisidre du noyau, pour appréhender les mécanismes inhérents & Yexécution pas & pas d'un programme sur un systéme d'exploitation, Metions-nous dans la peau de quelqu’un qui doit développer un programme pour son Outre ses qualités pédagogiques évidentes, _employeur:; lequel programme doit récupérer ce programme se retrouve a usage étre le nom de la machine courante (pas trés oxtfémement pratique ettrouvera une bonne _compliqué, jen conviens, mais c'est un début) place dans la boite & outils du hacker Linux. Cette personne sait par contre que la sortie Bref vous 'aurez compris, sos bénéfices sont du programme Unix ‘hostname’ fournit cette énormes. information. utilisation usuelle de strace ost la suivante option la plus importante a utiliser est -f, car elle permet de tracer tous les sous-processus fils de votre programme. Elle va donc s‘employer & tracer les appels systime de cet utilitaire afin « d’apprendre » ce qui est utilisé dans Ja partie « cachée » du programme et plus globalement S/initier aux différentes étapes jalonnant lexécution d'un programme sous Linux er SU ae Tie, = Bt eae Ta aoe La premiére remarqueest quel’onest rapidement submerys par los informations sur la sortie standard (107 lignes dans notre exemple). Afin de pallier ce désagrément, il est préférable de rediriger la sortie vers un fichler texte afin de pouvoir traiter a posteriori les données et surtout de ne perdre aucune information. Pour séparer les traces de chaque processus dans des fichiers séparés, il est préférable d'utiliser option -ff en conjonction avec! option -0 (toutesles traces serontséparées dans des fichiers output. pid avec pid correspondant au process ID de chaque processus) eer Analysons maintenant nos données. On remarqie que la premiére chose que fait notre programme est d’exécuter notre commande en romplagant le contexte d’exéeution par celui de la commande par l'intermédiaire de ’'appel systéme execve(2). On note ensuite ouverture du fichier /etc/Ud.so. cache (fichier contenant une liste compilée de répertoires a partir de laquelle le programme va cherchor ses hibliothéques partagées ainsi qu'une liste de bibliothéques candidates) et surtout de la bibliotneque /etc/Libc.so (bibliothéque C standard). Onvoit immédiatement comment le format de présentation est structuré, Le nom de l'appel systéme vient en premier, suivi de la liste des arguments pour finir enfin par le code retour du programme. Chaque ligne suivra scrupuleusement ce principe Lecode retour nous apprend beaucoup de choses on note, au début du programme, la tentative avortée d/accos au fichier /etc/1d.so.preload, Lappel systéme access (2) retourne alors -1, qui n'est pas en soi une erreur (le fichier n’étant pas vraiment indispensable). Par contro, ‘ouverture dela bibliothéque C par''intermédiaire de 'appel systéme open (2) retourne la valeur du descripteur de fichiers ce quiimplique le succs dela commande. La valeur 3 est logique, car les valeurs @, Let 2 sont successivement allouées aux sorties stdin, stdout et stderr ; le systeme a donc pris le valeur suivante disponible. Un systéme qui ne désallouerait pas ses descripteurs da fichiers vorrait cette valeur s‘incrémenter jusqu’a saturation du systéme et strace serait alors des plus utiles pour nous informer de cele, En descendant plus bas, on tombe enfin sur la primitive qui est appelée par hostnane pour récupérer le nom de Ja machine ; il s‘agit ici de l'appel systéme uname(2) qui permet de récupérer certaines informations du systtme ‘comme le nom de la machine, architecture matérielle, la sion du noyau, etc. Suit alors I’écriture du nom de la machine (ici, portux codé sur7 caractéres avec le retour la ligne) sur la sortio standard et, enfin, Ia terminaison du programme par|'appel systéme exit_group(2), soit la terminaison de tous les processus légers dans un processus (similaire & exit(3), mals spécifique & Linux), Cette introspection dans le programme nous @ permis de suivre pas & pas Vexécution de notre utilitaire. Chaque ligne correspondant a I'invocation particuliére d’un appel systéme mis a disposition par le noyau, Cos appels systéme sont en général appelés au sein de primitives mises 8 disposition pares bibliothéques standards du systéme, comme la bibliothéque C. Pour illustrer notre propos, nous allons faire appel aux primitives fopen(3), fread(3) et fclose(3) dans un programme et regarder quels sont les appels systéme qui sont utilisés. Notro programme (test.¢) sera simplissime ier poner Paneth SYSADMIN avec strace et Itrace vis & vis du noyau : Pe ray rete ‘On comprend alors quela primitive fopen(3) estimplémentée par I'appel systéme open(2), tout comme freed(3) se repose sur read(2) et fclose(3) sur close(2). Un petit tour dans les sources de Ia gLibe nous confirme cela. Le eats On dispose d'un certain nombre dalias quiregroupent. Une compilation et une exécution plus tard (sous I'égide de strace), voila le detail de ce qui est réellement exécuté ez vos applications avec stra strace est de loin la meilloure solution pour suivre 'évolution un programme quand on sait s‘en sorvir ; rien de tel que de consulter le manuel pour consulter toutes les options disponibles, ‘Tout ce que nous venons d’ahorder semble valable pour un programme que I’on peut lancer en ligne de commande, mais semble difficilement applicable pour un programme déja lanoé, co qui est pourtant trés courant surtout pour des programmes que l'on a pas développé sot-méme. Heureusement,ilexiste une option permettant de «s‘accrocher > ‘un processus deja lance et nous permettant tout de méme de suivre son activité (Ies traces sont alors identiques aux exemples précédents) -e trace=process Seul petit défaut, parfois ‘Trace tons les appels systéme qui sont relatifs {lla gestion des processus (Fork, wait ctexee par exemple) ~e tracesnetwork “Trace tous les appels systéme relatifs au réseau Trace tous les appols systeme relatifs aux signaux ‘Trace tous les appels systéme relatifs aux fonctions IPC du Systeme V -e tracesdesc ‘Trace tous les appels systame relatifs aux lorsque vous quittez strace, le programme espionné va continuer& penserquilesttoyjours sous observation et va se figer entiérement. Vous pouvez débloquer Jasituationenenvoyant esignal -CONTa votre programme. par famille tous les appels, systéme les plus importants fichiers | LTRACE Ltrace comble un besoin récurrent dans le débogage @applications sous Linux :suivre pas a pas 'oxécution d'un programme, mais placé du point de vue des bibliothéques partagées. Une Bibliotheque partagée (autrement appelée bibliothéque dynamique) offre un ensemble d'interfaces logicielles, généralement basées sur les appels systéme, qui regroupent 2u sein d'une méme thématique un ensemble de fonctions répondant une problémeticue commune (par exemple la Lib, la Libz pourla compression par gzip ou encore une bibliothéque mathématique comme Eigen). Les biliotheques partagées ne contiennent pas de code directement executable, mais plutat du code passif qui sera li e posterion de fagon dynamique (chargé & la volée) a un exécutable réceptionnés (il faut bien évidemment que le programme ait été compilé avec une édilion de liens dynamiques). 1 peut aussi, de facon similaire & strace, tracer les appels systéme, méme si ce n’est pas souvent pour cela quill est utilisé (option -S). Quel intérét, me rétorquerez-vous, de tracer les appels aux bibliothéques partagées, puisque’on reste uniquement dans Yespace utilisateur : strace semble alors plus pertinent. (On peut vouloir identifier précisément quel sous-ensemble des fonctions d'une bibliothéque est utilisé pour faciliter son débogage ou encore surcharger une fonction d'une bibliotheque partagée grace a la fonctionnalité LD_PRELOAD du chargeur ld.so. Les noms des fonctions peuvent aussi apporter des informations pertinentes, méme si celles-ci Concrdtement, il s‘agit de fonctions qui seront chargées - 2, eal sie ak cate ne sont pas documentées. dans des programmes par I'intermédiaire du chargeur de bibliothaques dynamiques Ld.so dont les quatre fonctions dlopen (3), disym(3), diclose(3), dlerror(3) implémentent Vinterface. ‘trace est complémentaire a strace et, bien que peu connu, il reste un outil de choix du hacker Linux. easceias Limtérét des Dibliothéques partagées réside dans le fait qu’elles contiennent du code que l'on souhaite partager entre plusieurs exécutables pour factoriser les efforts de développement et surtout qu’elles permettent d’éviter de upliquer'emapreinte de la hibliothéque dans la mémoire vive ! (ce qui serait le cas si on liait la bibliotheque en statique). ‘trace interveple et enregistre les appels aux bibliotheques partagées effectués par un programme ou les signaux Lutilitaire Ldd retoumne la liste des bibliothdques dynamicques nécessaires & un programme avec le chemin complet de chaque bibliothéque qui sera utilisée (ce qui est requis pour la bonne exécution de votre programme). Grace & Ltrace, nous allons pouvoir observer quelles fonctions sont effectivement utilisées dans ces bibliothéques. Pour connaitre la liste des symboles utilisés dans une bibliothéque dynamiquo (en général, des fonctions), le mieux est d'utiliser Voption -T de l'utilitaire objdump Les symboles tagués *UND* sont déclarés généralement dans une autre bibliothéque dynamique. C’est le cas, par exemple, de la fonction abort (3) qui est déclarée dans la glibe comme le précise le champ GLIBC_2.0 ‘Tout comme strace, on doit préciser si Yon veut suivre les sous-processus fils avec l'option -f et 'on retrouve exactement los mémes options pour sauver les données genérées dans un fichier ou s'accrocher A un processus, existant, Conclusion strace ot Ltrace cont voo amis. lle pourront vous aider & progrosser dans votre compréhension des mécanismes internes a vos programmes et vous aideront & déboguer et comprendre pourquoi vos applications bloquent ou se comportent étrangement. An croire la premiére partie de cet article, strace serait donc la panacée ; le programme absolu. Bien qu'll soit extrémement pratique, il existe néanmoins des situations oi iI n’est pas conseillé de I'utiliser. La premiére est que lorsque vous essayez d’utiliser conjointement strace sur un programme qui utilise le bit setsuid (abréviation de « Set User ID ») ; cela fonctionne, mais vous perdoz tout lavantage de cotte propriété, & savoir qu'un exécuteble dont V'attribut setsuid est positionnd, peut s'exécuter sous l'identité d'un autre utilisateur La seconde est lorsque votre programme est astreint & de fortes contraintos tomporellos (par son observation, strace ralentit fatelement l'oxécution de votre programme). Cela ne pose généralement pas de probléme la majorité du temps (peu perceptible pour la plupart des applications), mais peut S‘avérer critique voire rédhibitoire si votre application se rapproche d'un comportement temps-réel, Ltrace (article traitant des mécanismes intornes disponible sur [3)), traité de facon moins enthousiaste dans la seconde partie de l'article, n’est-pas en reste et posséde en particulier lest possible avec option -1 de n’afficher que les symboles inclus dans les appels a certaines bibliothéques (jusqu’a 20 possibles) En pratique, il est délicat utiliser trace sur de gros programmes, en particulier graphiques ; le résultat ne donne généralement pas grand chose (le programme ne se lance pas ou aucune trace n'est affichée) Parcontre, surdes programmes sans interface graphique, le résultat est meillour. Regardons comment cela se comporte sur un programme maison ats rarest i A Vexécution, on retrouve notre primitive printf(3) qui fait partie de la gLibe ara coer Ltrace est un logiciel un peu frustrant, car il semble comporter des limitations qui modérent son utilisation, En. effet, la difficulté de tester ce programme sur de « vraies » applications n‘incite pas ala confiance; pourtant, ce programme saura & occasion vous rendre service et est en tout cas un excellent moyen pour 'initier aux bibliot trois défeuts asove yeuails. Ce programme fonctionne seulement sous GNU/Linux et sur un sous-ensemble assez réduit d’architectures. Il ne peut tracer que des binaires au format ELF 32 bits et il arrive parfois qu'll ne parvienne pas a suivre l'activité do ses fils (un vrai pére indigne en somme). ‘Utrace est certes moins abouti que strace, mais!'utisation conjointe et circonstanciée des deux peut rendre de grands services. A vous de jouer ! Js cullauie atgre | | | | Garder l’historique des changements de /ete Come aie Meee he Me aire aS edo 2S ree Lng I'habitude de modifier les nombreux fichiers de configuration Rotel stlacevi gw Lomm Ola med TC Me UTI * mn cae) eee) Fearon urea Oa Lod Uc cdc Le CLcom CL CeLeL sil s’agit OMS clel Come ee SoA Ua] possibilité de revenir en arriére. Malheureusement, ce type PTO ores inte aera c dela culture de base des administrateurs systéme. Mais, nous EMPRESS (aC RCAC Maton Nous allons voir dans cet article comment nous y prendre, avec deux outils assez | proches, Subversion (svn) et svk. Ces deux | commandes on de lenges possbiltésconrues ‘pour gérer des « projets logiciel » complets, mais nous nous contenterons dans cet article d'un nombre limité de fonctionnalités, en | existe actuellement de nombreux systémes de gestion de versions (en anglais, SCM, Source Code Management, ou VCS, Version Control System), dont le plus populaire | est encore Subversion (svn), méme s‘il est ] fenetioeliewent dépasse par des avatars plu modernes, comme Git, Mercuriel ou Bazaar. | svn reste conceptuellemont assez simple ; si ‘yous ne connaissez aucun VCS, vous pouvez | commencer par celui-i. svk est uno sur. Couche & svn, implémentée en Perl, qui lui apporte quelques fonctionnalités intéressantes. Dans le cas qui nous occupe, svk ost aussi simple & utiliser que svn (voire un peu plus & Vinttialisation), avecun effet de bord intéressant, | comme nous alions le voir. | Notre but est donc de « versionner » toute la hiérarchie /ete afin de pouvoir par la suite interroger l’évolution de nos fichiers de configuration, Le principe avec Subversion est simple : le répertoire /etc va devenir une cople de travail (working copy) d'un « projet » (un répertoire en fait) que nous allons baptiser etc-svn et qui sera stocké dans un dépét (repository) séparé. Dans une utilisation classique, chaque développeur a sa propre cople de travail sur sa machine, et Passer /etc sous Subversion négligeant celles qui servent essentiellement aux développeurs travaillant en équipe (mult utilisateur, synchronisation sur un serveur réseau). Toutefois, espero que les exemples vous inciteront & mettre le pied a I'étrier pour découvrir par vous-méme les autres fonctionnalités de svnisvk. Le préalable est done d’installer Subversion, et éventuellement svk. Vous pouvez trés certainement le fairo avec votre outil favori de gestion de paquets, Aptitude, Yum ou toute surcouche graphique. Je donnerai vusuite quelques aatucce qui cont plus typiquemont réservées & Debian et dérivées. mais lessentiel de l'article s'applique & toutes les distributions. le dépot est assuré parun serveur accessible via un protocele réseau. Pour nous, deux particularités : le dépat est local, et ne sera ouvert qu’au seul utilisateur root. La premiére étape est de créer espace du épt, Nous effectuons ici une configuration systéme. Done, l'utilisation du compte root est inévitable &; La promiére commande (nkdir) ost juste 1a pour créer un répertoire destiné aux multiples dépdts svn que vous voudrez gérersurle systéme. Vous pouvez aussi décider de le garder sous /root si vaus préférez La deuxiéme ligne est spécifique & la création d'un depot svn, Vous donnez ‘un chemin complet, dont le dernier composant (ete-svn) est oréé par la commands. Automatiquement, le répertoire est peuplé Vous pouvez explorer ce répertoire, mais le contenu est quelque peu cryptique. Pour Vinstant, vous avez tout & fait le droit de le considérer comme une boite noire, Les commandes svnadmin et sva vous permettront plus tard den retirer les informations intéressantes. Les commandes svnadmin et svn sont structurées de la méme maniére : elles sont suivies d'une sous-commande, éventuellement-d’options, et d’arguments. synadmin help ‘vous fournit la liste des commandes ; svnadmin help sscmd détaille une sous-commande. Idem pour la commande svn. Nous allons maintenant initialiser le dépét proprement.dit, partir du contenu de /etc Fed ft Conners Nous obtenons un défilé de lignes Ajout nom_de_fichier, suivi de Révision 1 propagée. On peut remarquer que l'option =m ntroduit un message manuel (commentaire) résumant Ja modification (ici, Yimport initial). Si vous l’omettez, la commande appellera! éditeur interectif (défini par la variable denvironnement EDITOR) pour que vous puissiez entrer ca message. La révision correspondante est numérotée 1. Ce huméry s'incrémentera réguliérement et aulomatiquement avec les modifications successives. Le premier argument () est le chemin du contenu a importer. C’est bien un chemin, relatif ou absolu, Le deuxiéme argument est URL, du dépét. Ici, le dép6t est local, donc !'URL est préfixée par Ie protocole file: // ; les autres protocoles autorisés ar svn sont : svn, svn-tssh, http(s). De facon générale, svn distingue toujours chemin et URL, méme s'il sait travailler tantét sur une forme tantét sur l'autre. Le travail n’est pas fini pour autant : le dépét est créé, mais /etc nest pas encore une copie de travail de celui- race aux outils de suivi de version (svn, svk' cl. Voici donc le passage le plus délicat. Pour facilement pouvoir revenir en arriére, on va transformer /ete en lien symbolique sur une copie do sauvegarde Encore un défilé de lignes A /etc~svn/nom_de_fichier, terminé par Révision 1 extraite. Coci fait, vous pouvoz vvorifier que tout s’est bien passé avec la commande Voila, vous avez votre copie de travail | Cette séquence n'est pas particuliérement critique, et on a utillsé un lien symbolique pour basculer en un temps le plus court possible de /etc-orig vers /etc-svn. Si quelque chose tourne mal, rétablissez juste le lien symbolique vers / ete-orig. Il n'est pas inutile non plus de garder une sauvegartle (tar...) du répertolre /etc. Le mieux est quand éme de vous entrainer un peu avant de vous lancer sur un serveur en production. Les commandes svn import ot sum checkout no devraient maintenant plus vous servir : elles sont limitées a I'initialisation du dépat et de la copie de travail rspectivement, Do mémo, /ete-rig ora inutilo Ges que vous vous serez assuré que tout fonctionne bien avec Varborescence versionnée. Simaintenant vous regardez Ie contenu de votre nouveau / etc, vous allez constater qua presque double de volume par rapport original : cela est dil aux répertoires cachés . svn quile parsement. Ce sont les métadonnées de Subversion. Elles contiennent en particulier un cache du dépét, pour accélérer les comparaisons quand le dépot est accessible & travers un réseau. Ici, ce cache est inutile, puisque le dépot est local, mais svn conserve son fonctionnement habituel Le promior défaut do co cache est donc lo doublomont de Ja taille du dépat ; son deuxiéme défaut est la présence de ces répertoires .svn, qui, dans des cas tres rares, peuvent légérement perturber le systéme (messages d'avertissement par exemple). Toutefois, cos deux petits désagréments sont ‘res largement contrebalancés par le confort que procure svn. Passer /etc sous svk i svk est un systiime de gestion de versions décentralisé, C‘est-&-diro qu'il vous permet do gérer votre propre dépot ‘personnel (un par utilisateur systeme), et éventuellement, de le synchroniser périodiquement & un dépOt centrelisé (collaboratif). Dans notre cas, le dép6t sera affects & root, fet autonome. Si vous n’avez aucun dépét standard pour root, créez-en unavee Vous avez maintenant un dépét personnel pour root, qui sera référencé par svk sous le nom //Local. Ici, Voption --to-checkout permot d’effectuor & la fois Yimport et extraction de la copie de travail ; par rapport svn, elle nous feit donc gagner une étape. D’autre part, SYSADMIN le répertoire /etc n'est en rien modifié en devenant: copie de travail (pas de répertoire .svn), Le seul inconvénient de svk sur svn est que les opérations suivantes demandent plus de ressources ; un update, Je suppose maintenant que vous avez utilisé svk; sivous avez préféré sva, aucune importance : les sous-commandes sont quasiment las mames. Je signalerai les rares divergences. Commencez a prendre en main les possibilités de svn/ svi avec une opération simple : modifiez le fichier /ete/ passwd, par exemple pour changerle shell d'un utilisateur, puis tapez la commande suivante svk vous indique la liste des fichiers qui sont dans un état (status) différent de celui du dépst, précédé par un code mnémotechnique : M=modifié. svk help status vous en ira plus sur les codes et tats possibles. svk diff vous permet d’en savoir encore plus Si vous ne connaissez pas la commande diff, profitezen pour vous familiariser avec elle et sa sceur patch ; tous les VCS reposent sur elles pour gérer les fichiers textuels. Ici, Vexemple est simple et ne devrait pas vous arréter, ‘Vous pouvez continuvr vus mulifivativus su /ete/ passwd. Apres quoi, deux solutions s‘offrent a vous. La premiere est d’entériner vos changements, avec la sous-commande commit Ainsi, yous mettez & jour le dépét ot votre copie de travail est maintenant synchronisée (svk status ne renvoie aucun changement), [autre altornative est d’annuler vos changements (avant commit, donc) pi De cette fagon aussi, la copie de travail est resynchronisée avec le dépét. Maintenant, supposons qu’on ajoute un utilisateur par une commande standard as Utilisation de notre /etc versionné (erred saiisconteon immédiatavec svn, peut prendre quelques secondes avec svic sur une machine de faible puissance et avec un répertoire bien pouplé (comme lest /etc généralement). La commande adduser a modifié 4 fichiers, ce dont Svk status nous informe. On décide de commiter cette ‘modification, avant d’en faire d'autres. On effectue ici un « commit atomique » : les 4 fichiers sont marqués comme modifiés ensemble, ot sous un mémo commun, Sion choisit de revenir en arriére, les 4 fichiers resteront dans un état coherent. On peut maintenant consulter une synthése des révisions successives du dépat (escent Tories secon) Deux options utiles sont -r révision (ou intervalle de révisions), et -v (verbose), qu’on peut combiner ere ey tata es Cost ipa En particulier, -v donne tous les fichiers affectés lors d'un commit atomique. Inversement, ’affichage le plus compact est fourni par -q (quiet) Lorsque vous avez terminé une séance de travail dans /ete, etégalement avant de commencer, ilest logique d’effectuer un svk update. Cette operation est le symétrique du commit : elle met jour votre copie de travail en fonction des changements quiont eu lieu dansle dépot (par d’autres). (RONNIE) Dans notre cas, il ne devrait pas y en avoir, mais lo faire permet ce garder les bonnes habitudes de synchronisation dans les deux sens. Maintenant, supposons que vous examiniez un fichier particulier et que vous vous demandiez « d’oi sort cette ligne euspoote ? ». Vous pouvez commoncar par Lister loo modifications de ce fichier, en précisant son nom : par exemple svk log passwd. Si cela ne suffit pas, la sous- commande blame vous mettra sur la piste Cancale Chaque ligne du fichier cible est affichée précédée de trois, informations : la révision de modification, 'auteur (pas intéressant ici) etla date. Vous pouvez alors coupler cette interrogation avec un svn log ciblé pour en savoir plus sur le contexte de la modification (heure, mémo, autres fichiers impactés...} Si maintenant vous décidez d’annuler une modification, ‘concentrez-vous : c'est la partie la plus compliquée, méme si elle n’a rien d'insurmontable. Tout d’abord, souvenez- ‘vous qu’une modification commitée sera toujours présente dans/historique : si la révision 4 ne convient pas, modifiez Ie nécessaire et passez a la révision 5. C’est le principe de base d'un gestionnaire de version. existe généralement plusieurs maniéres de faire, la plus rudimentaire étant de défaire a la main (édition du fichier) ce que vous avez fait précédemment, puis de commiter. Hop, c’est réglé. Mais si vous voulez revenir sur un commit sald hinn identifi, ily a pins direct. Suppesnns qe us. vouliez annuler I'ajout de l'utilisateur cecile Lun des avantages de versionner /etc ost la « surveillance » des installations de nouveaux logiciels parles paquets fournis par votre distribution. En effet, vous pouvez facilement connaitre la liste des principaux fichiers installés (binaires, docs, pages de man...) avec dpkg -Lou rpm -q1, mais souvent les fichiers de configuration sont créés par des scripts de post-installation et ne sont pas listés par ces outils. installation d'un paquet (etde ses dépendances éventutelles) peut avoir plusieurs actions surles fichiers de configuration lune modification de fichiers existants, un ajout de nouveaux fichiers, et (plus rarement) une suppression. La commande vk status (abnigée en st) vous signalera la liste des fichiers affectés, préfixés parles caractéresM, ? et ! respectivement. Supposons par exemple que nous souheitions installer les, (excellents) utilitaires du paquet sysstat Impact sur la gestion des paquets (deb/rpm) SYSADMIN La sous-commande merge est Ia combinaison d'un svk iff avec un patch. Elle naffecte que la copie de travail, dont elle met & jour (U=update) les fichiers. Dans toute sa généralité, 'émploi de merge est assez compliqué. Ici, nous appliquons le commit de la révision 4 &envers (pour Yennuler), ce quise note -c ~4, Mais svk help merge (et la doc de référence) vous en diront plus sur le sujet. Enfin, vous pouvez appliquer un commit un nombre limité Ge fichiers, si vous les précisez sur la ligne de commande, Par exomplo, on aurait pu fairo (a tort) La raglo générale est simple : respoctez la lagique des commits atomiques. Autrement dit, commitez ensemble les fichiers qui sont modifiés ensemble. Les deux écueils sont Jos commits trop gros (des changoments qui n’ont rion voir sont commités ensemble) et trop petits (4 fichiers liés sont ‘commités séparément). La deuxiéme situation est génante, ‘ais moins que la premiére, qui pose un vrai probleme si Yon veut annuler un changement. Moralité, dans le doute, mieux vaut découper trop fin que trop gros. ar) ae Pornret fem eh Trains Paves Aprés ‘installation, svk status nous permet de voir que le paquet a modifié le fichier runlevel -conf, en a ajouté 4 antres, ainsi qu'un répertoire (sysstat), et ses sous répertoires. Pour V’instant, ces ajouts sont inconnus du dépét, et si nous faisons un commit, seul runLevel.conf sera pris en compte. Il faut signaler explicitement & svicquels sont les fichiers que nous voulons ajouter au dépat. C’estle rOle de Ja commande svk add. Siles fichiers a ajouter sont vraiment trop nombreux, vous pouvez utiliser la syntaxe Svk add --interactive *. svk récupérera alors tous les fichiors qui lui sont inconnus, mais il vous demandera une ‘confirmation individuelle (option - -interactive), préférable ‘quand vous utilisez un joker. Au passage, svk diff nous permettrait de connattre la modification epporiée au fichier runlevel. conf avant de la commiter. ‘Sid’aventure un fichier (par exemple foobar) est supprimé par le script d'installation, c'est a peine plus compliqué. Comme dans le cas d’un ajout, il faut done forcer la modification dans le dép6t. On y parvient par la séquence revert / del / conmit Mais, évidemment, sila suppression de foobar est lige & @’autres changements (ajouts, modifications), le commit final dott étre commun. Los ragles générales lors de Vinstallation de paquets Synchronisez /ete au dépétavant d’installer quoi que ce soit, pour ne pas mélanger les modifications en attente avec celles issues de Tinstallation. x Re-synchronisez. ds que vos paquets sont installés, avant d'avoir modifié les paramétres par défaut, avec un message de type « install tels-paquets » 1 Si vous effectuez des réglages dans les fichiers de configuration, commitez-los séparément, avec un message de type « configuration tel-paquet ». Ainsi, vous enregistroz séparément es réglages par défaut de la distribution et vos personnalisations. Cela vous fera ‘gagner du temps si vous devez refaire les mémes opérations Sur une autre machine par exemple 6 | Astuces et recettes Le butde cette manipulation est de limiter les manipulations nécessaires lors de installation d’un nouveau service dans jetc/init.d/*. Le systeme classique SysV-inlt, & base de liens symboliques est relativement simple ot efficace, mais a\'inconvénient de qénérer beaucoup de manipulations de fichiers lors de installation d'un service, qu’il faut reporter ensuite dans le dép6t per des menipulations svc Lacministrateur se simplifie considérablement la vie en adoptant lesystéme file-rc, quiremplace tous les répertoires re?.d parle seul fichier /ete/runlevel .conf. Les scripts / etc/init .d/* ne changent pas, mais le mécanisme d’appel est modifié. Sous Debian, le changement se fait simplement fen installant le paquet file+re. Les personnelisations qui ont été faites sont prises en compte, et le mécanisme est parfaitement réversible : les paquets file-re et sysv-rc Sont marqués en conilit, e’un est désinstallé quand autre s'installe. Avec fiLe-re, l'ajout d’un service se traduit par Yajout d'une ou plusieurs lignes dans /etc/runlevel. conf, ce qui est bien plus confortable. Dans certains cas, la distribution gére quelques fichiers de configuration extérieurs & /etc, Par exemple, pour Debian, les fichiers de configuration de GRUB, device.napetmenu, Ist sont stockés dans /boot/grub. Par souci d’exhaustivits vous pouvez désirer les intégrer au versionnage dete. C'est faisable simplement grace aux liens symboliques Gene er acca Dans le cas (de plus en plus rare) oit /boot est monté sur ‘une partition extérieure a la racine, cette manipulation pourrait avoir des effots socondaires facheux. Prenez vos précautions. Supprimer du dk qui changent « sa Ce) Pour différentes raisons, certains fichiers de /ete sont ‘modifiés sans intervention manuelle de I’administrateur, On trouve fréquemment :mtab, adjtime, 1d. so.cache, Clairement, ces fichiers eréés automatiquement seraient plutit leur place sous /var, mais, pour des raisons historiques, ils sont sous /ete, et il faut faire avec. En temps normal, cela ne nous dérange pas, mais avec svk status, Ils se comportent comme des « faux positifs ». Voici comment réglerle probleme E ep Tae ae one La premiere étape supprime du dép6t les fichiers ciblés, Loption --keep-Local est primordiale ; sans elle, les fichiers sont également effacés localement. On pourrait s'arréter la : los fichiers n’étant plus connus du dépét, ils ne seraient jamais commités. Cependant, ils compliquent Vatfichage et qénent la lisibilité des futurs svk status. La solution repose sur une fonctionnalité de svn et svicappelée « propriétés », que l'on pout associer a tout répertoire ou fichier du dépét, Nous n’allons pas décrire ces propristés en détail, mais nous en utilisons une spécifique, appelée svn:ignore (svk reprend les propriétés svn), qui permet & la commande svk d’ignorer certains fichiers (quine doivent Pas étre connus du dépét). La propriété s‘applique au répertoire pére de l'objet & ignorer ; ici, & /etc entier, qui est déclaré dansie . (point terminal) du commit, Loption +-hon-recursive du commit indique & la commande de ne pas commiter les éventuelles modifications en attente dans le répertoire, mais uniquement les modifications du répertoire lui-méme. ‘Vous pouvez aussi appliquer cette régle a group gshadow- passwd- shadow- par exemple, Si vous avez bien suivi la convention 1 installation = 1 commit, la commande svk Log vous fournira la réponse, ar exemple Eviderament, sivous obtenez import initial, c'estloupé f pequet a é1é ajouté avant votre installation de svk. I ail peut-8tre partie de Vinstallation de base de votre distribution. En tous cas, c’est la raison pour laquelle il vaut mieux passer /etc sous svk le plus tat possible lors de T'installation de votre systéme. Par exemple, pour le paquet sudo, Si vous avez bien suivi = convention 1 installation = 1 commit Ainsi, on obtient la liste : 3 fichiers ajoutés et un fichier modifié En un mot, oui, en s’appuyant sur les directives apt. conf disponibles : DPkg: :Pre-Invoke et DPkg: :Post-Invoke. Reste & savoir si c’est toujours souhaitable. J'opte ici pour Solutions de vidéo sur IP pour Box, Mobile & PC IF. ANEVI Admins systéme Linux : Développeurs C, C++ Ingénieurs Intégration : éveloppement GUI Web Scripting (Perl, PHP, Python) Retrouvez nos offres sur : ES http://www.anevia.com/careers/ SYSADMIN wer une approche relativement configurable. On pourrait certainement pousser plus loin Yautomatisation, en se Een basant sur le méme canevas. # Alege La personnalisation repose sur un script shell, /usr/sbin/ etevers-instalL, un fichier de configuration minimaliste, /etc/default/eteversionning et la configuration de APT décrite plus haut, Danse répertoire /etc/apt/apt..conf.d/, ajoutezun fichier, par exemple @Letcversionning, contenant les deux lignes La variable EteVersMode, dans le fichier /etc/default/ etcversionning, permet de réglerle degré d’automatisation lors de Vnstallation de nouveaux paquets. Avec la valeur none, rien ne change. Lavalour batch établit un mode le plus automatique possible avant chaque installation, un commit des changements pendants est fait, de méme qu’aprés. La valeur interactive est 4 mon evis préférable : avant tune installation, le script vérifie s'il y a des changements pendants. Si c’est le cas, il bloque I'installation, et demande & I'administrateur de régler le probleme avant de recommencer. Aprés linstallation, il vérifie également Pecan anes cea 1 des changements ont eu liev, et, dans ce cas, affiche fin mémo pour redministrateur. Lidée est qu'une aézie do a poquots ont pu atre instalés en méme temps parle Jeu eke des dépendances alors qu’ils n’ont qu’un rapport lointain. la Dans ce cas, il vaut mieux laisser l'administrateur décider de la granularité des commits. Il existe deux paquets Debian qui sont trés proches de ce que nous avons fait ; etcinsvk, issu du projet DebianEdu. utilise la méme technique (svk), mais dans un objectif dautomatisation totale. 11 réduit donc fortement la marge de manoeuvre de l'administrateur lors de installation de nouveaux paquets. D’un autre o8t6, le paquetetckeeper adopte une approche généraliste, et permet de versionner /etc, au choix evec Git, Bazaar ou Mercurial, mais pas encore avec svk. Cela dit, dans tous les cas, sila commande change, la méthodologie générale reste la méme. Sener tae ce oer air AES SSH est un protocole incontournable, a la fois parce que c acelin eraeial ‘a qu'une confiance limitée dans le réseau qui va et aussi parce qu'il peut servir de iru Cerin) acheminer nos messag (4 ler a des machines transport pour d’autres protocoles non sécurisés. Cet article va aborder une fonctionnalité tres utile @’OpenSSHet de la version 2 duprotocole pour partager des connexions. Introduction Sion parle de sécurité et que Yon parle en méme temps de partage de connexion, on peut soulever un sourcil d'incrédulité, et ‘on aura certainement raison. On n’est pas Vabri d'une utilisation indue des ressources en cas de partage, et n'y a pas de raison qu’OpenSSH échappe a la ragle. 2) Cas @utilisation Imaginez que vous vous connectez sous une certaine identité (toujours la méme) sur un serveur. Imaginez que, pour des besoins particuliers, vous devez ouvrir jusqu’é dix connexions en paralléle surle méme daemon. En réalité, pour chaque connexion établie, un nouveau daemon est démarré (fork) et est a lécoute de cette nouvelle connexion. Ce mécanisme est bien pratique etisole effectivement des processus parrapport a d'autres, mais présente quelques inconvenient, Bl: Pour chaque nouvelle connexion, vous devrez repasser par la phase danthentification, méme sic’est fait de maniére transparente du point de vue ‘Méme si ce n’est pas une nouveauté (la premidre implémentation est apparue dans OpenSSH version 3.9p1), c’est fichtrement commode, et une petite explication de texte nest pas totalement superfiue. Fort heureusement, ily 2 aussi la possibilité {utiliser Notfterpourempéchardes connexions indésirables, méme en local. Et puis, avec SELinux, une politique peut aussi empécher tablir des connexions ou se mettre al'écoute sur un port TCP par exemple. Ge lutilisateura aide de clefs ou d'un agent dlauthentification. Mais, si Yon regarde de maniére détaillée tout ce qui se passe lors d'une connexion, beaucoup de calculs sont effectués pour négocier 'authentification et le secrst partagé pour la suite des communications. Tout cela prend du temps, et débouche sur un processus dédié, Mémo si Linux ost performant sur le fork() en raison de utilisation du Copy-On-Write entre autres, le temps de Jencement d’un sshd n'est pas nul. Siun processus démarre et ouvre une redirection de port TEP et qu'un autre processus utilise, en cas de fermeture Les options qui nous intéressent tout de suite sont = -Mpricise quela connexion sera maitresse (ControlMaster) S fournit 'emplacement de la socket de contréle (ControIPath) D’un premier terminal, il faut ouvrirla connexion mattresse, Lemplacement de la socket de contréle est foreé ici & un emplacement visiblesculement pour le compte d’utilisateur gui lence la commande, Cet emplacement comporte le nom 4u compte d’utilisateur de la machine surle serveur, le nom du serveur etle port TCP utilisé, Ceci évite la réutilisation indue suite, pour les autres commandes, i suffit de spécifier ‘emplacement dela socket de ‘ontrdle, qui sera réutilisée, ans la limite de 12 fois. Bien entendu, siune connexion mualtresse est déja démarrée que jfessaie den démarrer une seconde, ssh se plaint & use litre et désactive le multiplexage tout en continuant Multiplexons sans plus tarder de la connexion qui supporte la redirection, la connexion de l'autre processus est coupée. Dans le cas d'une redirection d’agent d’authentification ou de messages X11, le probléme est que si elle n'est pas. demandée au moment de la connexion, alors il ne sera plus possible de l'ajouter plus tard, sauf & couper la connexion et a ajouter sur la ligne de commande 'option appropriée (-A pour ForwardAgent=yes, -X pour Forwardx1: -Y pour Forwardx11Trusted=yes). ee —— = Sess Juste en passant, utilisation d’une socket de contréle dans ‘/tmp/ n'est pas une bonne idée. C'est juste pour donner un exemple (pas a sulvre) sur une spécification sur la ligne de commandes. oe a Lors de la déconnexion, un message explicite rappelle que Yon utilise une connexion multiplexée. ees 2 - ie Le message est différent de ce que I’on auralt lorsque l'on se déconnecte d'une connexion normale oudelacomnexion maltresse : ° Connection to B closed, Il existe des variantes pour Vouverture do la connexion maitresse, pour tune approche plus interactive (voir la signification de ask pour ControlMaster dans la page de manuel de ssh_ contig(5)).Et, pour faire simple, il est aussi possible d’utiliser la valeur auto, qui va automatiquement créer la socket de contrdle lors de Ja premiére connexion et la supprimer par la suite quand la derniére connexion est fermée, iii TT VOeenemaen Z* Exemple de configuration Plutét que de spécifier les arguments sur la ligne de commendes, on peut aussi spécifier ese User machin StriebiestKeythecking ask HakestuthenticationForlocl ost. yes CantroPath«/,ssh/socksts/Anhtp Cantroitaster auto Canpresstan no NovostauthenticationerLocaltost yes Avantages du multiplexage de connexions La connexion est multiplexée, c'est bien. On va pouvoir briller en soirée, mais, concrétement, qu’est-ce que ca peut nous faire ? Eh bien, la réponse est simple : c'est mieux ! Précisons tout de méme que ce n’est pas la panacée, et qu'il peut y avoir des inconvénients. 5: | Authentification unique La phase d’authontification est unique, toutes les connexions suivantes sont beaucoup plus rapides, tout implement parce que ‘authentification n'est pas retraitée. Sila partie qui prend le plus de temps est le lancement d’un processus & V'arrivée, comme une application ou un interpréteur de commandes, la différence sera certainement imperceptible. 52 | Partage des configurations Si la connexion maftresse utilise Ia compression ou des redirections de messages X11, d’agent d’authentification ‘ude redirections de ports, toutes les connexions partagées héritent de ces paramétrages. C’est normal pulsqu‘ll n'y a qu'une connexion ouverte. Reconfiguration d’un ensemble Mal ce redirections en une fois Pour aller plus Join sur le point précédent, le fait d’avoir uune connexion partagée permet d’ajouter ou de supprimer par exemple des nouvelles redirections & chaud. Toutes les connexions qui seraient multiplexées utiliseront alors immédiatement ces nouvelles redirections, (On peut faire ga trés simplement & l'aide dos séquoncos d’échappement décrites dans la page de manuel de ssh(1). Par exemple, si on souhaite ajouter une redirection, et en supposant que le caractare d'échappement pour la connexion maitresse est le « ~ » (caractére par défaut), on aurait : En réalité, on peut voir cette facilité comme un inconvéniont aussi, Au pire, on pourra filtrorl'accés au port surla boucle locale. Il est aussi possible de spécifier une interface d’écouto différente si on souhaite étre plus large. Gg Inconvénients du multiplexage de connexions 6a | Coupure massive videmment, en cas de coupure de la connexion maitresse, toutes les connexions sont coupées en une seule fois. Cela au moins l'avantage d’étre rapide. Dans ce cas, screen est votre ami, 62 | Les restes de la veille Si la derniére connexion est coupée brutalement (signal KILL par exemple), la socket de contrble reste sur place et empéche les prochains multiplexages. On doit alors la supprimer manuellement. Nouvelle version OBM 2.2 Ke M pac aU cy Sol) Co Ty a eu des soucis avec le transport svn+ssh et Ie multiplexage de connexion. Jo dois reconnaitre que je nai pas suivi co probléme, mais le contournement est de désactiver le multiplexage pour les connexions svn. C'est finalement assoz simple avec un fichier de configuration par utilisateur Host svnhost & User svnuser = ControlMaster no Si l'on a oublié de demander le multiplexage explicite des connexions ou si Von n'a pas précisé une option de compression ou de redirection des messages X11, ilfaudra démarrer explicitement une nouvelle connexion sans multiplexage ou fermer la connexion existante, En supposant quill existe une connexion multiplexée avec cette socket, une connexion non multiplexée sera ouverte, eon Conclusion LE LEADER DE LA FORMATION 100% OPEN SOURCE Bre Coit Le mull ‘aye est tres simple & mettre en couvre, et méme s'il a aussi quelques inconvénients et limites, comme le nombre de connexions multiplexes dans une seule connexion maitresse, le confort d'utilisation est indéniable, Een Dupoint de vue de la sécurité, Ie multiplexage n‘introduit Se ce aa pas pls do falas qu'une authentication side d'un agent. fomsheee =F aiaa Laissez-vous tenter, I'essayer, c'est l'adopter ! MTree et Reco Peat Exe} ANU eee eeCtieaig Bus pel ede Nolte tes Ba Plus de 50 stages d notre catalogue 2009 ! NOUVEAU! stort) Plus diinformations sur www.linagord.com Cet article propose une solution d'utilisation de l'authentification SSO CAS (Central Authentication Service) sur un service Web de consultation et d’envoi de mails. Principe de la « CASification » Le « CASification » est un néologisme qui signifie:ajouterle supportdeT'authentification CAS. Le site du projet JA-SIG [1] indique le nom d'un certain nombre d’applications deja « CASifiées » (Horde, Tomcat Manager, WebCalendar, etc.) Dans et article, nous allons adapterlesysteme d’authentification de SquirrelMail [2], qui est un client de messagerie IMAP (Internet ‘Message Access Protocal écrit en PHP, pour le rendre compatible avec CAS. Nous utlisorons pour cola la bibliothéque phpCAS présontéo dans le numéro 114 de GLMF. Quand l'authentification n’est pas directement réalisée par l'application que I'on veut «< CASifier », il faut adapter le partie client ‘Leserveur de cetarticle, que/‘on appellera mail. iutbeziers. fr, va donchéberger au minimum. Un service IMAP d’accés aux messages réalisé avec Courier-IMAP. Ce serveur propose également le support de POP3 (Post Office Protocol Version 3). | # Unservice SMTP (Simple Mail Transfert Protocol) de transfert et d’envoi de mails. La configuration de ce service ne sera pas deétaillée ici, car celui-ci pourrait faire robjet | d'un article & part entiére. Dans les feits, il s’agit d'un serveur Exin [4] utilisant un annuaire LDAP. Un serveur Web supportant SSL/TLS avec le client de messagerie SquirrelMail. Lenvironnement de travail contient donc également un annuaire LDAP (Idep.iutbeziers. fr) qui héberge la base des utilisateurs du systéme de messagerie. Untroisiéme serveur réalise l'authentification CAS (cas. iutbeziers. fr). Ilestconfiguré pour L’environnement de travail ot la partie serveur. La CASification consiste done ici modifier le systéme d’authentification u serveur IMAP pour qu'il puisse valider un ticket CAS plutot qu'un couple utilisateur/mot ce passe et & ajouterun script PHP permettant dobtonir le ticket CAS sur SquirrelMail. Ce ticket étant validé par un autre service que le script quil'a demandé, il faut qu'il soit de type PROXY (volr GLMF n° 114). Dans le cas qui nous intéresse, le service IMAP sera fourni par Courier-IMAP [3] qui utilise le format de boite aux lettres Maildir. Ce serveur est une des briques qui permet daboutir au résultat escompté, car il possdde un systame d’authentification modulable et complétement personnalisable. interroger|'annuaire de facon sécurisée avec LDAPS (Voir « Utilisation de CAS-Toolbox » dans le n° 113 de GLMF). Cos serveurs peuvent étre localisés sur des ‘machines distinctes ou non suivant la charge et la tolérances aux pannes que l’on veut mettre en place. Il faut également réfléchir ‘aux adresses IP et aux sorvices ouverts sur Vinternet dans le cas d'une architecture utilisant NAT (Network Address Translation), Nous nous placerons ici, dans un réseau local simple pour ne pas compliquer les choses et montrer seulement la faisabilité de la ‘« CASification » de SquirrelMail SquirrelMail [2] est développé en PHP. Il s‘installe facilement sur un serveur Web en : authentification SSO sur un WEBmail IMAP copiant les fichiers de V’archive dans un répertolre publié par le serveur. Dans cet article, le serveur Web est. un Apache httpd sur lequel on a activé le module SSL/TLS our sécuriser la consultation de la messagerie. Il sera utilisé uniquement pour fournirle service WEBmail. On va done installer SquirrelMail a la racine du site qui est par défaut sur cette machine : /usr/Local/apache2/htdocs, Le fichier de configuration httpd.conf indique que le service Web prend I'identité de T'utilisateur daemon du groupe daemon rep "se Lagestion des mails avec fichiers attachés impose d‘autoriser cetutilisateura pouvoir écrire dans le répertoire /var/Local/ squirrelnail/attach (valeur par défaut). Uinstallation de SquirrelMall se fera donc ainsi rs Sun Ce oe eee ty eres Peer ae et Inst fet Oneill eee La derniére étape consiste & configurer SquirrelMail en exécutant le script Perl : /usr/Local/apache2/htdocs/ config/conf. pl (On peut aussi directement créer le fichier config/config. php & partir de l'exemple donné dans config/ , quctascil>, eptionsecull> eb authinenon: pasword matches sucassfally fullsaes, oy 26 18d Now 26 1895: peebwuthdaemond: suhentieated: psuereae=t, sysuerldsaill>, systrewit=16, toedirs/uneleb, actress, nalldie, uctase>, eptlersacull> 161 peck iapd: (080K, wserab, eLseftfe127.0.0.1 Ho 26 18:35:01 peeb imap LOST, user, i= headers, toyed, ree, eet=it4, timed Parameétrage de |’authentification Nous voici arrivés dans le capur de la solution de la «CASification », Un des atouts principaux de la bibliothéque courier-authLib (voir README. authLib. html) est quelle permet de personnaliser complétement le systéme d'authentification sion sélectionne le module authpipe ala ligne 27 du fichier /usr/Local/etc/authlib/aurthdaenonrc, On peut alors écrire un programme dans n'imparte quel langage, pourvu qu'il respecte bien le protocole authpipe. Un exemple en Perl est fourni avec courier-authlib, samplepipe. pl. Le programme d’authentification doits‘appeler /usr/Local/ etc/authlib/authProg sous peine de voir le message suivant dans le fichier de log /var/og/naittog : ‘oy 26 18:49:92 pec autnerond: riles=autplpe, caeson=5 hay 25 18:49:52 pec authdaemn: Installing Vbtapipe authpipe: disabled: failed to stat Rov 25 18:49:22 peed utadoemn ‘usr /oca/ete/athibautirog: No sich Fie or directory 9:22 pooh atafeeond: Installation ceplet: at Ki Le protocole authpipe Ce protocole est utilisé en interne du serveur courrier centre les services pop3d, imapd, webmail et Ie programme authdaemon. Quatre requétes sont possiblos : PRE, AUTH, PASSWD et ENUMERATE. La commande PRE Elle retourne les informations sur un compte utilisateur donné (username) pour un service donné (par exemple imap ou pop3). Le format do cette requéte est le suivant (LF indiquant le code 0x10 ou Line Feed pour passer & la ligne) bie service vsernanel> Si le compte existe, le programme doit retourner une liste d’attributs de la forme ATTR=valuecLF> (un seul attribut par ligne). Cetto liste so termine par une ligne composée uniquement du caraciére point, Les attributs obligatoires sont les suivants ; UID ou USERNAME, GID, HOME et ADDRESS, Sile compte n’existe pas, il faut renvoyer la valour FAIL, S'ilyaun probléme temporaire d’accés aux donnéas (base de données arrétée, annuaire injoignable, etc.) le programme doit se terminer en fermant les flots d’entrée/sortie. La commande AUTH Crest la commande de vérification d’identité. Il faut indiquer la taille des données d’identification en début de commande. nite TeveLaute cata Les données proprement dites (auth-data) nese terminent pas foreément par . Lour format dépendant d'un des quatre systémes suivants service PtoginctPousernnecLPpissiordleranadSc Poca |TorselPresponel LPT serviceclP>cren shall challenges UPrespnset] SevlceclFcran-shaStl Fok lenge rspensal En cas de succés, cette commande renvoie les données du ‘compte correspondant dans le méme format que la commande PRE. En cas de compte inexistant, de mot de passe erroné ou dauthentification non supportée, le programme doit retourner FAEL
  • . Par défaut, SquirrelMail utilise le service imap et une authentification de type Login (valeurs en clair). La commande PASSWD Elle permet de changer le mot de passe de 'utilisateur : PASSA sevice sernanecibolipsvardcTiPrexpassvordCTH <> Dans un premier temps, on peut laisser cette fonctionnalité de c6té en renvoyant la chaine OK dans tous les cas. La commande ENUMERATE Cette commande permet d’obtenir la liste des comptes vtilisatour (un par ligne) au format suivant : TRERATEG _seraereTH>ulGcTA>a¢honedl eT eoptonse.F> Sion ne veut pas implémenter cette fonctionnalité, il faut simplement renvoyer une ligne contenant un point. Dans notre.as,lelangagele plus approprié pourle programme d’authentification est le PHP, pulsque SquirrelMail est écrit en PHP. De plus, toutes les fonctions spécifiques & Yauthentification CAS sont disponibles avec la bibliothéque phpcAs. Valgorithme global du programme commence par la lecture et analyse de la commande présente sur le flot d’entrée (lignes 3, 4, 11, 28 et 33). S'll s'agit de PRE, on va renvoyer le résultat (ligne 8) & Yaide d'une fonction que Yon détaillera plus tard : sendData(). Les commandes PASSWORD et ENUMERATE renverront pour! instant le minimum de données (voir lignes 30 et 35). La commande AUTH, quant a elle, testera en premier une authentification de type CAS (fonction vaLidateCAs() ala ligne 20). C’est cette fonction qui réalise la « CASification » du systeme cOté sorveur. Afin de permetire aux logiciels non CASifiés de fonctionner également, le programme testera ensuite une authentification LDAP avec la fonction validateLDAP().. En cas de succis de I'uno ou autre de ces authentifications, Ie programme appelle a l'instar de la commande PRE, la fonction sendData() & la ligne 23. Lafonction cbExit ) termine le programme correctement en fermant toutes les ressources ouvertes parle programme. Elle ne sera pas détaillée ici. Voici done un extrait simplifié du programme correspondant A cette partie : HL dene ‘LF; 12 1 Gaston du protocol AUTPIPE 1 SeadsfgetsISTOIM sfendertrin So; 14 fF (Greg natch PRE 54) (28 fen $0) Skervicesr1; 87 susertel2h; He sonata ldap suser); cbtxittO); Stersril, M4 Sacthaatafreve(STON, Ten 1G If (Saytndata==false) {cosit (Ds 1G Tis $servce,snuthype user Spasoord)-eaplede( LF Saethistad; 17 saiteh (Hauthape) we 1 case ‘Tea 2h if (yalidateas(tb taser, Spusevord) livalidatelOIP dap SserSpssverd}) seats] ap tus); chet); «CASification» de Squirrel il ; authentificatio “La solution pour la CASification 26 laa (prea natch /*PASSWD (AETV PVR ANNE 214 Fd fr) feo “OC coron Le serveur SMTP est réalisé avec Exim [4] et il est configuré pour archiver les messages danse répertoire /home/USER ‘pourT'utilisateur USER, mais le compte systéme correspondant n’oxiste pas (il est simplement defini sur l’annuaire LDAP). Le vrai propriétaire de tous ces fichiers est le méme pour toutes les boites aux lettres, Ce compte commun a été fixé tout simplement a exim (UID=GID=102). yi a fonction sendData() La fonction sendData() va donc devoir renvoyer un certain nombre de parametres qui ne vont pas changer (USERNAME, UID, GID, lignes 12 14), d’autros seront construitsa partir du nom d'utilisateur (HOME et MATLDTR, lignes 15 et 16) ot d’autres seront issus de l'annuaire (ADDRESS et NANE, lignes 7 et 27). Pour cela, le filtre de recherche LDAP de la ligne 6 précise que les objets recherches sont de type inetorgPersen, quills posshriant un champ mail et que leur champ en est 6gal celui deY'utilisateur contenu dans la variable usar. Les valeurs retournées par 'annuaire correspondent aux champs mail et description (ligne 7). Cos valeurs seront respectivement attribuées aux mots clés ADDRESS et NAME & la ligne 27. La connexion au serveur LDAP (référencée parla variable $Ldap) est faite en début de programme : lus Poca /niptp eh Vapedap_canract| "aps: (Udo. iutbezers fF)"; ‘ap-set_opclondap,LOA_OFT_PROTOCOL VERSION 3)5 1 ObTigateire ever active Firettory ‘Tap. set_opon(Sdp, LOAD OFT_REFERILS By faut, bien évidemment (puisque l'on sécurise la connexion, avec LDAPS), indiquer oit se trouve le certificat de CA correspondant au certificat du serveur LDAP utilisé. Cela se fait dans le fichier /ust/Local/etc/opentdap/Ldap. conf avac la directive TLS_CACERT : TUS.CAGERT _fase/Noceete/epemcap/e,crt SO sur un WEBmail IMAP La version ci-dessous de la fonction sendData() a été simplifiée pour des raisons de facilité de lecture. La gestion des erreurs et Je log de messages ne sont pas détailés. 81 function seebatatsidp, sus) (1a bet ap) vb; £4 Arnyus ad Suseresrtolovet sel; 1) Pour raiser Te aon des rertires HE hase siutbeters,b=tr"s Sites objettaseinetrferse) ale)" utes Sell ester nat ADRESS, cr pen = HAE! SsrLdap.seare($p, hase ter, tray sept STiel))¢ ‘iF (Iss eat); Srelinpcout. entries seep $3); (Sel cesta; (TT ne doit y ote qu'un sal watt 11 cho USEMNEsexi’ LF; cho “UBS LF to "ODS" UF, eto NOEs ser. LF; ‘echo MALDD hon", fuser." ili’ LF ST AtTich Tes attribits silent Seniry-dapget entrias esp, fr}: Yeap free-resuTt ser), haynes og) for St;tichstien J/ 1 seul résuttat (cf, Hgne 11) 4 foreach (Seatry[8i) os Sattr=tiales) for (858 Afshatuesy cout 78404) { echo sel ds{Satir. "=" Saluest 9.8; Ea La fonction validateCAS() Le fonctionnement interne de SquirrelMail nécessite plusieurs connexions/identifications IMAP pour ouvrir une session (3 pour la premiere page, cf. /var/Log/mailog). Ceol implique que V’on va avoir une réutilisation du ticket CAS initialement fourni, Malheurousement, les tickets CAS sont. usage unique (ils ne peuvent étre variniés qu'une soule fois). 1 va donc falloir créer une base de données (BdD) des tickets validés pour que le systéme puisse fonctionner, Co « cache » de tickets sera réalisé avec sqlite (simple fichier) pour faciliterIes choses, car PHP intiagre nativement la gestion de ce type de BaD. I faut noter cependant que dans sqlite, le type de donnée pour un champ contenant, la date et Vheure s’écrit TIMESTAMP au liou de DATETIME. 4u final, initialisation de la base de données pout donner le code suivant fine 85D usec teat casP- cache); efine “AS TALE cas"), ‘1 Iniialteation tes variables pour la fonction syslog) Fi Pernt de canserver me trace de Veseeution cette systog var ables 1/ DAFiniion de Vente des messages guar 5ysTog) 17 AMIRI caresgendw Feherftnagseeure (ir fesse. cof) openog( TMF Ath 16. F1, 6 ATAPI: H/Yarable pernettank dy savett st 11 faut ender CEATE HELE ‘A faire avant elite pen) car ostte fenton enée Te Fetter IL HU ML Lipton FMT) eit prin fe Westen 3.84 site lecensts (CS 80); ite_open( A800) ysog(LOG ER Tapessibe GV’ nore Te BAD CA. 6D 1 eb; } ‘if (AuusttreteTibe) i SI" CROTE TABLE CAS TALE." C5 sql_=pley INTEGER AUTOTRCENEM, Sql user AREA) TEFALT MLL, "5 Ssq]-=ticket ARABRC8) OEFALLT WL, sq." TINESTIND EFAUCT WLL, 4s. = PRAY Eph)" ‘eahite query seq); Af (Gerrsglite Tas errr(sah) syslon LOG ER sate eror-strineSere; chexielD; ) else sysLog( LOS, EL $5q.'] 0k Is La fonction validateCAS() doit vérifler dans un premier temps (ligne 11), si le mot de passe fourni ressemble bien a un ticket CAS (commence par ST-). Ensuite, si le cache des connexions contient le ticket pour l'utilisateur donné et que la date de validité (dv) n'est pas dépassée, Yauthentification ost un succds (lignes 23 a 26). Sinon, on essaye de valider le ticket auprés du serveur CAS avec Ia méthode validatePT() de la bibliothique phpCAS aux lignes 32 ot 33. Si le ticket est vallde, on enregistre, dans le cache, le ticket, l'utilisateur et la date de validité (lignes 34 a 43). (On pourrait aussi, on toute rigueur, vérifier que 'utilisateur donné (user) correspond bien colui qui a demandé le ticket ($PHPCAS_CLIENT-2getUser()) Voila ce que peut donner le code de cette fonction : regutr. once (15-1. 6.1088.p9"}s Gene! "CAS SERER, ca, lutbeters. fr"); eefiel "CS FORT B43}; efit OS_UR',"; eine ‘SERVICE’, nap: /ocahost*); tetine( TIMEOUT 368), cache de 1h fametton validates so, suse, st2hat) Sovetine(); // eure artustTe en secandes HF false indiqu dene pas eweir de session cS: cent CAS_ VERS IOS SERVERS PFT ASR fas) 1/ ‘Ne pas verifier lo certifiat Wu serveur OAS ips: setNatasServrtalidation); pS: :setFixeServicalSEAVCE|; SPH CLIEN-SI05EA CM cf, 45-1. 6.70 lp Tae 15 i Ne srate que ce aut rossenble & un ticket 1S Mf Lpreaumteh St" Sticke) 4 8 1 Recherche ur encepistranent ou Ta date de malfdité (4) i ‘est plus orance ue I hesre actuelle (t) 1S ——_‘Stestrtinet"8Y-tnSd XKAN:', ows 7 Frat SOL 16 SaWl"STLECT * FHON*.C4S TABLE," WERE user" $user. N° 7 Sef =! AMD Hekete\" ttle" 8 Soq1=? MD AV SLANT: 8 Sresultglite query, fog); a if (Sresut) a 1 2 substi te_nun rows sresut; 2 SF (OMMEL) (1 OC + Te chet existe dans Ta Bed 4 { 8 return trues 6 a else (/ Nériffeation du ticket 8 1 3 SuPCHS_CLIEM->setPt(sticket sa ‘ya ate u-45, (LIEN >etsererromi ite; 31 17 Nalide Te tioket pris serveur (AS 32 Ses=$P#PRS_CLLENT>vaideteP Sra date) 3 "Stentesganse, Sree espns HM ‘if (Gres) 7 Ok : suvenarde cans 1a BeD 38 { 36 1 a date devi (tu) erased & TENT sects 3 14 parti de mintarant. (oon) 38 sorstefb ne MY-ta-36 MAM:ES Sows TINEOT); a8 Seq" (ISERT MTD C15 BLE Premiers tests Le premier test du programme d‘authentification peut se faire on ligne de commande usr ecal/ete/ aut iautProq aE. map cb USERIANE extn oa HALLOTR=/honefcha ci istpte SELLY avaessechalutbeziers. fe Le second test vérifie la commande AUTH avec l'utilisateur cb. La chaine & envoyer est imap\nlogin\neb\nazerty (le mot de passe est égal a azerty pour I'utilisateur cb dans Yannuaire LDAP), Elle contient donc 20 caraciéres erty SERUOME-exin Twoer telat dv) TUNES, (Wr sasen\)" stoke. Vf, # return Oslite query (8,541); 8 } a } 45 ) return fase; 4.3 La fonction validateLDAP() Lafonction validateLDAP() vérifie Videntité de utilisateur cen utilisant la fonction Idap_bind() pour laquelle il faut préciser le DN (Distinguished Name) de l'utilisateur. Celui-ci correspond au nem absolu de l'utilisateur dans arbre LDAP, Dans notre annuaire, tous les utilisateurs se trouvent dans la branche ou=people et sont identifiés par leur nom commun (champ ch). On a done par exemple, pour l'utilisateur cb, un DN égal a cn=cb, ouxpeople,de= iutbeziers, de=fr. inetion vadateloa (FT, user Sst) ( suserttespi att ‘cts ,ou-paple dl atberers dcr’ fuse) return Elda bind Sap, tusr0h, fps ) Nae stop BOREL MORESs-cetberiersfe Ine reste plus qu’aactiverle module authpipe (et désactiver Jemodule authshadow) ala ligne 27 du fichier /usr/Local/ etc/authLib/authdsemonrc : authnoduleList="authpipe Ine faut également pas oublier d'effacer le compte local ulilisé pour le premier tastde courier-inap et SquirrelMail (cf, § 2.2.) et de changer le propriétaire du répertoire ‘shome/cb : Aprésont, ce doit étre 'authentification LDAP quifonctionne, car I'authentification CAS n’est pas encore finalisée dans SquirrelMail. Voici ce que donne le fichier de log /var/ Log/mailtog aprés une authentification réussie Hor 26 19:23118 pec) authdgemnl: attenpting to fork ov 26 19:23:18 pech authterot: exciting /tsr/Lca/eteuth ih eutfreg 1 pech authdaenmd:Fipe out startet Pie-progran (id 528) 16 pech avthdaunand nev pipe tas in; 8, aut: 7 ov 26 19:23:19 pee authéaennd: utter \ctad: systsernane=exia, sysusertlt, sysrnpiteli2, fonedir-/honelch, aress-ceiutbeniers.fr,faTTmne-Christophe ORELLY, rai ldirs/hone/ebMaileir, qotecwli>, optons= SSO sur un WEBmail IMAP ov 25 182518 pechimapé: LOGIN, user-ciutberiea fr) ‘petit tfYs12.8.4.2), prt=[oie, protoee=lMe Nov 26 19:23:19 sek tape LOGIT, usersbelutbeners.f, Siete FF L2T.0.811, headers=t6, cy revs! Sentai, tine-9 Surle serveur LDAP silo log ost activé (par exemple avec slapd -d stats), on peut voir dans|e fichier /var/Log/debug, La demiére étape de Vopération de CASification consiste a écrire, pour le client de messagerie, le script PHP réalisant le proxy CAS du processus dauthentification. Ge fichier sera place a la racine du site Web et s’appellera dans la suite : casProxy..php. Afin de faciliter utilisation du systéme pour les utilisateurs, ‘on peut ajouter a la fin du script, qui génére la page de login de SquirrelMail (sr¢/Login. php), un lien vers le script casProxy..php 244 cook ‘login botten' 245 1/ Pact ajeuté pur Te (ASifeatien 245 Sure’. feasPraxyhp'; 287 Stet" utenti cation C8) 218 ecto “ep style total tance 249 coho a ete Sur tt es ema “Ip 2 852 LescripteasProxy.phpdoitindiquer quilutilise le service imap:// Locathost avec la méthode phpCAS: :setFixedServiceURL() alaligne 23. La valeur doit étre identique au service précisé dans le fonction validateCAS() de authProg. Ala ligne 25, on récupére le ticket proxy correspondant & ce service. Ensuite, il faut sauvegarder le nom 'utllisateur et le mot de passe (ici le ticket) dans la session. Le nom de ces variables de session (Login_usernane ct secretkey) est obtenu en étudiant Ie source du fichier sre/redirect.php vers la ligne 44. Enfin, on renvoie I'utlisateur vers cette page. avec la fonction header () la ligne 29, pour simuler Ja validation du formulaire de login (cf. sre/Login.php) Nov 26 1:25e8 Np slge(367: com38 op HIND de” veil Nov 26 18:2:18 Tp sapd(438): conn od RESULT tam) err tet= Yo 26 18:02-8 ap sage S8): eme38 op] SAH bac="denutheriers ef" coped deref-¥ Filter="UolobjertlassinetOrgPersoa](nail=) (asc) ov 26 18:73:18 Tea sTapi[438) com=s5 eps SAH attra deeeigtion Roy 26-1238 Ida slap 338]- co opel SEAN RESILT ta 101 rl reniriesel tet= Nor 26 18:28:18 Tap Slpa[38]: em opt UBL Nor 6 1:28 Tap slape(3EH]: comme FE closed or 1

    Ce script doit se trouver é la racine du répertoire des sources de SquirreiMail (la racine du site Web dans notre cas) pour que I'mclusion de config/config..php et que la redirection automatique sur la pago src/redirect..php fonctionnent, Pour la version 1.4.16, il m‘a fallu modifier légérement les sources de SquirrelMail pour que la session ulilisée dans casProxy.php et cello de src/redirect.php soient les ‘mémes. Le probleme m‘est apparu lors de la déconnexion, puis de la reconnexion SquirrelMail. Les données de session étaient mal propagées par le cookie transportant Videntifiant de session. Il avait étrangement Je format suivant (obtenu par captures de trames HTTP) CooLles SRSESIB-STuOsCbanet AeA; squrrelatT_ Tanqungdeleted SWSESTD=STay TRASH eoBabmgCK En tracant les identifiants de session dans les 2 scripts, je me suis apercu que Squirrolmail utilisait le premier o>}

  • Vous aimerez peut-être aussi