Sunteți pe pagina 1din 1177

Mon Journal lcole Ouverte Francophone (OF)

LEGER Richard
richard.leger(_AT_)gmail.com

Mon Journal lcole Ouverte Francophone (OF) par LEGER Richard Publi Dcembre 2009

Mon journal retrace mon experience de certication CP2LL organis par lcole Ouverte Francophone (OF)

Cette documentation est soumise aux termes de la Licence de Documentation Libre GNU (GNU Free Documentation License) (http://www.gnu.org/copyleft/fdl.html). Les programmes sont soumis aux termes de la Licence Gnrale Publique GNU (GNU General Public Licence) (http://www.gnu.org/copyleft/gpl.html).

Table des matires


1. Licence ....................................................................................................................................................1 2. Introduction............................................................................................................................................2 2.1. Logiciels Libre et Open Source ( code ouvert) - FLOSS ..........................................................2 2.1.1. Quest-ce quun code source? ........................................................................................2 2.1.2. FLOSS ? Quesaqo ?........................................................................................................2 2.1.3. Le logiciel libre...............................................................................................................2 2.1.4. Le logiciel open source...................................................................................................3 2.1.5. Les quatre liberts essentielles de lutilisateur dun programme ...................................3 2.1.6. Le logiciel libre : comment a marche ? ........................................................................4 2.1.7. Promouvoir le libre dans les entreprises et les administrations ? ...................................5 2.1.8. Comment augmenter/amliorer lutilisation des logiciels libres en gnrale et des distributions GNU/Linux en particulier ? .......................................................................6 2.2. Facteurs de qualit dun logiciel (B.Meyer et G.Booch) ..........................................................11 2.2.1. Constat :........................................................................................................................11 2.2.2. Liste minimale de critres de qualit du logiciel (daprs B.Meyer, G.Booch) ...........11 2.2.3. Characteristics of Great Software (by Apple) ..............................................................12 2.2.4. Unix : Philosophie et Historique ..................................................................................13 2.2.5. Linux : Developpement Agile (The Cathedral and the Bazaar) ...................................13 2.2.6. Quelques conseils retenir pour dvelopper un programme ou script.........................13 2.2.7. Choisir un language de programmation... ....................................................................17 2.2.8. Quest-ce une communaut du logiciel libre ? .............................................................17 2.2.9. FLOSS et brevets logiciels ...........................................................................................18 3. cole Ouverte Francophone (OF) ...................................................................................................19 4. Formations Libres................................................................................................................................21 4.1. Formation CP2L (8 mois) lcole Ouverte Francophone (OF) ...........................................21 4.1.1. Introduction ..................................................................................................................21 4.1.2. Module et planing.........................................................................................................21 4.1.3. Droulement de la formation........................................................................................23 4.1.4. La notation au sein de la Certication Professionnelle en Logiciel Libre ...................24 4.1.5. Promo 2009-2010 - Etudiant et Coordinateurs.............................................................25 4.1.6. Les journaux des apprenants ........................................................................................26 4.2. KeepIn (SARL) .........................................................................................................................26 4.2.1. A propos .......................................................................................................................26 4.2.2. Enqute sur la formation distance..............................................................................26 4.2.3. Formations Libres (cursus courts 3 semaines) .............................................................26 4.2.4. Service Liste de discussion (Garder le contact avec ses proches !)..............................27 4.2.5. Cours en Ligne du MIT ................................................................................................27 5. Outils de commnication (Courriel + Liste de distribution + Jabber + IRC + Journal) ................28 5.1. Mthode de Communication .....................................................................................................28 5.1.1. LInternet ......................................................................................................................28 5.1.2. Courriel (E-mail) ..........................................................................................................28 5.1.3. Liste de distribution ......................................................................................................29 5.1.4. Chat (Jabber/XMPP ou IRC)........................................................................................29 5.1.5. Les journaux de bord ....................................................................................................30 5.2. Mthode de Travail ...................................................................................................................31

iii

5.2.1. Bref rsum ! ................................................................................................................31 5.2.2. Identier le problme ...................................................................................................32 5.2.3. Chercher la solution par soi-mme avant de demander de laide.................................32 5.2.4. Les ressources des sites (upstream)..............................................................................33 5.2.5. Faire une recherche sur Internet ...................................................................................33 5.2.6. Poster une question.......................................................................................................34 5.2.7. Problme rsolu ............................................................................................................34 5.3. Droit Individuel la Formation (DIF).......................................................................................35 6. UI003 Environnement de travail - Installation dune distribution .................................................36 6.1. Distributions Linux: Laquelle choisir ?.....................................................................................36 6.1.1. Quest-ce quune distribution, Combien en existe-t-il ?...............................................36 6.1.2. Distribution et libert : Combien de logiciel non-libre cach dans votre distribution GNU/Linux ? ................................................................................................................37 6.1.3. vrms (Virtual Richard M. Stallman) : Recherche de paquets non-free ........................38 6.1.4. Comment congurer Ubuntu Linux pour moins de 200$ ?..........................................39 6.2. Dual Boot Mac OS X 10.6 / Ubuntu 9.10 Karmic on MacBook Pro 5,5..................................40 6.2.1. Indentier Modle (Matriel) et Versions (Systme dExploitation) du matriel Apple 40 6.2.2. Installation de Base.......................................................................................................41 6.2.3. Installation du pilote de carte rseau sans-l (pour BCM4322 802.11a/b/g/n Wireless LAN Controller)............................................................................................................42 6.3. lshw - Information Matriel de votre ordinateur GNU/Linux ! ................................................46 6.4. Virtual Box ................................................................................................................................56 6.4.1. Installation de Base.......................................................................................................57 6.4.2. Installation dune Machine Virtuelle (Debian).............................................................60 6.4.3. Virtual LAN : 1 Hte (Ubuntu) + 2 Machines Virtuelles (Debian)..............................69 6.4.4. Installation VM Windows XP Pro (VirtualBox) sur hte Ubuntu 9.10 64bits, portable Apple MacBook Pro 5,5 ...............................................................................................69 6.4.5. Sauvegarde/Restauration (.vdi) ....................................................................................73 6.4.6. VirtualBox Conguration Linux Avanc (TAP address)..............................................73 6.4.7. Comment accder via ssh a une machine virtuelle (Virtualbox) ..................................73 6.4.8. Rsoudre VM Windows XP Pro Freeze .......................................................................74 6.4.9. Re-dimensionner un disque de machine virutelle (VirtualBox) ...................................74 6.4.10. Utilitaires pratique (Sysprep, NewSID, BGInfo, HVRemote) pour la gestion des VMs Windows .......................................................................................................................76 6.5. Autres Logiciels ........................................................................................................................77 6.5.1. xournal, claws-mail, refox, emacs, skype ..................................................................77 6.5.2. Installer Google Chrome (Chromium) sous Ubuntu ....................................................77 6.5.3. X-lite installation for Ubuntu 9.10 _amd64..................................................................80 6.5.4. Qutecom installation (en remplacement de X-Lite) .....................................................80 6.5.5. Twinkle installation (en remplacement de QuteCom) - SIP Softphone .......................81 6.5.6. NetBeans (IDE) installation .........................................................................................81 6.5.7. xmlcopyeditor installation ............................................................................................82 6.6. Dsactiver lIPv6 sur Ubuntu 9.10 ............................................................................................82 6.6.1. Mthode 1: diter /etc/modprobe.d/blacklist ...............................................................83 6.6.2. Mthode 2: via GRUB ..................................................................................................83 6.6.3. Comment sassurer que IPv6 est dsactiv ?................................................................84

iv

6.7. Debian Live sur une clef USB...................................................................................................84 7. SR001 Commandes GNU/Linux (Shell).............................................................................................86 7.1. SYS01: Systme de chier HFS ...............................................................................................86 7.2. SYS01: Base .............................................................................................................................90 7.2.1. Processus ......................................................................................................................91 7.2.2. Commande de base sous Linux ....................................................................................91 7.2.3. Redirection des entres/sortie (ux).............................................................................94 7.3. SYS01: Sauvegarde et archivage (Backup)...............................................................................95 7.3.1. Introduction ..................................................................................................................95 7.3.2. Le systme RAID (sauvegarder un poste) ....................................................................96 7.3.3. La synchronisation (sauvegarder un poste) ..................................................................96 7.3.4. rsync - synchronisation/snapshot par copie (lien matriel - hard link) ........................97 7.3.5. rsync - Interface Web, Frontend, Outil GUI .................................................................98 7.3.6. rsync - sauvegarde chiffr (backup with encryption / over Samba) .............................99 7.3.7. rsnapshot - Sauvegarde incrmentale par instantann (snapshot) ................................99 7.3.8. rdiff-backup - synchronisation/snapshot par diff (delta compress) ..........................100 7.3.9. rdiff-backup versus rsync/rsnapshot ...........................................................................100 7.3.10. Le robot de sauvegarde (sauvegarder un parc de machines) ....................................101 7.3.11. Multi-archivage sous linux (TAR, SPLIT et CAT)...................................................102 7.3.12. Autres solutions : SBackup, Back In Time, fwbackups, Time Drive .......................102 7.4. Restauration de donnees (data recovery) / Rcupration de donnes aprs un crash disque !102 7.4.1. Ressources Utiles (Info, Outils, etc...) bien lire avant de commencer !...................102 7.4.2. Suite un accident inopin : Quoi faire ! Quoi ne pas faire...! ..................................103 7.4.3. Restauration de donnes - tape par tape... ..............................................................105 7.5. SYS02: Avanc .......................................................................................................................108 7.5.1. SYS02-01: Environnement et variables......................................................................108 7.5.2. SYS02-02: Commandes avances sous Linux ...........................................................115 7.5.3. Applications................................................................................................................139 7.5.4. grep et les expressions rationnelles (ou regulires, regexp, ...) ..................................141 7.5.5. Editeur en mode texte : VI(m), Emacs, Nano, mcedit, etc... ......................................151 7.5.6. Editeur en mode graphique : Gedit, Kate, Quanta+, Bluesh, Notepad++, etc... ......156 7.5.7. Editeur XML (XML Copy Editor) .............................................................................156 7.5.8. Environnement de dveloppement intgr (IDE) : Eclipse, Netbeans, Aptana, etc... 156 7.5.9. Programmation en Langage SHELL (Bash) sous Linux ............................................157 7.5.10. Programmation en Langage SHELL (Bash) dans une console - Exercices .............175 7.5.11. Evaluation - Exercice 3.............................................................................................176 7.6. Aller plus loin ! .......................................................................................................................177 7.6.1. Dautres commandes ..................................................................................................177 7.7. Examples de commandes utiles ..............................................................................................178 7.8. Noyau GNU/Linux..................................................................................................................178 8. UI004 Raliser des documents avec LaTeX [EMPTY]...................................................................179 9. UI005 Publier des documents techniques avec DocBook [EMPTY].............................................180 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes............181 10.1. SR009 Base ...........................................................................................................................181 10.1.1. Presentation Squence ..............................................................................................181 10.1.2. Architecture logicielle de lenvironnement de dveloppement (Server HTTP + BD + script PHP) ..................................................................................................................181

10.1.3. Serveur Web - Apache - Installation et conguration ..............................................182 10.1.4. Base de donnes - MYSQL - Installation et conguration.......................................192 10.1.5. Vulnrabilits du moteur PHP ..................................................................................214 10.1.6. Language de script - PHP - Installation et conguration .........................................214 10.1.7. phpMyAdmin - Installation et conguration............................................................224 10.1.8. Atelier - Installation dune application (Promethe) tlcharge partir dun zip ou dun tar.gz ...................................................................................................................239 10.1.9. Dveloppement dune application et mise disposition sous la forme dun tgz .....252 11. SR004 Interconnecter un rseau TCP/IP ......................................................................................254 11.1. Outils de test - Laboratoire: Netkit & Clownix.....................................................................254 11.1.1. Netkit ........................................................................................................................254 11.2. NET01 Base ..........................................................................................................................257 11.2.1. En Bref......................................................................................................................257 11.2.2. Cours IP (Protocole Internet) - Concept retenir :) .................................................260 11.2.3. Adresse IP publique et prive...................................................................................268 11.2.4. Outil pour les calculs IP (masque, etc...) : gip, sipcalc.............................................268 11.2.5. DMZ - Zone dmilitarise ........................................................................................269 11.2.6. Les chiers importants .............................................................................................269 11.2.7. Les commandes rseaux importantes : ip, ifcong, ifup/ifdown, arp, route, netstat, traceroute, dig, host, hostname, whois, ping, mtr, bing, telnet, curl, nc(netcat), iftop274 11.2.8. Utilisation de commandes rseau .............................................................................297 11.2.9. Init : initialisation du systme sous Linux................................................................301 11.2.10. Modier ltape de boot .........................................................................................310 11.2.11. Exercice - valuation..............................................................................................310 11.2.12. Autres questions .....................................................................................................312 11.2.13. Atelier - Fichier Hosts ............................................................................................312 11.2.14. Approche des services Telnet et FTP .....................................................................315 11.2.15. Telnet et FTP mise en uvre ..................................................................................317 11.2.16. Premiers pas dans la scurit..................................................................................318 11.2.17. Lanalyse de trame (tcpdump, tshark, wireshark) ..................................................318 11.2.18. Dpannage rseau...................................................................................................331 11.2.19. netperf/ethtool : Mesure de performance rseau ....................................................331 11.2.20. Le protocole ssh (ssh, rssh, sftp, etc...)...................................................................333 11.2.21. Exercice - valuation..............................................................................................337 11.2.22. VoIP : Le protocole sip ...........................................................................................337 11.2.23. VoIP : Le protocole XMPP (anciennement nomm Jabber)...................................338 11.3. IPv6 .......................................................................................................................................338 11.3.1. Introduction ..............................................................................................................339 11.3.2. Tester votre connexion IPv6, faite danser la tortue :) ...............................................339 12. SR005 - Administrer un serveur DNS............................................................................................340 12.1. Lespace de noms - Arborescence DNS................................................................................340 12.2. DNS : Domain Name Server (Server de noms) ....................................................................341 12.2.1. Protocole DNS (port 53, UDP/TCP) ........................................................................341 12.2.2. Rsolution de Nom - Mcanisme de dlgation.......................................................342 12.2.3. Terminologie.............................................................................................................343 12.2.4. Messages DNS (Enveloppe) .....................................................................................343 12.2.5. Liste des serveurs DNS existant ...............................................................................344

vi

12.2.6. Installation & Maintenance ......................................................................................345 12.2.7. Documentation .........................................................................................................347 12.2.8. Conguration............................................................................................................347 12.2.9. Conguration dun serveur DNS sur le net ..............................................................353 12.2.10. Pige viter ..........................................................................................................354 12.2.11. Outils de diagnostique et de vrication de la conguration .................................355 12.2.12. Commandes utiles ..................................................................................................357 12.2.13. Verication du bon fonctionnement du serveur......................................................358 12.2.14. Slow DNS lookup issues with bind9 ......................................................................358 12.2.15. Architecture de Service DNS .................................................................................359 12.3. DNS : Travaux pratiques 1 ....................................................................................................360 12.3.1. dig : Mise en application ..........................................................................................360 12.3.2. dig : Resolution DNS Simple ...................................................................................362 12.3.3. dig : Resolution inverse ............................................................................................367 12.3.4. Manipulation des ags..............................................................................................369 12.3.5. Section additionnelle ................................................................................................372 12.4. DNS : Travaux pratiques 2 ....................................................................................................373 12.4.1. Plan de dlgation du rseau ....................................................................................373 12.4.2. Procdure et droulement pour arriver au rsultat....................................................374 12.4.3. Fichiers de conguration (named, options, db, etc) et log de tests ..........................381 12.4.4. Server Secondaire .....................................................................................................383 12.5. Scuriser un serveur DNS .....................................................................................................384 12.5.1. Tout interdire par dfaut ? ........................................................................................385 12.5.2. Access Control Lists (ACL) .....................................................................................385 12.5.3. Transfert scuris - Architecture utilisant les signatures de transfert de zones (TSIG) 387 12.5.4. Signature de requte et rponses DNS avec dig .......................................................392 12.5.5. Diffuser une zone signe avec DNSSEC (2010) ......................................................393 12.6. valuation pour le module sr005 ..........................................................................................395 12.6.1. Questions de cours....................................................................................................395 12.6.2. Architecture dune agence........................................................................................396 12.6.3. Conguration Bind ...................................................................................................397 13. SR006 - Administrer un serveur de messagerie (SMTP) .............................................................398 13.1. La messagerie lectronique ...................................................................................................398 13.1.1. Prsentation & Terminologie....................................................................................398 13.1.2. Serveur de messagerie (Exim4, Postx, etc...) .........................................................399 13.1.3. Choisir un serveur de messagerie, fonctionalits ncessaires ..................................399 13.1.4. Exim4 Documentation..............................................................................................400 13.1.5. Exim4 conguration .................................................................................................400 13.2. Travaux pratiques 1 ...............................................................................................................402 13.2.1. Gnral .....................................................................................................................402 13.2.2. Expansion de variables .............................................................................................407 13.2.3. Congurations possibles (Local, Smarthost, Satellite...)..........................................408 13.3. valuation pour le module sr006 ..........................................................................................409

vii

14. SR007 Administrer un serveur Web (HTTP)................................................................................412 14.1. Serveur Web Apache.............................................................................................................412 14.1.1. Introduction ..............................................................................................................412 14.1.2. Travaux pratiques 1: Base et Protocole ....................................................................412 14.1.3. Travaux pratiques 2: SSL, Php et Virtual Host.........................................................414 14.1.4. Contrle ....................................................................................................................416 15. SR010 Les enjeux de la scurit .....................................................................................................417 15.1. Les enjeux (Password, Sauvegardes, etc...)...........................................................................417 15.1.1. Introduction ..............................................................................................................417 15.1.2. Choisir son mot de passe... mais un bon mot de passe, cest quoi ? ........................418 15.1.3. Priodicit (3 mois ou moins)...................................................................................423 15.1.4. Rsum (Rgle/Politique de scurit) ......................................................................424 15.1.5. Technique pour gnrer son mot de passe (Example simple) ..................................424 15.1.6. Tester son mot de passe ............................................................................................425 15.1.7. Clef publique/prive .................................................................................................428 15.1.8. Les sauvegardes ........................................................................................................428 15.1.9. Le Chiffrement (GnuPG)..........................................................................................428 15.1.10. Un espace hermtique.............................................................................................428 15.2. Le Chiffrement : Signature Numrique & Encryption (GnuPG) ..........................................428 15.2.1. Chiffrement symtrique (une clef) / asymtrique (paire de clefs)............................429 15.2.2. Installation et conguration de GnuPG ....................................................................430 15.2.3. Lister les clefs de son trousseau ...............................................................................430 15.2.4. Gnrer un nouvelle paire de clefs ...........................................................................430 15.2.5. Gnrer un certicat de rvocation...........................................................................432 15.2.6. Export de clefs..........................................................................................................433 15.2.7. Import de clefs..........................................................................................................434 15.2.8. Emprunte et signature de clef publique ....................................................................434 15.2.9. Chiffrer/Dchiffrer un document..............................................................................435 15.2.10. Signature Numrique (ou Electronique) dun document........................................436 15.2.11. Vrier la signature dun document .......................................................................436 15.2.12. Gestion du trousseau de clefs (publique/prive, sous-cls, etc...) ..........................436 15.2.13. Distribution de cls (Serveur de cls).....................................................................439 15.2.14. Chiffrement de messages courriels.........................................................................441 15.2.15. PGP/inline, PGP/MIME, S/MIME (PKI)...............................................................443 15.2.16. Gestionaires Graphique de clefs (publique/prive) ................................................445 15.3. Un espace hermtique ...........................................................................................................445 15.3.1. DMZ (Zone dmilitarise)........................................................................................445 15.3.2. Protger son rseau - Contrler les accs .................................................................447 15.3.3. Dnir les usages: Qui (Client/Serveur), Quoi (Service), Pourquoi, Comment (Interface, Ports) .........................................................................................................448 15.3.4. Dnir les ux client/serveur autoriss ....................................................................450 15.3.5. IDS - Systme de dtection dintrusion....................................................................454 15.3.6. Sparer/Re-grouper les services Rseau/Scurit ....................................................454 15.3.7. Pare-feu.....................................................................................................................455 15.3.8. Serveur Proxy (Serveur Mandataire) ........................................................................455 15.4. Principes gnraux pour scuriser un systme......................................................................455 15.4.1. Quelques rgles simple garder en mmoire...........................................................455

viii

15.4.2. Principe du privilge minimum ................................................................................456 15.4.3. BIOS - Protger par mot de passe ............................................................................456 15.4.4. Chargeur de dmarrage (Grub, Lilo) - Protger par mot de passe ...........................457 15.4.5. Comptes utilisateurs .................................................................................................462 15.4.6. Systme de gestion des chiers - SGF (ou FHS en anglais) ....................................465 15.4.7. Droits daccs UNIX ................................................................................................467 15.4.8. Chiffrement du systme de chiers ..........................................................................472 15.4.9. Les services (Fermer linutile / Scuriser lutile) .....................................................475 15.4.10. Pare-feu...................................................................................................................482 15.4.11. Le serveur graphique ..............................................................................................482 15.5. HOWTO: Securiser Dbian ..................................................................................................483 15.6. Scuriser les processus et surveiller le systme ....................................................................483 15.6.1. Grsecurity (GrSec) [patche pour scuriser le noyau] ...............................................484 15.6.2. chroot........................................................................................................................486 15.7. Diffrents types dattaques....................................................................................................506 15.7.1. Attaques Locales ......................................................................................................506 15.7.2. Attaques Distantes ....................................................................................................508 15.7.3. Sensibilisation...........................................................................................................515 15.7.4. La charte de lutilisation du SI .................................................................................515 15.7.5. Historique dutilisation : Centraliser & protger......................................................516 15.8. Congurer le systme de journalisation................................................................................516 15.8.1. Rappel.......................................................................................................................516 15.8.2. Tester sa conguration..............................................................................................517 15.8.3. Congurer les rotations (logrotate) ..........................................................................517 15.8.4. Surveiller les logs (swatch, syslog-ng) .....................................................................518 15.9. Outils daudit de scurit ......................................................................................................521 15.9.1. Construire un forteresse............................................................................................521 15.9.2. nmap .........................................................................................................................521 15.9.3. nikto..........................................................................................................................521 15.9.4. nessus........................................................................................................................521 15.10. Examen................................................................................................................................522 15.11. Scurit avance..................................................................................................................522 16. SR011 Dployer un routeur, un pare-feu et un serveur mandataire...........................................524 16.1. Pare-feu (Firewall) - Filtre paquets ....................................................................................524 16.1.1. Introduction ..............................................................................................................524 16.1.2. Conseils retenir ......................................................................................................524 16.1.3. Conguration Minimum...........................................................................................525 16.1.4. netlter & iptables ....................................................................................................525 16.1.5. fwbuilder (GUI)........................................................................................................542 16.1.6. Pour aller plus loin sur la gestion dun pare-feu.......................................................542 16.1.7. TP : routage et ltrage ..............................................................................................542 16.1.8. Port(s) Internet ouvrir/fermer ................................................................................565 16.1.9. Port Knocking...........................................................................................................565 16.2. Serveur Proxy (Serveur Mandataire).....................................................................................566 16.2.1. Introduction ..............................................................................................................566 16.2.2. SQUID ......................................................................................................................566 16.2.3. TP : Proxy HTTP......................................................................................................566

ix

16.2.4. Autre Proxy ..............................................................................................................567 17. SAMBA & OpenLDAP....................................................................................................................568 17.1. Planning SAMBA & LDAP ..................................................................................................568 17.2. SAMBA : Prsentation..........................................................................................................568 17.3. SAMBA : Premier Pas ..........................................................................................................568 17.3.1. Documentation .........................................................................................................569 17.3.2. Fonctionalit .............................................................................................................570 17.3.3. Terminologie & Protocole ........................................................................................571 17.3.4. Installation ................................................................................................................572 17.3.5. Version, Status ..........................................................................................................574 17.3.6. Les binaires "Serveur" ..............................................................................................575 17.3.7. Les binaires "Client".................................................................................................575 17.3.8. Fichier de conguration smb.conf ............................................................................576 17.3.9. Les chiers de statut "tdb"........................................................................................578 17.3.10. Les chiers de log...................................................................................................578 17.3.11. Premiers Tests.........................................................................................................579 17.3.12. Comment diagnostiquer un problme ?..................................................................582 17.4. SAMBA en tant que serveur autonome.................................................................................582 17.4.1. Conguration Etendue..............................................................................................583 17.4.2. Cration dun partage (tmp) accessible tous (compte invit) ................................583 17.4.3. Partage avec authentication ....................................................................................586 17.4.4. Gestion des comptes (Liste, Cration, Suppression) ................................................587 17.4.5. Vrication des logs .................................................................................................589 17.4.6. Gestion des droits (li au partage, li au systme de chier) ...................................590 17.4.7. Options de conguration pour gestion des droits .....................................................590 17.4.8. ACLs (pour gestion de droits plus complexe) ..........................................................591 17.4.9. Limpression et le partage dimprimantes................................................................592 17.4.10. net commande.........................................................................................................597 17.5. LDAP : Prsentation..............................................................................................................599 17.6. LDAP : Concepts ..................................................................................................................600 17.6.1. Liste des principaux annuaires LDAP existant sur le march ..................................600 17.6.2. Caractristiques communes aux annuaires...............................................................600 17.6.3. Protocole LDAP et versions .....................................................................................601 17.6.4. Organisation des donnes (modle de nommage) ....................................................601 17.6.5. Donnes contenues dans lannuaire (modle dinformation) ...................................602 17.6.6. Accder lannuaire (modle fonctionnel) ..............................................................607 17.6.7. La scurit (modle de scurit)...............................................................................610 17.6.8. Concepts avancs (Rplication, distribution, etc...)..................................................611 17.7. SAMBA en tant que contrleur de domaine .........................................................................611 17.7.1. Les tapes en bref :)..................................................................................................611 17.7.2. A propos des SIDs ....................................................................................................611 17.7.3. Conguration de Samba en tant que PDC................................................................612 17.7.4. Les partages spciques (homes, netlogon, proles) ...............................................614 17.7.5. Gestion des comptes utilisateurs ..............................................................................619 17.7.6. Le mapping de groupes et le rle des RIDs..............................................................621 17.7.7. Les paramtres avancs de chaque compte Samba ([home][proles][netlogon]) ....626 17.7.8. Cration du compte POSIX de manire autonome...................................................626

17.7.9. Le superutilisateur Samba ........................................................................................628 17.7.10. Jonction au domaine et test de notre contrleur .....................................................629 17.7.11. Obtenir des information sur le domaine .................................................................635 17.7.12. Samba en tant que BDC .........................................................................................635 17.7.13. Visualiser les connexions........................................................................................636 17.7.14. Relire la conguration sans redmarrer Samba......................................................637 17.7.15. En cas de problme : tude des logs !.....................................................................637 17.7.16. Administration graphique ? Swat... ........................................................................638 17.8. OpenLDAP............................................................................................................................638 17.8.1. Installation OpenLDAP ............................................................................................638 17.8.2. Les outils fournis par OpenLDAP ............................................................................640 17.8.3. Conguration du serveur ..........................................................................................641 17.8.4. Documentation .........................................................................................................641 17.8.5. Tester la conguration & redmarrer le serveur OpenLDAP ...................................642 17.8.6. Linclusion des schmas...........................................................................................642 17.8.7. Niveau de logs ..........................................................................................................643 17.8.8. Les backends ............................................................................................................643 17.8.9. Performance & Optimisation - Backend (hdb/bdb) conguration (DB_Cong) .....644 17.8.10. Les databases ..........................................................................................................644 17.8.11. Mot de passe root (rootpw).....................................................................................644 17.8.12. Administrer un serveur OpenLDAP .......................................................................645 17.8.13. Utilisation des outils clients (Ajouter entre, initialiser, re-initialiser) ..................648 17.8.14. Afcher larborescence dun annuaire ldap............................................................651 17.8.15. Rechercher une entre : ldapsearch ........................................................................652 17.8.16. Supprimer une entre : ldapdelete ..........................................................................654 17.8.17. Modier une entre : ldapmodify ...........................................................................655 17.8.18. Renommer une entre : ldapmodrdn ......................................................................656 17.8.19. Conguration des outils clients ..............................................................................656 17.8.20. Outils graphiques dadministration ........................................................................658 17.9. Connexion de Samba notre annuaire..................................................................................661 17.9.1. Rappel.......................................................................................................................661 17.9.2. Prparation de lannuaire..........................................................................................661 17.9.3. Comptes POSIX - Nsswitch .....................................................................................663 17.9.4. Ajout de compte (ldapscripts) ..................................................................................664 17.9.5. Test de la reconnaissance dun compte.....................................................................664 17.9.6. Connexion sur le systme Unix avec le compte LDAP............................................669 17.9.7. Connexion de Samba lannuaire ............................................................................669 17.9.8. Diagnostiquer un problme ......................................................................................673 18. SR015 - Administrer un serveur CVS............................................................................................675 18.1. Systme de gestion de version (Version Control Systems - VCS/SCM Source Control Management)........................................................................................................................675 18.1.1. Gestion de versions centralise (CVS, Subversion) .................................................675 18.1.2. Gestion de versions dcentralise (Git, Mercurial, Bazaar,...) .................................675 18.1.3. Comparaison.............................................................................................................675 18.1.4. Quels VCS/SCM choisir ?........................................................................................676 18.2. CVS/Subversion ....................................................................................................................677 18.3. Git (Language C) ..................................................................................................................677

xi

18.3.1. Prsentation, Rfrence et Documentation...............................................................678 18.3.2. Notion : rpertoire Git (.git), rpertoire de travail et index Git ................................680 18.3.3. Installation/Conguration.........................................................................................681 18.3.4. Cration projet (nouveau ou depuis existant) ...........................................................681 18.3.5. Historique du projet (Consulter les logs)..................................................................684 18.3.6. Appliquer des mise jour et changement au projet .................................................684 18.3.7. Les branches .............................................................................................................686 18.3.8. Ajouter des chier lindex : Quelle diffrence entre "git add -A", "git add -u" et "git add ." ? Enlever du repertoire de travail les chiers supprims ..................................686 18.3.9. Enlever des chier lindex, avant de committer.....................................................689 18.3.10. A ne pas faire ! .......................................................................................................689 18.3.11. Git - Congurer un dpt distant (Remote)............................................................690 18.3.12. Git - Congurer un dpt public HTTP ("static") - Travailler en collaboration ....690 18.4. Mercurial (Python) ................................................................................................................695 18.5. Bazaar (Python).....................................................................................................................695 18.6. darcs ......................................................................................................................................695 19. SR016 Dployer un extranet scuris (VPN - Rseaux privs virtuels)......................................696 19.1. Les rseaux privs virtuels (VPN) ........................................................................................696 19.1.1. Introduction ..............................................................................................................696 19.1.2. Mise en place dun VPN sur SSH ............................................................................696 19.1.3. Mise en place dun VPN sur SSL.............................................................................697 19.1.4. VPN sur IPSEC ........................................................................................................697 20. Le langage Perl appliqu ladministration systme...................................................................698 20.1. Introduction la programmation en Perl ..............................................................................698 20.1.1. Documentation de Perl .............................................................................................698 20.1.2. Langages dots de ramasse-miettes..........................................................................699 20.2. OF Sance 1 : Scalaires, listes, tableaux et fonctions.........................................................699 20.2.1. Premiers pas..............................................................................................................699 20.2.2. Les scalaires..............................................................................................................701 20.2.3. Structures de contrle ...............................................................................................706 20.2.4. Listes et tableaux ......................................................................................................708 20.2.5. crire une fonction ...................................................................................................713 20.2.6. print, printf, fprintf, sprintf .......................................................................................714 20.2.7. Autres fonctions sur les listes ...................................................................................716 20.2.8. Exercices Sance 1 ...................................................................................................719 20.3. OF Sance 2 : Fichiers, Tables de hachage et Expressions Rgulires ..............................721 20.3.1. Tables de hachage.....................................................................................................721 20.3.2. Manipulation des chiers .........................................................................................725 20.3.3. Expressions rgulires ..............................................................................................730 20.3.4. Exercices Sance 2 ...................................................................................................733 20.4. OF Sance 3 : Rfrences et Application ladministration systme ................................738 20.4.1. Rfrences ................................................................................................................738 20.4.2. Exercices Sance 3 ...................................................................................................747

xii

21. Mthodologie de conception des sites Web et interfaces ..............................................................754 21.1. De lide la mise en production..........................................................................................754 21.1.1. En bref ......................................................................................................................754 21.1.2. Mthode et plan daction ..........................................................................................754 21.2. TP : Ralisation dune analyse des besoins ..........................................................................761 21.2.1. Sujet..........................................................................................................................761 21.2.2. Exercices...................................................................................................................762 21.3. Les cas dutilisation (UML use case diagram)......................................................................778 21.3.1. Introduction ..............................................................................................................779 21.3.2. Umbrello (raliser des diagrammes UML)...............................................................780 21.3.3. Exo2 : Cas dutilisation Kart website.......................................................................780 21.4. Proposition graphique dinterface : Ergonomie & Accessibilit ..........................................782 21.4.1. Dnition (s).............................................................................................................782 21.4.2. Mthode....................................................................................................................783 21.4.3. Organisation visuelle ................................................................................................783 21.4.4. Taille de la page........................................................................................................783 21.4.5. Conception multiplateforme.....................................................................................784 21.4.6. Vitesse de chargement du site & Accessibilit.........................................................784 21.4.7. Navigation / Interface Homme-Machine ..................................................................785 21.4.8. Conception du contenu .............................................................................................786 21.4.9. A ne pas faire ! .........................................................................................................787 21.4.10. Pour rsumer en bref...! ..........................................................................................787 21.4.11. Travaux Pratique SI001 ..........................................................................................788 21.5. Conclusion ............................................................................................................................806 21.6. GIMP.....................................................................................................................................806 21.6.1. Cours.........................................................................................................................807 21.6.2. Maquette ...................................................................................................................807 21.6.3. Rendu XHTML ........................................................................................................809 21.7. Hbergement de site Web sur Internet ..................................................................................809 21.7.1. toile-libre.org ............................................................................................................809 22. HTML, XHTML, CSS.....................................................................................................................811 22.1. Prsentation de la squence...................................................................................................811 22.2. Importance des standards sur Internet...................................................................................812 22.2.1. Origine......................................................................................................................813 22.2.2. 1er Principes : au service de tous ! ...........................................................................813 22.2.3. 2me principe : Introprabilit & Accessibilit......................................................814 22.2.4. 3me Principe : Sparer forme et fond .....................................................................814 22.2.5. 4me Principe : La smantique (validation) .............................................................815 22.2.6. 5me Principe : La qualit........................................................................................816 22.2.7. Limportance des jeux de caractres.........................................................................816 22.3. (x)HTML...............................................................................................................................818 22.3.1. DOCTYPE Dclaration ............................................................................................818 22.3.2. Tags/Entities/Attributes/Events ................................................................................819 22.3.3. Atelier XHTML: Essais et Validation ......................................................................822 22.3.4. Questions/Rponses..................................................................................................823 22.4. CSS (Feuilles de Style en Cascade) ......................................................................................825 22.4.1. Prsentation ..............................................................................................................825

xiii

22.4.2. Avantages (Beaucoup) ..............................................................................................826 22.4.3. Inconvnients (Peu) ..................................................................................................826 22.4.4. Syntaxe CSS .............................................................................................................827 22.4.5. Intgration des CSS avec les documents XHTML / Type de mdia ........................832 22.4.6. La priorit des slecteurs ..........................................................................................834 22.4.7. Atelier CSS: Essais et Validation .............................................................................834 22.5. Projets Web ...........................................................................................................................834 22.5.1. CV Taos ....................................................................................................................835 22.5.2. Attention: Adresse courriel en direct sur les pages !!! .............................................836 22.5.3. Site multi-navigateur: Comment grer la compatibilit !.........................................837 22.5.4. CSS - Lien Interne/Externe ......................................................................................838 22.5.5. (x)HTML - Video Embarque pour tous ..................................................................838 22.5.6. Exemples de site (Ombrage, Effets 3D, ...) ..............................................................839 22.6. (x)HTML5 & CSS3 ..............................................................................................................840 22.6.1. xHTML5...................................................................................................................840 22.6.2. CSS3 .........................................................................................................................840 22.6.3. Respect des standards - Suite de test(s) pour vrier la conformit des navigateurs Web .............................................................................................................................841 23. SI010 - Interfaces Web enrichies ....................................................................................................842 23.1. RIA........................................................................................................................................842 23.1.1. Conception dapplications Internet riches ................................................................842 23.1.2. Utilisation de scnarios/schmas (Pattern) connues et identis .............................842 23.1.3. Framework(s) Javascript...........................................................................................842 23.1.4. Utiliser AJAX (Asynchronous JavaScript + XML)..................................................843 23.1.5. Document Objetc Model (DOM) .............................................................................844 23.1.6. JSON (JavaScript Object Notation) et JSONP !.......................................................845 23.1.7. Amliorer les performances : "minify" javascript, concatenate CSS in one, optimiser les images....................................................................................................................846 23.1.8. TP - AJAX ................................................................................................................848 23.1.9. Dbugger Javascript/AJAX - Conseil et retour dexprience ...................................850 23.1.10. Projet Ajax : Logiciel de Chat ................................................................................854 24. Initiation au langage de script (PHP, Python, Perl)......................................................................860 24.1. Prsentation ...........................................................................................................................860 24.2. Dvelopement Modulaire (OO, Framework, MVC, etc...) ...................................................864 24.3. PHP .......................................................................................................................................865 24.3.1. Premier Pas... ............................................................................................................865 24.3.2. Installation dApache, PHP et MySQL sous Linux (LAMP)...................................865 24.3.3. VirtualHost ddi :) ..................................................................................................865 24.3.4. TP Hello World ...................................................................................................866 24.3.5. Calculatrice PHP ......................................................................................................874 24.3.6. Exponentielle dun entier .........................................................................................875 24.3.7. Tester le type darguments........................................................................................875 24.3.8. Le language PHP - Manuel de Rfrence.................................................................875 24.3.9. Dsactiver les guillemets magiques dans php.ini .....................................................890 24.3.10. TP Formulaire.........................................................................................................891 24.3.11. TP Base de donnes................................................................................................893 24.3.12. Scurisation des dveloppements PHP...................................................................896

xiv

24.3.13. Open ID / SSO (Single Sign On)............................................................................898 24.3.14. TP Authentication ................................................................................................898 24.3.15. Gestion derreurs - Logs - Filtrage de donnes ......................................................902 24.3.16. Librairies / Framework PHP...................................................................................903 24.3.17. Projet PHP : Kring..................................................................................................903 24.4. Python ...................................................................................................................................907 24.4.1. Version 2.x ou 3.x ? ..................................................................................................907 24.4.2. Installation ................................................................................................................907 24.4.3. Executer un programme Python ...............................................................................908 24.4.4. Obtenir des informations sur le systme ..................................................................909 24.4.5. IDE pour coder sous Python.....................................................................................911 24.4.6. Encodage des chiers sources (et codecs)................................................................911 24.4.7. Premier Pas... avec le language ................................................................................912 24.4.8. Rsum du language (Cheatsheet)............................................................................942 24.4.9. Coder en Python avec du Style ! ..............................................................................946 24.4.10. Documentation du code..........................................................................................948 24.4.11. Performance (Conseils, Concatenation, etc...) .......................................................949 24.4.12. Persistance des donnes : Les chiers ....................................................................951 24.4.13. Persistance des donnes : Base de donnes............................................................955 24.4.14. Utilisation pour le Web (Script CGI)......................................................................970 24.4.15. Interface Graphique (GUI avec Tkinter) ................................................................999 24.5. Lua ......................................................................................................................................1037 25. SI020 - Utilisation avance dun gestionnaire de contenu..........................................................1038 25.1. SPIP.....................................................................................................................................1038 25.1.1. Cours.......................................................................................................................1038 25.1.2. TP Installation ........................................................................................................1038 25.1.3. TP Prise en main.....................................................................................................1072 25.1.4. TP Installation de Squelettes ..................................................................................1073 25.1.5. Ralisation dun squelette SPIP..............................................................................1083 25.1.6. TP : introduction la cration de squelettes SPIP..................................................1085 25.1.7. TP : cration avanc de squelettes SPIP .................................................................1086 25.1.8. Projet SPIP - Ralisation dun site complet ...........................................................1086 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL 1087 26.1. XML/XSL ...........................................................................................................................1087 26.1.1. Prsentation XML ..................................................................................................1087 26.1.2. TD - XML...............................................................................................................1089 26.1.3. TD - XSL................................................................................................................1116 26.1.4. Projet XML/XSL Livres : Application dchange (XML).....................................1144 26.1.5. Transfert de paramtres XSL via PHP ...................................................................1155 27. ANNEXES ......................................................................................................................................1157 27.1. Liste de commandes............................................................................................................1157 27.2. Ressources Bibliographique................................................................................................1157 27.2.1. Les coulisses de lInternet par Olivier Ricou (Geopolitique) [prsent]..................1157 27.2.2. The Cathedral and the Bazaar.................................................................................1157 27.2.3. Linux aux petits oignons ........................................................................................1157 27.2.4. Richard Stallman et la rvolution du logiciel libre Une biographie autorise..1157

xv

27.2.5. Richard Stallman : Lavenir du logiciel libre dpend de vous tous ..................1158 27.2.6. Mise en place dune solution de ressources rparties et scurises composes de logiciels libres au sein dune info-structure par Jean-Philippe Gaulier [2007] ........1159 27.2.7. Rvolution, linformatique devient votre sixime sens ..........................................1159 27.2.8. Analyse des algorithmes nalistes concourant pour le futur standard AES par Jean-Philippe Gaulier................................................................................................1159 27.3. Linux HOWTO ...................................................................................................................1159 27.4. Modles Economique du Libre ...........................................................................................1160

xvi

Liste des tableaux


12-1. Fichiers de conguration et rsultat de tests ..................................................................................381 21-1. Section publique .............................................................................................................................772 21-2. Section partenaires / Espace Client ................................................................................................776 21-3. Section prive .................................................................................................................................777 21-4. Commun lensemble des Sections ci-avant .................................................................................778 24-1. Language de script..........................................................................................................................860

xvii

Chapitre 1. Licence
Permission est accorde de copier, distribuer et/ou modier ce document selon les termes de la Licence de Documentation Libre GNU (GNU Free Documentation License), version 1.1 ou toute version ultrieure publie par la Free Software Foundation sans section invariante, sans texte de premire de couverture, ni texte de quatrime de couverture. Une copie de la licence est fournie dans la section intitule "GNU Free Documentation License" (http://www.gnu.org/copyleft/fdl.html).

Chapitre 2. Introduction...
2.1. Logiciels Libre et Open Source ( code ouvert) FLOSS
Source(s):

Web: Free Software Foundation - FSF (EN) (http://www.fsf.org) FSF France (FR) (http://fsffrance.org) Open Source Initiative - OSI (EN) (http://www.opensource.org)

2.1.1. Quest-ce quun code source?


Le code source est lADN dun programme. Il est crit en un langage comprhensible par lhomme et plus spciquement les dveloppeurs.

2.1.2. FLOSS ? Quesaqo ?


FLOSS signie "Free Libre et Open Source Software" (Logiciel). FLOSS est un terme gnrique qui qualie la fois les logiciels libres et les logiciels open source. Un logiciel FLOSS est un logiciel libre ou open source diffus selon les termes dune licence libre ou open source et dont le code source est mis disposition dun utilisateur pour tre excut, copi, tudi, modi, redistribu.

2.1.3. Le logiciel libre


La Free Software Foundation ( FSF ) a conu ce concept et des licences libres (GPL, etc...). Il faut entendre libre au sens de libert et non de gratuit (Free as Freedom). Les licences libres sont constuites autour de 4 liberts fondamentales :
* * * * utiliser le programme, ltudier, le modifier, le distribuer (gratuitement ou non).

Chapitre 2. Introduction... Le copyleft ( gauche dauteur par opposition au copyright ) se pose comme un garant de liberts car il permet dimposer le redistribution du code source sous la mme licence libre. Tout code propritaire associ du code libre (logiciel libre) rend la totatlit du code libre par effet de bord (volontaire) de la licence (GPL est un bonne example) Example concret dactualit : Orange - Logiciels Libres et Sources Ouverts de la Livebox - Livebox Free/Libre & Open Source Software - http://www.livebox-oss.com (http://www.livebox-oss.com/).

2.1.4. Le logiciel open source


LOpen Source Initiative OSI (site web disponible en anglais) a dni 10 critres que doit satisfaire une licence pour tre qualie de licence open source :
* * * * * * * * * * libre redistribution du logiciel, fournir le code source, permettre la cration duvres drives, respecter de lintgrit du code source de lauteur, pas de discrimination quant aux personnes ou aux groupes, pas de discrimination quant aux domaines (recherche, industrie, etc.), distribuer la licence, licence non spcifique un produit, pas de restriction impose dautres logiciels, licence neutre technologiquement.

Ainsi, toute licence rpondant ces critres peut recevoir la certication Open Source mise en place par lOSI. Tout code propritaire associ du code Open Source ne rend pas la totalit du code forcment Open Source. Dans ce cas une "tolrance" est accept par effet de bord (volontaire) de la licence (BSD est un bonne example). Ce qui est propritaire peut le rester (dlivrance de code binaire non interpretable par lhomme) et ce qui est Open Source doit le rester (code lisible par lhomme distribuable sous la mme license Open Source).

2.1.5. Les quatre liberts essentielles de lutilisateur dun programme


Libert 0 : la libert dexcuter le programme comme tu veux. Libert 1 : la libert dtudier le code source et de le changer pour que le programme fasse ce que tu veux.

Chapitre 2. Introduction...

Libert 2 : la libert daider les autres, cest--dire la libert de redistribuer des copies exactes du programme, quand tu veux. Libert 3 : la libert de contribuer ta communaut, cest--dire la libert de distribuer des copies de tes versions modies du programme, quand tu veux.

2.1.6. Le logiciel libre : comment a marche ?


... Pour aider sensibiliser de nouveaux publics aux enjeux du logiciel libre, le groupe de travail Sensibilisation de lApril a cr le dpliant Le logiciel libre : comment a marche ? (http://www.april.org/fr/documents-de-sensibilisation). Ce document de vulgarisation clair introduit le logiciel libre et donne quelques cls pour approfondir sa comprhension. Le document est sous licence libre et sa diffusion au plus grand nombre est fortement encourage ! ... Par Malicia sur Linux.fr (http://linuxfr.org/2010/06/01/26927.html)

Cette campagne souligne diffrentes facettes du logiciel libre dont la dmarche est dcoupe en six tapes principales :

1. Les prmisses dun logiciel : comment les caractristiques principales dun logiciel libre sont tablies ; 2. Les premires contributions : grce la disponibilit du code source, dautres dveloppeurs peuvent se joindre au projet 3. Les premiers essais de fonctionnement : aprs de nombreux tests de fonctionnement, le logiciel est diffus aux utilisateurs ; ces derniers peuvent remonter des dysfonctionnements et ainsi aider les concepteurs du logic 4. Les modifications apporter : lenrichissement en termes de fonctionnalits continue ; 5. Lutilisation plus grande chelle : la diffusion du logiciel continue auprs du plus grand nombre dutilisateurs ; un manuel est rdig et des traductions sont ajoutes ; 6. Lvolution rapide des fonctionnalits : chaque modification, une nouvelle version est diffuse ; le cycle damlioration est ainsi continu et implique des contributeurs trs divers.

Chapitre 2. Introduction... Figure 2-1. Le logiciel libre : comment a marche ? 1/2

Figure 2-2. Le logiciel libre : comment a marche ? 2/2

2.1.7. Promouvoir le libre dans les entreprises et les

Chapitre 2. Introduction...

administrations ?
Source(s):

Web: Open source in a new light (EN) (www.ibm.com/developerworks/linux/library/os-newlight/index.html) Traduction (FR) (translate.google.fr/translate?js=y&prev=_t&hl=fr&ie=UTF8&layout=1&eotf=1&u=http://www.ibm.com/developerworks/linux/library/osnewlight/index.html&sl=en&tl=fr) Association(s): Et si les collectivits locales passaient au logiciel libre ? (http://www.rue89.com/passage-a-lacte/2010/05/26/et-si-les-collectivites-locales-passaient-aulogiciel-libre-152403?page=1) ADULLACT - Mutualisation de logiciels libres pour institutionnels (www.adullact.org) APRIL - Promouvoir et dfendre le logiciel libre (http://www.april.org/fr)

...lobjectif est de diminuer les cots..., de fournir des logiciels de qualit...

...Il existe aujourdhui une offre plthorique de logiciels libres mais beaucoup restent encore peu aboutis...

...Sans compter quils ne sont pas forcment plus rentables. Et au nal, cest bien sur ces deux points que les collectivits risquent de se dcider...

...Pour Matthieu Piaumier, lavantage comptitif du logiciel libre nest pourtant ni technique ni conomique : libre ne veut pas dire gratuit. Selon lui, latout dcisif des logiciels libres se rsume ainsi : Ils garantissent une indpendance totale vis--vis des diteurs. ... ...Un point loin dtre anodin pour une administration publique et qui explique pourquoi, pour lAdullact, le logiciel libre, plus quun choix technique, devrait tre avant tout un choix politique... http://www.rue89.com / Adullact (http://www.rue89.com/passage-a-lacte/2010/05/26/et-si-les-collectiviteslocales-passaient-au-logiciel-libre-152403?page=1)

2.1.8. Comment augmenter/amliorer lutilisation des logiciels libres en gnrale et des distributions GNU/Linux en particulier ?
Source(s):

Web: Linux doit rendre lopen-source "fabuleux" pour rester dans la course des mobiles (http://www.numerama.com/magazine/15934-linux-doit-rendre-l-open-source-34fabuleux34-pourrester-dans-la-course-des-mobiles.html) Making Open-Source Software Free and Fabulous (http://www.businessweek.com/technology/content/jun2010/tc2010069_622120.htm) Mark Shuttleworth at LinuxTag (2010) (http://lwn.net/SubscriberLink/392016/4603701c55f3f107) Famous chasm diagram (Geoffrey Moore) : bell-shaped curve showing product adoption over time

Chapitre 2. Introduction... (http://farm1.static.ickr.com/117/307081370_ea221b9eeb_o.png) Ubuntu v iTunes: the music playoff for Applephobes (http://www.channelregister.co.uk/2010/06/18/linux_versus_mac_windows_1/) Has Windows 7 killed Linux on the desktop? (http://www.techradar.com/news/software/operatingsystems/has-windows-7-killed-linux-on-the-desktop--697200?artc_pg=2)

"Breaking out the old metaphors... creating more compelling user experience...", "...more realistic and interactive UI... no menu bar, no oppy disk save icon..." Privilgi Qualit&Performance au lieu de Quantit... Aider les utilisateurs devenir plus efcients... Anticiper les utilisateurs...ce sont les petits dtails qui ont de limportance... (extrait de cette vido (http://www.infoq.com/presentations/Present-Future-Web-App-Design)). Anticiper ce que les utilisateurs essayent dobtenir/de faire... pas uniquement ce quils disent quils veulent faire... Partager lobjectif des utilisateurs :
- Les utilisateurs sont interresser complter une tche rapidement et efficacement... - Les developpeurs sont interresser remplir une base de donne (par exemple) Ces deux objectifs doivent tre en synchronisation/symbiose...

Assurer un fonctionnement irrprochable des fonctionalits clefs avant den ajouter de nouvelles... (palier par un moyen simple de les combiner...)
...the quickest way to alienate new users is to make it hard for them to do what they want to do. Or worse, promise something but not do it. Users are more likely to stick with something that works well than something that mostly works but has lots of potential... http://mybroadband.co.za/news/columns/12975-New-priorities-for-Ubuntu.html

tort ou raison, les logiciels libres et GNU/Linux en particulier reste souvent considr comme des systmes austres et compliqus. Depuis plusieurs annes, des efforts considrables ont t fournis par les adeptes du libre, notamment en matire dinterface graphique pour sloigner dune vision rtrograde et gure atteuse que lunivers du logiciel libre qui jusque l tait intimement li des interfaces pas vraiment attractives, o la moindre action impliquait de rentrer une ligne de code dans linvite de commande.
Note : Au passage, quoique la linvite de commande demande un plus grand effort de connaissance, dexperimentation et daccessibilit, cela reste un des moyens les plus efcaces et efciants de grer

Chapitre 2. Introduction...
toute machine informatique pour peu que lon veuille bien satteler la tche dapprendre sen servir correctement. De facon similaire lutilisation dun diteur de texte tel que TEX (bas sur LaTex) est bien plus efcace/efcient que de travailler avec une suite bureautique WYSWYG "traditionnelle" tel que Open Ofce ou Microdoft Word, pour peu quon sy atle et quon dpasse les premires barrires de lapprentissage des bases ncessaire.

Pourtant, si ces avances sont saluer, il reste convaincre les utilisateurs eux-mmes an que les logiciels libres continuent de prendre des parts de march. Pour Jim Zemlin, directeur excutif de la Fondation Linux, il ny a quune seule faon pour y parvenir. Il faut directement concurrencer les leaders dans le domaine de lexprience utilisateur, commencer par le leader en la matire, Apple. Pour Mark Shuttleworth, fondateur de la distribution Ubuntu,
* Taking the great work done by the development community and getting it out there where people can use it. * Getting top quality software * "Cadence" - the regularity and frequency of releases : - drawn attention to project - generate enthusiasm among users - keep community engaged in project and stimulate their work * Coordinated cadence across multiple projects. - help projects focus their work - help distributors to minimize duplicated effort - get the best of what the development community has to offer. * Quality (je rajouterais performance aussi) - the community shall start thinking differently about the quality of its code - stronger focus on everyday quality in development projects - starting with broader use of automated test suites - use test suites after each commit - A good set of regression tests * Automatic crash reporting - gather all of the relevant information and ship it off to the people who are best equipped to interpret it and, hopefully, fix the problem. - a highly useful tool for distributors and developers. * Code review was also favorably mentioned * Pay more attention to design in free software - Proper design makes the software more appealing to "ordinary users," - Thus will increase their number and pride among developers.

Chapitre 2. Introduction...
- Doing design right is a challenging task - Its not something that can always be done by developers. * Famous chasm diagram by Geoffrey Moore - a bell-shaped curve showing product adoption over time - showing a gap between the "early adopters" and the majority of users. Getting across that gap ("chasm") can require changes in how a project is developed and * Pre-installation - users need to get devices which have Linux already installed on them. - "obvious things should just work" out of the box :) - without stopping caring about freedom in the process. * Make Linux work better on ARM-based systems - Linaro initiative

Je verrais aussi...

- Utiliser(considrer) les logiciels libres (et format ouverts) pour toutes tches informati Si on ne peut pas toujours utiliser des logiciels libre, ils devraient toujours tre considrs en premier lieu - Contribuer par un moyen ou un autre : - reporter les problmes rencontrs - apporter des pistes de solution - rsoudre les problmes (le sien ou ceux des autres) - participer des projets (support, developpement, organisation, vnements, documentation, traduction, conception/design, artwork, donation financire ou matriel, financement,

garder le cot "hackable device" garder et promouvoir les liberts communiquer davantage sur les logiciels libres et leur avantages continuer de promouvoir les formats ouverts et lintroprabilit des systmes stimuler la curiosit des utilisateurs continuer de provouvoir des environements o les utilisateurs peuvent experimenter en tout promouvoir et accentuer les possibilits de formation et auto-formation

Et aussi... - dvelopper le service autour des logiciels libres - dvelopper et promouvoir la simplicit dutilisation - dvelopper loffre dapplication mtier de qualit - augmenter laccs aux logiciels libres pr-installs - comparer ce qui est comparable :)

Chapitre 2. Introduction... Selon JP, un autre point important, cest de montrer que pour une utilisation quotidienne (web/bureautique) le logiciel libre est simple (plus que dutiliser Seven par exemple) contrairement une ide recu que GNU/Linux cest difcile ! Pour ma part, aprs avoir rcemment touch brivement du Seven, on peut dire que cest un peu lourd...compar GNU/Linux....dun point de vu utilisation... au premier abord en tout cas... Personellement, je me demande aussi si ce nest ce pas plus exible/interoprable aussi... en terme de personalisation par exemple, avec le systme de paquets chacun peut construire sont systme qui repond exactement ses besoins... Un point toutefois qui peut chagriner avec le libre parfois... (ou peut tre Ubuntu en particulier mais pas sur que ce soit li a Ubuntu...), cest que certains problmes recontrs sont moins excusable/acceptables dun point de vu utilisateur lambda que sur Windows/MacOSX... (gestion de la connexion wi) mais ca tiens certainement aussi la plateforme et au matriel... la maturit et au fait que Ubuntu est gratuit et samliore tous les 6 mois :) Mais a dpend aussi car sous Windows un cran bleu est-ce excusable ? En effet pour certains problmes que je rencontre avec Ubuntu, je lavoue, je dois pas mal me battre et mettre les mains dans le camboui, tre patient, persvrant et comprendre comment ca fonctionne... par forcment ce quattends un utilisateur lambda... mais cest gratuit, congurable et libre :) ... et peut tre aussi que je fais des choses que lutilisateur lambda ne ferait pas... tel quinstaller Ubuntu sur un MacBook Pro 5,5 dApple... Il faudrait que jessaye avec Windows 7 pour comparer... aprs installer MacOS X sur un PC lambda nen parlons pas !!! Essayer plusieurs distributions telle que Arch GNU/Linux peut tre plus stable... mais plus complexe... sinon Debian fonctionne bien mais quelques glitch ici et l aussi... GNU/Linux est aussi addapt pour le professionnel dans le monde du cinema, de la radio ou de la musique... mme si peut etre pas aussi simple mettre en place quune solution propritaire... (question de connaissance et de support ?) Deux difcults pour le monde professionnel :
- il ny a pas beaucoup dapplication mtier - payer cher rassure les dcideurs

Ce deuxime argument est tonant mais dj entendu dans des enqutes sur les habitudes des acheteurs... nature humaine ? habitude ? nature humaine et habitude...

10

Chapitre 2. Introduction... Cela donne peut tre un sentiment de guarantie par rapport ce qui est pay pour... le ct contractuel et donc obligations des parties contractantes... mais a non plus ce nest pas tangible y a qu voir les outils propritaires, certains sont buggs mort et sont inadmissibles :))) Nest ce pas aussi la raison pour laquelle, certaines companies propritaires offrent du support payant :) ... si elles corrigeraient tous les bugs cela ne serait plus assez rentable... Du ct du libre, on imagine que cest un peu pareil quand mme... malgr la visibilit du code rien ne guarantie quil soit parfait... mais ce qui est certains, cest que lon ne paye pas pour cela, donc cela reste plus comprhensible... Cest peut tre aussi un pb de responsabilit... avec le libre elle est partage... Do lide de vendre du service, un autre point surlequel le libre nest pas en reste mais pour lequel il reste encore grandement faire...

2.2. Facteurs de qualit dun logiciel (B.Meyer et G.Booch)


2.2.1. Constat :
Un utilisateur, lorsquil achte un produit comme un appareil lectro- mnager ou une voiture, attend de son acquisition quelle possde un certain nombre de qualits (abilit, durabilit,efcacit,...). Il en est de mme avec un logiciel.

2.2.2. Liste minimale de critres de qualit du logiciel (daprs B.Meyer, G.Booch)


Source(s):

Web: Facteurs de qualit du logiciel (http://rmdiscala.developpez.com/cours/LesChapitres.html/Cours4/Chap4.1.htm#8.0)

Correction Rutilisabilit Portabilit Facilit utilisation Abstraction

Robustesse Compatibilit Vrificabilit Modularit

Extensibilit Efficacit Intgrit Lisibilit

11

Chapitre 2. Introduction...

Reprenons les dnitions communment admises par ces deux auteurs sur ces facteurs de qualit :

La correction : est la qualit quun logiciel a de respecter les spcications qui ont t poses. La robustesse : est la qualit quun logiciel a de fonctionner en se protgeant des conditions de dysfonctionnement. Lextensibilit : est la qualit quun logiciel a daccepter des modications dans les spcications et des adjonctions nouvelles. La rutilisabilit : est la qualit quun logiciel a de pouvoir tre intgr totalement ou partiellement sans rcriture dans un nouveau code. La compatibilit : est la qualit quun logiciel a de pouvoir tre utilis avec dautres logiciels sans autre effort de conversion des donnes par exemple. Lefcacit : est la qualit quun logiciel a de bien utiliser les ressources. La portabilit : est la qualit quun logiciel a dtre facilement transfr sur de nombreux matriels, et insrable dans des environnements logiciels diffrents. La vricabilit : est la qualit quun logiciel a de se plier la dtection des fautes, au traage pendant les phases de validation et de test. Lintgrit : est la qualit quun logiciel a de protger son code et ses donnes contre des accs non prvus. La facilit dutilisation : est la qualit quun logiciel a de pouvoir tre appris, utilis, interfac, de voir ses rsultats rapidement compris, de pouvoir rcuprer des erreurs courantes. La lisibilit : est la qualit quun logiciel a dtre lu par un tre humain. La modularit : est la qualit quun logiciel a dtre dcomposable en lments indpendants les uns des autres et rpondants un certain nombre de critres et de principes. Labstraction : est la qualit quun logiciel a de sattacher dcrire les oprations sur les donnes et ne manipuler ces donnes qu travers ces oprations.

La production de logiciels de qualit nest pas une spcicit des professionnels de la programmation ; cest un tat desprit induit par les mthodes du gnie logiciel. Le dbutant peut, et nous le verrons par la suite, construire des logiciels ayant des " qualits " sans avoir fournir defforts supplmentaires. Bien au contraire la ralit a montr que les tudiants " bricoleurs " passaient nalement plus de temps " bidouiller " un programme que lorsquils dcidaient duser de mthode de travail. Une amlioration de la qualit gnrale du logiciel en est toujours le rsultat.

2.2.3. Characteristics of Great Software (by Apple)


Source(s):

Web: Characteristics of Great Software (http://developer.apple.com/mac/library/documentation/UserExperience/Conceptual/AppleHIGuidelines/XHIGCharGrea

12

Chapitre 2. Introduction... TPXREF101)

* * * * * * *

High Performance Ease of Use Attractive Appearance Reliability Adaptability Interoperability Mobility

2.2.4. Unix : Philosophie et Historique


Source(s):

Web: Introduction aux systmes UNIX (http://www.commentcamarche.net/contents/unix/unixintro.php3) Philosophie dUnix (http://fr.wikipedia.org/wiki/Philosophie_dUnix) Principes fondamentaux dUnix (http://linux-attitude.fr/post/Philosophie-unix)

2.2.5. Linux : Developpement Agile (The Cathedral and the Bazaar)


Source(s):

Web: The Cathedral and the Bazaar (http://www.catb.org/~esr/writings/cathedral-bazaar/cathedral-bazaar/index.html)

2.2.6. Quelques conseils retenir pour dvelopper un programme ou script


Source(s):

Web: The Cathedral and the Bazaar (http://www.catb.org/~esr/writings/cathedral-bazaar/cathedral-bazaar/index.html) Philosophie dUnix (http://fr.wikipedia.org/wiki/Philosophie_dUnix)

13

Chapitre 2. Introduction...
Philosophie dUnix : Ne faire quune seule chose, et la faire bien. - crivez des programmes qui effectuent une seule chose et qui le font bien. - crivez des programmes qui collaborent. - crivez des programmes pour grer des flux de texte, car cest une interface universelle. - Tout est fichier - Les donnes sont du texte (txt, xml, etc...) (scripts, fichiers de configuration, formats de donnes, protocoles rseau, sortie dinformations) Dans la philosophie unix, toutes les donnes doivent tre stockes et transmises sous forme de texte. Cela peut coter lgrement plus de place quun format binaire. Mais on y gagne beaucoup. Un fichier texte peut tre lu par les autres outils unix, et donc respecte de principe faire une chose et le faire bien Un fichier texte peut tre lu par un tre humain et donc respecte le principe kiss Un fichier texte permet une interoprabilit avec dautres systmes (pas de problmes dindiens en iso par exemple) Un fichier texte facilite le dbugage

- Les donnes sont binaires dans les cas o lespace ou le temps de parsing sont primordiaux par exemple dans les formats dimage ou de son - Simplicit : "Keep it simple, stupid !" (KISS principle) Plus cest simple mieux cest. Qui dit simple, dit facile manipuler, faciles rutiliser. Un code est bien crit, bien architectur, simple, est aussi simple lire, maintenir et dbuger, pas besoin de milliers de lignes de commentaires. - Pour faire une chose et le faire bien Unix une mthode simpliste pour faire communiquer Cette communication est unidirectionnelle et donnes brutes y passent (le plus souvent au a invent le pipe |, 2 programmes entre eux. non formate, seules des format texte).

Note: La socket a t invente aprs le pipe pour une communication dans les 2 sens, ainsi que bien dautres moyens de communiquer dun processus a lautre. - Un logiciel doit savoir communiquer avec dautres logiciels (unix ou autre) pour garantir une large (re-)utilisation. - Sappyer sur des outils simple dj existant. Developpement agile: - Release early. Release often. And listen to your customers Lutilisation dun systme de gestion de version est fortement recommend - viter les bugs autant que faire se peut. - Development dead-ends - Try finding the minimum-effort path from point A to point B

14

Chapitre 2. Introduction...
- Simplifying design approach - Be conservative (API stable) - Tester & Debugger (Suite de test, test unitaire) - Indiquer clairement dans le code : - la licence : Choisir un licence libre pour distribuer le logiciel et lindiquer ds le dpart dans le(s) fichier(s) source - lauteur, - la date, - la version - lurl site web correspondant (optionel) - la description du script, quest ce quil est senc faire - Crer un aide (--help) dfinissant: - lobjectif du script (ou programme) - lusage - les options dutilisation - les options de configuration - des examples dutilisation simple Developpement Modulaire: - Crer un systme modulaire : "When you design a system, or a language, then if the features can be broken into relatively loosely bound groups of relatively closely bound features, then that division is a good thing to be made a part of the design. This is just good engineering. It means that when you want to change the system, you can with luck in the future change only one part, which will only require you to understand (and test) that part. This will allow other people to independently change other parts at the same time. This is just classic good software design." Being part of a Modular Design [This is often much more difficult than modularity.] - Its is not only necessary to make sure your own system is designed to be made of modular parts. It is also necessary to realize that your own system, no matter how big and wonderful it seems now, should always be designed to be a part of another larger system. Tolerance: - "Be liberal in what you require but conservative in what you do" This is the expression of a principle which applies pretty well in life, and is commonly employed in design across the Internet. Ex: Write HTML 4.0-strict. Accept HTML-4.0-Transitional (a superset of strict).

Decentralization: - This is a principle of the design of distributed systems, including societies. It points out that any single common point which is involved in any operation trends to limit the way the system scales, and produce a single point of complete failure. Test of Independent Invention - "If someone else had already invented your system, would theirs work with yours?" Does this system have to be the only one of its kind? This simple thought test is described in more detail in "Evolution" in these Design Issues. It is connectted to modularity inside-out: designing a system not to be modular in itself, but to be a part

15

Chapitre 2. Introduction...
of an as-yet unspecified larger system. A critical property here is that the system tries to do one thing well, and leaves other things to other modules. It also has to avoid conceptual or other centralization, as no two modules can claim the need to be the unique center of a larger system. - Indiquer au utilisateurs o trouver de laide (website, FAQ, email, irc, etc...) - Indiquer comment remonter des commentaires, des bugs, des paths - Initialiser les variables, fonctions et scripts - Sassurer que toutes les dpendances dont le script dpend et les conditions (fichiers/paramtres) requis sont en place avant dexecuter le script - Externaliser la configuration dans un (ou plusieurs) fichiers externes (mettre en dehors des scripts) qui serait charger lors de lexecution - Crer un configuration par dfaut (example) - Laisser les options possibles au choix de lutilisateur - Ecrire des scripts flexible, volutif et rutisable. - Lorsquon effectue une comparaison il faut comparer les donnes plustt que les fichiers/repertoire cad dire leur contenu et pas leur description... (ex diff arbre1 arbre2) - Lors de la manipulation de donnes pouvant tre importante utiliser des fichiers pltot que des variables notament lors de traitement temporaire (les fichiers peuvent tre rutilis)

- Crer des options (ou API pour les programmes complexe) sur le modle des commande Unix (simple et facilement comprhensible - Lorsque a dpasse une boucle for, passer en script :) Ds que le nombre de commande sallonge mme quun peu pour effectuer une tche... la cration de script semble tre la meilleure mthode... - Grer les erreurs - Loguer les erreurs (syslog, fichier log, etc...) ou autres message eventuel... logerror{} - Affchier des messages aux utilisateurs (info,progression,erreurs...) logmesssage{} (Sur un modle identique aux sorties standards stdout/stderr) - Laisser lutilisateur la possibilit de rediriger les flux (data/messages)

- Ne pas partier des functionalits du script doit avoir techniquement cest dire les acti

- Mode de penser orient totalement utilisateur/partage...et donc libre... et ne pas restreindre uniquement au technique (script->resultat, flexibilit et rutilisat

Principle of Least Power: - ...The choice of language is a common design choice. The low power end of the scale is typically simpler to design, implement and use, but the high power end of the scale has a the attraction of being an open-ended hook into which anything can be placed: a door to uses only by the imagination of the programmer... ...the less powerful the language, the more you can do with the data stored in that language is not to be a programming language because we wanted different programs to do different thi

16

Chapitre 2. Introduction...
present it differently, extract tables of contents, index it, and so on...

2.2.7. Choisir un language de programmation...


Source(s):

Web: Choosing a Programming Language (http://www.micahcarrick.com/12-27-2007/gtk-glade-tutorial-part-2.html)

2.2.8. Quest-ce une communaut du logiciel libre ?


Source(s):

Web: Prsentation dAmanda (http://wiki.zmanda.com/images/a/a4/Amanda-calug.pdf)

Quelques ides en vrac pour un thme explorer plus en dtail plus tard...

Comment puis-je "appartenir" ? Quest ce qui fait une communaut "forte" ? "Communaut dUtilisateur" vs. "Communaut de Developper"? Comment les moyens de communication influe sur une communaut ? - IRC - Email - IM - Conferences (e.g., PyCon, ApacheCon) - Location (Silicon Valley, MIT, etc.) Comment une communaut maintient ses ressources ? - hebergement web, wikis, liste de distribution, hte SVN, etc... Pourquoi certains projet ont une communaut large et dautres trs petite ?Voice and power Qui prends les decisions ? Les developpeurs principaux (Linus et son cercle restreint) "Dur consensus and code de travail" (IETF) Systme de votation (e.g., Apache Software Foundation) Pouvoir relatif dindividus vs. Entreprises (Zenoss, Zend, Zmanda) Qui prends les risques legaux ? Qui realise les representations contractuels ? Ai-je une obligation vis vis des Utilisateurs ? "Si vous voulez cette fonctionalit, les patches sont bienvenues !" Est-ce une invitation ou une technique dexclusion ? OK pour la documentation? Mais pour le code ?

17

Chapitre 2. Introduction...
Acces et Exclusion Connaissance - Quel est la qualite de la documentation ? - O les nouveaux arrivant trouve-t-il la connaissance institutionnel ? - Dois-je parler le "language"? Barrires explicites - Droits de commit Tigris.org requiere une recommendation dun autre commiter - Copyright (e.g., FSF) - Tests et quizzes (Gentoo ebuild quiz) Attitude des developpers envers les nouveaux arrivants... - Est-ce que les developpeurs vont accepter mon patch ? - Est-ce que je vais trouver de laide si besoin ? Niveau de difficult en entre - Existe-t-il des tches "facile" pour dmontrer sa comptance ? Construire une communaut de developpement : Ides: Rduire les barrires du mieux possible - language plus accessible (Perl) - Documentation Developpeur (commentaires et article wiki) - Liste suggrs de tches "faciles" (wiki) Attitude de bienvenue - Suggerer des opportunits pour que les utilisateurs contribut (dplacement dune communaut dutilisateur une communaut de dveloppeur) - Fournir de laide toute personne qui en aurait besoin pour dvelopper un patch Se prsenter lors de LUGs, BUGs, conferences, etc.

2.2.9. FLOSS et brevets logiciels


http://fosspatents.blogspot.com/2010/05/will-defensive-patent-license-be-able.html http://fosspatents.blogspot.com/2010/05/dpl-and-fair-troll-business-model-make.html

18

Chapitre 3. cole Ouverte Francophone (OF)


Source(s):

Web: cole Ouverte Francophone (OF) (http://www.eof.eu.org)

Lcole Ouverte Francophone est un projet port par une association but non lucratif. Lof propose des programmes de formation sur les logiciels libres anims distance. Les formations sadressent : - toute personne souhaitant mettre en oeuvre un projet de dveloppement, ou de migration, bas sur les logiciels libres, et souhaitant pour cela, acqurir les comptences ncessaires. - aux tudiants en informatique de niveau Bac + 2 Bac + 4 souhaitant complter leur formation initiale par une formation pratique. - toute personne intgrant un cursus de formation continue, ou en priode de reconversion professionnelle. Les acteurs:
Arnauld Mascret Consultant en informatique sur les logiciels libres Ganal Laplanche Ingnieur en informatique Jean Philippe Gaulier Ingnieur scurit et rseau Julien Fredon Chef de projet et dveloppeur Ludovic Grossard Matre de confrence Nicolas Bareil Administrateur rseaux Sylvain Floury Ingnieur informaticien Sylvain Lhullier

19

Chapitre 3. cole Ouverte Francophone (OF)


Architecte logiciels libres

20

Chapitre 4. Formations Libres


4.1. Formation CP2L (8 mois) lcole Ouverte Francophone (OF)
4.1.1. Introduction
La formation CPLL (ou CP2L) est conue pour rpondre aux besoins des professionnels. Ce rfrentiel de 300 heures, est labor en collaboration avec des SSII et des entreprises. Il est compos de trois grand modules :
- UI, Usage de lInternet : (pr-requis pour accder aux deux autres modules) Aborder les notions de systme et de techniques ddition. - SR, Systme/Rseau : Aborder les concepts et les architectures de services. - SI, Systme dInformation Aborder les techniques de dveloppement et dintgration dapplications.

La formation sadresse des techniciens, ingnieurs ayant dj des connaissances en informatique. Le cursus peut tre suivi dans sa totalit (UI/SR/SI) ou partiellement (UI uniquement ou UI/SR - UI/SI).

4.1.2. Module et planing


Jai choisi de suivre lensemble des modules suivant sur 8 mois... de Novembre 2009 Juin 2010 :
Module Usage de lInternet (UI) Ce module est un pr-requis pour les deux autres modules. UI003 - Environnement de travail. Installer et configurer son premier environnement et se familiariser avec les outils de communication. UI004 - Raliser des documents avec LaTeX. Structurer, composer et mettre en forme des documents scientifiques sous LaTeX UI005 - Publier des documents techniques avec DocBook. Concevoir

21

Chapitre 4. Formations Libres


et publier des documents en xml avec la DTD (Document Type Definition) DocBook SR002 - Utiliser les commandes de bases de GNU/Linux. Comprendre la philosophie GNU, installer GNU/Linux, connatre et utiliser les diffrentes commandes de base de GNU/Linux dans un shell. SR003 - Administrer GNU/Linux. Comprendre le rle de ladministrateur systme et tre capable de grer les utilisateurs, de surveiller et paramtrer le systme. SR009 - Interfacer Apache avec un langage de script et un serveur de base de donnes. Mettre en oeuvre une solution de type LAMP (GNU/Linux + Apache + MySQL + PHP) ou LAPP avec PostgreSQL.

Module Systme et Rseau (SR) SR004 - Interconnecter un rseau TCP/IP.Matriser les aspects fondamentaux de ladministration de systmes GNU/Linux dans un environnement TCP/IP. SR005 - Administrer un serveur DNS. Comprendre la structure et le fonctionnement du service de nommage, installer et configurer un serveur DNS primaire et secondaire. SR006 - Administrer un serveur de messagerie. Installer et administrer un service de courrier lectronique. SR007 - Administrer un serveur HTTP. Installer et administrer le serveur Web Apache. SR010 - Scuriser son systme. Lister les principales rgles de scurit que doit appliquer un administrateur et les enseigner aux utilisateurs. SR011 - Dployer un routeur, un pare-feu et un serveur mandataire. Installer et administrer une passerelle, un firewall et un proxy. SR012 - Dployer un serveur de partage SAMBA.Utiliser GNU/Linux en tant que serveur de fichiers et dimprimantes. SR013 - Dployer un annuaire LDAP. Comprendre les concepts et enjeux des annuaires, installer et administrer un serveur dannuaire LDAP. SR015 - Administrer un serveur CVS. Installer et administrer un environnement de dveloppement collaboratif. SR016 - Dployer un extranet scuris. Installer et administrer des rseaux privs virtuels (VPN). SR018 - Le langage Perl appliqu ladministration systme. Obtenir une approche du langage et apprendre le manipuler pour la cration de scripts simples de traitement de donnes.

Module Systme dInformation (SI) SI001 - Mthodologie de conception des sites Web et interfaces. Recueillir les informations relatives un projet, suivre une dmarche mthodologique et dfinir une interface. SI002 - Initiation au langage HTML, XHTML et CSS. Principe de balisage, structure dun document et utilisation des balises courantes. SI010 - Interfaces Web enrichies.Intgrer des comportements interactifs dans une page WEB. SI016 - Initiation au langage de script. Utiliser un langage de script (php, python, perl).

22

Chapitre 4. Formations Libres


SI017 - Systmes de gestion de bases de donnes. Installer, configurer, administrer et utiliser un serveur de bases de donnes. SI019 - Utiliser et modifier un site collaboratif comme SPIP. Concevoir un site collaboratif en sappuyant sur les squelettes par dfaut. SI020 - Utilisation avance dun gestionnaire de contenu comme SPIP. Dvelopper les modles de page dun site collaboratif. SI022 - Dfinir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL. tendre le langage HTML avec son propre langage de description. SI023 - Initiation au langage Python. Utiliser le langage Python et installer un serveur dapplication Zope. SI024 - Serveur dapplication sous Zope. Installer, configurer et administrer Zope. Dvelopper et installer un module.

4.1.3. Droulement de la formation


Source(s):

OF: Ce quil faut savoir... (http://www.eof.eu.org/spip.php?rubrique15)

La formation se droule compltement distance. Une fois votre inscription valide et conrme, les premiers lments vous permettant dinstaller votre environnement de travail et votre premire connexion sur la plateforme de formation vous sont communiqus. Le parcours de chaque module sur lequel vous tes inscrit est ensuite ralis sous forme dactivits organises en squences. Les activits sont conues de faon allier tude, travail pratique et permettre une validation de votre progression. Pour chaque squence et pour chaque activit, vous aurez sur votre planning, les objectifs pdagogiques, les conseils mthodologiques adapts, les ressources exploiter pour la ralisation des travaux, les modes et critres dvaluation. Des outils vous seront fournis pour tablir la relation avec vos enseignants et tuteurs, ainsi que pour la ralisation de certains travaux. Vous aurez en alternance des travaux raliser en autonomie, dautres raliser en groupe. Le volume de travail moyen est valu entre 10h et 14h par semaine. Mis part quelques cas particuliers, vous aurez la possibilit de vous organiser un peu comme vous le souhaitez. Ce temps est une base moyenne sur laquelle se sont bass les enseignants pour construire leur progression. Il est possible que dans certains cas vous passiez moins de temps si vous avez dj des notions sur le domaine trait, ou plus de temps si vous rencontrez des difcults.

23

Chapitre 4. Formations Libres

Lobjectif nal est que vous obteniez les bases, sur les techniques abordes lors des squences, sur les outils que vous utiliserez au cours de la formation et sur les facults dvelopper un projet plusieurs avec des ressources rparties. Lensemble du parcours peut sembler ambitieux, mais moyennant une prsence et un travail rgulier, il vous sera possible dobtenir les lments de rfrences pour poursuivre dans de bonnes conditions, le projet que vous avez de vous approprier les technologies et lesprit du libre.

4.1.4. La notation au sein de la Certication Professionnelle en Logiciel Libre


http://blog.eof.eu.org/index.php/2007/10/12/5-la-notation-au-sein-de-la-certication-professionnelle-enlogiciel-libre ()
La notation au sein de la Certification Professionnelle en Logiciel Libre Par Jean-Philippe Gaulier, vendredi 12 octobre 2007 00:19 - General - #5 - rss

On nous demande souvent quels sont les critres de notation, comment est effectu le suivi d Bref, les gens veulent pouvoir comparer nos critres avec des choses connues, comme ce que lon peut connatre dans lducation nationale. Voici un petit compte rendu rapide de notre vision de la chose : Vrification de lassiduit La formation CPLL se droule entirement distance. Lassiduit est vrifie travers diffrents supports : * la plate-forme Amarante, qui archive les dates de connexion des utilisateurset leurs diffrentes visites, * la tenue dun journal de bord tout au long du cursus, avec lexplication du cours, les exercices et leurs rponses, les rflexions de lapprenant, * la prsence sur la liste de discussion et les rponses aux mails * des runions rgulires sur IRC permettant de faire des tables rondes Modalit de suivi

Le contrle est effectu au travers du rendu rgulier des exercices et de la tenue du journa La plate-forme de formation Amarante assure galement le suivi au quotidien de lavance des tudiants de manire globale ainsi que de manire personnelle. Modalit dassistance et dencadrement

Tout au long de leur cursus, les apprenants sont accompagns par deux tuteurs qui assurent le suivi personnalis des tudiants, la liaison avec les diffrents cours et professeurs et apportent une assistance sur les questions dorganisation, de recherche et durant les TP. Chaque professeur prend galement connaissance des lves et apporte une attention particuli La classe ne comportant pas plus de quinze lves, cette attention peut tre relle et effic

24

Chapitre 4. Formations Libres

valuation et validation de la formation

Il est demand tout au long de la formation de tenir un journal relatant les activits de llve au sein de lcole. Ce journal porte sur les cours, les ateliers, les tp, les td ain que sur les contrles. Il ny a pas de notation de 0 20, mais des apprciations selon diffrents critres : * Le parcours du stagiaire dun point de vu technique * Effort considrable sur la ralisation du cours * Effort moyen sur la ralisation du cours * Aucun effort sur la ralisation du cours * Le comportement du stagiaire * Le stagiaire est prsent * Le stagiaire rpond quand on linterpelle * Le stagiaire est absent * Les questions formules par les stagiaires sont-elles (plusieurs choix possibles) * Bien formules * Pertinentes * Prcises * Le stagiaire fait remonter les problmes quil rencontre * Oui * Maladroitement * Non

* Au niveau du libre, dans sa relation avec le groupe (partage, entraide,inventif, prse le stagiaire est : * Dans les bonnes grces de RMS * En cours de libration de code * Point Godwin

Ce tableau est rempli pour chaque cours par chaque professeur, pour chaque lve. Il est ga rempli par les accompagnateurs gnraux. Cest la moyenne globale qui dfinit au final si l reoit ou non sa certification.

Ainsi, les critres dvaluation ne sont pas uniquement technique, mais aussi relationnel, c et valuent laptitude au travail distance.

25

Chapitre 4. Formations Libres

4.1.5. Promo 2009-2010 - Etudiant et Coordinateurs


Source(s):

OF: OF Promotion 2009-2010 (docs/eof/2009-EOF-Members.pdf)

4.1.6. Les journaux des apprenants


Voir section ddie sur les journaux

4.2. KeepIn (SARL)


4.2.1. A propos
La SARL Keepin est lentreprise des fondateurs (JP et Alix) de lcole Ouverte Francophone. Elle fournit divers services lies aux logiciels libres.

4.2.2. Enqute sur la formation distance


Source(s):

Web: Enqute sur la formation distance (http://enquete.keepin.eu) Rsultats de lenqute (opportunit et attentes) (http://enquete.keepin.eu/study.html)

4.2.3. Formations Libres (cursus courts 3 semaines)


Source(s):

Web: formation-libre.com (http://formation-libre.com)

Formation Libre : "En trois semaine je suis form ce qui minterresse !"

26

Chapitre 4. Formations Libres Formation libre est une nouvelle activit de la SARL Keepin. Cette activit rpond au besoin de pouvoir suivre des formations professionelles sur les logiciels libres. Ces formations sont conues pour se drouler compltement distance an dviter les dplacements, limiter les cots et dsorganiser le moins possible lactivit professionnelle. Le dveloppement de cette activit fait suite plusieurs annes dexpriences dans les domaines de la formation distance et de celui des logiciels libres de la part des fondateurs de lcole Ouverte Francophone, notamment au travers de leur projet de certication professionnelle sur les logiciels libres. Le cursus de lof dure 8 mois. En laborant des cursus courts (3 semaines), la SARL Keepin entend proposer des schmas de formations cibls et adapts des problmatiques prcises rencontres dans les entreprises.

4.2.4. Service Liste de discussion (Garder le contact avec ses proches !)


Service de liste de diffusion : Des personnes sont abonnes une liste. Par exemple les membres de votre famille. Pour changer des courriels vous navez plus quune seule adresse retenir, celle de la liste. Chaque abonn (chaque membre de votre famille) peut envoyer un courriel sur la liste et chacun des membres recevra une copie du message.

4.2.5. Cours en Ligne du MIT


Le MIT met disposition gratuitement ses cours en ligne dans plusieurs domaines (http://ocw.mit.edu/courses) (avec des vidos) et notamment en informatique (http://ocw.mit.edu/courses/#electrical-engineering-and-computer-science). Il y a mme tout un cours consacr au language de programmation Python (http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-00-introduction-to-computerscience-and-programming-fall-2008).

27

Chapitre 5. Outils de commnication (Courriel + Liste de distribution + Jabber + IRC + Journal)


5.1. Mthode de Communication
Un petit point sur la manire de communiquer : les coordinateurs travaillent, ce qui limite leur disponibilits. Il faut donc privilgier le mail car il permet une discussion asynchrone. Tout le monde fait de son mieux pour tre le plus ractif possible; une rponse est souvent reu avant la n de la journe dans la plupart des cas ou le lendemain... Tous les lves sont invits crire la liste de distribution correspondant la partie du cours tudi plutt qu au coordinateur directement par courriel. Ceci an que chacun puisse proter des questions et des rponses...

5.1.1. LInternet
Les coulisses de lInternet par Olivier Ricou (Geopolitique) (http://www.ricou.eu.org/e-politique.html)

5.1.2. Courriel (E-mail)


Source(s):

Web: How To Find Out Who Sold Your Gmail Address To Spammers (http://www.betadaily.com/2008/04/04/how-to-nd-out-who-sold-your-gmail-address-to-spammers/) 57 Gmail Habits for Highly Effecticiency (http://www.collegedegrees.com/blog/2008/05/20/57-habits-of-highly-effective-gmail-users/)

---------------Email clients - Claws Mail 3.7.3 - Thunderbird - KMail/1.9.10 - YahooMailClassic - Zimbra 5.0 - IMP - Gmail - SquirrelMail Rgle simple: http://docs.soolbox.net/wiki/Mail

28

Chapitre 5. Outils de commnication (Courriel + Liste de distribution + Jabber + IRC + Journal)

Eviter le "top posting": http://jargonf.org/wiki/top_posting prfrer le "bottom posting": http://jargonf.org/wiki/bottom_posting

Avertissement
Il peut nous arriver denvoyer un message trop vite, ou pas ni dcrire ou contenant des informations en clair quon aurait du chiffrer !!!

Outlook offre la possibilit de "rcuprer" mon message dans la mesure ou il navait pas t encore ouvert par le destinataire (et a ma vit souvent bien des problmes !) mais cest une spcicit lie au serveur exchange o tout est gr par le serveur central (les envois, les arrives, le stockage). Cest uniquement cela qui te permet de jouer avec la messagerie de son voisin (tiens, chercher, il y aurait srement des choses drles faire ;)). a peut sembler tre une fonctionnalit, mais elle nest pas disponible sous dautre client de courriel.

En effet, il peut arriver de faire des btises quand on envoi un courriel, mais il faut bien assimiler le courrier lectronique au courrier papier. Une fois que tu las mis dans la bote aux lettres de la poste, alea jacta est.

Tu fais des btises ? Prend plus de temps pour crire ou relire avant denvoyer ;)

5.1.3. Liste de distribution


... en cours de construction ...

5.1.4. Chat (Jabber/XMPP ou IRC)


http://jp.gaulier.info/blog/index.php?post/2005/04/14/78 http://bouh.soolbox.com/index.php?post/2006/04/26/606-utilisez-jabber Client Jabber: Donc, vos clients Jabber pour ajouter tous ces contacts, si ce nest dj fait. Pour les autres, la cration dun compte GMail prend 2 secondes :-) Sinon, si vous tes sous Pidgin, voici le paramtrage (merci jb) : protocole : XMPP utilisateur : ton compte gmail Domaine : gmail.com

29

Chapitre 5. Outils de commnication (Courriel + Liste de distribution + Jabber + IRC + Journal)

Avanc SSL/TLS Port de serveur proxy :

: cocher connexion 5222 : talk.google.com proxy.eu.jabber.org

A bientt sous Jabber Creer un salon jabber persistant avec mot de passe... enfin je crois :| server: eofsalon@chat.jabberfr.org mdp: utfg! http://chat.jabberfr.org #Liste les salons disponibles sur ce server... Salon temporaire mis en place par Jimmy Serveur : jabber.athaliasoft.fr Canal : eof2009 --------------------------------------------IRC communication Source info: http://fr.wikipedia.org/wiki/Aide:IRC Serveur : irc.enix.org [193.19.210.1] Port : 6667 Channel : #eof Il y a 3 commandes connatre pour dmarrer et faire ce quon veut : /server server_name_or_IP pour rejoindre un serveur /join #eof pour rejoindre le canal eof /nick newalias pour changer votre pseudo /quit pour retrouner au bistrot. Ct client : - xchat, mais vous tes libres, ctait juste pour donner - irssi (terminal ui) - emacs, a doit passer aussi :-) - pidgin Tuto pour se connecter en IRC : http://www.memepasmal.ch/index.php/2008/09/08/utiliser-irc-avec-pidgin http://stfu.blogs.ablenet.org/100/how_to_connect_to_irc_with_pidgin_gaim

5.1.5. Les journaux de bord


Les journaux des apprenants, sont raliss en DocBOOK ou en LaTeX. Ils retracent leurs activits et leurs travaux. Des archives danciennes sessions sont conserves pour consultations.

30

Chapitre 5. Outils de commnication (Courriel + Liste de distribution + Jabber + IRC + Journal) Tous les journaux dactivit des apprenants sur les sessions CPLL de lof peuvent tre consult ici (http://ferry.eof.eu.org/lesjournaux).
Session 2009-2010 1. akh 2. http://ferry.eof.eu.org/~bbr 3. http://ferry.eof.eu.org/~ccn 4. http://ferry.eof.eu.org/~cpn 5. http://ferry.eof.eu.org/~yoi 6. http://ferry.eof.eu.org/~jar 7. http://ferry.eof.eu.org/~jbm 8. http://ferry.eof.eu.org/~jyg 9. http://ferry.eof.eu.org/~jrf 10. http://ferry.eof.eu.org/~krd 11. http://ferry.eof.eu.org/~kse 12. http://ferry.eof.eu.org/~pyt 13. http://ferry.eof.eu.org/~rlr 14. http://ferry.eof.eu.org/~yoi

(Benot BRENGER) (Christelle COPIN) (Christiane Paulin) (Ykhlef OUABI) (Julien Aulagnier) (Not operationel ?) (JY GODARD) (Jimmy Rudolf) (Not operationel ?) (Not operationel ?) (Pierre-Yves TAILLARD) (mine :) (Ykhlef OUABI)

Paramtre de connection: Server: ferry.eof.eu.org Username: rlr SSH: ssh rlr@ferry.eof.eu.org (voir configuration dans la partie SSH du journal) RSYNC: rsync -av /mnt/hsubuntu/monjournal/* rlr@ferry.eof.eu.org:public_html (voir configuration dans la partie RSYNC du journal) Repertoire local: /mnt/hsubuntu/monjournal Repertoire distant: ~/public_html

5.2. Mthode de Travail


Source(s):

Web: Aide aux nouveaux arrivants sur Developpez.com (http://club.developpez.com/aidenouveaux)

5.2.1. Bref rsum !


Lorsquun problme est rencontr :
1. Identifiez clairement le problme 2. Cherchez par soi-mme

31

Chapitre 5. Outils de commnication (Courriel + Liste de distribution + Jabber + IRC + Journal)


3. Utilisez les ressources en ligne (Upstream et Web) 4. Poser la bonne question 5. Aidez les autres

5.2.2. Identier le problme


Avant de chercher une solution un problme, il faut identier de manire prcise la nature de ce problme. Ce qui peut paratre une vidence semble ne pas aller de soit pour tout le monde. Un problme bien pos est moiti rsolu. Prciser la marque et le modle dun matriel, marque et version de logiciel et/ou systme dexploitation... Identier un message derreur prcis dans les logs... etc... Cette approche a trois intrts majeurs : Elle aide trouver une solution tout(e) seul(e). Des lves qui lon demande dexprimer clairement leur problme nissent par trouver eux-mmes. Elle permettra davoir des lments pour les recherches sur des sites ou les forums. En dernier ressort, elle permettra de poster, le cas chant, sur liste de distribution (ou forums) adapt et, si les interlocuteurs comprennent le problme, ils aideront plus volontiers et plus rapidement trouver la solution.

5.2.3. Chercher la solution par soi-mme avant de demander de laide


Tout le monde connat le proverbe "Aide toi, le ciel taidera". Cette maxime trouve tout son sens ici. Avant de crier laide, il vaut mieux commencer par chercher un peu. Cela permet souvent de trouver plus vite la solution et au pire, cela permettra dliminer les mauvaises pistes. Ceci pour sviter les usuelles expressions favorites :
- RTFM - UTFG

: Read The Fuck***ing Manual - http://www.readthefuckingmanual.com (http://www.utfg. : Use The F*cking Google - http://www.utfg.net) "Dont ask dumb questions. Google knows everything !" - PBKAC : Problem Between Keyboard And Chair - ... ## et autres -Laisse-moi chercher a dans Google pour toi (Let me google that for you) (http://lmgtfy.com

32

Chapitre 5. Outils de commnication (Courriel + Liste de distribution + Jabber + IRC + Journal)

Note : Si lon ne trouve pas ds la premire fois, ne pas laisser tomber, attendre un peu (quelques heure, 1 jour, etc...) puis faire une seconde recherche... cest dusage car parfois on ne cherche pas de la mme faon la seconde fois et lon trouve souvent ce que lon cherche aprs une seconde recherche... donc viter de demander de laide trop vite... !!!

Grce la premire tape (identier le problme), on sait o chercher : Laide en ligne du logiciel/materiel ainsi que les ressources web pour des tutorials, de la formation ou du conseil... sont des atot ne pas sous-estimer... Comme on pourrait dire : "La touche F1 est la meilleure amie de lutilisateur" mais beaucoup ne savent pas utiliser laide. A partir de lnonc de votre problme, dduir quelques mots-cls pour la recherche.

5.2.4. Les ressources des sites (upstream)


Quelque soit le problme, dautres lont certainement rencontr, le rencontrent ou vont le rencontrer. Il a donc certainement dj t abord quelque part. Pour un programme, consulter le site du programme lui mme (http://www.samba.org pour Samba par exemple)... Sur la page daccueil des site, vous trouverez les liens vers la documentation, les tutorials (howtos), forum et autre (wiki, etc...) On peut penser aussi consulter les comparatifs ou revu dutilisateur si on cherche simplement un conseil sur un sujet prcis. Par example resultat des tests effectus par les un groupe passionn (Phoronix) ainsi que les dbats/confrences sur divers sujets. Si votre question est du type "Comment fait-on ceci avec tel ou tel langage ?", consultez la FAQ du langage en question. Elles sont trs compltes et bien documentes. Elles sont accessibles partir de la page daccueil ou partir de longlet correspondant au langage. En fonction des langages, vous pouvez galement trouver des codes sources.

33

Chapitre 5. Outils de commnication (Courriel + Liste de distribution + Jabber + IRC + Journal)

5.2.5. Faire une recherche sur Internet


Si par le plus grand des hasards, vous navez pas trouv votre bonheur, vous pouvez encore faire une recherche laide des mots-cls identis lors de la premire tape. Le moteur de recherche est ton ami. Apprendre bien sen servir permet de rapidement trouver ce que lon cherche. Ne pas hsiter rduire les rsultat de recherche laide des option (mots clefs) de recherche (ET, OU, etc...) Chercher sur des site de tutorials, articles ou sur des forums...

5.2.6. Poster une question


Si vraiment vous navez rien trouv, il ne vous reste plus qu poster votre question sur une liste de distribution ou un forum adapt. Comment bien sy prendre : Choisir le bon forum : Si vous avez suivi les tapes prcdentes, cela devrait-tre simple. Problme de syntaxe=forum du langage, question gnrale=forum gnral (choix de langage, SGBD, modlisation etc..) Titrer la question : Rsumez INTELLIGEMMENT lnonc du problme dans le titre du message ! Les messages du type "SVP, au secours, [dbutant]etc..." ne servent rien, la plupart du temps, ils ne sont mmes pas lus. Evitez galement les titres vagues du style "Problme de requte" dans le forum SQL. On se doute que ce nest pas un problme de C++ (o alors vous postez nimporte o et vous devriez relire les rgles du forum) et cela ne donne pas plus envie de lire ni de rpondre. La question : Evitez absolument le style SMS. Cest insupportable lire et cela naide pas (loin de l) la comprhension. Labus dmoticons ne facilite pas non plus la lisibilit. Enn, utilisez les balises pour rendre vos exemples de codes lisibles. Pensez indiquer les pistes que vous avez explores, ce que vous avez fait, ce que vous navez pas fait. Ce sont autant dlments de recherches pour ceux qui vous rpondront et cela vitera des solutions que vous avez dj testes sans succs. Le ton : Souvenez-vous de rgles simple: soyez polis, vitez demployer limpratif, les polices gros caractres, les couleurs agressives etc...

5.2.7. Problme rsolu


Quand le problme est rsolu, pensez lindiquer. Cela vitera aux autres de continuer chercher et cela

34

Chapitre 5. Outils de commnication (Courriel + Liste de distribution + Jabber + IRC + Journal) permettra quelquun ayant le mme problme de gagner du temps dans ses recherches. Si le coeur vous en dit (et si le temps vous le permet), crer un mini howto (solution plus dtaille) et publier le sur Internet (forum, blog, etc...) Si vous abandonnez un sujet, vous pouvez galement lindiquer aux interlocuteurs dj contacts...

5.3. Droit Individuel la Formation (DIF)


Source(s):

Web: Un portail ddi au Droit Individuel la Formation (http://www.droit-individuel-formation.fr) DIF : les rponses aux 10 questions les plus courantes (http://www.droit-individuel-formation.fr)

35

Chapitre 6. UI003 Environnement de travail Installation dune distribution


6.1. Distributions Linux: Laquelle choisir ?
6.1.1. Quest-ce quune distribution, Combien en existe-t-il ?
... Un coup doeil surDistrowatch (www.distrowatch.com), et cest la nause face labondance des nouveauts. De nouvelles distributions avec de nouvelles versions du noyau, du systme de base, des environnements de bureau et des applications surgissent toutes les semaines, les unes plus rvolutionnaires que les autres. peine a-t-on ni de lire la documentation de lune delles quelle est dj obsolte, car la mise jour de lautre nous tape loeil.

...une distribution GNU/Linux est constitue dun certain nombre de composants : le noyau, les bibliothques et autres composants du systme de base, le serveur graphique, lenvironnement de bureau, la panoplie des applications, et dautres choses encore. Chacun de ces composants est dvelopp individuellement par une quipe de dveloppeurs. Lquipe de dveloppeurs du noyau par exemple, chapeaute par Linus Torvalds, soccupe essentiellement du kernel Linux, dont elle publie rgulirement une nouvelle version sur kernel.org. La fondation X.Org (http://www.x.org) travaille sur tous les composants du serveur graphique. Lquipe de dveloppeurs GNOME (gnome.org) se concentre sur lenvironnement de bureau GNOME, et les quipes de kde.org ou xfce.org, sur les environnements respectifs KDE et XFCE. Il en va de mme pour les applications. La fondation Mozilla gre le dveloppement de logiciels comme Firefox, Thunderbird, Sunbird et autres. Les dveloppeurs dOpenOfce.org font de leur mieux pour maintenir la suite bureautique Open Ofce, comme nous lavons vu. Etc.

Le travail du distributeur consiste maintenant crer un systme cohrent avec tous ces ingrdients. Chacun des distributeurs comme Red Hat, Fedora, Debian, Ubuntu, Slackware, Arch, Gentoo, SuSE, Mandriva, etc. devra donc oprer une srie de choix :
quels composants seront inclus dans la distribution ? quelle version de chacun des composants faudra-t-il choisir ?

Ces critres nous permettent de distinguer grossirement deux tendances, deux extrmits dune chelle gradue :
- les distributions plus ou moins conservatrices: , qui nincluent aucun composant sans que celui-ci ne soit dment test pendant une priode dfinie ; - les distributions bleeding edge : qui incluent tout nouveau composant frachement publi dans la distribution, en considrant que la simple publication de lapplication (ou de la bibliothque, ou de lenvironnement

36

Chapitre 6. UI003 Environnement de travail - Installation dune distribution


bureautique, etc.) constitue dj une garantie de stabilit suffisante de la part des dveloppeurs.

...

Red Hat Enterprise Linux suit en gros un cycle de dix-huit mois entre chaque version, compos de douze mois de dveloppement et de six mois de tests. La mme chose vaut pour CentOS, qui nage en quelque sorte dans son sillage.

La distribution Fedora, en revanche, publie une nouvelle version peu prs tous les six mois. Chaque nouvelle version est constitue des paquetages les plus rcents.

La branche stable de Debian publie une nouvelle version tous les deux ans, en moyenne. Pour chaque version, lquipe des dveloppeurs procde un gel (freeze) des versions avant une priode de tests intenses. Debian est clbre pour publier une nouvelle version when its ready ( lorsque cest prt ), cest--dire lorsque les principaux bogues ont t corrigs. Il en rsulte une distribution stable et able.

La branche instable de Debian (unstable, qui signie ici susceptible dtre soumis des modications de version - ne pas confondre avec qui plantera tout le temps , donc) inclut les dernires versions disponibles de tous les composants. Des distributions comme Arch ou Gentoo pratiquent le rolling release, cest--dire la mise--jour perptuelle. Peu importe quelle version vous installez, puisque le bon usage de la distribution prconise que vous fassiez des mises jour rgulires. Cest un peu comme un train qui ne sarrte jamais, et quil faut prendre en marche. Linux aux petits oignons - Chapitre 8 - Section 04 (http://www.microlinux.fr/linux_aux_petits_oignons/chapitre_8/04.html)

Dans le cadre de la formation CP2L, le choix est porte sur Dbian et Ubuntu.

6.1.2. Distribution et libert : Combien de logiciel non-libre cach dans votre distribution GNU/Linux ?
Source(s):

Web: GNU/Linux and freedom: non-free software hidden in your GNU/Linux distribution (www.freesoftwaremagazine.com/columns/gnu_linux_and_freedom_nonfree_software_hidden_in_your_linux_) Noyau GNU/Linux Ofciel: Noyau GNU/Linux ofciel publi par Linux Torvalds (http://kernel.org) Noyau GNU/Linux Libre: Linux-libre project: Take your freedom back, with Linux-2.6.33-libre (http://www.fsa.org/svnwiki/anuncio/2010-03-Linux-2.6.33-libre) Noyau GNU/Linux-Libre 100% publi par FSFLA (http://www.linux-libre.fsa.org/pub/linux-libre/releases/) Noyau Mach: Mach : une autre vision du noyau (http://okki666.free.fr/docmaster/articles/linux090.htm) GNU/Hurd (http://www.gnu.org/software/hurd/) Debian GNU/Hurd (http://www.debian.org/ports/hurd/) Arch Hurd (http://www.archhurd.org/)

37

Chapitre 6. UI003 Environnement de travail - Installation dune distribution

Distribution Libre: Liste de distribution Libre ("Free Distros") (http://www.gnu.org/distros/free-distros.html) Matriel Libre: Open-source hardware denition (http://freedomdened.org/OSHW) Hardware Devices that Support GNU/Linux (http://www.fsf.org/resources/hw) Open-PC (http://open-pc.com)

...developing Free Software isnt enough to establish freedom for the users of GNU/Linux. We also need to educate them to value their freedom, and to recognize and reject non-Free Software. Otherwise, the products that require users to give up their freedom would continue to nd willing customers... Traduction libre : ...dvolopper des logicils libres nest pas sufsant pour tablir (ou garantir) la libert des utilisateur de GNU/Linux. Nous devons aussi les duquer la valeur de leur libert, and reconnatre et rejeter les logiciels non-libres. Sinon, les produits qui requiert aux utilisateurs dabandonner leur libert vont continuer trouver des consomateurs "consentants... http://www.fsa.org (http://www.fsa.org/svnwiki/anuncio/2010-03-Linux-2.6.33-libre)

Il est donc recommand : - dutiliser GNU/Linux-libre (http://www.fsa.org) une version totalement libre du noyau GNU/Linux (ce qui nest pas le cas du noyau ofciel (http://kernel.org) pour raison de compatibilit et exibilit) ou tout autre noyau 100% libre tel que GNU/Hurd (http://www.gnu.org/software/hurd/) (bas sur une architecture Mach (http://okki666.free.fr/docmaster/articles/linux090.htm)), - de sorienter vers des distributions totalement libre tel que gNewSense (http://www.gnewsense.org/) et autres consoeurs (http://www.gnu.org/distros/free-distros.html), - de sorienter vers du matriel libre (rmware libre, drivers libre, etc...) tel que OpenPC (http://open-pc.com) ou autres fournisseurs (http://www.fsf.org/resources/hw)...
Note : La notion de matriel libre est en plaine essort et tente de se dnir (http://freedomdened.org/OSHW) dune faon similaire au logiciel libre tout en rpondant aux particularits de ce domaine.

6.1.3. vrms (Virtual Richard M. Stallman) : Recherche de paquets non-free


Source(s):

Web: vrms (Wikipedia) (http://fr.wikipedia.org/wiki/Vrms) vrms (Debian) (http://vrms.alioth.debian.org/) Projet vrms source code repository (https://alioth.debian.org/projects/vrms/)

38

Chapitre 6. UI003 Environnement de travail - Installation dune distribution

Ce programme analyse la liste des paquets installs (disponible dans /var/lib/dpkg/status) la recherche de paquets non-free. Sil en trouve, il les listera sur la sortie standard avec une courte explication de la raison pour laquelle le logiciel est considr comme non libre. vrms dispose en local dune liste de logiciels non libres et de lexplication associ dans le chier /usr/share/vrms/reasons/vrms. Si aucun paquet non-free nest trouv sur le systme, vrms afchera la phrase No non-free packages installed on ${hostname}! rms would be proud ( Pas de paquets non libres installs sur $hostname! rms serait er ).
$ apt-get install vrms $ vrms Non-free packages installed on macfil opera skype sun-java6-bin sun-java6-jre sun-java6-plugin teamviewer5 unrar virtualbox-3.1 The Opera Web Browser Skype Sun Java(TM) Runtime Environment (JRE) 6 (architecture Sun Java(TM) Runtime Environment (JRE) 6 (architecture The Java(TM) Plug-in, Java SE 6 Remote Control Application TeamViewer Unarchiver for .rar files (non-free version) Sun VirtualBox

Non-free packages with status other than installed on macfil virtualbox-3.0 ( dei) Sun VirtualBox

Contrib packages installed on macfil b43-fwcutter flashplugin-installer nvidia-common ttf-mscorefonts-installer Utility for extracting Broadcom 43xx firmware Adobe Flash Player plugin installer Find obsolete NVIDIA drivers Installer for Microsoft TrueType core fonts

9 non-free packages, 0.5% of 1881 installed packages. 4 contrib packages, 0.2% of 1881 installed packages.

6.1.4. Comment congurer Ubuntu Linux pour moins de 200$ ?


Source(s):

Web: How to Congure an Ubuntu Linux Computer for Less Than $200 (http://www.washingtonpost.com/wp-dyn/content/article/2010/05/24/AR2010052402993.html) vrms

39

Chapitre 6. UI003 Environnement de travail - Installation dune distribution (Debian) (http://www.youtube.com/prole?user=pshapiro#p/u/5/PR_hUa4Bn8Q) Projet vrms source code repository (https://alioth.debian.org/projects/vrms/)

Est-ce que votre famille a besoin dun extra PC ? Educateur, Mac expert and Linux enthousiast Phil Shapiro (http://www.his.com/~pshapiro/briefbio.html) explique dans sa vido YouTube comment pour moins de 200$ (moins que certain systme dexploitation), vous pouvez congurer un ordinateur utile sans virus avec un ecran LCD 23 pouces (150$ en occasion) et un adaptateur Wi-Fi (15$). Projet facile executable en moins dune heure :) Si vous avez besoin daide pour congurer un ordinateur Ubuntu Linux, rechercher un Groupe dutilisateurs Linux (http://fr.wikipedia.org/wiki/Groupe_d%27utilisateurs_Linux) (GUL ou LUG) locale. Les volontaires GUL seront content de vous guider et de vous aviser. Le site Forums Ubuntu (http://forum.ubuntu-fr.org/) est un autre endroit o les utilisateur peuvent trouver des informations et des conseils. Vous pouvez aussi consulter des guide dinstallation : Simple comme Ubuntu (http://www.framabook.org/ubuntu.html), Ubuntu Linux Easy Installation Guide (http://www.pcworld.com/businesscenter/article/155517/ubuntu_linux_the_easy_installation_guide.html).

6.2. Dual Boot Mac OS X 10.6 / Ubuntu 9.10 Karmic on MacBook Pro 5,5
Cette partie dcrit linstallation dune distribution GNU/Linux Ubuntu 9.10 Karmic Koala 64bits sur un tout nouveau modle (Nov 2009) dordinateur Apple, le MacBook Pro 5,5.

6.2.1. Indentier Modle (Matriel) et Versions (Systme dExploitation) du matriel Apple


La premire chose faire avant de procder une telle installation cest didentier clairement les spcications techniques du matriel et du systme existant. Une fois connect sur le MacBook, aller dans le menu [Pomme] (en haut gauche) > About this Mac.
OS X Version 10.6 (Leopard) 2.25 GHz Itel Core2Duo // 2GB 1067MHz DDR3 RAM

Cliquer sur le bouton More Info :


Modele Indentifier MacBookPro 5,5

40

Chapitre 6. UI003 Environnement de travail - Installation dune distribution

6.2.2. Installation de Base


Source(s):

Web: Intel CPU-based Macintosh Generic Installation Instructions (https://help.ubuntu.com/community/MactelSupportTeam/AppleIntelInstallation)

Avertissement
!!!Attention!!! BACKUP YOUR DATA !!!

Time Machine peut-tre utile pour cela...

Dans mon cas je nai pas de donnes donc aucun risque :)

6.2.2.1. Installer rEFIt (Menu de boot)


Source(s):

Web: Install rEFIt (http://ret.sourceforge.net/doc/c1s1_install.html)

Avertissement
Assurez vous quil fonctionne avant de continuer ! Le menu de boot doit apparatre au dmarrage.

... En construction [notes papier retrancscrire pour ce dbut] ...

6.2.2.2. Raccourcis clavier Ubuntu


2.bb 10 raccourcis Ubuntu que vous ne connaissez peut-etre pas ! 1. Switch to the next/previous workspace

If you make use of the workspace very frequently, you can easily switch between different workspaces by pressing Ctrl + Alt + Left/Right Arrow. The Left key brings you to the previou workspace while the Right key brings you to the next adjacent. If you have enabled Compiz,

41

Chapitre 6. UI003 Environnement de travail - Installation dune distribution


you can even get it to show all the workspace by pressing Super + E on the keyboard. 2. Move the current window to another workspace

By pressing Shift+ Ctrl + Alt + Left/Right Arrow, you can easily move your current window to another workspace in the specified direction. This keyboard shortcut works very well with the one mentioned above. If you have the habit of opening many applications/windows when doi your work, but dont like to see your desktop and menubar cluttered with all the application you can use this shortcut key to move your applications to another workspace and get your de organized. 3. Show the desktop

Ctrl + Alt + D enables you to quickly minimize all windows and give focus to the desktop. When all windows are minimized, this shortcut can also maximize all the windows to their pre state. 4. Keyboard shortcut for the mouse right-click In most applications, you can always right-click on the mouse to access the options menu. On the keyboard, you can simply press Shift + F10 to achieve this right-click effect 5. Restart session and recover from crashes

There are very few instances where Ubuntu will crash totally. But if it does, you can press Ctrl + Alt + Backspace to restart the session, and 90% of the time, it will recover from the 6. Lock the screen quickly

If you need to leave your workstation for a while, you can quickly lock up your screen by pr Ctrl + Alt + L and prevent unauthorized access by others. 7. Switch between windows in the reverse direction

Alt + Tab is a common shortcut key that allow you to switch between open windows. But do you know that by including the Shift button, you can reverse the windows switching direction? This is useful when you press Alt + Tab too fast and passed the window that you want to switch to. Simply press down the Shift button to go back to the previous window in the switch cycle. 8. Move windows with arrow keys

Press Alt+F7 to activate the Move window function and use any arrows key (up, down, left, ri to move the window around the screen. 9. Show hidden files

Most of the time, you wont need to view the hidden files in your home folder, but in the ev that you need to, you can press Ctrl + H inside the Nautilus (the file manager for Ubuntu) t all hidden files. 10. Show file properties without right-clicking the mouse

The conventional way to view a file/folder properties is to right-click the mouse and select Properties. Now you can just press Alt + Enter to get the Properties window to appear. Of course, this is only the tip of the iceberg. If you want more shortcuts and not only for but also for Gmail, Google Search, Firefox and other programs then go straight to our Cheat Page. There are 9 PDF cheat sheets there for you to download.

42

Chapitre 6. UI003 Environnement de travail - Installation dune distribution

6.2.3. Installation du pilote de carte rseau sans-l (pour BCM4322 802.11a/b/g/n Wireless LAN Controller)
Le pilote Broadcoms IEEE 802.11a/b/g/n hybrid Linux (version 5.60.48.36) est disponible Wireless 802.11 Linux STA driver (http://www.broadcom.com/support/802.11/linux_sta.php) en version 32bits (docs/Broadcom/802.11-Linux-STA-driver/32bits/hybrid-portsrc-x86_32-v5.60.48.36.tar.gz) (source originale (http://www.broadcom.com/docs/linux_sta/hybrid-portsrc-x86_32-v5.60.48.36.tar.gz)) et 64bits (docs/Broadcom/802.11-Linux-STA-driver/64bits/hybrid-portsrc-x86_64-v5.60.48.36.tar.gz) (source originale (http://www.broadcom.com/docs/linux_sta/hybrid-portsrc-x86_64-v5.60.48.36.tar.gz)). Linstallation normal du pilote Broadcom (wl0 version 5.10.91.9) avec le paquet fournit par dfaut dans Ubuntu (procdure indiqu ci-avant) quoique simple et fonctionnelle, ne permet pas une utilisation normal des connections via Wi. La connection est souvent difcile tablir avec certains point daccs Wi (time out) et parfois des dconnection peuvent survenir. Les instructions ci-dessous permettent de compiler et dinstaller une version rcente du pilote Broadcom 64bits. Cette mthode semble avoir t tester plusieur fois sur des MacBook Pro with Broadcom 4328 et je conrme que cela marche avec le Broadcom B4322.
Important : Ces oprations devront tre ralises au moins une fois sous chacun des noyaux GNU/Linux que lon souhaite utiliser...

Les instructions suivantes sont tires du chier README.txt (docs/Broadcom/802.11-Linux-STA-driver/README.txt) (source originale (http://www.broadcom.com/docs/linux_sta/README.txt)) et de cette page de forum (http://ubuntuforums.org/showthread.php?t=1390979) :
## VERIFIER LE COMPATIBILITE

# A excuter en tant que root $ lspci -n | grep 14e4 // Vrifier que le modle de carte est compatible avec le pilote // Pour plus de dtail consulter la section suivante // Information Matriel

## COMPILER LE PILOTE DEPUIS LE SOURCE # Installer les paquets et outils ncessaire $ apt-get install build-essential linux-headers-generic $ apt-get build-dep linux # Vrifier lexistance du repertoire suivant : $ ls /lib/modules/uname -r/build

43

Chapitre 6. UI003 Environnement de travail - Installation dune distribution

$ $ $ $ $ $ $

cd /tmp wget http://www.broadcom.com/docs/linux_sta/hybrid-portsrc-x86_64-v5.60.48.36.tar.gz mkdir hybrid_wl cd hybrid_wl tar xzf ../hybrid-portsrc-x86_64.tar.gz make clean make

# Assurer que la compilation se termine sans erreur # La licence manquante est une erreur acceptable pour la suite :) # Le resultat de compilation est un fichier # wl.ko (module noyau)

## FAIRE LE NETOYAGE AVANT DINSTALLER LE PILOTE # # # # Enlever tous les autres pilotes pour les cartes rseau sans-fil Broadcom Plusieurs pilote existe pour les puces Broadcom 802.11 tel que b43 et ssb. Pour viter tout conflit avec ces pilotes, il doivent tre pralablement entirement dsinstalls, ainsi que toute rvision prcdente du pilote wl

# Vrifier ceux qui sont installs $ lsmod | grep "b43\|ssb\|wl" # $ $ $ # # $ $ $ Enlever ceux qui sont installs rmmod b43 rmmod ssb rmmod wl

Nous devons mettre sur liste noire les modules des pilotes que lon ne va jamais utiliser quil ne seraient pas chargs automatiquement par le systme dans le futur : echo "# Replaced b43 and ssb by wl manally compiled by RL" >> /etc/modprobe.d/blacklist.co echo "blacklist ssb" >> /etc/modprobe.d/blacklist.conf echo "blacklist b43" >> /etc/modprobe.d/blacklist.conf

# Si un module wl.ko existe dj dune installation prcdente il faut lenlever (mise jou $ rmmod wl # dissocier le module du noyau, normalement cest dj fait prddement mais $ mv /lib/modules/uname -r/kernel/net/wireless/wl.ko /lib/modules/uname -r/kernel/net/wi

## INSTALLER LE PILOTE NOUVELEMENT COMPILER # On met en place le module noyau que lon vient de compiler $ cp /tmp/hybrid_wl/wl.ko /lib/modules/uname -r/kernel/net/wireless/wl.ko # Puis on lactive dans le noyau $ depmod # Mise jour de dpendance $ modprobe wl # Charger le nouveau module dans le noyau

==> La carte rseau Wi-fi apparat dans le Network-Manager, et sauto connecte sur point da ==> Il mest enfin possible de me connecter mon rseau wi-fi personnel !

44

Chapitre 6. UI003 Environnement de travail - Installation dune distribution

## ACTIVATION AUTOMATIQUE AU DMARRAGE DU SYSTME # # # # Note: Sur certains systme tel que Ubuntu 9.10, le module ssb va se charger durant le dmarrage mme si il est mis sur la liste noire. Comme il doit de toute facon tre supprim, on doit donc procder de la facon suivante:

# Modifier le fichier /etc/rc.local pour inclure juste avant "exit(0)": rmmod ssb || true # Au dmarrage, enlve le module "ssb" modprobe wl || true # charge le module "wl"

# Le module ssb doit tre enlev avant dajouter le module wl sinon cela ne fonctionnera pas # En modifiant le fichier /etc/rc.local on sassure que tous se passe dans le bon ordre. # # # # # # # # # # # #

Note: Le shabang du script rc.local existant par dfaut est : #!/bin/sh -e Loption -e signifie que le script va arrter de sexcuter la premire commande qui ret En ajoutant la || true aprs chacune des commandes on assure que toute erreur est ignore et que le script peut continuer sexcuter. Sans cela, comme la commande "rmmod ssb" retourne une erreur due labsence du module (la le script sarrterait et la commande "modprobe wl" ne serait jamais excut, et donc le module pas charg et donc la carte rseau Wi-fi inaccessible :)

Optionellement: Les commandes rmmod et modprobe accepte les options suivantes qui peuvent tre eventuellem -v : verbose -s : log les erreurs dans /var/log/syslog via syslog systme

Note : Voici un exemple complet de mon script /etc/rc.local fonctionnel pouvant aider dbugger :
#!/bin/sh -e # # rc.local # # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other # value on error. # # In order to enable or disable this script just change the execution # bits. # # By default this script does nothing. logfile="/tmp/rc.local.log" /bin/sleep 10 /bin/echo rc.local started > $logfile /bin/echo date >> $logfile /sbin/rmmod -vs ssb || true /sbin/modprobe -vs wl || true

45

Chapitre 6. UI003 Environnement de travail - Installation dune distribution


/bin/echo rc.local ended normally >> $logfile exit 0

Le chier de log /tmp/rc.local.log permet de sassurer que le script a bien dmarr et quil sexcute jusquau bout :) Le mieux est de toujours lancer le script manuellement pour le tester, sil se comporte comme souhaiter, redmarrer le systme et vrier quil est bien pris en compte... :
$ sudo -i # cd /etc # ./rc.local # Passage en console root # Executer le script manuellement # La carte Wi-fi est maintenant disponible dans le Network Manager # Vrifier la bonne excution du script # Vrifier toute erreur retourne par rmmod ou modprobe

# cat /tmp/rc.local.log # tail /var/log/syslog

Note : Dans lesprit du libre, jai post mes retours dexperience sur les forums Ubuntu (ici[EN] (http://ubuntuforums.org/showpost.php?p=9430202&postcount=33) et l[FR] (http://forum.ubuntu-fr.org/viewtopic.php?pid=3535050#p3535050)) pour que cela puisse servir dautres...

Une autre solution potentielle de dernier recours est de coder un hack en dure comme suggr dans le post numro 20 de cette page de forum (http://ubuntuforums.org/showthread.php?t=1390979&page=2).

6.3. lshw - Information Matriel de votre ordinateur GNU/Linux !


Source(s):

Web: Get the hardware info of your Computer [lshw] (http://www.go2linux.org/get-hardware-info-lshw)

Il est souvent ncessaire de connatre des informations dtailles sur le matriel composant son ordinateur. lshw est la commande magique pour cette tche :)

46

Chapitre 6. UI003 Environnement de travail - Installation dune distribution Exemples dutilisation :


$ sudo aptitude install lshw $ sudo lshw // Pour linstaller si elle nest pas dj disponible // Executer en tant que root pour obtenir les // informations matriel // Transfrer le rsultat vers un fichier texte // pour partager linformation // Formatter le resultat en HTML // Formatter le resultat en XML

$ lshw > /tmp/hwoutput.txt

$ lshw -html > /tmp/hwhtml.html $ lshw -xml > /tmp/hwxml.xml

$ lshw -html -sanitize > /tmp/hwhtml.html

// Avant de rendre linformation publique, il est // toute information sensible : adresse IP, numr

Note : Pour ma carte wireless avec chipset Broadcom jai pu obtenir le modle exact par cette commande :
$ lspci -n | grep 14e4 # A executer en tant que root de prfrence :) 03:00.0 0280: 14e4:432b (rev 01)

Dans le chier README.txt (http://www.broadcom.com/docs/linux_sta/README.txt) du pilote Broadcom (802.11 Linux STA driver) (http://www.broadcom.com/support/802.11/linux_sta.php), je trouve la rfrence suivante qui correspond :
BRCM PCI Product Name ------------4322 Dualband PCI Vendor ID Device ID ---------- --------0x14e4 0x432b

Voici le rsultat des informations matriel pour mon ordinateur Apple MacBook Pro 5,5 (Nov 2009) :
$ lshw -sanitize computer description: Notebook product: MacBookPro5,5 vendor: Apple Inc. version: 1.0 serial: [REMOVED] width: 64 bits capabilities: smbios-2.4 dmi-2.4 vsyscall64 vsyscall32 configuration: boot=normal chassis=notebook uuid=2C7A2E5D-968A-C64D-A1E4-92CD72BB3256 *-core

47

Chapitre 6. UI003 Environnement de travail - Installation dune distribution

description: Motherboard product: Mac-F2268AC8 vendor: Apple Inc. physical id: 0 serial: [REMOVED] slot: Part Component -cpu:0 * description: CPU product: Intel(R) Core(TM)2 Duo CPU P7550 @ 2.26GHz vendor: Intel Corp. physical id: 0 bus info: cpu@0 version: Intel(R) Core(TM)2 Duo CPU P7550 @ 2.26GHz slot: U2E1 size: 798MHz capacity: 798MHz width: 64 bits clock: 266MHz capabilities: fpu fpu_exception wp vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx x86-64 constant_tsc arch_perfmon pebs bts rep_good pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm sse4_1 xsave lahf_lm tpr_shadow vnmi flexpriority cp *-cache description: L1 cache physical id: 2 slot: Unknown size: 32KiB capacity: 32KiB capabilities: asynchronous internal write-back data -cache:0 * description: L1 cache physical id: 1 slot: Unknown size: 32KiB capacity: 32KiB capabilities: asynchronous internal write-back instruction *-cpu:1 description: CPU vendor: Intel(R) Corporation physical id: 3 bus info: cpu@1 version: Intel(R) Core(TM)2 Duo CPU P7550 @ 2.26GHz slot: U2E1 size: 798MHz capacity: 798MHz clock: 266MHz capabilities: cpufreq *-cache description: L1 cache physical id: 5 slot: Unknown size: 32KiB capacity: 32KiB

48

Chapitre 6. UI003 Environnement de travail - Installation dune distribution

capabilities: asynchronous internal write-back data *-cache:1 description: L1 cache physical id: 4 slot: Unknown size: 32KiB capacity: 32KiB capabilities: asynchronous internal write-back instruction *-memory description: System Memory physical id: 6 slot: System board or motherboard size: 2GiB *-bank:0 description: SODIMM Synchronous 1067 MHz (0.9 ns) product: 0x384A53463132383634485A2D314731463120 vendor: 0x802C physical id: 0 serial: [REMOVED] slot: DIMM0 size: 1GiB clock: 1067MHz (0.9ns) *-bank:1 description: SODIMM Synchronous 1067 MHz (0.9 ns) product: 0x384A53463132383634485A2D314731463120 vendor: 0x802C physical id: 1 serial: [REMOVED] slot: DIMM0 size: 1GiB clock: 1067MHz (0.9ns) *-firmware description: BIOS vendor: Apple Inc. physical id: e version: MBP55.88Z.00AC.B03.0906151708 (06/15/09) size: 1MiB capacity: 4032KiB capabilities: pci upgrade shadowing cdboot bootselect acpi ieee1394boot smartbatte -pci * description: Host bridge product: MCP79 Host Bridge vendor: nVidia Corporation physical id: 100 bus info: pci@0000:00:00.0 version: b1 width: 32 bits clock: 66MHz *-memory:0 UNCLAIMED description: RAM memory product: MCP79 Memory Controller vendor: nVidia Corporation physical id: 0.1

49

Chapitre 6. UI003 Environnement de travail - Installation dune distribution

bus info: pci@0000:00:00.1 version: b1 width: 32 bits clock: 66MHz (15.2ns) capabilities: bus_master configuration: latency=0 -isa * description: ISA bridge product: MCP79 LPC Bridge vendor: nVidia Corporation physical id: 3 bus info: pci@0000:00:03.0 version: b3 width: 32 bits clock: 66MHz capabilities: isa bus_master configuration: latency=0 resources: ioport:2000(size=256) -memory:1 UNCLAIMED * description: RAM memory product: MCP79 Memory Controller vendor: nVidia Corporation physical id: 3.1 bus info: pci@0000:00:03.1 version: b1 width: 32 bits clock: 66MHz (15.2ns) configuration: latency=0 -serial * description: SMBus product: MCP79 SMBus vendor: nVidia Corporation physical id: 3.2 bus info: pci@0000:00:03.2 version: b1 width: 32 bits clock: 66MHz capabilities: pm cap_list configuration: driver=nForce2_smbus latency=0 resources: irq:15 ioport:2180(size=64) ioport:2140(size=64) ioport:2100(size=64 -memory:2 UNCLAIMED * description: RAM memory product: MCP79 Memory Controller vendor: nVidia Corporation physical id: 3.3 bus info: pci@0000:00:03.3 version: b1 width: 32 bits clock: 66MHz (15.2ns) configuration: latency=0 -memory:3 UNCLAIMED * description: RAM memory product: nVidia Corporation

50

Chapitre 6. UI003 Environnement de travail - Installation dune distribution


vendor: nVidia Corporation physical id: 3.4 bus info: pci@0000:00:03.4 version: b1 width: 32 bits clock: 66MHz (15.2ns) configuration: latency=0 *-processor UNCLAIMED description: Co-processor product: MCP79 Co-processor vendor: nVidia Corporation physical id: 3.5 bus info: pci@0000:00:03.5 version: b1 width: 32 bits clock: 66MHz capabilities: bus_master configuration: latency=0 maxlatency=1 mingnt=3 resources: memory:93400000-9347ffff *-usb:0 description: USB Controller product: MCP79 OHCI USB 1.1 Controller vendor: nVidia Corporation physical id: 4 bus info: pci@0000:00:04.0 version: b1 width: 32 bits clock: 66MHz capabilities: pm bus_master cap_list configuration: driver=ohci_hcd latency=0 maxlatency=1 mingnt=3 resources: irq:18 memory:93488000-93488fff *-usb:1 description: USB Controller product: MCP79 EHCI USB 2.0 Controller vendor: nVidia Corporation physical id: 4.1 bus info: pci@0000:00:04.1 version: b1 width: 32 bits clock: 66MHz capabilities: debug pm bus_master cap_list configuration: driver=ehci_hcd latency=0 maxlatency=1 mingnt=3 resources: irq:20 memory:93489200-934892ff *-usb:2 description: USB Controller product: MCP79 OHCI USB 1.1 Controller vendor: nVidia Corporation physical id: 6 bus info: pci@0000:00:06.0 version: b1 width: 32 bits clock: 66MHz capabilities: pm bus_master cap_list

51

Chapitre 6. UI003 Environnement de travail - Installation dune distribution


configuration: driver=ohci_hcd latency=0 maxlatency=1 mingnt=3 resources: irq:17 memory:93487000-93487fff *-usb:3 description: USB Controller product: MCP79 EHCI USB 2.0 Controller vendor: nVidia Corporation physical id: 6.1 bus info: pci@0000:00:06.1 version: b1 width: 32 bits clock: 66MHz capabilities: debug pm bus_master cap_list configuration: driver=ehci_hcd latency=0 maxlatency=1 mingnt=3 resources: irq:19 memory:93489100-934891ff *-multimedia description: Audio device product: MCP79 High Definition Audio vendor: nVidia Corporation physical id: 8 bus info: pci@0000:00:08.0 version: b1 width: 32 bits clock: 66MHz capabilities: pm bus_master cap_list configuration: driver=HDA Intel latency=0 maxlatency=5 mingnt=2 resources: irq:23 memory:93480000-93483fff *-pci:0 description: PCI bridge product: MCP79 PCI Bridge vendor: nVidia Corporation physical id: 9 bus info: pci@0000:00:09.0 version: b1 width: 32 bits clock: 66MHz capabilities: pci bus_master cap_list resources: memory:93300000-933fffff *-network description: Ethernet interface product: MCP79 Ethernet vendor: nVidia Corporation physical id: a bus info: pci@0000:00:0a.0 logical name: eth0 version: b1 serial: [REMOVED] size: 100MB/s capacity: 1GB/s width: 32 bits clock: 66MHz capabilities: pm msi bus_master cap_list ethernet physical mii 10bt 10bt-fd 100bt 100bt-fd 1000bt-fd autonegotiation configuration: autonegotiation=on broadcast=yes driver=forcedeth

52

Chapitre 6. UI003 Environnement de travail - Installation dune distribution

driverversion=0.64 duplex=full ip=[REMOVED] latency=0 link=yes maxlatency=20 mingnt=1 multicast=yes port=MII speed=100MB/s resources: irq:27 memory:93486000-93486fff ioport:21e0(size=8) memory:93489000-934890ff memory:93489300-9348930f *-ide description: IDE interface product: MCP79 SATA Controller vendor: nVidia Corporation physical id: b bus info: pci@0000:00:0b.0 logical name: scsi0 logical name: scsi1 version: b1 width: 32 bits clock: 66MHz capabilities: ide pm msi bus_master cap_list emulated configuration: driver=ahci latency=0 maxlatency=1 mingnt=3 resources: irq:26 ioport:21d8(size=8) ioport:21ec(size=4) ioport:21d0(size=8) ioport:21e8(size=4) ioport:21c0(size=16) memory:93484000-93485fff *-disk description: ATA Disk product: Hitachi HTS54502 vendor: Hitachi physical id: 0 bus info: scsi@0:0.0.0 logical name: /dev/sda version: PB2O serial: [REMOVED] size: 232GiB (250GB) capabilities: partitioned partitioned:dos configuration: ansiversion=5 *-volume:0 UNCLAIMED description: EFI GPT partition physical id: 1 bus info: scsi@0:0.0.0,1 capacity: 200MiB capabilities: primary nofs *-volume:1 description: Darwin/OS X HFS+ partition vendor: Mac OS X (journaled) physical id: 2 bus info: scsi@0:0.0.0,2 logical name: /dev/sda2 version: 4 serial: [REMOVED] size: 74GiB capacity: 74GiB capabilities: primary journaled bootable osx hfsplus initialized configuration: boot=osx checked=2010-05-19 13:25:04 created=2010-05-19 05 filesystem=hfsplus lastmountedby=HFSJ modified=2010-05-19 16:13:54 state=clean *-volume:2 description: EFI (FAT-12/16/32) partition physical id: 3

53

Chapitre 6. UI003 Environnement de travail - Installation dune distribution

bus info: scsi@0:0.0.0,3 logical name: /dev/sda3 capacity: 977KiB capabilities: primary bootable boot -volume:3 * description: EXT4 volume vendor: Linux physical id: 4 bus info: scsi@0:0.0.0,4 logical name: /dev/sda4 logical name: / version: 1.0 serial: [REMOVED] size: 71GiB capacity: 71GiB capabilities: primary journaled extended_attributes large_files huge_file dir_nlink recover extents ext4 ext2 initialized configuration: created=2010-05-19 16:25:20 filesystem=ext4 lastmountpoint=[REMOVED Manualy] modified=2010-06-06 14:27:27 mount.fstype=ext4 mount.options=rw,relatime,errors=remount-ro,barrier=1,data=ordered mounted=2010-06-07 12:58:23 state=mounted *-cdrom description: DVD writer product: DVDRW GS23N vendor: HL-DT-ST physical id: 1 bus info: scsi@1:0.0.0 logical name: /dev/cdrom logical name: /dev/cdrw logical name: /dev/dvd logical name: /dev/dvdrw logical name: /dev/scd0 logical name: /dev/sr0 version: SB00 capabilities: removable audio cd-r cd-rw dvd dvd-r configuration: ansiversion=5 status=open *-pci:1 description: PCI bridge product: MCP79 PCI Express Bridge vendor: nVidia Corporation physical id: 10 bus info: pci@0000:00:10.0 version: b1 width: 32 bits clock: 33MHz capabilities: pci pm msi bus_master cap_list resources: ioport:1000(size=4096) memory:92000000-930fffff ioport:80000000(size *-display description: VGA compatible controller product: C79 [GeForce 9400M] vendor: nVidia Corporation physical id: 0 bus info: pci@0000:02:00.0

54

Chapitre 6. UI003 Environnement de travail - Installation dune distribution

version: b1 width: 64 bits clock: 33MHz capabilities: pm msi bus_master cap_list rom configuration: driver=nvidia latency=0 resources: irq:22 memory:92000000-92ffffff memory:80000000-8fffffff(prefetch memory:90000000-91ffffff(prefetchable) ioport:1000(size=128) memory:93000000-9301ffff(prefet *-pci:2 description: PCI bridge product: MCP79 PCI Express Bridge vendor: nVidia Corporation physical id: 15 bus info: pci@0000:00:15.0 version: b1 width: 32 bits clock: 33MHz capabilities: pci pm msi pciexpress bus_master cap_list configuration: driver=pcieport-driver resources: irq:24 memory:93200000-932fffff *-network description: Wireless interface product: BCM4322 802.11a/b/g/n Wireless LAN Controller vendor: Broadcom Corporation physical id: 0 bus info: pci@0000:03:00.0 logical name: eth1 version: 01 serial: [REMOVED] width: 64 bits clock: 33MHz capabilities: pm msi pciexpress bus_master cap_list ethernet physical wirele configuration: broadcast=yes driver=wl0 driverversion=5.10.91.9 latency=0 multicast=yes wireless=IEEE 802.11abgn resources: irq:23 memory:93200000-93203fff *-pci:3 description: PCI bridge product: MCP79 PCI Express Bridge vendor: nVidia Corporation physical id: 16 bus info: pci@0000:00:16.0 version: b1 width: 32 bits clock: 33MHz capabilities: pci pm msi pciexpress bus_master cap_list configuration: driver=pcieport-driver resources: irq:25 memory:93100000-931fffff *-firewire description: FireWire (IEEE 1394) product: FW643 PCI Express1394b Controller (PHY/Link) vendor: Agere Systems physical id: 0 bus info: pci@0000:04:00.0 version: 07

55

Chapitre 6. UI003 Environnement de travail - Installation dune distribution


width: 64 bits clock: 33MHz capabilities: pm msi pciexpress bus_master cap_list configuration: driver=ohci1394 latency=0 resources: irq:22 memory:93100000-93100fff *-scsi physical id: 2 bus info: usb@2:5 logical name: scsi6 capabilities: emulated scsi-host configuration: driver=usb-storage *-disk description: SCSI Disk product: SD Card Reader vendor: APPLE physical id: 0.0.0 bus info: scsi@6:0.0.0 logical name: /dev/sdb version: 1.00 capabilities: removable *-medium physical id: 0 logical name: /dev/sdb *-battery product: Unknown vendor: Unknown physical id: 1 version: Unknown serial: [REMOVED] slot: Unknown *-network DISABLED description: Ethernet interface physical id: 2 logical name: vboxnet0 serial: [REMOVED] capabilities: ethernet physical configuration: broadcast=yes multicast=yes

Pour voir laction de loption -sanitize :


$ sudo lshw > f1.txt $ sudo lshw -sanitize > f2.txt $ diff f1.txt f2.txt

56

Chapitre 6. UI003 Environnement de travail - Installation dune distribution

6.4. Virtual Box


6.4.1. Installation de Base
2.j Installation of Virtual box

Virtual Box version 3.0.8 (Version OSE) is currently available in Ubuntu 9.10 Karmic but it is advisable to use instead the most current version en cours 3.0.10 non OSE (Open Source Edition) which contains full features and remain pour utilisation pers http://www.virtualbox.org/wiki/Editions

... The full VirtualBox package is available in binary (executable) form free of charge from the page. This version is free for personal use and evaluation under the terms of the VirtualBo Use and Evaluation License. If, instead, you wish to purchase licenses for enterprise use and/or enterprise support for please do not hesitate to contact your Sun representative. The VirtualBox Open Source Edition (OSE) is the one that has been released under the GPL and comes with complete source code. It is functionally equivalent to the full VirtualBox packag except for a few features that primarily target enterprise customers. This gives us a chance generate revenue to fund further development of VirtualBox. ... Download page:http://www.virtualbox.org/wiki/Downloads Click on: VirtualBox 3.0.10 for Linux hosts Click on: AMD64 on the line containing Ubuntu 9.10 ("Karmic Koala") i386 | AMD64 Save on the Desktop Double click on package: virtualbox-3.0_3.0.10-54097_Ubuntu_karmic_amd64.deb saved to start installation and follow instruction (nothing in particular simply click forward) Done! Alternatively: $ sudo gedit /etc/apt/sources.list Add at the end of file... deb http://download.virtualbox.org/virtualbox/debian karmic non-free and save... Then do $ sudo aptitude update (...) Get:11 http://download.virtualbox.org karmic Release.gpg [197B] Ign http://download.virtualbox.org karmic/non-free Translation-en_GB Get:12 http://download.virtualbox.org karmic Release [3,459B] Ign http://download.virtualbox.org karmic Release Get:13 http://download.virtualbox.org karmic/non-free Packages [1,954B] Fetched 68.4kB in 0s (72.5kB/s) Reading package lists... Done W: GPG error: http://download.virtualbox.org hardy Release: The following signatures couldnt be verified because the public key is not available: NO_PUBKEY DCF9F87B6DFBCBAE

57

Chapitre 6. UI003 Environnement de travail - Installation dune distribution

Current status: 4 new [+4]. ==> Public key is missing for new repository...

Get public key for new repository $ wget -q http://download.virtualbox.org/virtualbox/debian/sun_vbox.asc -O- | sudo apt-key a OK $ sudo aptitude update (...) Get:1 http://download.virtualbox.org karmic Release.gpg [197B] Ign http://download.virtualbox.org karmic/non-free Translation-en_GB Get:2 http://download.virtualbox.org karmic Release [3,459B] Hit http://download.virtualbox.org karmic/non-free Packages Fetched 198B in 0s (217B/s) Reading package lists... Done

Installation des paquets ncessaires VirtualBox aura besoin de compiler un module pour votre machine hte. Pour ce faire, il besoin que soient pralablement installs des applications particulires. Faisons le tout de $ sudo aptitude install linux-headers-generic build-essential filostene@macfil:~$ sudo aptitude install linux-headers-generic build-essential Reading package lists... Done Building dependency tree Reading state information... Done Reading extended state information Initialising package states... Done The following NEW packages will be installed: build-essential dpkg-dev{a} g++{a} g++-4.4{a} libstdc++6-4.4-dev{a} 0 packages upgraded, 5 newly installed, 0 to remove and 1 not upgraded. Need to get 0B/7,606kB of archives. After unpacking 25.0MB will be used. Do you want to continue? [Y/n/?] y Writing extended state information... Done Selecting previously deselected package libstdc++6-4.4-dev. (Reading database ... 116696 files and directories currently installed.) Unpacking libstdc++6-4.4-dev (from .../libstdc++6-4.4-dev_4.4.1-4ubuntu8_amd64.deb) ... Selecting previously deselected package g++-4.4. Unpacking g++-4.4 (from .../g++-4.4_4.4.1-4ubuntu8_amd64.deb) ... Selecting previously deselected package g++. Unpacking g++ (from .../g++_4.4.1-1ubuntu2_amd64.deb) ... Selecting previously deselected package dpkg-dev. Unpacking dpkg-dev (from .../dpkg-dev_1.15.4ubuntu2_all.deb) ... Selecting previously deselected package build-essential. Unpacking build-essential (from .../build-essential_11.4_amd64.deb) ... Processing triggers for man-db ... Setting up dpkg-dev (1.15.4ubuntu2) ... Setting up libstdc++6-4.4-dev (4.4.1-4ubuntu8) ... Setting up g++-4.4 (4.4.1-4ubuntu8) ... Setting up g++ (4:4.4.1-1ubuntu2) ... update-alternatives: using /usr/bin/g++ to provide /usr/bin/c++ (c++) in auto mode. Setting up build-essential (11.4) ... Reading package lists... Done

58

Chapitre 6. UI003 Environnement de travail - Installation dune distribution


Building dependency tree Reading state information... Done Reading extended state information Initialising package states... Done Writing extended state information... Done Check what is availalbe... $ sudo apt-cache search virtualbox virtualbox - Sun xVM VirtualBox virtualbox-2.0 - Sun xVM VirtualBox virtualbox-2.1 - Sun xVM VirtualBox virtualbox-2.2 - Sun VirtualBox virtualbox-3.0 - Sun VirtualBox

# Cest celle-ci qui nous intresse

Install version 3.0 $ sudo aptitude install virtualbox-3.0 # Validez linstallation du produit, il ncessite environ 50 Mo en tlchargement # et 100 Mo sur disque une fois install. # Sen suit un tlchargement, une compilation et linstallation Dpaquetage de dkms ( partir de .../dkms_2.0.19-0ubuntu2_all.deb)... Paramtrage de virtualbox-3.0 (3.0.4-50677_Ubuntu_hardy)... Messages emitted during module compilation will be logged to /var/log/vbox-install.log. Success! * Starting VirtualBox kernel module * done. Verify $ lsmod | grep -i vboxdrv vboxdrv 1708492

1 vboxnetflt

==> OK... maintenant je peux demarrer VirtualBox $ virtualbox Ouhou! Ca marche ... euh ... enfin non ca marche pas :(( The program virtualbox is currently not installed. sudo apt-get install virtualbox-ose-qt virtualbox: command not found You can install it by typing:

Aaaaaaahhhhhhhh !!! J y suis... problem de typo... attention au majuscule dans la commande Linux est tres sensible a ce niveau la !!! LEOF devrait rajouter ca dans la doc !!! $ VirtualBox HipHipHip Oura ca fonctionne ! Ouf! une etape de moins... Prparation de lenvironnement pour VirtualBox La procdure dinstallation est gnralement assez simple. - Crez une nouvelle VM (cliquer sur NEW). - Donner une nom: DebianStableFromBusiness (...business.iso) - Systme: Linux

59

Chapitre 6. UI003 Environnement de travail - Installation dune distribution


-

Version: Debian, puis suivant, Taille de la mmoire: 512, puis suivant, Crez un nouveau disque dur, puis suivant, Slectionnez Image disque taille dynamique, puis suivant, Emplacement, ici installez limage sur un disque ou un volume sur lequel vous avez entre 5 de place libre. Cela peut-tre un disque externe, par exemple : /media/sda1/MesVM/DebianStable.vdi. Laissez la taille par dfaut, puis suivant

Dans mon cas: Type: Dynamically expanding storage Location: /home/filostene/.VirtualBox/HardDisks/DebianStableFromBusinessCard.vdi Size: 10.00 GB (10737418240 Bytes) - Terminez.

6.4.2. Installation dune Machine Virtuelle (Debian)


Manuel de Reference Debian: http://www.debian.org/doc/manuals/debian-reference/index.fr.html

Configurer le nombre despace de travail dans Debian, Ubuntu... http://www.noob-on-linux.com/article-configurer-le-nombre-d-espace-de-travail-39445906.htm - Installer debian a partir dune cle USB (pas de lecteur cd rom) 1- telecharger les fichiers specifiques pour le boot hd-media ftp://ftp.debian.org/debian/dists/lenny/main/installer-i386/current/images/hd-media/ - boot.img.gz (a decompresser a la racine de la cle usb) zcat boot.img.gz > /dev/sdb (device associ votre cl usb) 2- telecharger une image netinst de la version stable de debian http://cdimage.debian.org/debian-cd/5.0.3/i386/iso-cd/debian-503-i386-netinst.iso puis la copier sur la cle usb doc: http://www.debian.org/releases/stable/i386/apas02.html.fr http://wiki.debian.org/VirtualBox Ensuite sassurer que la station puisse booter sur usb , le cas chant lactiver dans le bios 2.k Debian Download

Download businesscard CD image (generally 20-50 MB) for i386 architecture $ wget http://cdimage.debian.org/debian-cd/5.0.3/i386/iso-cd/debian-503-i386-businesscard.is MD5 sum

60

Chapitre 6. UI003 Environnement de travail - Installation dune distribution


$ md5sum debian-503-i386-businesscard.iso 54d091a5491d1f36554cca8362af8a27 debian-503-i386-businesscard.iso 54d091a5491d1f36554cca8362af8a27 (in the text file) Both match perfectly :)) Get MD5 sum from Debian.org $ wget wget http://cdimage.debian.org/debian-cd/5.0.3/i386/iso-cd/MD5SUMS --2009-11-13 00:16:03-- http://wget/ Resolving wget... failed: Name or service not known. wget: unable to resolve host address wget --2009-11-13 00:16:03-- http://cdimage.debian.org/debian-cd/5.0.3/i386/iso-cd/MD5SUMS Resolving cdimage.debian.org... 130.239.18.163, 130.239.18.137, 2001:6b0:e:2018::163, ... Connecting to cdimage.debian.org|130.239.18.163|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 2452 (2.4K) [text/plain] Saving to: MD5SUMS 100%[======================================>] 2,452 --.-K/s in 0.001s

2009-11-13 00:16:03 (2.04 MB/s) - MD5SUMS saved [2452/2452] FINISHED --2009-11-13 00:16:03-Downloaded: 1 files, 2.4K in 0.001s (2.04 MB/s) -----------------------------------------------------$ wget wget http://cdimage.debian.org/debian-cd/5.0.3/i386/iso-cd/MD5SUMS.sign --2009-11-13 00:16:23-- http://wget/ Resolving wget... failed: Name or service not known. wget: unable to resolve host address wget --2009-11-13 00:16:23-- http://cdimage.debian.org/debian-cd/5.0.3/i386/iso-cd/MD5SUMS.sign Resolving cdimage.debian.org... 130.239.18.137, 130.239.18.163, 2001:6b0:e:2018::137, ... Connecting to cdimage.debian.org|130.239.18.137|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 197 [text/plain] Saving to: MD5SUMS.sign 100%[======================================>] 197 --.-K/s in 0s

2009-11-13 00:16:23 (5.69 MB/s) - MD5SUMS.sign saved [197/197] FINISHED --2009-11-13 00:16:23-Downloaded: 1 files, 197 in 0s (5.69 MB/s) --------------------------------------------------------Verify Signature filostene@macfil:~/Downloads$ gpg --verify MD5SUMS.sign gpg: Signature made Mon 07 Sep 2009 21:43:49 BST using DSA key ID 88C7C1F7 gpg: Cant check signature: public key not found filostene@macfil:~/Downloads$ gpg --recv-keys 88C7C1F7 gpg: requesting key 88C7C1F7 from hkp server keys.gnupg.net gpg: key 88C7C1F7: public key "Steve McIntyre <steve@einval.com>" imported gpg: no ultimately trusted keys found

61

Chapitre 6. UI003 Environnement de travail - Installation dune distribution


gpg: Total number processed: 1 gpg: imported: 1 filostene@macfil:~/Downloads$ gpg --verify MD5SUMS.sign gpg: Signature made Mon 07 Sep 2009 21:43:49 BST using DSA key ID 88C7C1F7 gpg: Good signature from "Steve McIntyre <steve@einval.com>" gpg: aka "Steve McIntyre <93sam@debian.org>" gpg: aka "Steve McIntyre <stevem@chiark.greenend.org.uk>" gpg: aka "Debian CD signing key <debian-cd@lists.debian.org>" gpg: WARNING: This key is not certified with a trusted signature! gpg: There is no indication that the signature belongs to the owner. Primary key fingerprint: AC65 6D79 E362 32CF 77BB B0E8 7C3B 7970 88C7 C1F7 2.l Installation de la distribution Debian

-Demarrer VirtualBox si il nest pas deja en route -Selectionner la Machine Virtuelle nouvellement creee DebianStableFromBusiness -Dans tabulation Details, cliquer sur "CD/DVD-ROM" -Check Mount "CD/DVD Drive" -Seclectionner "ISO Image File" -Clique sur licone jaune qui ressemble a un dossier pour invoquer le Virtual Media Manager, puis parcourir pour selectionner "debian-503-i386-businesscard.iso" -Cliquer sur "Start" pour demarrer la machine virtuelle Slectionnez Install et validez. Nous allons procder linstallation de Debian. Note : Quand vous avez cliqu dans la VM, le curseur, par dfaut reste bloqu dans ce pouvoir accder votre bureau, appuyez sur la touche CTRL situ droite de la barre des Ici, voici les grandes options que vous pouvez slectionner lors de linstallation : - Prenez French - Franais - Franais (fr latin-9) - Nom de machines, ce sera le nom dhte - Domaine, si cest un serveur dclar, sinon vous pouvez laisser vide - Partitionnement, prenez utiliser un disque entier, ce sera lespace que vous avez dclar dans VirtualBox - Validez plusieurs fois jusqu arriver au schma de partitionnement. Ici, mettez tout sur une seule partition si vous tes dbutant, comme cela est prconis. La sparation des volumes nest pas aborde ici. Validez, le disque sera cr et linstallateur installera le systme de base. - Mettez un mot de passe pour ladministrateur root et confirmez - puis vous allez crer un compte utilisateur qui sera le vtre, car on nutilise pas le compte root par dfaut. - Slectionnez ensuite un Pays pour le tlchargement des paquets - La partie mandataire est plus dlicate. Il vous faut savoir si vous avez un proxy ou pas. Si vous tes chez vous, il ny en a probablement pas, si vous tes dans votre entreprise, il y en a probablement un. Il vous faut demander linformation ladministrateur de votre rseau et renseigner la zone. Si le proxy est ladresse 192.168.1.1 et fonctionne sur le port 8080, il vous faudra mettre : http ://192.168.1.1 :8080. Ensuite, patientez un peu le temps que le processus rcupre les listes des paquet - Vous arrivez la slection des paquets.

62

Chapitre 6. UI003 Environnement de travail - Installation dune distribution

Puisque la VM va vous servir un peu tout et ne sera pas quun serveur, slectionnez les options par dfaut Environnement graphique de bureau et Systme standard - L, vous pouvez aller boire un caf car il peut y en avoir pour un petit moment (peut-tre mme plus dune heure) - Ici GROSSE patience. - Une fois les paquets tlchargs et installs, validez linstallation de Grub comme propos par linstallateur. -Puis redemarrer sur le nouveau systeme :)) 2.m Change VirtualBox Host Key to switch from HOST to VM and vice versa... Pour entree dans la machine virtuelle il suffit de cliquer dedans ainsi tout ce qui sera taper au clavier ou cliquer a la souris sera capture et interprete par la machine virtuelle comme etant des entree clavier et souris sur la machine Debian.

Pour en sortir, il faut appuyer sur la touche "Host Key" qui est par defaut CTRL Right (la touche control situe a droite sur le clavier)... malheureusement, sur le MacBookPro cette touche nexiste pas ! Il ny a quune touche CTRL Gauche (situe a gauche sur le clavie ceci signifie que si on passe en mode pleine ou que lon active simplement la VM, il nest plus possible dans sortir... !!! Cest ce qui mest arrive... Pour eviter ce probleme, il faut donc changer la configuration de la Host Key pour refleter le clavier utilise: - Demarrer VirtualBox - Go to Fichier > Preferences > Input - Presser sur touche fn+F8 (ne pas utiliser CTRL Gauche sinon cela interfere avec les raccourcis clavier!), le changement de configuration devrait changer de CTRL Droit en F8 dans la fenetre de preference - OK ==> Done :)) 2.n Ajuster resolution ecran de la VM La machine "host" est un MacBook pro 13" en 16/9 (Widescreen 1280x720) alors que la VM est en resolution 4/3 je ne vois pas tout lecran... malheureusment aucun parametre de resolution ne semble pour voir etre choisi, ils sont tous vide (pas de choix)

Sur un forum il est indique quil faut installe les add-ons virtualbox pour ce type de chang La procedure par defaut dans Virtual Box na pas fonctionne. Jai donc telecharge manuellement http://download.virtualbox.org/virtualbox/3.0.10 /VBoxGuestAdditions_3.0.10.iso et je lai manuellement monter dans la VM (meme procedure que pour monter limage .iso de la Debian) Le probleme cest que je narrive toujours pas a executer le CD-ROM. Jessaye de demarrer le autorun.sh jai lerreur suivante: Could not display /media/cdrom0/autorun.sh Same en root. Je ne peux executer sudo car mon compte par defaut nest pas dans le group sudousers and je ne sais pas comment lajouter...

63

Chapitre 6. UI003 Environnement de travail - Installation dune distribution


Cela doit etre un pb de permission mais je vois pas trop comment le resoudre... il est fort probable que le cdrom soit mont sans les droits dexcution, avec une ligne de ce genre dans /etc/fstab : /dev/scd1 /media/cdrom0 udf,iso9660 user,noauto,noexec,utf8 0 0 -> cest le noexec, que tu peux essayer de remplacer par exec, puis de remonter le cdrom. Il ny avait pas de noexec dans le fstab mais jai rajoute ",exec" apres le noauto comme tu conseillais et ca marche :)) Ensuite... ouvre un tape "su tape "cd tape "sh terminal -" puis le mot de passe root (pour devenir root) /media/cdrom0 (repetoire ou est mont liso des guests additions) autorun.sh"

Aie! Le script reclame que jinstalle Make sur la VM et les linux-headers et les build-essen Les conseils dun autre etudiant sur la liste de diffusion: "...

Ce qui donne donc (de mmoire) "aptitude install linux-headers-[ton archi] build-essential" (le [ton archi] peut tre rcupr avec la command "uname -a" (-a renvoyant toutes les infos))(sinon un "aptitude search linux-headers" te renvoie tous les paquets correspondants, tu devrais trouver le tien ..." Alors allons y... En cherchant un peu jai trouve trois commande toute simple: $sudo apt-get install build-essential linux-headers-uname -r $sudo apt-get install make $sudo apt-get install gcc En voici le resultat (TO COPY/PASTE FROM LOG INSTALL STORED ON DEBIAN VM...) Then redo: ouvre un tape "su tape "cd tape "sh terminal -" puis le mot de passe root (pour devenir root) /media/cdrom0 (repetoire ou est mont liso des guests additions) autorun.sh"

It shall works fine now... ==> Installation successfull except that OpenGL is supported only starting at kernel version 2.6.27 or le kernel courrant est en version 2.6.26... Pas vraiment grave pour le moment...

64

Chapitre 6. UI003 Environnement de travail - Installation dune distribution

It is time to reboot for changes to take effect :)) And it works, now I can see the full screen... but only in 640x480 while I would need 1280x720 (as indicated in Ubuntu 9.10). The problem is that in System > Preference > Screen Resolution I cannot choose any other resolution that 640x480 :((

After the restart i did modify /etc/X11/xorg.conf (Attention cest un X majuscule). Again s udo was needed to be able to save the result. So type "sudo gedit" (or su and root password) in a terminal session, open /etc/X11/xorg.conf and below is what i added (see indended text) Section "Screen" Identifier "Default Screen" Device "Generic Video Card" Monitor "Generic Monitor" DefaultDepth 24 SubSection "Display" Modes "1280x720" "1280x800" "640x480" EndSubSection EndSection As you might notice I added "1280x720", which is the right resolution of my laptops screen under Debian or Ubuntu (compared to the 1280x800 under Mac OS X) It needs to be put in first place to be used as default... After a restarted (ctrl-Alt + backspace (pour redmarrer X) or reboot of VM) I clicked in the main menu "System > Preferences > Screen Resolution". The Screen Resolution Preference" dialog is shown and the resolution "1280x720" CAN be chosen. ==> It works, now if I start VM, I activate it and press Host Key (CTRL left) + F if shows up in full screen like it would be installed on the laptop directly. Excellent. 2.o Debian in French ??? Pour reconfigurer son environnement correctement il suffit dans une console dexcuter la commande suivante : [root@tuxbihan.org]$ dpkg-reconfigure locales

Ensuite cochez les langues fr_FR, fr_FR avec euro et valider. Choisissez par dfaut fr_FR et ==> En fait jai cocher All Locales pour toutes les installer et choisi fr_FR-UTF8 Ensuite un petit... $ update-locale Dconnectez vous ou relancez une console et tapez la commande : $ locale

65

Chapitre 6. UI003 Environnement de travail - Installation dune distribution


Vous devriez voir apparatre votre environnement avec la variable fr_FR

LANG=fr_FR LC_TYPE="fr_FR" LC_NUMERIC="fr_FR" LC_TIME="fr_FR" LC_COLLATE="fr_FR" LC_MONETARY="fr_FR" LC_MESSAGES="fr_FR" LC_PAPER="fr_FR" LC_NAME="fr_FR" lC_ADDRESS="fr_FR" LC_TELEPHONE="fr_FR"( LC_MEASUREMENT="fr_FR" LC_IDENTIFICATION="fr_FR" LC_ALL= Apres un redemarrage de la VM tout est en francais (sauf les message derreur du noyau :) Bon Debian en FR :)) MAN PAGES en francais :)) Installation des man-pages-fr et man-pages-fr-extra via synaptique --> Pareil que comme pour des paquets habituels

2.p Quelques outils en plus... apt-get install zim (wiki application for note taking) apt-get install xournal (to make annotation of pdf in handwriting via tabler or via keyboard 2.q Set up clavier configuration (Host) Pour pouvoir taper en Francais :)) - Systeme > Preference > Clavier > Tab Agencement - Choisir model de clavier "MacBook/MacBook Pro (Intl)" - Choisir agencement "Royaume Uni International (avec touches mortes)" ALT Right + ;: + e = ALT Right + " + e = (or SHIFT + 6 + e) ALT Right + \| + e = (or + e) etc... Ajustement de touche additionel. Le clavier est gereer par XKB (X Keyboard Extension) Tous les fichiers de XKB se trouve dans /usr/share/X11/xkb Pour voir les fichiers utilis pour la configuration courante : $ setxkbmap -print xkb_keymap { xkb_keycodes { include "macintosh+macintosh(goodmap)+aliases(qwerty)" }; xkb_types { include "complete+numpad(mac)" }; xkb_compat { include "complete" }; xkb_symbols { include "pc+macintosh_vndr/gb+inet(apple)+level3(enter_switch)+

66

Chapitre 6. UI003 Environnement de travail - Installation dune distribution


gb(intl):2+level3(ralt_switch_for_alts_toggle):1+level3(ralt_switch_for_alts_toggle):2+ group(alts_toggle)+eurosign(e)" }; xkb_geometry { include "macintosh(macbook79)" }; }; les fichiers qui nous interesse sont ceux indiquer sur la ligne xkb_symbols ils sont localise dans /usr/share/X11/xkb/symbols Pour creer la configuration clavier, XKB compile lensemble des fichiers ci-dessus: keycodes, types, compat, symbols, geometry... Pour modifier le layout du clavier nous devons modifier le fichier de symbol suivant : /usr/share/X11/xkb/symbols/gb qui correspond au differet type de clavier anglais :))

Edit le fichier de configuration clavier et modifier la partie intl (pour international) com $ gedit /usr/share/X11/xkb/symbols/gb "... partial alphanumeric_keys xkb_symbols "intl" { // Describes the differences between a very simple en_US // keyboard and a very simple U.K. keyboard layout with // dead keys. By Phil Jones (philjones1@blueyonder.co.uk) // // // // // // Includes the following keys: dead_grave dead_acute dead_circumflex dead_tilde dead_diaeresis

include "latin" name[Group1]="United Kingdom - International (with dead keys)"; key key key key key <AE02> { [ <AE03> { [ <AE04> { [ <AE06> { [ <AD09> { [ 2, 3, 4, 6, o, at, sterling, dollar, dead_circumflex, O, dead_diaeresis, plusminus, EuroSign, twosuperior, threesuperior, NoSymbol, oe, dead_diaeresis, notsign, onehalf ] }; onethird ] }; onequarter ] }; onesixth ] }; OE ] }; bar ] }; notsign ] };

key <AC11> { [ dead_acute, //dead_doubleacute key <TLDE> { [ section, //dead_grave key <BKSL> key <LSGT> { [ backslash, { [ dead_grave,

bar, dead_tilde,

numbersign, brokenbar,

bar ] }; bar ] };

include "level3(ralt_switch)" };

67

Chapitre 6. UI003 Environnement de travail - Installation dune distribution


// Describe the differences between the US Colemak layout // and a UK variant. By Andy Buckley (andy@insectnation.org) ..." Enregistrer les modification... Pour appliquer les modfifications simplement faire: $ setxkbmap 2.r Dossier partage entre VM and HOST

On HOST - mkdir /home/filostene/vmdebian (creer le repertoire a partager sur le host) - VirtualBox (to start VirtualBox) - Right Click on VM avec laquelle on veut partager dossier, go to Preference > Repertoires P - Ajouter un repertoire partage permanent Chemin: /home/filostene/vmdebian Nom (Share name): vmdebian - OK, puis demarrer la VM - Dans la VM, demarrer un terminal puis: $ mkdir /mnt/filosteneUbuntu (creer le repertoire partage sur la VM) $ mount -t vboxsf vmdebian /mnt/filosteneUbuntu (monter le repertoire partage du Host sur la For automounting add the following line in /etc/fstab vmdebian /mnt/filosteneUbuntu vboxfs rw,uid=1000 0 0 UID cest lidentifiant utilisateur du HOST et de la VM, les deux doivent etre identique pour que le partage soit monter en lecture et ecriture. ==> Success :)) 2.s Kernel error to hide $ gnome-session-properties Then unckeck kerloop... module... 2.t Resolve intermittent freezing of mouse/keyboard appearing after a while when VM is running for long hours Ce probleme semble affecte particulierement les MacBookPro sous Linux: http://www.virtualbox.org/ticket/2836 (voir en bas de page) La solution cest de desactiver ACPI pour la MV: In VirtualBox Select Machine Virutelle (it must be powered OFF) Right click Aller dans Preferences > Systeme Decocher "Activer ACPI" Demarrer VM

==> It shall be fine from now on :))

68

Chapitre 6. UI003 Environnement de travail - Installation dune distribution

2.cc Ajusting the date, time and time zone correctly... Voir Section Ajuster la date Ajuster le fuseau horaire

6.4.3. Virtual LAN : 1 Hte (Ubuntu) + 2 Machines Virtuelles (Debian)


- Dupliquer la machine virtuel pour en crer deux - Ajuster la mmoire disponible pour chacune delle (Avant: 512Mo pour une VM, Aprs: 400Mo each): *Ouvrir Virtual Box (executer commande "VirtualBox") *Clic droit sur la VM1 > Prfrence > Systme > Mmoire de base *Ajuster 400Mo *Rpter pour la deuxime VM - Cration du rseau virtuel: *Ouvrir Virtual Box (executer commande "VirtualBox") *Clic droit sur la VM1 > Prfrence > Systme > Rseau > Mode daccs *Choisir "Accs par Pont" *Choisir Nom Carte Rseau de lhte "eth2" (wi-) ou "eth01" (cable) *Rpter pour la deuxime VM ==> Au dmarrage, VirtualBox se chargera de crer une interface rseau eth2 dans les VM et de les activer avec une addresse IP - Conguration hosts pour chaque machine (pour la resolution par nom dhte et domaine (facultatif)) LINKTO: /etc/hosts (Ubuntu) - /etc/hosts (VM1 - debstal3) /etc/hosts (VM2 - debstal4) Toutes les machines appartiennent maintenant au mme rseau et peuvent accder Internet via lhte Ubuntu (soit par cable soit par wi-)

6.4.4. Installation VM Windows XP Pro (VirtualBox) sur hte Ubuntu 9.10 64bits, portable Apple MacBook Pro 5,5
Dans le cadre de la formation, ltude de SAMBA requiert la disponibilit de machine Windows. Dans le but den avoir toujours une (ou deux) sous la main, jai dcid dinstaller Windows XP Pro en tant que Machine Virtuelle (VM) VirtualBox 3.1.2 r56127 sur mon hte Ubuntu 9.10 64bits sur mon portable Apple MacBook Pro 5,5 Cela a t beaucoup moins facile quil ny parat et a pris beaucoup de temps et de patience pour rsoudre tout les problmes affrant. Voici un bref rsum de mmoire : 1. Crer un nouveau disque virtuel WinXPpro.vdi (Taille Dynamique - 10GB) dans le Gestionnaire de supports virtuels.

69

Chapitre 6. UI003 Environnement de travail - Installation dune distribution

Avertissement
Ne pas hsiter choisir une grande taille de disque pour viter toute limitation par la suite.

En effet en choisissant le type de taille Dynamique le chier .vdi restera petit (1,2Go dans mon cas correspondant lespace effectivement utilis par la VM) mais pourra stendre au besoin jusqu 10Go automatiquement.

En choisant une taille limite petite on risque de se retrouver limit dans la machine virtuelle. Dans mon cas, je nai par example pas pu installer le Service Pack 2 la premire fois car il me manquait 128Mo octets despace pour cela !!! SP2 utilise beaucoup despace durant linstallation !!!

Note : VirtualBox noffre pas de moyen direct de modier la taille limite dun disque virtuel mme sil est de taill dynamique. Toutefois il existe une mthode pour re-dimensionner un disque de machine virtuelle (VirtualBox)

2. Crer une nouvelle machine virtuelle WinXPpro utilisant le disque virtuel WinXPpro.vdi 3. Vrier les paramtres (Prfrence) de la VM :
* * * * * Microsoft Windows Windows XP Mem 512 Controler IDE - PIIX4 Carte Reseau Intel PRO/1000 MT Desktop

4. Insrer le disque dinstallation Win XP Pro dans le lecteur 5. Dmarrer la VM 6. Accepter le montage du support optique pour pouvoir dmarrer depuis le CD dinstallation 7. Procder linstallation de Windows en suivant les instructions jusqu lapparition du bureau.
Note : Les premiers dmarrage peuvent tre trs long et des freeze intermittant peuvent apparatre.

8. Une fois sur le bureau, logoff et faire un instantan (snapshot) de la machine en cours dexcution.
Note : Pour faire un instantan (snapshot), dans les menus de la VM en cours execution cliqu sur Machine > Saisi dun instantane... ou taper HOST+S (F7+S dans mon cas)... puis saisir le nom et une description du snapshot.

70

Chapitre 6. UI003 Environnement de travail - Installation dune distribution 9. teindre la VM puis aller dans les prfrence. 10. Dsactiver lACPI (APIC) dans les prfrences de la VM (Ceci est ncessaire pour viter les freeze intermittant qui apparaissent avec hte Linux 64bits sur machine Apple)
Note : Voir aussi point 43. ci-aprs qui rsoud les freeze intermittant aprs installation du Service Pack 3. Ceci peut-tre tent avant ltape 9. mais na pas t test dans le cadre de cette installation.

Avertissement
Lors de la mise jour du noyau dans la VM, il apparat que cette dernire re-dmarre avec le mode ACPI activ alors mme quil est dsactiv dans les prfrences de la VM :
# Solution pour GRUB Version 1 $ nano /boot/grub/menu.lst # Modifier les options du noyau ... kernel ... ro acpi=off quiet # Dsactiver lACPI au dmarrage # du noyau ...

11. Redmarrer la VM, appuyer sur une touche pour dmarrer du CD-ROM et rparrer linstallation de Windows : Choisir dinstaller Windows de nouveau et au dernier moment (dernire tape) choisir Rparer installation existante ( ne pas confondre avec loption R pour accder la Recovery Console. 12. Une fois sur le bureau, logoff et faire un instantan (snapshot) de la machine en cours dexcution. 13. teindre la VM puis aller dans les prfrence. 14. Ajouter des supports optiques jusqua ce que VirtualBoxAdditions.iso apparaisse. 15. Enlever tous les autres supports optiques existant (ceci inclut le lecteur de CD/DVD, il peut-tre remis ultrieurement si ncessaire). 16. Dmarrer la VM 17. Une fois sur le bureau, logoff. 18. Sur la page de login, seul lutilisateur par dfaut apparat. Pour ce connecter en tant quAdministrator, depuis la page de login taper F7+FN +Backspace(deux fois), ceci simule un CTRL+ALT+SUPR (2 fois) pour obtenir le prompt de login standard permettant de se connecter en tant quAdministrateur. F7 est la touhce HOST de VirtualBox. Cette touche dpends des prfrence de conguration de VirtualBox. FN+Backspace = SUPR sur MacBook Pro under Linux, la touche SUPR nexiste pas sur les clavier Apple :)

71

Chapitre 6. UI003 Environnement de travail - Installation dune distribution

19. Une fois sur le bureau (de lAdministrateur), aller dans le menu Periphrique (Device) de la VM en cours dexecution et choisir Installer les Additions Invit... HOST+D. Un prompt dinstallation devrait apparatre (sorte de CD-ROM Autoplay) puis suivre les instructions dinstallation lcran. 20. Changer lapparance de Windows en Windows Classique ce qui est moins gourmand en ressource. 21. Une fois terminer, logoff et faire un instantan (snapshot) de la machine en cours dexcution. 22. teindre la VM puis aller dans les prfrence. 23. Crer un Repertoire partag pour permettre lchange de donne entre lhte et la VM. Dans mon cas je partage un repertoire Document/WinXP avec le nom de partage vmwinxp. 24. Tlcharger depuis le site Intel le pilote pour la carte rseau Intel PRO/1000 MT Desktop et le sauvegarder dans Document/WinXP. 25. Dmarrer la VM 26. Une fois sur le bureau (de lutilisateur par dfaut), changer lapparence en Windows Classique. (Prcedement ctait fait pour Adminsitrator et non lutilisateur par dfaut). 27. Logoff, et connecter en tant quAdministrator (voir point 19.) 28. Une fois sur le bureau, Start > Run > cmd (pour ouvrir un fentre de commande) et taper :
cmd> net use z: \\vboxsrv\vmwinxp

Ceci va monter notre partage cr prcedement en tant que disque lecteur Z: dans lexplorateur de chier. 29. Ouvrir Z: et executer linstallation du pilote de carte rseau Intel prcdement tlcharg.
Note : Il est plus que conseiller, avant dexcuter linstallation, de copier lexcutable dans un emplacement local tel que MyDocuments car la connexion de partage semble parfois sinterrompre quelques secondes pouvant provoquer des erreurs dinstallation.

30. Rdmarrer la VM, tester laccs au rseau et crer un point de restauration. 31. Logoff et faire un instantan (snapshot) de la machine en cours dexcution. 32. Depuis lhte ou la VM, tlcharger le Service Pack 2 puis linstaller dans la VM en tant quAdminsitrator. 33. Une fois fait, vrier dans le gestionnaire de priphrique que tous les priphriques sont installs correctement. Si le priphrique "PCI\VEN_8086&DEV_265..." apparat comme pas install correctement, teindre la machine, desactiver lUSB dans les prfrences, redmarrer la machine, eteindre la machine, ractiver lUSB dans les prfrences, dmarrer la machine et re-installer les Additions Invit en tant quAdministrator (voir point 19. et 20 ci-dessus). Si cela ne fonctionne pas, r-installer le pilote manquant en autorisant Windows le chercher sur le site des Windows Update. Cette tape peut mme tre sufsante.

72

Chapitre 6. UI003 Environnement de travail - Installation dune distribution 34. Pour tout autre priphrique inconnu, il faut installer les pilotes correspondant. Les logiciels tel que EVEREST peuvent aider identier les priphrique plus prcisment que Windows ne le fait :) 35. Re-dmarrer la VM et crer un nouveau point de restauration. 36. Logoff et faire un instantan (snapshot) de la machine en cours dexecution. 37. Depuis lhte ou la VM, tlcharger le Service Pack 3 puis linstaller dans la VM en tant quAdminsitrator. 38. Redmarrer la VM 39. Installer TOUTES les mises jour de Windows disponible, ce qui va installer Internet Explorer 8 au passage :) Plusieurs tape et redmarrage ncessaire...
Note : Ceci provoque un retour des freeze intermittant de la VM, pas de panique on va les enlever (voir point 43.)

40. Re-dmarrer la VM et crer un nouveau point de restauration. 41. Logoff et faire un instantan (snapshot) de la machine en cours dexcution. 42. teindre la VM 43. Dans les prfrences de la VM (Paramtre de conguration) ajouter le ltre USB clavier/touchpad (Apple Inc. Apple Internal keyboard/trackpad [0081]), puis dmarrer la VM
Note : Les freezes intermittants ont disparu :)

6.4.5. Sauvegarde/Restauration (.vdi)


Source(s):

Web: How do I backup/restore my VDIs - Hands-On (http://forums.virtualbox.org/viewtopic.php?f=9&t=14783)

6.4.6. VirtualBox Conguration Linux Avanc (TAP address)


Source(s):

Web: Advanced Network settings for Linux (http://www.virtualbox.org/wiki/Advanced_Networking_Linux)

73

Chapitre 6. UI003 Environnement de travail - Installation dune distribution

6.4.7. Comment accder via ssh a une machine virtuelle (Virtualbox)


Source(s):

Web: Howto Access via ssh a Virtualbox Guest machine (http://mydebian.blogdns.org/?p=148)

6.4.8. Rsoudre VM Windows XP Pro Freeze


Freeze intermittant de la VM Windows XP Pro sur Ubuntu 9.10 sur MacBook Pro 5,5 Solution1 :

...xed it by disabling ACPI, inserting the WinXP CD and doing a "repair installation". Sometimes it boots fast, sometimes slow, but at least the freezes are gone if Windows is up.

Right now Im only saving the machine state, so Windows has not to be shutdown and I dont have to wait too long when booting it again :-) But still this is not satisfying, UNIX / Linux will not shutdown properly without ACPI and Windows boots slower. http://forums.virtualbox.org/viewtopic.php?t=11206

La solution 1 a fonctionner pour la suite dune fraiche installation de Win XP Pro. La solution 2 ci-dessous aurait peut-tre t tout aussi efcace et est peut-tre prfrable. Solution2 : Suite linstallation du Service Pack3 + Mise jour, le problme de freeze par intermittance est revenue :( Il a t rsolut facilement en ajoutant le clavier/touchpad (Apple Inc. Apple Internal keyboard/trackpad [0081]) comme ltre USB dans les prfrences de la machine virtuelle. Changer larchitecture IDE nest effectivement pas une solution puisque cela nit en cran bleu !

74

Chapitre 6. UI003 Environnement de travail - Installation dune distribution

6.4.9. Re-dimensionner un disque de machine virutelle (VirtualBox)


Source: How to resize a VirtualBox disk partition (http://www.my-guides.net/en/content/view/122/26/)

Avertissement
Je tiens prciser que cette mthode na pas fonctionner pour moi :((

Cest trs certainement du larchitecture 64bits de lhte. Mais je ne saurais lexpliquer ou un bug dans la dernire version stable de Gparted.

En effet, une erreur apparat lors de larrt du live CD comme si gparted conserve un verrou au niveau du systme virtuel de chier (VFS) aprs avoir essayer de rendre la partition de disque copier bootable (dernires des tapes listes ci-dessous).

Au dmarrage de la VM, le secteur de boot est introuvable et le chier de VM devient corrompu

1. Crer un nouveau disque virtuel de taille adquate 2. Dans les prfrence de la machine virtuelle : - Paramtrer CD/DVD comme premier priphrique de dmarrage - Au niveau de la conguration des disques, paramtrer le nouveau disque virtuelle comme disque IDE Primary Slave. Laisser le disque virtuelle dorigine congur comme IDE Primary Master. 3. Tlcharger limage gparted-live-0.5.1-1.iso (http://gparted.sourceforge.net/download.php) de lutilitaire Gnome GParted (dernire version stable disponible lheure o ces ligne sont crites...) et la rendre disponible au sein de la machine virtuelle comme CD/DVD virtuel. 4. La rendre disponible au sein de la machine virtuelle comme CD/DVD virtuel. 5. Dmarrer la machine virtuelle. Elle devrait dmarrer sur le CD GParted. 6. Dmarrer Gparted en Safe Mode les autres options ne semble pas fonctionner. 7. Dans GParted, selectionner le disque master (/dev/hda) et cliquer (avec le bouton droit de la souris) sur la partition systme. Dans le menu contextuel, choisir Copier. 8. Slectionner ensuite le disque slave (/dev/hdc). Clique dans le menu Device > Create Partition Table... attendre quelques secondes puis cliquer (avec le bouton droit de la souris) sur la partition non alloue. Dans le menu contextuel, choisir Coller

75

Chapitre 6. UI003 Environnement de travail - Installation dune distribution 9. Valider pour appliquer les changements. Attendre quelques minutes la n de rplication puis teindre la machine virtuelle. 10. Cliquer droit sur la partition sytme rcemment coller sur la disque puis Manage Flags > Check boot. 11. Dans les prfrences de la machine virtuelle supprimer le disque virtuel master existant et le remplacer par le disque virtuel secondaire. 12. Redmarrer la VM.

6.4.10. Utilitaires pratique (Sysprep, NewSID, BGInfo, HVRemote) pour la gestion des VMs Windows
Source(s):

Web: Sysprep (Wikipedia) (http://fr.wikipedia.org/wiki/Sysprep) Utiliser loutil Sysprep.exe pour automatiser le dploiement de Windows XP (http://support.microsoft.com/kb/302577/fr) Sysprep : un outil pour le clonage (http://www.laboratoire-microsoft.org/articles/network/sysprep/) Faire un Sysprep avec la version 2.0 (http://www.laboratoire-microsoft.org/articles/win/sysprep2/) HVRemote, NewSID, BGInfo, . . . (http://www.hyperv.fr/blog/tag/newsid) Windows Sysinternals (http://technet.microsoft.com/fr-fr/sysinternals/default.aspx) Windows Sysinternals Index (http://technet.microsoft.com/en-us/sysinternals/bb545027.aspx) Windows Sysinternals Suite (http://technet.microsoft.com/en-us/sysinternals/bb842062.aspx) Miscellaneous > BGInfo (http://technet.microsoft.com/en-us/sysinternals/bb897557.aspx) The Microsoft policy concerning disk duplication of Windows XP installations (http://support.microsoft.com/default.aspx?scid=kb;EN-US;314828) Utilitaire Scurit > NewSID v4.10 (FR) (http://technet.microsoft.com/fr-fr/sysinternals/bb897418.aspx) Utilitaire Scurit > NewSID v4.10 (US) (http://technet.microsoft.com/en-us/sysinternals/bb897418.aspx) NewSID Retirement and the Machine SID Duplication Myth (http://blogs.technet.com/markrussinovich/archive/2009/11/03/3291024.aspx) Le mythe du SID sur Windows (http://oliviernguyen.blogspot.com/2009/12/le-mythe-du-sid-sur-windows.html) Sysprep, Machine SIDs and Other Myths (http://blogs.technet.com/deploymentguys/archive/2009/12/03/sysprep-machine-sids-and-othermyths.aspx)

Avertissement
Pour dupliquer un machine Windows, prfrer la mthode Sysprep car NewSID ne procdent pas tous les changements requis pour un clonage (cf. liens article ci-avant)

Lorsque lon est amen travailler sur des environnements divers et varis, il est souvent intressant davoir sous la main les utilitaires pratiques ou ceux que lon utilise frquemment.

76

Chapitre 6. UI003 Environnement de travail - Installation dune distribution Windows Sysinternals > BGInfo : permet dafcher en fond dcran un trs grand nombre de caractristiques dun ordinateur (Nom DNS, Adresses IP, RAM, Espace disque disponible, etc . . . ). Avis donc aux utilisateurs de multiple machines virtuelles qui ont parfois du mal sy retrouver parmi celles-ci ;) HVRemote : Un script cr par John Howard, chef de projet dans lquipe Hyper-V de Microsoft, qui permet de congurer rapidement les systmes dexploitation Windows Vista SP1 pour que ceux-ci puissent utiliser les outils dadministration dHyper-V. Windows Sysinternals > NewSID : Utilitaire trs connu des administrateurs systmes qui permet la gnration de nouveaux identiants uniques de scurit (SID) sur les environnements Microsoft, utile lorsque lon a cloner des machines virtuelles non sysprepes mais pas conseill car cela peut provoquer certains problmes (WSUS, communication rseau, etc...).

6.5. Autres Logiciels


6.5.1. xournal, claws-mail, refox, emacs, skype
2.x installation of additional software via apt-get - xournal - firefox - emacs (voir chapitre TP Shell plus loin) 2.y Installation de Claws-Mail $ sudo apt-get install claws-mail claws-mail-plugins claws-mail-extra-plugins Configuration ? To come... :)) 2.z Installation de Skype

6.5.2. Installer Google Chrome (Chromium) sous Ubuntu


Source(s):

Web: Installer Google Chrome (Chromium) sous Ubuntu (http://www.tux-planet.fr/installer-google-chrome-sous-ubuntu/)

77

Chapitre 6. UI003 Environnement de travail - Installation dune distribution "... installer sous Ubuntu Google Chrome, ou plutt Chromium, la version Open Source du navigateur made in Google... Chromium offre lavantage de ne pas intgrer les diffrents outils de tracking de Google..."

$ sudo add-apt-repository ppa:chromium-daily ... Executing: gpg --ignore-time-conflict --no-options --no-default-keyring --secret-keyring /et gpg: requte de la cl 4E5E17B5 du serveur hkp keyserver.ubuntu.com gpg: cl 4E5E17B5: cl publique Launchpad PPA for chromium-daily importe gpg: aucune cl de confiance ultime na t trouve gpg: Quantit totale traite: 1 gpg: importe: 1 (RSA: 1) $ sudo apt-get update Atteint http://ppa.launchpad.net karmic Release.gpg Ign http://ppa.launchpad.net karmic/main Translation-fr Atteint http://archive.ubuntu.com karmic Release.gpg Atteint http://ppa.launchpad.net karmic Release.gpg Ign http://ppa.launchpad.net karmic/main Translation-fr Rception de : 1 http://ppa.launchpad.net karmic Release.gpg [307B] Ign http://ppa.launchpad.net karmic/main Translation-fr Atteint http://ppa.launchpad.net karmic Release Rception de : 2 http://archive.ubuntu.com karmic/main Translation-fr [427kB] Atteint http://download.virtualbox.org karmic Release.gpg Ign http://download.virtualbox.org karmic/non-free Translation-fr Atteint http://ppa.launchpad.net karmic Release Atteint http://download.virtualbox.org karmic Release Rception de : 3 http://ppa.launchpad.net karmic Release [66,0kB] Atteint http://download.virtualbox.org karmic/non-free Packages Atteint http://ppa.launchpad.net karmic/main Packages Atteint http://ppa.launchpad.net karmic/main Sources Atteint http://ppa.launchpad.net karmic/main Packages Atteint http://ppa.launchpad.net karmic/main Sources Rception de : 4 http://ppa.launchpad.net karmic/main Packages [3 439B] Rception de : 5 http://archive.ubuntu.com karmic/restricted Translation-fr [3 850B] Rception de : 6 http://archive.ubuntu.com karmic/universe Translation-fr [675kB] Rception de : 7 http://archive.ubuntu.com karmic/multiverse Translation-fr [72,5kB] Rception de : 8 http://archive.ubuntu.com karmic-updates Release.gpg [189B] Ign http://archive.ubuntu.com karmic-updates/main Translation-fr Ign http://archive.ubuntu.com karmic-updates/restricted Translation-fr Ign http://archive.ubuntu.com karmic-updates/universe Translation-fr Ign http://archive.ubuntu.com karmic-updates/multiverse Translation-fr Rception de : 9 http://archive.ubuntu.com karmic-security Release.gpg [189B] Ign http://archive.ubuntu.com karmic-security/main Translation-fr Ign http://archive.ubuntu.com karmic-security/restricted Translation-fr Ign http://archive.ubuntu.com karmic-security/universe Translation-fr Ign http://archive.ubuntu.com karmic-security/multiverse Translation-fr Atteint http://archive.ubuntu.com karmic Release Rception de : 10 http://archive.ubuntu.com karmic-updates Release [44,1kB] Rception de : 11 http://archive.ubuntu.com karmic-security Release [44,1kB] Atteint http://archive.ubuntu.com karmic/main Packages Atteint http://archive.ubuntu.com karmic/restricted Packages Atteint http://archive.ubuntu.com karmic/main Sources

78

Chapitre 6. UI003 Environnement de travail - Installation dune distribution


Atteint http://archive.ubuntu.com karmic/restricted Sources Atteint http://archive.ubuntu.com karmic/universe Packages Atteint http://archive.ubuntu.com karmic/universe Sources Atteint http://archive.ubuntu.com karmic/multiverse Packages Atteint http://archive.ubuntu.com karmic/multiverse Sources Rception de : 12 http://archive.ubuntu.com karmic-updates/main Packages [167kB] Rception de : 13 http://archive.ubuntu.com karmic-updates/restricted Packages [14B] Rception de : 14 http://archive.ubuntu.com karmic-updates/main Sources [51,2kB] Rception de : 15 http://archive.ubuntu.com karmic-updates/restricted Sources [14B] Rception de : 16 http://archive.ubuntu.com karmic-updates/universe Packages [99,3kB] Rception de : 17 http://archive.ubuntu.com karmic-updates/universe Sources [25,0kB] Rception de : 18 http://archive.ubuntu.com karmic-updates/multiverse Packages [6 844B] Rception de : 19 http://archive.ubuntu.com karmic-updates/multiverse Sources [3 820B] Rception de : 20 http://archive.ubuntu.com karmic-security/main Packages [64,8kB] Rception de : 21 http://archive.ubuntu.com karmic-security/restricted Packages [14B] Rception de : 22 http://archive.ubuntu.com karmic-security/main Sources [20,4kB] Rception de : 23 http://archive.ubuntu.com karmic-security/restricted Sources [14B] Rception de : 24 http://archive.ubuntu.com karmic-security/universe Packages [30,4kB] Rception de : 25 http://archive.ubuntu.com karmic-security/universe Sources [5 663B] Rception de : 26 http://archive.ubuntu.com karmic-security/multiverse Packages [1 519B] Rception de : 27 http://archive.ubuntu.com karmic-security/multiverse Sources [577B] 1 812ko rceptionns en 42s (42,7ko/s) Lecture des listes de paquets... Fait

$ sudo apt-get install chromium-browser ... Lecture des listes de paquets... Fait Construction de larbre des dpendances Lecture des informations dtat... Fait Les paquets suivants ont t installs automatiquement et ne sont plus ncessaires : linux-backports-modules-alsa-2.6.31-15-generic calendar-timezones Veuillez utiliser apt-get autoremove pour les supprimer. Les paquets supplmentaires suivants seront installs : chromium-browser-inspector chromium-codecs-ffmpeg Paquets suggrs : chromium-browser-l10n Les NOUVEAUX paquets suivants seront installs : chromium-browser chromium-browser-inspector chromium-codecs-ffmpeg 0 mis jour, 3 nouvellement installs, 0 enlever et 1 non mis jour. 1 partiellement installs ou enlevs. Il est ncessaire de prendre 12,6Mo dans les archives. Aprs cette opration, 44,0Mo despace disque supplmentaires seront utiliss. Souhaitez-vous continuer [O/n] ? O Rception de : 1 http://ppa.launchpad.net karmic/main chromium-browser 5.0.330.0~svn20100216 Rception de : 2 http://ppa.launchpad.net karmic/main chromium-browser-inspector 5.0.330.0~s Rception de : 3 http://ppa.launchpad.net karmic/main chromium-codecs-ffmpeg 0.5+svn20100202 12,6Mo rceptionns en 3min 0s (69,7ko/s) d pkSlection du paquet chromium-browser prcdemment dslectionn. (Lecture de la base de donnes... 240724 fichiers et rpertoires dj installs.) Dpaquetage de chromium-browser ( partir de .../chromium-browser_5.0.330.0~svn20100216r3907 Slection du paquet chromium-browser-inspector prcdemment dslectionn. Dpaquetage de chromium-browser-inspector ( partir de .../chromium-browser-inspector_5.0.33 Slection du paquet chromium-codecs-ffmpeg prcdemment dslectionn.

79

Chapitre 6. UI003 Environnement de travail - Installation dune distribution

Dpaquetage de chromium-codecs-ffmpeg ( partir de .../chromium-codecs-ffmpeg_0.5+svn2010020 Traitement des actions diffres ( triggers ) pour desktop-file-utils ... Traitement des actions diffres ( triggers ) pour hicolor-icon-theme ... Traitement des actions diffres ( triggers ) pour man-db ... Paramtrage de slapd (2.4.18-0ubuntu1) ... Backing up /etc/ldap/slapd.d/ in /var/backups/slapd-2.4.18-0ubuntu1... done. Starting OpenLDAP: slapd.

Paramtrage de chromium-browser (5.0.330.0~svn20100216r39077-0ubuntu2~ucd1~karmic) ... update-alternatives: utilisation de /usr/bin/chromium-browser pour fournir /usr/bin/x-

Paramtrage de chromium-browser-inspector (5.0.330.0~svn20100216r39077-0ubuntu2~ucd1~karmic) Paramtrage de chromium-codecs-ffmpeg (0.5+svn20100202r37783+36953+37593-0ubuntu1~ucd1~karmi Traitement des actions diffres ( triggers ) pour libc-bin ... ldconfig deferred processing now taking place /sbin/ldconfig.real: /usr/lib32/libstdc++.so.5 nest pas un lien symbolique $ sudo apt-get install adobe-flashplugin ## Skipped car dj fait pour Firefox

$ sudo ln -s /etc/alternatives/mozilla-flashplugin \ /usr/lib/chromium-browser/plugins/flashplugin.so $ chromium-browser --enable-plugins

## Pour dmarrer Chromium ALT+F2 # puis $ chromium-browser

6.5.3. X-lite installation for Ubuntu 9.10 _amd64


Source(s):

Web: X-Lite (http://www.counterpath.com/x-lite.html) Protocole SIP: VoIP : Le protocole sip

Mon script dinstallation : ./x-lite/install.sh (docs/sys01-ch03-xlite-install-sh.txt) + README.txt (docs/sys01-ch03-xlite-README.txt) :))

80

Chapitre 6. UI003 Environnement de travail - Installation dune distribution

6.5.4. Qutecom installation (en remplacement de X-Lite)


Source(s):

Web: QuteCom (http://qutecom.org/) Protocole SIP: VoIP : Le protocole sip

$ sudo apt-get install qutecom # puis Applications > Internet > QuteCom # ==> Application crash peu de temps apres demarrage !!! # Cest un bug sur Ubuntu 9.10 Amd 64 confirm # par cerapport de bug (https://bugs.launchpad.net/ubuntu/+source/qutecom/+bug/451048)) # $ # $ Solution pour demarrer lapplication utiliser : qutecom -style plastique au lieu de qutecom

# Jai creer un launcher personaliser dans le panel gnome du bureau avec la commande : usr/bin/qutecom -style plastique (sans le usr/bin/ cela ne marche pas) # En cas de probleme faire un : $ killall qutecom # Puis re-essayer...

6.5.5. Twinkle installation (en remplacement de QuteCom) SIP Softphone


Source(s):

Web: Twinkle - SIP softphone for Linux (http://www.xs4all.nl/~mfnboer/twinkle) Protocole SIP: VoIP : Le protocole sip

$ sudo apt-get install twinkle

81

Chapitre 6. UI003 Environnement de travail - Installation dune distribution

6.5.6. NetBeans (IDE) installation


Source(s):

Web: NetBeans Downloads (http://netbeans.org/downloads)

Je choisi linstallation pour coder en PHP seulement (dans un premier temps) :

$ wget http://www.mirrorservice.org/sites/download.netbeans.org/6.8/bundles/netbeans-6.8-ml$ chmod +x netbeans-6.8-ml-php-linux.sh $ sudo ./netbeans-6.8-ml-php-linux.sh # ==> Erreur! Linstallation requiert la presence de Java6 JDK # Donc je linstalle... $ sudo apt-get install sun-java6-jdk # ==> Jaccepte la licence (pas le choix!) # Puis je retente linstallation $ sudo ./netbeans-6.8-ml-php-linux.sh # Linstalleur (Wizard) Netbeans souvre alors en mode graphique... # Install Netbean IDE to # /usr/local/netbeans-6.8 # Le logiciel sinstalle :) # Une fois complete je demarre :) $ bin/sh "/usr/local/netbeans-6.8/bin/netbeans"

6.5.7. xmlcopyeditor installation


Sous Ubuntu 9.10 64bits il semble que la compilation depuis les sources simpose... A voir plus tard... Voir aussi la section ddi aux diteurs XML.

82

Chapitre 6. UI003 Environnement de travail - Installation dune distribution

6.6. Dsactiver lIPv6 sur Ubuntu 9.10


Source: Linux Ubuntu desactiver le support ipv6 (http://www.commentcamarche.net/faq/7032-linux-ubuntu-desactiver-le-support-ipv6) Avant deffectuer cette manipulation, assurez-vous davoir bien compris le pourquoi du comment en lisant cet article : Desactiver ipv6 permet dacclrer les connexions Internet (http://www.commentcamarche.net/faq/sujet-7030-desactiver-ipv6-permet-d-accelerer-les-connexionsinternet) Pour dsactiver le support IPv6 dans Ubuntu, il existe deux solutions.

6.6.1. Mthode 1: diter /etc/modprobe.d/blacklist


ditez le chier /etc/modprobe.d/blacklist :
$ gksu gedit /etc/modprobe.d/blacklist.conf

Ajoutez la n de ce chier la ligne :


blacklist ipv6

puis redmarrez votre systme.

6.6.2. Mthode 2: via GRUB


Pour Ubuntu 9.10, IPv6 peux tre desactiv par le grub :
$ gksu gedit /etc/default/grub

Changer cette ligne


GRUB_CMDLINE_LINUX_DEFAULT=quiet splash

en
GRUB_CMDLINE_LINUX_DEFAULT=ipv6.disable=1 quiet splash

Puis , mettre a jour grub :


$ sudo update-grub

83

Chapitre 6. UI003 Environnement de travail - Installation dune distribution

puis redmarrez votre systme.

6.6.3. Comment sassurer que IPv6 est dsactiv ?


Pour vous assurer que IPv6 est dsactiv, tapez dans un terminal :
$ ip a | grep inet6

Si cette commande ne retourne aucune ligne, cest que IPv6 est bien dsactiv.

6.7. Debian Live sur une clef USB


Source(s):

Web: Debian version Live ! (http://live.debian.net) DebianLive Howto USB (http://wiki.debian.org/DebianLive/Howto/USB) DebianLive FirstStepsUSB (http://wiki.debian.org/DebianLive/FirstStepsUSB)

Les images (.img) des versions Debian Live pour clef USB sont disponibles http://cdimage.debian.org/cdimage/release/current-live/i386/usb-hdd. Ma clef USB est identie sur mon systme GNU/Linux comme tant le priphrique /dev/sdc. Utiliser Disk Utilisty ou gparted pour identier votre clef avec une rfrence systme (/dev/sdb, /dev/sdc, etc...).
Important : Lopration dd ci-dessous :

- efface compltement les donnes existante sur le priphrique de destination (ici /dev/sdc) et d - rend la clef illisible sous Windows priori !

$ cd /tmp $ wget http://cdimage.debian.org/cdimage/release/current-live/i386/usb-hdd/debian-live-504-i $ sudo dd if=debian-live-504-i386-lxde-desktop.img of=/dev/sdc # Ici /dev/sdc est la rfr # addapter pour correspon # Ensuite tre trs patient et attendre le retour automatique au prompt !!!

84

Chapitre 6. UI003 Environnement de travail - Installation dune distribution


# Le transfert peut prendre plusieurs minutes.

Note : Limage contient par dfaut deux partitions une pour le systme, une autre non formatte pour les donnes ventuellement. L encore gparted ou Disk Utility peuvent tre utilis en mode graphique pour formatter la partition de donnes. Pour ma part jai format en FAT32 pour rester totalement compatible avec Windows.

Puis il suft de dmarrer un ordinateur depuis la clef USB nouvellement r-initialise. Et voil :)

85

Chapitre 7. SR001 Commandes GNU/Linux (Shell)


Source(s):

Doc: Man Pages (http://man-wiki.net/index.php/Main_Page#Man_Page_Sections) Unix Guru Universe : Beginers start here (http://www.ugu.com/sui/ugu/show?I=help.beginners) http://www.linuxguruz.com Cours-Linux (http://www.generation-linux.fr/index.php?category/Cours-Linux) FAQ: BASH Scripting FAQ (http://splike.com/wiki/Bash_Scripting_FAQ) Examples: http://sleepyhead.de/howto/?href=scripting Commande line Fu (http://www.commandlinefu.com/commands/browse)

7.1. SYS01: Systme de chier HFS


Sources: Sys01-sgf.pdf from EOF http://pathname.com/fhs/pub/fhs-2.3.html http://fr.wikipedia.org/wiki/Linux_Standard_Base

Filesystem Hierarchy Standard ( norme de la hirarchie des systmes de fichiers , abrg en FHS) dfinit larborescence et le contenu des principaux rpertoires des systmes de fichiers des systmes dexploitation GNU/Linux et de la plupart des systmes Uni La version actuelle est la 2.3, publie en janvier 2004.

Ca fait partie de la Linux Standard Base (abrviation : LSB) est un projet joint par nombre distributions Linux sous la structure organisationnelle du Free Standards Group afin de concevoir et standardiser la structure interne des systmes dexploitation bass sur GNU/Lin La LSB est base sur les spcifications POSIX, la spcification unique dUNIX , ainsi que sur dautres nombreux standards ouverts, mais ltend dans certains domaines. Daprs eux :

Le but du LSB est de dvelopper et promouvoir un ensemble de standards qui augmenteron la compatibilit entre les diffrentes distributions Linux et permettront aux applications d sexcuter sur nimporte quel systme conforme au LSB. De plus, la LSB aidera coordonner l efforts des vendeurs de logiciels pour porter et raliser des produits pour Linux. La conformit la LSB pour un produit doit tre certifi par une procdure. La ralisation cette dernire appartient lOpen Group en coopration avec le Free Standards Group. La LSB spcifie par exemple : * un ensemble de bibliothques standards,

86

Chapitre 7. SR001 Commandes GNU/Linux (Shell)


* * * * un nombre de commandes et dutilitaires qui tendent le standard POSIX, la structure de la hirarchie du systme de fichiers, les diffrents run levels, et plusieurs extensions X Window System.

ya-t-il une diffrence entre /bin, /sbin, /usr/bin, et /usr/sbin ? (le tableau et la suite y rpondent mais jai tout de mme du mal voir la diffrence entre "Commandes binaires essentielles" et "Binaires systmes essentiels" il y a une diffrence entre chacun des dossiers que tu cites. /bin, Essential user command binaries (for use by all users) ce sont des commandes essentielles au dmarrage, mais pas li un usage avec des droits spcifiques, comme ceux de root. Contains commands that may be used by both the system administrator and by users, but which are required when no other filesystems are mounted (e.g. in single user mode). It may also contain commands which are used indirectly by scripts. There must be no subdirectories in /bin.

/sbin (System binaries), cest essentiel au dmarrage, mais ce sont des commandes qui ncessitent des droits privilgis. Comme ifconfig ou iptables. Par exemple, si tu tapes "/sbin/iptables -L" sans tre root, il va tenvoyer pter. Utilities used for system administration (and other root-only commands) are stored in /sbin, /usr/sbin, and /usr/local/sbin. /sbin contains binaries essential for booting, restoring, recovering, and/or repairing the system in addition to the binaries in /bin. [18] Programs executed after /usr is known to be mounted (when there are no problems) are generally placed into /usr/sbin. Locally-installed system administration programs should be placed into /usr/local/sbin.

/usr is the second major section of the filesystem. /usr is shareable, read-only data. That means that /usr should be shareable between various FHS-compliant hosts and must not be written to. Any information that is host-specific or varies with time is stored elsewhere Large software packages must not use a direct subdirectory under the /usr hierarchy. Cest une arborescence secondaire, un second file system. Il peut tre mont, cest dire spar au dmarrage et les binaires sont non essentiels au dmarrage, cest dire avant le montage des disques. En gros, si tu bootes sur un linux single (mode o aucune partition nest monte et o les applis ne sont pas dmarres), il vaudra mieux pour toi que tu aies tes applis essentielles, alors que tu nas rien cirer de ce qui nest pas l... Mais aussi /usr/local/bin, /usr/local/sbin et aussi ~/bin dans /usr/local on peut mettre des applications qui ne sont pas (ou mal)

87

Chapitre 7. SR001 Commandes GNU/Linux (Shell)


gres par le systme de paquet, a permet de sauvegarder/restaurer une arborescence indpendante. Pour le ~/bin, a permet dinstaller une application quand on est pas root, ou de raliser des tests sans risquer de vroler toute la machine. AM ps : Le ~ correspond au $HOME, cest dire par dfaut /home/foo pour le compte foo Il faut aussi savoir que les distributions (au moins majeures) suivent un standard pour tre daccord sur ce quelles font (le nom spcifique du standard mchappe la minute). LSB ? http://fr.wikipedia.org/wiki/Linux_Standard_Base Tu peux faire ce que tu veux, mais tous les acteurs vont se baser sur le FHS. Par exemple, tu pourrais trs bien avoir /etc sous un rpertoire /config, mais tous les softs que tu installent iraient sous /etc. On est libre de tout faire, mais aprs, faut tout grer :) > > > > > Autre question, qui est peut tre hors sujet, jai constat que le dossier /opt ntait que peu (voire pas du tout, en ce qui me concerne, sur ma machine personnelle, ni sur mes trois serveurs) utilis sur Debian. Je minterrogeais l dessus aussi, parce que je trouve quau niveau organisationnel, ce dossier est intressant.

Perso, je ne men sers pas, je me suis toujours servi de /usr/local. Par contre, sur des unices que jai administr, jai vu des gens se servir de /opt. L, cest franchement une question de got...

The /etc hierarchy contains configuration files. A "configuration file" is a local file used to control the operation of a program; it must be static and cannot be an executable binary. No binaries may be located under /etc. /lib : Essential shared libraries and kernel modules The directory contains those shared library images needed to boot the system and run the commands in the root filesystem, ie. by binaries in /bin and /sbin. [12] /lib/modules/ Directory for Loadable kernel modules (optional) /lib<qual> : Alternate format essential shared libraries (optional) There may be one or more variants of the /lib directory on systems which support more than one binary format requiring separate libraries. This is commonly used for 64-bit or 32-bit support on systems which support multiple binary formats, but require libraries of the same name. In this case, /lib32 and /lib64 might be the library directories, and /lib a symlink to one of them.

88

Chapitre 7. SR001 Commandes GNU/Linux (Shell)

/media : Mount point for removeable media Purpose This directory contains subdirectories which are used as mount points for removeable media such as floppy disks, cdroms and zip disks. Tip Rationale Historically there have been a number of other different places used to mount removeable media such as /cdrom, /mnt or /mnt/cdrom. Placing the mount points for all removeable media directly in the root directory would potentially result in a large number of extra directori in /. Although the use of subdirectories in /mnt as a mount point has recently been common, conflicts with a much older tradition of using /mnt directly as a temporary mount point. Specific Options The following directories, or symbolic links to directories, must be in /media, if the corresponding subsystem is installed: Directory Description floppy Floppy drive (optional) cdrom CD-ROM drive (optional) cdrecorder CD writer (optional) zip Zip drive (optional) On systems where more than one device exists for mounting a certain type of media, mount directories can be created by appending a digit to the name of those available above starting with 0, but the unqualified name must also exist. [16] A compliant implementation with two CDROM drives might have /media/cdrom0 and /media/cdrom1 with /media/cdrom a symlink to either of these.

File System Commands mkfs (MaKe File System) formater une partition mkfs -t ext3 /dev/sda3 [format partition sda3 avec le format de fichier ext] Il faut dterminer quel systme de fichiers (filesystem) on souhaite utiliser (vfat, ext3, x man mkfs donne la liste des systmes de fichiers supports et disponible sur le system mount monter (ajouter ou insrer) un volume format mount /dev/sda3 /mnt/sda3 umount dmonter (enlever) un volume format umount /mnt/sda3 mkdir (MaKe DIRectory) creer un repertoire mkdir /mnt/sda3 Les priphriques externes (disques, cl, CDROM. . .) se montent et se dmontent de la mme Il est toujours conseill de dmonter proprement un priphrique mont en lecture/criture afin dviter

89

Chapitre 7. SR001 Commandes GNU/Linux (Shell)

de perdre des donnes. En effet, Linux utilise un systme de cache. Le fait de dmonter un p permet de sassurer que les donnes contenues dans le cache sont bien crites sur le disque. Certains systmes de fichiers, comme Vfat ne synchronisent les donnes que lors du dmontage, dans ce cas, il est primordial deffectuer lopration. Notez aussi que pour dmonter un priphrique, aucun processus ne doit plus l utiliser. Si le dmontage vous est refus cest gnralement parce quun processus utilise encore le priphrique, ou plus simplement que vous vous trouvez dans le rpertoire.

FSTAB Le systme comporte une table des volumes quil doit monter automatiquement au dmarrage. Cette table est dcrite dans le fichier /etc/fstab. Si vous souhaitez que le volume /dev/sda soit mont automatiquement lors du dmarrage, il faudra ajouter une ligne dans ce fichier concernant le volume qui pourrait tre du type : /dev/sda3 /mnt/sda3 ext3 defaults 0 0 FSTAB du Host Ubuntu: # /etc/fstab: static file system information. # # Use blkid -o value -s UUID to print the universally unique identifier # for a device; this may be used with UUID= as a more robust way to name # devices that works even if disks are added and removed. See fstab(5). # # <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc defaults 0 0 # / was on /dev/sda4 during installation UUID=d1af4bfa-301c-471d-850f-3f156773a4ce / ext4 errors=remount-ro 0 # swap was on /dev/sda5 during installation UUID=fc73e057-5016-468f-b8eb-818130c258e9 none swap sw 0 /dev/scd0 /media/cdrom0 udf,iso9660 user,noauto,exec,utf8 0 0 FSTAB de la VM Debian: # /etc/fstab: static file system information. # # <file system> <mount point> <type> <options> <dump> proc /proc proc defaults 0 /dev/hda1 / ext3 errors=remount-ro 0 /dev/hda5 none swap sw 0 /dev/hdc /media/cdrom0 udf,iso9660 user,noauto,exec /dev/fd0 /media/floppy0 auto rw,user,noauto 0 vmdebian /mnt/filosteneUbuntu vboxsf rw,uid=1000 0 0

<pass> 0 1 0 0 0

90

Chapitre 7. SR001 Commandes GNU/Linux (Shell)

7.2. SYS01: Base


7.2.1. Processus
Source(s):

OF: SYS01-ch05-processus.pdf (docs/eof/sys01-ch05-processus.pdf)

Se refferer au Dictionnaire de Commande que jai cr... Pour chaque commande vous pouvez utiliser laide des manuels avec la commande man.

7.2.2. Commande de base sous Linux


Source(s):

OF: SR001-sys01-ch07-commandes-shell.pdf (docs/eof/sr001-sys01-ch07-commandes-shell.pdf) COAGUL.ORG: Rappel des commandes importantes (chmod, ln, passwd, pipe, etc...) (http://www.coagul.org/spip.php?article243) Rfrence: Command line reference for common operations (http://www.pixelbeat.org/cmdline.html) The Linux Cookbook: Tips and Techniques for Everyday Use (http://dsl.org/cookbook/cookbook_toc.html)

7.2.2.1. chown, chmod, chgrp


Web : chown, chgrp (http://www.tuxles.org/linuxhelp/leowner.html)

7.2.2.2. grep
Cette commande recherche dans les chiers ou sur son entre standard des lignes de texte qui satisfont lexpression rationnelle (ou rgulire, regexp) indique. Sa sortie peut tre redirige dans un chier. Syntaxe:
$ grep [options] expreg [fichiers]

91

Chapitre 7. SR001 Commandes GNU/Linux (Shell) Options:


-c donne seulement le nombre de lignes trouves obissant au critre -l donne seulement le nom des chiers o le critre a t trouv -v donne les lignes o le critre na pas t trouv -i ne pas tenir compte de la casse (ne pas diffrencier majuscules minuscules) -n pour nafcher que les numros des lignes trouves -w pour imposer que le motif corresponde un mot entier dune ligne

Constructions: grep est souvent inclus dans un tube qui lui fournit en entre le chier tudier. Exemple:
$ cat /etc/passwd | cut -d: -f1 | grep -w "jean" > sortie

7.2.2.3. ps
desctription

ps affiche la liste des processus en cours dexcution. Cest une commande qui se passe des les options. Voir aussi les commandes pstree et pstree.x11 qui donnent une reprsentation processus. ps fx | grep pts/7 1 25262 pts/7 Ss 0:00 \_ /bin/bash 2 25276 pts/7 S 0:00 \_ ksh 3 3 http://www.pool.ntp.org/ Module sys02 - Programmation shell/systme 25278 pts/7 4 25314 pts/7 5 25315 pts/7 6 S+ 0:00 \_ grep pts/7 R+ 0:00 \_ ps fx R 0:00 \_ bash

Ici on voit une console shell (bash) dans laquelle on a activ un shell ksh, dans le un shell bash et enfin dans lequel on a lanc une commande. Lexemple ne prsente pas gran nest de montrer comment les processus sont affilis un processus parent. Arrter le pro arrter tous les processus enfants.

92

Chapitre 7. SR001 Commandes GNU/Linux (Shell)

7.2.2.4. kill & killall

kill permet denvoyer un signal un processus identifi par son numro de processus (PID). commande ps). ps u 1 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND 2 mlx 6607 0.0 0.1 4688 2096 pts/0 Ss Aug22 0:00 /bin/bash 3 # Arrter le processus N 6607 4 kill -9 6607 5 # Donne la liste des signaux 6 kill -l 7 On peut samuser avec les signaux. Crer un script foo.sh dans /tmp contenant le code while [ 1 == 1 ]; do 1 sleep 2 2 echo coucou 3 done 4 et vous le lancez. Dans une autre console, identifiez avec ps son numro de processus ps aux | grep foo 1 mlx 24792 0.0 0.0 4280 1464 pts/5 S+ 11:12 0:00 sh ./foo.sh 2 # Stopper le processus 3 kill -sigtstp 24792 4 5 # Relancer le processus 6 kill -sigcont 24792 7

7.2.2.5. ln : liens matriels (hard link) / liens symboliques (soft links)


Source(s):

Tutoriel: Liens matriels (http://fr.wikipedia.org/wiki/Lien_mat%C3%A9riel) Liens symboliques (http://fr.wikipedia.org/wiki/Lien_symbolique)

93

Chapitre 7. SR001 Commandes GNU/Linux (Shell) Les liens matriels (pointe vers les donnes dun chier) sont notemment utiles pour raliser des sauvegarde de donnes par snapshot (voir section ddie ci-aprs. Sapparente des "copie/alias" dun mme chier. Les liens symbolique (pointe vers le noms dun chier, une rfrence) sapparente des alias/raccourcis vers des noms de chiers (pas le chier lui mme).

7.2.2.6. whereis
Rechercher les chiers excutables, les sources et les pages de manuel dune commande.
$ whereis mysql mysql: /usr/bin/mysql /etc/mysql /usr/share/mysql /usr/share/man/man1/mysql.1.gz

7.2.2.7. which
Localiser une commande.
$ which mysql /usr/bin/mysql $ which php5 /usr/bin/php5 # which shutdown /sbin/shutdown

7.2.3. Redirection des entres/sortie (ux)


Source(s):

Tutoriel: Redirection (entres/sorties, tube) (http://fr.wikibooks.org/wiki/Le_syst%C3%A8me_d%27exploitation_GNULinux/Redirection_des_entr%C3%A9es/sorties) I/O Redirection (http://gd.tuwien.ac.at/linuxcommand.org/lts0060.php)

Redirection entres/sorties :
$ ls >resultat_ls # Rediriger la sortie standard, fichier cras

94

Chapitre 7. SR001 Commandes GNU/Linux (Shell)


$ ls >>resultat_ls # Concatenation, fichier complt

$ ls 1>resultat_ls # Syntaxe complte, signe prcds de ID du flux rediriger $ ls 1>>resultat_ls # 1 = sortie standard $ ls 2>erreurs_ls # Rediriger la sortie derreur standard $ ls 2>>erreurs_ls # 2 = sortie derreur standard $ cat < mon_fichier.txt $ ls 2>&1 1>stdout_stderr.txt # # # #

Rediriger lentre standard Entrer des donnes provenant dun fichier au lieu du clavie Rediriger un flux vers un autre Sortie erreur vers standard

$ ls 2>&3 1>&2 3>&1

# change des deux flux de sortie # 3 est un flux fictif intermediaire

Le pipe (un tube) :


# Redirige la sortie dune commande vers lentre dune autre commande. $ du | sort -rn # Afficher la taille des fichiers et rpertoires # tris du plus grand au plus petit $ du | sort -rn | more # Mme rsultat, mais affich page par page

$ ls -1 /usr/bin | wc -l # Connatre le nombre # de fichiers du rpertoire /usr/bin $ dmesg | grep hd | more # Connatre tous les priphriques IDE dtects # par le noyau Linux et les afficher page par page # Extraire ladresse IP de la carte rseau eth0 $ ifconfig eth0 | grep inet adr | cut -f2 -d: | cut -f1 -d 192.168.30.50

7.3. SYS01: Sauvegarde et archivage (Backup)


7.3.1. Introduction
Source(s):

Web: Backup Your System (Ubuntu) (https://help.ubuntu.com/community/BackupYourSystem)

95

Chapitre 7. SR001 Commandes GNU/Linux (Shell)

"... Votre ordinateur, quel quen soit la marque, nest pas labri dune dcience matrielle..." "...Pour viter de navoir que vos yeux pour pleurer, il faut mettre en place des redondances de donnes, encore appeles sauvegardes. Il existe pour quantit de solutions dont:
- le systme RAID, qui repose sur des capacits matrielles, - la synchronisation, la porte de tout un chacun ou presque, - le robot de sauvegarde, rserv davantage aux entreprises quaux particuliers.

De tel systme peuvent tre combin au sein dune politique de sauvegarde.

7.3.2. Le systme RAID (sauvegarder un poste)


Source(s):

Web: Consultez lexcellent expos de Marc Falzon (http://falzon.info/work/exp_RAID/index.html)

Le RAID Redundant Array of Independent Disks est un systme bas sur la redondance matrielle gre par une couche logicielle. Il possde cinq possibilits dassociations diffrentes supples de deux proprits. Ce systme ne protge cependant pas en cas dincendie ni de vol de la machine.

7.3.3. La synchronisation (sauvegarder un poste)


Cest moyen entirement logiciel de faire une copie de scurit de vos systme. La synchronisation locale ou distante vous assure lintgrit de vos donnes et la rplication de celles-ci. Sous linux, loutil rsync qui permet aussi bien une copie locale quune copie distante, sur une couche chiffre avec un apport de compression, une gestion des droits et une utilisation en diffrents modes : backup, archive ou personnalis. Intrts majeur :

96

Chapitre 7. SR001 Commandes GNU/Linux (Shell)


- automatisation totale de la tche laide dune crontab - nul besoin dtre root ou davoir un service ddi pour sen servir

7.3.4. rsync - synchronisation/snapshot par copie (lien matriel - hard link)


Source(s):

Tutoriels: Rsync on Ubuntu (https://help.ubuntu.com/community/rsync#grsync) Memoire JP : Rplication des donnes p.67 (http://jp.gaulier.info/cnam/inge/memoire.pdf) rsync (Ofcial) (http://samba.anu.edu.au/rsync) manuel rsync (http://everythinglinux.org/rsync/) HOWTO rsync Tips & Tricks (http://everythinglinux.org/rsync/) rsync in very brief (http://www.labo-linux.org/articles-fr/l-utilitaire-rsync/l-utilitaire-rsync) rsync sauvegarde conguration (http://www.journaldunet.com/developpeur/tutoriel/out/060104-rsync-sauvegardeconguration.shtml) Rsync on Wikipdia (http://en.wikipedia.org/wiki/Rsync) Snapshot: rsync Snapshot (http://www.backupcentral.com/components/com_mambowiki/index.php/Rsync_snapshots) Easy Automated Snapshot-Style Backups with Linux and Rsync (http://www.mikerubel.org/computers/rsync_snapshots) Create Incremental Snapshot-style Backups With rSync And SSH (http://www.howtoforge.com/rsync_incremental_snapshot_backups) rsync a Time Machine for every Unix out there (http://blog.interlinked.org/tutorials/rsync_time_machine.html) Optimal remote backups with rsync over Samba (http://users.softlab.ece.ntua.gr/~ttsiod/backup.html)

Adquate pour des (petits) chiers qui ne changent pas souvent rsync est un outil pour copier des chiers distance (ou localement) de faaon able, rapide et exible Utilisation de RSYNC :

### # Exemple pour la plublication de mon journal: # Exclusion: ne pas transfrer les documents crs par lOF (dans tout dossier eof/ ni les # Synchroniser: Effacer la destination tous les fichiers existant qui nexisterais pas ou rsync -av --del --delete-excluded --exclude=*/eof/ --filter="- *~" /mnt/hsubuntu/monjourna

## Script de sauvegarde de mon repertoire home vers disque dur externe #!/bin/bash # Proper header for a Bash script.

97

Chapitre 7. SR001 Commandes GNU/Linux (Shell)


BIN="/usr/bin" rldate=date +"%Y-%m-%d" media="/media/Transcend" # /media/SILVERKEY16 destination="$media/filostene-$rldate.bkp" $BIN/rsync -Cavh --progress --exclude *~ --exclude .VirtualBox --exclude .VirtualBox --exclude *.disk --exclude Documents/netkit/* --exclude VirtualBox-VM-Backup --del --delete-excluded . $destination ## Script de synchronisation de mon journal vers le serveur of #!/bin/bash $BIN/rsync -av --del --delete-excluded --exclude=*/eof/ --filter="- *~" ${dir_dest} rlr@ferry.eof.eu.org:public_html

## Crez ensuite une tche dans la crontab ## qui excute la sauvegarde toutes les dix minutes. $ crontab -u filostene -e */10 * * * * /bin/sh /home/filostene/crontabscripts/backup.sh

Note : Vaut mieux utiliser des chemins absolus y compris pour lappel des scripts ou des binaires. La raison en est que si on lance un script dans un shell, la commande tient compte de du $PATH, mais il peux y avoir des contextes o il ny a pas de $PATH (ou incomplet).

## La commande devient donc : /usr/bin/rsync # quivaut $(which rsync) ## Pour faire un script portable (*nix) dclarer BIN="/usr/bin" puis utiliser $BIN/ ## Pour chaque binaire, ## utiliser galement une variable IPT=/sbin/iptables ## Variables avec des chemins absolus, ## construite partir de variables SBIN=/sbin IPT=$SBIN/iptables ...

98

Chapitre 7. SR001 Commandes GNU/Linux (Shell)

7.3.5. rsync - Interface Web, Frontend, Outil GUI


Source(s):

GUI: Rsync Backup Web interface, Frontend or GUI Tools (http://www.debianadmin.com/rsync-backup-web-interfacefrontend-or-gui-tools.html)

grsync, Backup Monitor, QSync, Zynk, rsyncbackup, TKsync...

7.3.6. rsync - sauvegarde chiffr (backup with encryption / over Samba)


Source(s):

Web: Rsync backup with encryption (http://xpd259.blogspot.com/2007/11/rsync-backup-with-encryption.html) Optimal remote backups with rsync over Samba (http://users.softlab.ece.ntua.gr/~ttsiod/backup.html)

Voir aussi SR010 Securit > Chiffrement du systme de chier

7.3.7. rsnapshot - Sauvegarde incrmentale par instantann (snapshot)


Source(s):

Web: rsnapshot (http://rsnapshot.org) HOWTO (http://rsnapshot.org/howto/) Sauvegardes incrmentales avec rsnapshot (http://www.exhaustif.com/Sauvegardes-incrementales-avec.html) rsnapshot (Ubuntu-FR) (http://doc.ubuntu-fr.org/rsnapshot)

rsnapshot est une application en ligne de commande de sauvegarde, base sur rsync, et crit en PERL. Cest un logiciel libre sous licence GNU GPL. Il permet de programmer la prise rgulire dinstann (snapshot) de donne : sauvegarde incrmentale

99

Chapitre 7. SR001 Commandes GNU/Linux (Shell) Il permet prendre des instantans (snapshot) des systmes de chiers diffrents instants : Sauvegarde incrmentale. Utilisant les liens matriel, rsnapshot cr lillusion de lexistance de multiples sauvegardes compltes, tout en noccupant que la place dune seule plus les diffrences. Coupl avec ssh, il est galement possible de prendre des instantans de systmes de chiers distants. Ce document est un tutoriel dinstallation et de conguration de rsnapshot. Transparency : all versions of the backup are accessible as plain les.

7.3.8. rdiff-backup - synchronisation/snapshot par diff (delta compress)


Source(s):

Web: rdiff-backup (Ofciel) (http://rdiff-backup.nongnu.org) rdiff-backup (Backup Central) (http://www.backupcentral.com/components/com_mambowiki/index.php/Rdiff-backup) Disadvantages (http://www.backupcentral.com/components/com_mambowiki/index.php/Rdiffbackup#Disadvantages)

Adquate pour de gros chiers qui changent souvent Transparency : only the current backup is accessible as plain les. Previous versions are stored as rdiff deltas. But there is a FUSE implementation called archfs that allows you to mount all snapshots in a read-only lesystem.

7.3.9. rdiff-backup versus rsync/rsnapshot


Source(s):

Web: rdiff-backup vs rsync (Backup Central) (http://www.backupcentral.com/components/com_mambowiki/index.php/Rdiff-backup) rsnapshot vs. rdiff-backup (vs. Time Machine) (http://www.saltycrane.com/blog/2008/02/backup-on-linux-rsnapshot-vs-rdiff/)

rdiff-backup is a program written in Python and C that uses the same rolling-checksum algorithm that rsync does. Although rdiff-backup and rsync are similar and use the same algorithm, they do not share any code and must be installed separately. When backing up, both rsnapshot and rdiff-backup create a mirror of the source directory. For both, the current backup is just a copy of the source, ready to be

100

Chapitre 7. SR001 Commandes GNU/Linux (Shell) copied and veried like an ordinary directory. And both can be used over ssh in either push or pull mode. The most important conceptual differences between rsync-snapshots and rdiff-backup is how they store older backups and how they store le metadata. An rsync-snapshot system basically stores older backups as complete copies of the source. As mentioned earlier in the chapter, by being clever with hard links, these copies do not take long to create and usually do not take up nearly as much disk space as unlinked copies. However, every distinct version of every le in the backup is stored as a separate copy of that le. For instance, if you add one line to a le, or change a les permissions, that le is stored twice in the backup archive in its entirety. This can be troublesome especially with log les, which grow slightly quite often. On the other hand, rdiff-backup does not keep complete copies of older les in the backup archive. Instead, it stores only the compressed differences between current les and their older versions, called diffs or deltas. For log les, rdiff-backup would not keep a separate copy of the older and slightly shorter log. Instead, it would save a delta le to the archive, which contains the information the older version is the current version, but without the last few lines. These deltas are often much smaller than an entire copy of the older le. When a le has changed completely, the delta is about the same size as the older version (but is then compressed). When an rdiff-backup archive has multiple versions of a le, the program stores a series of deltas. Each one contains instructions on how to construct an earlier version of a le from a later one. When restoring, rdiff-backup starts with the current version and applies deltas in reverse order. "... rdiff-backup, for me, was the inablility to perform different levels of backup, such as hourly, daily, weekly, monthly, etc. compared to rsnapthot..." Source: rsnapshot vs. rdiff-backup (vs. Time Machine) (http://www.saltycrane.com/blog/2008/02/backup-on-linux-rsnapshot-vs-rdiff/) Source: "http://ubuntuforums.org/showthread.php?t=223281" rsync just mirrors, so if you backup nightly, make a change on tuesday, make another change on wednesday and on thursday you want to revert to tuesdays backup because wednesdays changes were borked, you cant. With rdiff-backup you can. However, it ultimately depends on what you are backing up though. If you are backing up les which do not change much e.g. photos, music and video, then rsync may be better. I use a combination of both, rdiff-backup for nightlys of /home and rsync for media (photos, movies, mp3 etc). rdiff-backup works brilliantly for backing up to an external device. You cannot however, then do an rdiff-backup from the backup to a third device as I have been doing with rsync to keep things extra safe. It fails because of the special rdiff directory in the rst backup. However, it is safer than rsync, as I still concern myself with running the wrong scripts and getting all the le additions and deletions in reverse. So Im now trying to decide if one backup on my external drive is enough and to use rdiff-backup instead of rsync with two backups. I use rdiff-backup for incremental backups every day and once a month I make a whole backup by using partimage or mondo. There are several possibilities. Just a question of tastes.

7.3.10. Le robot de sauvegarde (sauvegarder un parc de machines)


Cest en gnral une machine pilote par un logiciel, capable dinscrire les sauvegardes sur bande magntique, de manire totale ou incrmentale. Un robot est en mesure de sauvegarder un parc de machines.

101

Chapitre 7. SR001 Commandes GNU/Linux (Shell) AMANDA (http://www.amanda.org) (The Advanced Maryland Automatic Network Disk Archiver) : logiciel de sauvegarde libre dvelopp par lUniversit du Maryland Cest une solution qui peut faire gagner du temps pour un parc de machine important.

7.3.11. Multi-archivage sous linux (TAR, SPLIT et CAT)


Source(s):

Web: Multi archives sous Linux (http://www.lozit.com/index.php/2007/02/21/17-multi-archives-sous-linux)

## Transforme votre repertoire toto/ ## en une serie darchives toto.aa toto.ab etc... de 1m chacune $ tar -z -c toto/ | split -b 1m - toto. ## et pour faire lopration inverse : $ cat toto.* > toto.tar

7.3.12. Autres solutions : SBackup, Back In Time, fwbackups, Time Drive


Source(s):

Web: Staying (Ubuntu User Magazine Num 3) : Safe Exploring Grsync, Back In Time, and Time Drive (http://www.ubuntu-user.com/content/download/757/5030/le/048-051_BackupTools.pdf)

7.4. Restauration de donnees (data recovery) / Rcupration de donnes aprs un crash disque !
7.4.1. Ressources Utiles (Info, Outils, etc...) bien lire avant

102

Chapitre 7. SR001 Commandes GNU/Linux (Shell)

de commencer !
Source(s):

HowTo: Data Recovery (https://help.ubuntu.com/community/DataRecovery) Hack and / - When Disaster Strikes: Hard Drive Crashes (http://www.linuxjournal.com/article/10360) Partition-Rescue HOWTO (http://www.faqs.org/docs/Linux-mini/Partition-Rescue.html) Tool(s): GNU ddrescue (alias gddrescue) (http://www.gnu.org/software/ddrescue/ddrescue.html) ddrescue Manual (http://www.gnu.org/software/ddrescue/manual/ddrescue_manual.html) GNU parted (parted/gparted) (http://www.gnu.org/software/parted/index.shtml) Palimpsest Disk Utility (Gnome) (http://library.gnome.org/users/palimpsest/) Gpart (guess partition) (http://en.wikipedia.org/wiki/Gpart) Live CD(s): SystemRescueCd (Live CD) (http://www.sysresccd.org/Main_Page) Ubuntu Rescue Remix (Live CD) (http://ubuntu-rescue-remix.org) Ubuntu Netbook Edition 10.04 LTS 64 bits (Live CD) (http://releases.ubuntu.com) Clonezilla (Ghost application en Live CD) (http://www.clonezilla.org) Knoppix (Live CD) (http://www.knopper.net/knoppix/index-en.html) (R)ecovery (I)s (P)ossible Linux rescue system (http://www.tux.org/pub/people/kent-robotti/looplinux/rip)

7.4.2. Suite un accident inopin : Quoi faire ! Quoi ne pas faire...!


Suite un accident inopin (chute du portable Apple au sol, mais plat heureusement !), quand bien mme la plupart du matriel na pas t endomag (du moins en apparence !), il est devenu impossible de dmarrer le systme. Aucun des sytme install ne veut dmarrer aprs le chargeur de systme (boot loader)... Forte chance que le disque dur est pris un gros coup moins que ce ne soit la mmoire ou la carte mre !!!
Note : Cest dans ces cas l que lon est content davoir une sauvegarde jour et fonctionnelle :)) Malheureusement tant en dplacement, ma dernire sauvegarde date de quelques jours dj et je souhaiterais rcuprer quelques chiers sur lesquels jai travaill ce jour... de laccident ! Par ailleurs, il est toujours bon de tenter une rcupration de donne pour plusieurs raisons : - Pour le challenge que cela reprsente pour un informaticien ! - Agurir son experience en matire de restauration... selon ladage : "ce qui ne nous dtruit pas nous renforce !" - Une occasion inespr de pouvoir tester tout type de solution libre :) - Une meilleure garantie (limite) davoir des donnes rcupres si pour raison X ou Y la restauration depuis la sauvegarde ne fonctionne pas 100% ou certains chiers nont pas t sauvegards comme il se doit :) Bref il y a toujours plein de bonnes raisons vouloir restaurer des donnes dun disque "crash" , transformons donc cet vnement horreur/malheur en un "success story !"

103

Chapitre 7. SR001 Commandes GNU/Linux (Shell)


On sen serait bien pass cest clair, mais face ltat de situation cest la chose faire ! Dans le malheur restons positif !!!

Important : NE PAS ESSAYER DE REPARER LE DISQUE !!! Cela pourrait rendre impossible la rcupration de donnes ! Les premires chose faire dans un tel cas est de : -minimiser lutilisation du disque dur au maximum pour maximiser les chances de rcupration, -tenter ds que possible de copier les donnes de facon binaire (disque-a-disque, partition-a-partition) vers un autre disque sain de mme taille ou suprieure sur lequel la rparation, rcupration et montage de donnes seront effectus.

Un rapide saut au magasin Apple conrmera que le disque dur est la source du problme (quoi que pas totalement inaccessible ouf !), en effet le portable dmarre convenablement partir de Max OS X install sur un disque dur externe ou dun CD Linux Live ! Le disque dur endomag est accessible (cest positif) mais lors de la vrication du disque dur de nombreuse erreurs apparaissent :(((
Note : Si le disque dur est inaccessible ou devient rapidement inaccessible, le seul recourt possible cest de lenvoyer une entreprise spcialise dans la restauration des donnes. Cela cote (trs) cher mais cela reste une option possible. En effet, de telles entreprises sont capables dextraire physiquement les disques physique o sont stockes les donnes et de les installer dans un autre boitier de disque dur similaire. Ceci peut permettre de pallier un dfaut mcanique du disque dur et daccder aux donnes potentiellement rcuprables.

La deuxime chose faire cest de disposer dun espace disque sain vers lequel la copie binaire du disque endomag (ou de lune de ses partitions peut-tre effectu. Jachte donc un nouveau disque dur interne (de plus grande taille que lancien :) et un boitier de disque dur 2.5 pouces externe pour pouvoir y installer le disque endomag et y accder via port USB.
Note : En interne, les ordinateurs Apple nont quune seule interface disque.

La troisime chose faire cest de tlcharger et graver un systme dexploitation en Live CD permettant de dmarrer lordinateur sans aucun systme install sur le disque dur ! (Voir lien en tte de cette section).
Note : Toutes mes tentatives pour dmarrer lordinateur partir dune clef USB ou dun disque dur externe USB ne contenant pas Mac OS X ont chou. Apparement, le "BIOS" dApple nautorise pas cet possibilit ! Le live CD est donc le meilleur choix.

104

Chapitre 7. SR001 Commandes GNU/Linux (Shell)

A ce stade on passe au chose srieuse et on mets les mains dans le cambouis...

7.4.3. Restauration de donnes - tape par tape...


Note : Il est recommand de bien lire les chapitres prcdant avant de lire ce qui suit...

Ma premire ide tait de rparer le systme de chier partir du Live CD, mais une fois encore, cest une trs mauvaise ide et le meilleur moyen de perdre toutes les donnes ! Comme dj mentionn, la meileur chose faire cest une copie binaire du disque (ou partition) endomag vers un nouveau disque (de taille egale ou suprieur). Ma seconde ide ctait de cloner le disque avec loutil Clonezilla. Mais ce fut bien entendu un echec. Puis jai dcouvert (g)ddrescue (GNU Rescue) une version amliore de la commande dd car elle permet une gestion optimal des erreurs de copie binaire !
Important : La procdure dcrite ci-dessous na pas t crite au fur et mesure des oprations effectues mais de mmoire plusieurs jours aprs les oprations donc il se peut quelle ne soit pas totalement exact... mais donne un bon ordre dide si ctait refaire ! Aucune garantie que cela marche pour vous !!!

Procdure de rcupration :

## Opration physique sur les disques # Eteindre lordinateur # Fermer/Replier lcran # Retourner lordinateur et dvisser en dessous pour accder aux composants internes # Dvisser/Enlenv delicatement le disque interne endomag (ceci requiert des tournevis spc # Installer le nouveau disque en interne en lieu et place de lancien disque # Refermer lordinateur (revisser toutes les vis!) # Install lancien disque endomag dans le boitier externe USB # Branch le boitier sur lordinateur via un cable USB ## Dmarrer depuis un Live CD # Tlcharger/Graver puis dmarrer depuis un Live CD GNU/Linux # Pour ma part je choisi la version Ubuntu Netbook Edition 10.04 LTS 64bits # qui vient tout juste dtre publie # Une occasion de pouvoir voir quoi elle ressemble # et comment elle se comporte sur un ordinateur Apple :))

105

Chapitre 7. SR001 Commandes GNU/Linux (Shell)


# Pour plus dinfos consulter la page ddie : # Ubuntu Netbook Edition (http://www.ubuntu.com/netbook) # Une fois sur le bureau... ## Brancher une clef USB en plus (optionelle mais conseill) # Ceci va permettre de stocker des informations persistantes # En effet avec un Live CD, toute donnes sauvegarde est perdu au redmarrage # Pour la suite, supposons que la clef est accessible via /media/clefusb ## Obtenir des informations sur les disques (endomag et nouveau) # [Note: gparted ne permet pas daccder aux informations du disque endomag] # alternativement, via menu System > Administration > Disk Utility (Palimpsest Disk Utility) # Jobserve que mon disque : # - nouvau (en interne) est rfrenc comme tant /dev/sda # - endomag (en externe) est rferenc comme tant /dev/sdd # Obtenir des informations dtailles sur le disque endomag $ parted -l /dev/sdd >> /media/clefusb/disque.txt $ fdisk -l /dev/sdd >> /media/clefusb/disque.txt $ fdisk -lu /dev/sdd >> /media/clefusb/disque.txt # Voici mon fichier de log pour info : disque.log (docs/sys03-data-revovery-disque.log.txt) # On voit bien les informations dtailles sur les partitions # et les sectors de dbut et fin de chacune. # Cest une information qui peut eventuellement tre utile, conserver... ## Installer gddrescue # Installer le paquet $ sudo apt-get install gddrescue # $ $ $ $ $ $ $ $ ou alernativement, compiler depuis le source cd /media/clefusb wget http://ftp.gnu.org/gnu/ddrescue/ddrescue-1.12.tar.gz tar -xvzf ddrescue-1.12.tar.gz cd ddrescue-1.12 sudo apt-get install g++ ./configure make make install

# Version dAvril 2010

# Requis pour la compilation du

# Si action precedente est un s

## Utiliser ddrescue (cest le nom de la commande utiliser) ## Comme indiqu dans le manuel en ligne (http://www.gnu.org/software/ddrescue/manual/ddresc $ sudo ddrescue -n /dev/sdd /dev/sda /media/clefusb/ddrescue-logfile.log # puis $ sudo ddrescue -dr3 /dev/sdd /dev/sda /media/clefusb/ddrescue-logfile.log # Ces oprations peuvent prendre des heures voir des jours !!! # Cest pourquoi il est recommand didentifier la partition sur laquelle # les donnes restaurer sont localises pour rduire la quantit de bits traiter... # Donc alternativement on pourrait faire quelque chose du genre $ sudo ddrescue -n /dev/sdd4 /dev/sda1 /media/clefusb/ddrescue-logfile.log # puis

106

Chapitre 7. SR001 Commandes GNU/Linux (Shell)


$ # # # # # # $ # $ # sudo ddrescue -dr3 /dev/sdd4 /dev/sda1 /media/clefusb/ddrescue-logfile.log O /dev/sda1 reprsenterais la premire partition existante (de taille gale ou suprieure /dev/sdd4) sur le nouveau disque Disk Utility peut-tre utiliser pour crer cette partition /dev/sda1 avant de procder lopration de ddrescue

Enfin sachez quil est aussi possible de choisir un fichier image comme destination mais je nai pas test :) sudo ddrescue -n /dev/sdd4 /dev/sda/sdd4_image.img /media/clefusb/ddrescue-logfile.log puis sudo ddrescue -dr3 /dev/sdd4 /mnt/recovery/sdd4_image.img /media/clefusb/ddrescue-logfile. La mme opration pourrait tre excuter avec le disque entier /dev/sdd je suppose...

# /mnt/recovery/sdd4_image.img est une destination arbitraire # elle doit tre choisi en adquation avec votre systme

# Dans tous les cas, la prsence dun fichier de log nest pas obligatoire mais recommand c # il permet tout moment de stopper lopration CTRL+C et # de la relancer en partant de l on elle stait arrte ! # # $ # $

Loption -i (--input-position) permet de spcifier lendroit o lopration doit dmarrer La position peut tre indiqu en different units: 156104442bits, 156104Mo, 156Go ddrescue ... /dev/sdd4 ... quivaut plus ou moins ddrescue ... -i 156104442 /dev/sdd # 156104442 est le secteur de dbut de la partiti # comme indiqu dans le fichier disque-logfile.lo

## Rparation du systme de fichier rcupr # Avant de pouvoir rcuprer les donnes proprement dites (c.a.d les fichiers), # Il faut sassurer que le systme de fichier est sain sur la copie binaire rcupre $ sudo e2fsck -v -f /dev/sda # si copi vers disque en entier # ou $ sudo e2fsck -v -f /dev/sda1 # si copi vers partition seulement # ou $ sudo e2fsck -v -f /mnt/recovery/sdd4_image.img # si copi vers un fichier image # Accessoirement on peut rajouter loption -y la commande # pour rpondre "yes" automatiquement chaque question pose ## Enfin...accder aux donnes, # En fonction de lopration que vous avez choisit... # Monter le disque # ou monter la partition Utiliser Disk Utility pour cela # ou monter limage $ sudo mkdir /mnt/recovered_image $ sudo mount -o loop /mnt/recovery/sdd4_image.img /mnt/recovered_image # Puis accder aux donnes ainsi montes :)) # Copier et restaurer ce qui peut ltre...

107

Chapitre 7. SR001 Commandes GNU/Linux (Shell)

7.5. SYS02: Avanc


7.5.1. SYS02-01: Environnement et variables
Source(s):

OF: SR001-sys02-ch01-environnement.pdf (docs/eof/sr001-sys02-ch01-environnement.pdf)

7.5.1.1. Variables denvironnement courantes


La liste suivante donne quelques exemples de variables denvironnement parfois utilises par les systmes dexploitation. Cette liste nest en aucun cas exhaustive et peut tre complte en fonction des ncessits.

USER or LOGNAME : Le nom de lutilisateur connect (utilis par des programmes de style BSD et System V respectivement) HOME : Le rpertoire de login dun utilisateur, mis en place par login depuis le chier des mots de passe passwd. LANG : Le nom du lieu utiliser pour les congurations locales, sil nest pas cras par LC_ALL ou dautres variables comme LC_COLLATE, LC_CTYPE, LC_MESSAGES, LC_MONETARY, LC_NUMERIC, LC_TIME. PATH : Une liste de prxes de rpertoires, que sh et de nombreux autres programmes utilisent pour trouver un chier dont le chemin est incomplet. Les prxes sont spars par des :. (De mme il existe CDPATH utilis par certains shells pour connatre le rpertoire destination dune commande cd, MANPATH utilis par man pour trouver les pages de manuel, etc). Si une commande excuter nest prsente dans aucun chemin recens par cette variable, le systme ne lexcutera pas ( moins de spcier le chemin complet dans la ligne de commande : /bin/ls). PWD : Le rpertoire de travail actuel, renseign par certains shells. SHELL : Le nom de chier du shell la connexion de lutilisateur. TERM : Le type de terminal utilis pour les afchages. PAGER : Lapplication prfre de lutilisateur pour afcher des textes (comme less ou more). EDITOR : Lapplication prfre de lutilisateur pour diter des textes. (telle que emacs, joe, ou vi). BROWSER : Lutilitaire prfr pour examiner des URLs. Une suite de noms de navigateurs spars par des deux-points. ROOTPATH : Cette variable a la mme fonction que PATH, mais celle-ci liste les rpertoires qui doivent tre parcourus lorsque lutilisateur root entre une commande.

108

Chapitre 7. SR001 Commandes GNU/Linux (Shell)

LDPATH : Cette variable contient une liste de rpertoires spars par des deux-points dans lesquels lditeur de liens dynamiques cherche les bibliothques. MANPATH : Cette variable contient une liste de rpertoires spars par des deux-points dans lesquels la commande man cherche les pages de manuel. INFODIR : Cette variable contient une liste de rpertoires spars par des deux-points dans lesquels la commande info cherche les pages info. KDEDIRS : Cette variable contient une liste de rpertoires spars par des deux-points qui contiennent les lments spciques KDE. CLASSPATH : Cette variable contient une liste de rpertoires spars par des deux-points qui contiennent les classes Java. CONFIG_PROTECT : Cette variable contient une liste de rpertoires spars par des espaces qui doivent tre prservs par Portage pendant les mises jour. CONFIG_PROTECT_MASK : Cette variable contient une liste de rpertoires spars par des espaces qui ne doivent pas tre prservs par Portage pendant les mises jour. PS1 : Variable contenant une chane de texte ralisant la mise en forme du message dattente (prompt) en ligne de commandes.

7.5.1.2. env, printenv, export


Ces commandes permettent de visualiser les variables voici les miennes:

# Afficher les variables actuelles $ env GPG_AGENT_INFO=/tmp/seahorse-Xj5Akr/S.gpg-agent:2320:1 SHELL=/bin/bash DESKTOP_STARTUP_ID= TERM=xterm GTK_RC_FILES=/etc/gtk/gtkrc:/home/filostene/.gtkrc-1.2-gnome2 WINDOWID=41943273 USER=filostene LS_COLORS=no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:o ;31;01:su=37;41:sg=30;43:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.svgz= ;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01 ;31:*.bz2=01;31:*.bz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.rar ;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gi 35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif 35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mp 35:*.m2v=01;35:*.mkv=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt 35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli 35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.aac=00;36:*.au=00;36:*.flac=0 36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav SSH_AUTH_SOCK=/tmp/keyring-FlSbjf/ssh GNOME_KEYRING_SOCKET=/tmp/keyring-FlSbjf/socket SESSION_MANAGER=local/debstafil:/tmp/.ICE-unix/2233 USERNAME=filostene DESKTOP_SESSION=default

109

Chapitre 7. SR001 Commandes GNU/Linux (Shell)

PATH=/usr/local/bin:/usr/bin:/bin:/usr/games GDM_XSERVER_LOCATION=local PWD=/home/filostene LANG=fr_FR.UTF-8 GNOME_KEYRING_PID=2232 GDM_LANG=fr_FR.UTF-8 GDMSESSION=default HISTCONTROL=ignoreboth HOME=/home/filostene SHLVL=1 GNOME_DESKTOP_SESSION_ID=Default LOGNAME=filostene XDG_DATA_DIRS=/usr/local/share/:/usr/share/:/usr/share/gdm/ DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-URg3G0ZLPF,guid=f7ab2f41c8e2725e05f5a10c4b2 WINDOWPATH=7 DISPLAY=:0.0 COLORTERM=gnome-terminal XAUTHORITY=/home/filostene/.Xauthority _=/usr/bin/env

On y voit notemment mon shell par defaut (/bin/bash), quel utilisateur je suis (lostene), le group de chemin PATH (/usr/local/bin:/usr/bin:/bin:/usr/games), ma conguration linguistique (fr_FR.UTF-8), etc... Mais quel difference entre env, printenv et export ? Faisons un petit test de comparaison...
# Comparer les methodes daffichage $ env > env.txt $ printenv > printenv.txt $ diff env.txt printenv.txt 32c32 # < _=/usr/bin/env # La diffrence est vraiment minimum --# > _=/usr/bin/printenv # $ export declare -x declare -x declare -x declare -x declare -x declare -x declare -x declare -x declare -x declare -x declare -x declare -x declare -x declare -x

COLORTERM="gnome-terminal" DBUS_SESSION_BUS_ADDRESS="unix:abstract=/tmp/dbus-URg3G0ZLPF,guid=f7ab2f41c8e2725 DESKTOP_SESSION="default" DESKTOP_STARTUP_ID="" DISPLAY=":0.0" GDMSESSION="default" GDM_LANG="fr_FR.UTF-8" GDM_XSERVER_LOCATION="local" GNOME_DESKTOP_SESSION_ID="Default" GNOME_KEYRING_PID="2232" GNOME_KEYRING_SOCKET="/tmp/keyring-FlSbjf/socket" GPG_AGENT_INFO="/tmp/seahorse-Xj5Akr/S.gpg-agent:2320:1" GTK_RC_FILES="/etc/gtk/gtkrc:/home/filostene/.gtkrc-1.2-gnome2" HISTCONTROL="ignoreboth"

110

Chapitre 7. SR001 Commandes GNU/Linux (Shell)

declare -x HOME="/home/filostene" declare -x LANG="fr_FR.UTF-8" declare -x LOGNAME="filostene" declare -x LS_COLORS="no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:c ;33;01:or=40;31;01:su=37;41:sg=30;43:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=0 ;31:*.svgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.zip=01;31:*.z=01;31:*.Z= ;31:*.dz=01;31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=0 ;31:*.jar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg ;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.x ;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.mng=01;35:*.pcx=01;35:*.m ;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.m ;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc ;35:*.avi=01;35:*.fli=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.aac= ;36:*.au=00;36:*.flac=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.o ;36:*.ra=00;36:*.wav=00;36:" declare -x OLDPWD declare -x PATH="/usr/local/bin:/usr/bin:/bin:/usr/games" declare -x PWD="/home/filostene" declare -x SESSION_MANAGER="local/debstafil:/tmp/.ICE-unix/2233" declare -x SHELL="/bin/bash" declare -x SHLVL="1" declare -x SSH_AUTH_SOCK="/tmp/keyring-FlSbjf/ssh" declare -x TERM="xterm" declare -x USER="filostene" declare -x USERNAME="filostene" declare -x WINDOWID="56623181" declare -x WINDOWPATH="7" declare -x XAUTHORITY="/home/filostene/.Xauthority" declare -x XDG_DATA_DIRS="/usr/local/share/:/usr/share/:/usr/share/gdm/"

On voit clairement quormis la ligne 32, les resultats sont totalement semblable entre env et printenv, par contre export semble donner un resultat lgrement diffrent! Un rapide coup doeil dans la page de man nous claira sur la difference relle:

env : permet dexcuter un programme dans un environnement modi c.a.d dinitialiser des VARIABLES une VALEUR dans lenvironnement et excuter une COMMANDE. Ceci peut-tre utile dans un prompt de terminal ou dans un script. printenv : permet uniquement dafcher lensemble ou une partie des variables denvironnement (quivalent de echo $variable_name)
$ printenv PATH /usr/local/bin:/usr/bin:/bin:/usr/games $ echo $PATH /usr/local/bin:/usr/bin:/bin:/usr/games

export: permet dajouter ou de supprimer des paramtres ou des fonctions de lenvironnement mais connatre les variables disponibles dans lenvironnement.
$ man sh

111

Chapitre 7. SR001 Commandes GNU/Linux (Shell)


"... export [-fn] [nom[=mot]] ... export -p Les noms fournis sont marqus pour tre exports automatiquement dans lenvironnement des commandes excutes par la suite. Si loption -f est indique, les noms se rapportent des fonctions. Si aucun nom nest donn ou si loption -p est fournie, une liste est affiche indiquant lensemble des noms exports dans cet interprteur. Loption -n conduit supprimer lattribut dexportation de chacune des variables nommes. Si un nom de variable est suivi par =mot, la valeur de la variable est mise mot. export renvoie un tat final de 0, moins quune option incorrecte soit rencontre ou quun des noms ne soit pas un nom correct de variable de linterprteur ou que loption -f soit fournie avec un nom qui nest pas une fonction. ..."

7.5.1.3. Variables Communes (GLOBALES) pour tous les utilisateurs du systme


Ce sont les variables denvironement disponibles pour tous les utilisateurs du systme. Elles sont dclares dans un chier de conguration qui se charge prcocement dans la squence de lancement des services ou lors de la procdure douverture de session par un utilisateur. Dans le cas de bash (linterprteur de commande par dfaut), on ditera le chier /etc/prole (sil existe).Par exemple, si, on souhaite dnir la variable denvironnement relative la prsentation du message dattente (prompt) en ligne de commandes pour tous les utilisateurs utilisant bash, on ajoutera dans le chier /etc/prole :

PS1="Welcome$ " #Definit la variable et le format laffichage au lieu de "[\u@\h:\w]\\$ " pa export PS1 #Exporte la variable dans lenvironement # AVANT: filostene@debstafil:~$ # APRS: Welcome$ echo a marche! a marche! Welcome$ # On aurait aussi pu faire... directement au prompt $ PS1=Welcome$ && export PS1

112

Chapitre 7. SR001 Commandes GNU/Linux (Shell)

7.5.1.4. Variables Particulires (LOCALES) uniquement pour lutilisateur qui les a dnies
Ce sont les variables denvironement qui ont une porte restreinte c.a.d disponibles uniquement par lutilisateur qui les a dnies. Elles sont dclares dans un chier qui se chargera uniquement au lancement de la session de lutilisateur intress. Pour linterprteur de commandes bash, les chiers concerns sont placs dans le dossier personnel de lutilisateur et sont dsigns par les noms $HOME/.bash_prole et $HOME/.bashrc. Testons avec deux utilisateurs aaaaa et bbbbb crs lors dexercice prcdent:
#### TEST1 #### Utilisateur aaaaa $ su aaaaa aaaaa$ echo $PATH /usr/local/bin:/usr/bin:/bin:/usr/games aaaaa$ exit #### Utilisateur bbbbb $ su bbbbb bbbbb$ echo $PATH /usr/local/bin:/usr/bin:/bin:/usr/games #### ==> Variable $PATH identique pour les deux... #### Modifions la variable $PATH pour lutilisateur bbbbb bbbbb$ PATH=$PATH:/bin && export PATH #### On verifie... bbbbb$ echo $PATH /usr/local/bin:/usr/bin:/bin:/usr/games:/bin #### :/bin est bien ajout la fin bbbbb$ exit #### Quen est-il pour lutilisateur aaaaa $ su aaaaa aaaaa$ echo $PATH /usr/local/bin:/usr/bin:/bin:/usr/games ##### ==> Variable $PATH inchang pour lutilisateur aaaaa

#### TEST2 # toto.sh qui contient les lignes suivantes : # PATH=/sbin # echo $PATH # echo $MAVAR1 # echo $MAVAR2 #Dans une console $ MAVAR1=bar #Dfinir variable 1

113

Chapitre 7. SR001 Commandes GNU/Linux (Shell)


$ echo $MAVAR1 bar $ MAVAR2=blablah $ echo $MAVAR2 blablah $ sh toto.sh /sbin #On laffiche pour vrifier #Dfinir variable 2 #On laffiche pour vrifier #1er dmarage du script

$ export MAVAR2 $ sh toto.sh /sbin

#Export de la variable 2 dans lenvironement #2nd dmarrage du script #Affiche variable $PATH comme dfinit dans le script

blablah #Affiche variable 2 comme exporte dans lenvironement $ echo $PATH /usr/local/bin:/usr/bin:/bin:/usr/games #Variable $PATH de lenvironement reste inchang

Via TEST2 on a pu verier que:

Le script afche bien \sbin car cest ce que contenait la valeur de la variable PATH pendant la dure du script, mais cela na pas modi la valeur de la variable de votre environnement PATH. Quand on ouvre une console (un shell), tous les scripts lanc dans la console sont des processus enfants du shell initial. Quune variable exporte partir dun shell est bien visible pour les processus enfants de ce shell. La premire variable nest pas afche par le script par contre la seconde oui. Chaque script son propre environnement, par contre on peut transmettre un environnement dun processus pre un processus enfant avec la commande export. Un processus pre export une variable, celle-ci sera utilisable par le processus enfant.

7.5.1.5. Variables et scripts shells


Ce quon vient de voir montre quune variable, moins dtre exporte nest visible que dans le shell courant. Pour le systme cela correspond un shell (environnement et ensemble de ressources alloues). Il est vraiment intressant de savoir quune variable peut tre rednie temporairement par un environnement de travail. Le systme GNU/Linux et les applications utilisent largement ce principe :

un ou des chiers de conguration gnraux dnissant des variables globales pour tout lenvironnement. un ou des chiers de conguration locaux propre un processus ou un utilisateur permettant de rednir, le temps dun traitement, les valeurs de variables globales.

114

Chapitre 7. SR001 Commandes GNU/Linux (Shell) 7.5.1.5.1. Transfert de variable denvironement dun processus A vers un processus B appel par A Prenons maintenant lexemple dun processus A, appelant un processus B. Comment procder, sachant que chaque processus aura son propre environnement pour quils puissent utiliser des mmes ensembles de variables et de valeurs ? bash fournit une solution. La possibilit de sourcer un ensemble de variable et de valeurs. Il suft de dclarer les couples variables/valeurs dans le script A et dinclure la ligne dans le script B :

source A ou en plus concis . A (point espace A) Le script B chargera les variables partir du script A, tout cela sans modier lenvironnement global de travail, mais nous aurons loccasion de revenir sur tout cela dans le temps, ne prcipitons rien.

7.5.2. SYS02-02: Commandes avances sous Linux


Source(s):

OF: SR001-sys02-ch02-commandes-advanced.pdf (docs/eof/sr001-sys02-ch02-commandes-advanced.pdf)

7.5.2.1. awk & mawk


Pour en savoir plus:

Tutoriel: http://www.funix.org/fr/unix/awk.htm http://sleepyhead.de/howto/?href=scripting Livre:Scripts sous linux aux editions Eyrolles (Christophe Blaes) abs pour advanced bash scripting guide (http://tldp.org/LDP/abs/html/)

desctription
Introduction au langage Awk:

############################################################################################ Prsentation et caractristiques: ############################################################################################ Awk qui tient son nom des initiales de ses trois crateurs (Alfred AHO, Peter WEINBERGER et est un langage qui permet deffectuer des traitements sur les fichiers.

115

Chapitre 7. SR001 Commandes GNU/Linux (Shell)


Pour un fichier donn, il extrait les champs contenus dans chaque ligne pour eventuellement traitement sur ces champs. Exemple: le fichier /etc/passwd root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/bin/sh bin:x:2:2:bin:/bin:/bin/sh sys:x:3:3:sys:/dev:/bin/sh sync:x:4:65534:sync:/bin:/bin/sync games:x:5:60:games:/usr/games:/bin/sh man:x:6:12:man:/var/cache/man:/bin/sh

Lors dun traitement AWK en spcifiant comme sparateur de champs le symbole ":", nous auron traitement de la premire ligne, le positionnement automatique de ses variables: $1=root $2=x $3=0 $4=0 $5=root $6=/root $7=/bin/bash Rq: on commence a $1 car $0 contient la ligne entire.

On devine par exemple, comment on pourrait nafficher que les comptes ayant un shell particu Il existe dautre variables comme $NF, ... je vous invite lire le man de la commande AWK

############################################################################################ Mode de fonctionnement et syntaxe: ############################################################################################ Un script (commande) AWK se prsente de la manire suivante: motif {action}

ou "motif" reprsente un critre de slection (par exemple $7=/bin/bash ou expression rguli "action" reprsente le traitement effectuer (exemple daction "print" qui permet daffiche Rq: On peut directement traiter un fichier en entre comme ceci: awk -F":" /root/{print $7} < /etc/passwd

-F ici pour "Field separator" permet de spcifier que le sparateur de champs nest pas "esp Ou on traite le rsultat dune autre commande avec un pipe comme ceci: cat /etc/passwd | awk -F":" /root/{print $7} Dans les deux exemples ci dessus: motif = /root/ cest dire les lignes qui contiennent root

116

Chapitre 7. SR001 Commandes GNU/Linux (Shell)


action = print $7 on affiche le 7eme champs de la ligne cest dire le shell de root

Pour info voici une syntaxe plus complete: awk -F":" BEGIN{instructions} critres END{instructions} fichier

BEGIN et END permettent dinstancier une variable par exemple. awk -F":" BEGIN{nb_lignes=0};nb_lignes=nb_lignes+1;END{print "Nombre de lignes= " nb_lignes dans cet exemple, nous allons compter et afficher le nombre de lignes du ficher /etc/passwd Autre exemple avec une condition sur le 7eme champs (shell) awk -F":" {if ($7=="/bin/false") print $1} /etc/passwd Dans cet exemple, on affiche les comptes qui nont pas de shell. (Important to complete)

Autres examples utiles


$ echo "hello world world hello world" | awk {$1=$1}1 OFS=":" hello:world:world:hello:world awk awk awk awk awk { print $2, $1 } file {printf("%5d : %s\n", NR,$0)} file {print FNR "\t" $0} files NF test.txt length > 80 # # # # #

# Remplacer espace et tabul # Voir aussi sed pour equiv

Affiche et inverse les deux premires colonne Ajoute numro de ligne align gauche Ajoute numro de ligne align droite enlever les lignes blanches (equivalent de gr Affiche les lignes dau moins 80 caractres

7.5.2.2. basename
liminer le chemin daccs et le sufxe dun nom de chier. Utile pour renommer un ensemble de chiers ou rpertoires
#TEST1 $ basename generate.bash generate.bash $ basename generate.bash sh generate.ba $ basename generate.bash .bash generate $ basename /mnt/hsubuntu/monjournal/generate.bash generate.bash $ basename /mnt/hsubuntu/monjournal/generate.bash .bash generate $ basename /mnt/hsubuntu/monjournal/generate.bash ate.bash gener

#Aucun effet sur un ficher simpl #Enleve suffixe "sh" du fichier

#Enleve suffixe .bash (=extensti

#Enleve le chemin vers le fichie #Enleve lextension (en plus du #Enleve plus que lextension :)

117

Chapitre 7. SR001 Commandes GNU/Linux (Shell)

#TEST2 #Lister les pages html de mon journal au format multipage $ cd /mnt/hsubuntu/monjournal/public_html/multipage/ $ ls *.html c153.html c157.html c159.html c161.html c164.html c26.html c32.html c38.html c44.htm c156.html c158.html c160.html c163.html c22.html c29.html c35.html c41.html index.h #A partir de cette liste, prparer la commande pour changer toutes les extension .html en .h $ for f in ls *.html;do echo $f basename \$f .html.htm;done c153.html c153.htm c156.html c156.htm c157.html c157.htm c158.html c158.htm c159.html c159.htm c160.html c160.htm c161.html c161.htm c163.html c163.htm c164.html c164.htm c22.html c22.htm c26.html c26.htm c29.html c29.htm c32.html c32.htm c35.html c35.htm c38.html c38.htm c41.html c41.htm c44.html c44.htm index.html index.htm x49.html x49.htm #On effectue le changement dextension (renommer chaque fichier avec commande mv) $ for f in ls *.html;do mv $f basename \$f .html.htm;done #Verification $ ls c153.htm c157.htm c159.htm c161.htm c164.htm c26.htm c32.htm c38.htm c44.htm images c156.htm c158.htm c160.htm c163.htm c22.htm c29.htm c35.htm c41.htm docs index. #==> OK

7.5.2.3. bc
bc est "un language de calcul de prcision arbitraire" ou plus clairement une calculatrice volue.
###### # Calculer en mode batch # echo "((10+4)*2/4)^2" | bc 49 ###### ## Calculer en mode interactif # $ bc #Dmarre mode interactif avec message dacceuil... bc 1.06.94

118

Chapitre 7. SR001 Commandes GNU/Linux (Shell)


Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc. This is free software with ABSOLUTELY NO WARRANTY. For details type warranty. quite $ bc -q #Dmarre mode interactif sans message dacceuil... 5+5 10 #5+5=10 ###### ## Traitement par lot # (10+4)*2/4 7 #(10+4)*2/4=7 2^4 16 #2 puissance 4 egual 16 sqrt(16) #Racine carr de 16 egual 4 4 /* un commentaire :) sur plusieurs ligne */ # un commmentaire sur une ligne... length(1935.00054) 9 scale(1935.00054) 5 scale 0 4/3 1 scale+=2 scale 2 4/3 1.33 scale=5 scale 5 4/3 1.33333 ###### ## Calculer # A+B 21 A*2 20 B*2 22 ibase 10 obase

#Un commentaire ! #Un autre commentaire !

#Nombre de chiffre dans lensemble dur nombre #Nombre de chiffre aprs la virgule

#Definit le nombre de chiffre aprs la virgule pour certaines oper

#4 divis par 3 egual 1 si scale=0 #dfinit scale 2 par ajout (chiffres aprs la virgule) #On vrifie #On test #dfinit scale 5 par affectation #On vrifie #Ok a marche!

en plusieurs bases

#A plus B en base 16 egual 21 #A fois 2 egual 20 #B fois 2 egual 22 #Dfinit la base de calcul pour les chiffres en entre #En base 10 par dfaut (accepte entre 2 et 16 comme base de calcul) #Dfinit la base de calcul pour les chiffres en sortie

119

Chapitre 7. SR001 Commandes GNU/Linux (Shell)


10 ibase=2 01+10 3 ibase=8 ibase 8 222+333 365 #En base 10 par dfaut (accepte entre 2 et 16 comme base de calcul) #Dfinit la base 2 pour les chiffres en entre et les calculs #1 (binaire 01) + 2 (binaire 10) egual 3 #Calcul en base 8

#resultat de sortie en base dcimal par defaut (obase=10)

###### ## Supporte les variables # var1 #par dfaut les variables non dfinit ont pour valeur 0 0 var1=25 #Affecte 25 la variable var1 var1 #Affiche valeur de var1 25 var2=25 #Affecte 25 la variable var2 var2 25 var1 + var2 50 var1+var2 #var1 & var2 peuvent tre utilises dans les calculs... 50 var1*var2 625 -var1 #Nombre ngatif -25 --var1 #Variable est dcrment et nouvelle valeur est rsultat de lexpr 24 var1 24 var1++ #Le rsultat de lexpression est la valeur de la variable ensuite 24 var1 35 ###### ## Supporte les boolen (0=faux 1=true) # var1 < var2 0 var1 > var2 0 var1==var2 1 var1>=var2 1 var1<=var2 1 !0 #Ngation boolnne 1

120

Chapitre 7. SR001 Commandes GNU/Linux (Shell)


1&&1 1 1&&0 0 1||0 1 #ET boolen

#OU boolen

###### ## Supporte les structures de contrle # if(var1==var2) print "egual" else print "KO" egual if(var1 < var2) print "inferieur" else print "KO" KO while(var1--) print "x" xxxxxxxxxxxxxxxxxxxxxxxxx ###### ## Supporte les functions # define mafonction (para) { return (2*para); } mafonction (3) 6 quit

7.5.2.4. cat
cat sert concatner plusieurs chiers en un seul ou encore pour vider un chier sur la sortie standard (STDOUT).Voir aussi commande split

$ cat /etc/apt/sources.list #Affichera le contenu de mes sources de dpt de paquet sur STD # deb http://ftp.uk.debian.org/debian/ lenny main # deb http://debian.org.ua/debian/ lenny main deb http://ftp.fr.debian.org/debian/ lenny main deb http://security.debian.org/ lenny/updates main deb http://volatile.debian.org/debian-volatile lenny/volatile main deb-src http://volatile.debian.org/debian-volatile lenny/volatile main $cat f1 f2 f3 > f # concatne f1, f2 et f3 dans le fichier f

121

Chapitre 7. SR001 Commandes GNU/Linux (Shell)

7.5.2.5. cut
cut sert supprimer une partie de chaque ligne dun chier. Largement utilis dans les scripts shell car cette commande permet de rcuprer des parties de lignes sous forme de champs ou alors des bloc doctets.

$ cat /etc/passed #Afficher le contenu du fichier de mot de passe root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/bin/sh ... $ cut -b 1-10 /etc/passwd #Rcuprer les 10 premiers octets de chaque ligne root:x:0:0 daemon:x:1 ... $ cut -c 1-10 /etc/passwd #Rcuprer les 10 premiers charactres de chaque ligne root:x:0:0 daemon:x:1 ... $ cut -f 1 -d: /etc/passwd #Rcuprer le premier champ f1 si le sparateur d est : root deamon ... $ cut -f 1,3 -d: /etc/passwd #Rcuprer le champ f1 et f3 si le sparateur d est : root:0 daemon:1 ... $ cut -f 1-3 -d: /etc/passwd #Rcuprer le champ f1 f3 si le sparateur d est : root:x:0 daemon:x:1 ... $ cut -f 1-3 -d: /etc/passwd --output-delimiter ## #Dlimiteur de sortie diffrent de l root##x##0 daemon##x##1 ... $ cut -f 1-3 -d/ /etc/passwd --output-delimiter # root:x:0:0:root: # root: # bin daemon:x:1:1:daemon: # usr # sbin: ... ##### ## Combinaison avec une autre commande # $ cat /etc/passwd | cut -f1 -d:

122

Chapitre 7. SR001 Commandes GNU/Linux (Shell)

7.5.2.6. du & df
Source(s):

Web: Directory Drive Size (http://www.crazysquirrel.com/computing/debian/general-commands/drive-space.jspx) du -k VS ls -l (http://lists.freebsd.org/pipermail/freebsd-questions/2004-July/051385.html)

du : valuer lespace disque occup par des chiers. Totaliser lespace disque utilis par chaque chier, de faon rcur- sive pour les rpertoires. df : Indiquer lespace occup par les systmes de chiers.

# Nous avons dj vu ces commandes, voir section "SYS01-Chapitre08: Atelier/TP - Langage de #Affiche espace utilise par lensemble du systeme de fichier $ df Sys. de fich. 1K-blocs Occup Disponible Capacit Mont sur /dev/hda1 9835552 3577760 5758176 39% / tmpfs 258148 0 258148 0% /lib/init/rw udev 10240 624 9616 7% /dev tmpfs 258148 0 258148 0% /dev/shm vmdebian 73828436 33402892 40425544 46% /mnt/hsubuntu /dev/hdc 32016 32016 0 100% /media/cdrom0 #Affiche espace utilis par un systme de fichier en particulier dans un format lisible par $ df -h /dev/hda1 Sys. de fich. Tail. Occ. Disp. %Occ. Mont sur /dev/hda1 9,4G 3,5G 5,5G 39% / #Affiche espace utilis par des fichiers ou repertoires (tmp dans lexample) $ du -h /tmp 4,0K /tmp/seahorse-nvhZyu 4,0K /tmp/.ICE-unix 4,0K /tmp/keyring-s22hSF 8,0K /tmp/gconfd-filostene/lock 12K /tmp/gconfd-filostene 4,0K /tmp/virtual-filostene.hDz1GF 4,0K /tmp/.X11-unix 8,0K /tmp/orbit-filostene 48K /tmp

7.5.2.7. date
date permet dafcher ou de modier la date systme (en tant que root). La commande propose plusieurs formats dafchage.
# Afficher la date

123

Chapitre 7. SR001 Commandes GNU/Linux (Shell)


$ echo "Nous sommes le date "+%d %M %Y"" Nous sommes le 28 26 2009 # Afficher lheure $ echo "Il est date "+%Hh:%Mm:%Ss%"" Il est 08h:28m:30s% # Ajuster la date aaaa-mm-jj... $ date -set 2007-10-15 # Ajuster lheure HH:mm:ss... $ date -set 16:47:30 # Synchroniser lhorloge materielle avec la date et lheure introduite prcdement... $ hwclock -systohc

Note : Depuis la version 2.2 de Debian, le systeme sauve automatiquement lheure systeme dans lhorloge materiel lorque lordinateur steint et inversement lors du dmarrage systeme (script: /etc/init.d/hwclock.sh)

Voir aussi section Ajuster le fuseau horaire

7.5.2.8. diff
Source(s):

Tutoriel:diff et patch (http://www.linuxtutorialblog.com/post/introduction-using-diff-and-patch-tutorial)

diff permet de comparer deux chiers texte ligne ligne. Pour comparer deux chiers texte il vaut mieux utiliser le programme graphique meld qui permet de comparer et fusionner diffrents chiers. Ceci dit, diff est intressant pour extraire les diffrences de 2 chiers et raliser ce quon appelle un patch. La technique est largement utilise par les programmeurs pour corriger des bogues par exemple, au lieu de redistribuer un code source complet on ne distribue que le patch.
###### ## Code source A (Bon) # a=3 if [ "$a" -gt 0 ] then if [ "$a" -lt 5 ] then echo "The value of \"a\" lies somewhere between 0 and 5."

124

Chapitre 7. SR001 Commandes GNU/Linux (Shell)


fi fi # Same result as: if [ "$a" -gt 0 ] && [ "$a" -lt 5 ] then echo "The value of \"a\" lies somewhere between 0 and 5." fi ###### ## Code source B (Pas Bon) # a=3 if [ "a" > 0 ] then if [ "$a" -lt 5 ] then echo "The value of "a" lies somewhere between 0 and 5." else echo "The value does not exist" fi fi # Same result as: exit 0 if [ "$a" -gt 0 ] & [ "$a" -lt 5 ] then echo "The value of \"a\" lies somewhere between 0 and 5." fi ###### ## Cration du patch # $ diff A B > file.patch ###### ## Patcher B # $ patch B < file.patch ###### ## Diff de vrification # $ diff A B #==> Pas de sortie, cest que cest bon :)

125

Chapitre 7. SR001 Commandes GNU/Linux (Shell)

7.5.2.9. nd
Source(s):

Tutoriel:nd mini tutoriel 1 (http://www.softpanorama.org/Tools/Find/nd_mini_tutorial.shtml) nd mini tutoriel 2 (http://content.hcc.edu/pollock/unix/ndcmd.htm)

nd permet de rechercher des chiers dans une hirarchie de rpertoires (arborescence) en utilisant les information contenu dans lannuaire des chiers. On peut rechercher sur le nom, le type de chier, la taille, la date de modication. . . cet utilitaire est trs similaire ls mais est bien plus puissant car il dispose de son propre language pour specier les requtes. Le premier argument de nd est le(s) repertoire(s) de base pour la recherche ("search root"). Ils peuvent tre multiple et ainsi permettre dexclure cetains repertoire de la recherche. La liste des repertoires de recherche peut tre gnre par script.

$ find /bin /sbin /usr -name filename # Recherche filename uniquement dans les repertoires / $ find script_gen_dir -name filename # Repertoire(s) de recherche gnr(s) par commandes

Les arguments suivants attendu par nd son les expressions de recherche ("searh expression"). Le premier argument commenant par "-" est considr comme le dbut de lexpression de recherche. Chaque partie de lexpression de recherche est valu vrai ou faut et est utilis pour determiner si le chier en question satisfait ou non le(s) expression(s) de recherche.

$ find /usr /var/html -name "*.htm*" -print # Rechercher dans /usr/local et /var/www/html le

###### ## Autre Exemples # Recherche des fichiers de plus de 5 Mo dans le rpertoire courant $ find . -size +5M # Recherche des rpertoires $ find . -type d # Recherche de fichiers simples $ find . -type f # Recherche des rpertoires ou des liens symboliques $ find . -type d -o -type l # Recherche des fichiers dont le nom commence par foo $ find . -name "foo*" # Recherche des fichiers SUID dans /usr/bin $ find /usr/bin -perm -4000

Note : Combine avec des pipes et dautres commandes (grep, xargs, exec. . .) cette commande est vraiment utile.

126

Chapitre 7. SR001 Commandes GNU/Linux (Shell)

# Excuter macommande sur chaque entre du rpertoire courant ou de ses sous-rpertoires. Attention bien protger les accolades par des guillemets simples afin dempcher leur interprtation en tant que ponctuation du script shell. De la mme faon, le point-virgule est protg grce une barre oblique inverse, bien que lapostrophe aurait aussi pu tre utilise. $ find . -type f -exec macommande {} \;

#Ici on utilise loption -exec pour afficher le dtail des fichiers $ find /usr/bin -perm -4000 -exec ls -l {} \; $ find /usr/bin -perm -4000 -ls # commande quivalente la prcdente "-ls" liste les fichi un format de sortie identique la commande+options ls -dils

# Chercher les fichiers qui sappellent noyau dans le rpertoire /tmp et ses sous-rpertoires, puis les effacer, en veillant ce que les noms de fichiers ou de rpertoires qui contiennent des retours la ligne, des guillemets simples ou doubles ou des espaces soient correctement traits. $ find /tmp -name noyau -type f -print0 | xargs -0 /bin/rm -f $ find /tmp -name noyau -exec /bin/rm -f {} \; # commande quivalente $ find /tmp -name noyau -delete # commande quivalente si on u

7.5.2.10. fuser
fuser identie les processus qui utilisent des chiers ou des sockets. Peu souvent utilise, elle est utile pour dterminer parfois quel processus utilise telle socket (service serveur) ou ressource.
$ netstat -nat # Voir un service serveur lcoute sur le port 631 Proto Recv-Q Send-Q Adresse locale Adresse distante Etat tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN $ sudo fuser 631/tcp # Rcuprer le PID du processus qui utilise cette socket 631/tcp: 5838 $ sudo cat /proc/5838/cmdline # On cherche quelle ligne de commande activ ce processus /usr/sbin/cups

==> Pas de problme pour cette fois il sagit du serveur dimpression cups (Common Unix Prin

127

Chapitre 7. SR001 Commandes GNU/Linux (Shell)

7.5.2.11. gzip & bzip2


Source(s):

Tutoriel:Archiver & Compresser (http://www.siteduzero.com/tutoriel-3-74290-archiver-et-compresser.html)

gzip et bzip2 servent compresser et dcompresser des chiers ou une arborescence (option -r rcursif).bzip2 offrant un taux de compression suprieur gzip mais le traitement est plus lent.
Note : Ces deux commandes ne peuvent sappliquer que sur un seul chier la fois... utiliser tar pour compresser plusieurs chiers en une fois...

###### ## Compression de fichier # $ gzip monfichier.x $ gunzip monfichier.x.gz $ bzip monfichier.x $ bunzip monfichier.x.bz2

# # # #

Crer monfichier.x.gz Restaurer monfichier.x Crer monfichier.x.bz2 Restaurer monfichier.x

###### ## TAR & Compression gzip # $ tar -zcvf monarchive.tar mondossier/ # -zcvf Archiver et compresser en gzip # -z archive automatiquement compresse avec gzip. # Dcompresser $ tar -zxvf monarchive.tar.gz # -zxvf d-archiver et dcompresser depuis gzip

###### ## TAR & Compression bzip # $ tar -jcvf monarchive.tar.bz2 mondossier/ # -jcvf Archiver et compresser en bzip2 $ tar cvf - mondossier/ | bzip2 > monarchive.tar.bz2 # Equivaut la commande prcdente mai # -j archive automatiquement compresse avec bzip2. # Dcompresser $ tar -jxvf tutoriels.tar.bz2 tutoriels/ # -jxvf D-archiver et d-compresser depuis bzip2

128

Chapitre 7. SR001 Commandes GNU/Linux (Shell)

7.5.2.12. info
info fait parti des sources de documentation sous GNU/Linux. Vous en avez trois : /usr/share/doc, man que vous connaissez dj et info. Vous retrouverez sensiblement les mmes documentations entre man et info sauf pour les programmes GNU (gawk par exemple) pour lesquels vous trouverez beaucoup plus de choses dans info. Sur votre poste, si vous utilisez KDE, vous pouvez mettre dans le navigateur konqueror "info:/", les pages info seront afches au format html.

7.5.2.13. lsof
lsof liste les chiers ouverts. Elle peut tre utile dans bien des scnarios.

# On a un disque de mont sur /media/disque, il est temps de le dmonter : $ sudo umount /media/disk/ umount: /media/disk: priphrique occup # Ici on a typiquement un processus qui empche de $ sudo lsof | grep disk bash 30878 mlx cwd 1 /media/disk # Ici on a le coupable. Cest un shell o $ ps ux | grep 30878 ameno 30878 0.0 0.1 4680 2068 pts/3 /bin/bash # Rsoudre le problme nest plus quune question de secondes. # Il suffit didentifier la fentre et la fermer ou # envoyer un signal 9 au processus

7.5.2.14. mail ou mailx


mail est un client de messagerie pouvant tre utilis en mode commande ou appel dans un script. Vous pouvez lutiliser en mode interactif ou en mode batch. Il est aussi utiliser pour tester le bon fonctionnement des service SMTP. Vous devez avoir un serveur SMTP actif et fonctionnel comme exim, postx ou autre sur la machine. mail est notamment utilis dans les scripts cron pour envoyer des notications au sysmaster.
# exemple denvoi $ echo coucou | mail petitjean -s "Test de la messagerie" # autre exemple $ mail petitjean -s "Test de la messagerie" << EOF > coucou cest un autre test > EOF # consultation petitjean@localhost:$ mail Mail version 8.1.2 01/15/2001. Type ? for help. "/var/mail/petitjean": 2 messages 2 new >N 1 petitjean@localhost Fri Aug 28 09:31 Test de la messagerie N 2 petitjean@localhost Fri Aug 28 09:31 Test de la messagerie & 1 Message 1:

129

Chapitre 7. SR001 Commandes GNU/Linux (Shell)


From petitjean@localhost Fri Aug 28 09:31:50 2009 X-Original-To: petitjean To: petitjean@localhost Subject: Test de la messagerie Date: Fri, 28 Aug 2009 09:30:50 +0200 (CEST) From: petitjean@localhost (petitjean) coucou & q

7.5.2.15. mount
mount est la commande qui permet de monter ou dmonter des systmes de gestion de chiers (disques internes ou externes, volumes virtuels, volumes distants. . .). La syntaxe simplie est : mount [-fnrsvw] [-t vfstype] [-o options] device dir
# $ # $ Par exemple mount -t ext3 /dev/sda1 /media/sda1 Un disque nfs distant mount -t nfs serveurdistant:/usr/share/doc /media/doc

mount permet galement de monter des images ISO. Si vous avez tlcharg limage systemrescuecd.iso et que vous vouliez voir ce quil y a dedans vous pouvez utiliser mount :
$ mkdir vram $ mount -o loop systemrescuecd.iso vram $ cd vram

Pour dmonter un volume utilisez umount, mais attention le volume ne doit pas tre utilis par un processus. Voir aussi les chiers /etc/fstab et /etc/mtab.

7.5.2.16. nl
nl numrote les lignes. Cest utile si vous ralisez des documentations et que vous vouliez rfrencer des lignes par des numros pour les commenter.
$ nl monfichier $ cat /etc/passwd | nl 1 root:x:0:0:root:/root:/bin/bash 2 daemon:x:1:1:daemon:/usr/sbin:/bin/sh 3 bin:x:2:2:bin:/bin:/bin/sh 4 sys:x:3:3:sys:/dev:/bin/sh ...

130

Chapitre 7. SR001 Commandes GNU/Linux (Shell)


Note : nl numerote uniquement les lignes non vides !

7.5.2.17. ntpdate
ntpdate permet de mettre jour lheure systme dune machine partir dun serveur de temps. Voir le projet de cluster de serveur de temps

$ sudo ntpdate pool.ntp.org 28 Aug 08:32:48 ntpdate[5038]: \ adjust time server 91.121.104.170 offset -0.121994 sec

Note : Il est conseill dutiliser le dmon ntpd.

7.5.2.18. patch
Permet de patcher (modier) un chier texte partir dun diff. Ce procd est le plus gnralement utilis par les dveloppeurs lors de corrections de bogues. Voir commande diff

7.5.2.19. sed
Source(s):

Tutoriel: http://www.grymoire.com/Unix/Sed.html http://sleepyhead.de/howto/?href=scripting Scripts: Compter les mots de documents XML (docs/sys-countwords-sh.txt)

sed -e s/<[^>]*>//g foo.htm

# Enlever les tags dun fichier xml/xhtml/html

echo "hello world world hello world" | sed s/[ \t]\+/:/g hello:world:world:hello:world # Remplacer espace et tabulation par un autre caractr # Voir aussi awk commande equivalent sed # # # "s/<[^>]*>//g" monfichier.xhtml | sed "s/[ \t\n\r\a\0]\+/ /g" | wc; Supprime les tags XML, les tabulations et espace en excs puis compte le contenu wc retourne 3 chiffres : NumLignes NumMots NumCaractres

131

Chapitre 7. SR001 Commandes GNU/Linux (Shell)

7.5.2.20. sort
sort permet de trier des chiers ou un rsultat sur la sortie standard.
$ $ $ $ sort /etc/passwd cat /etc/passwd | sort car /etc/passwd | sort -r # -r permet davoir le rsultat dans lordre inverse car /etc/passwd | sort -u # -u permet de supprimer les doublons.

7.5.2.21. split
split permet de scinder en plusieurs chiers un gros chier. Utiliser cat pour la reconstruction.
$ ls -alh debian-502-i386-netinst.iso -rw-r--r-- 1 mlx mlx 151M 2009-06-29 13:07 debian-502-i386-netinst.iso # On cre des fichiers de 15 M # On utilise un prfixe xyz $ split -b 15M debian-502-i386-netinst.iso xyz $ ls -alh xyz* -rw-r--r-- 1 mlx mlx 15M 2009-08-23 12:32 xyzaa -rw-r--r-- 1 mlx mlx 15M 2009-08-23 12:32 xyzab -rw-r--r-- 1 mlx mlx 15M 2009-08-23 12:32 xyzac -rw-r--r-- 1 mlx mlx 15M 2009-08-23 12:32 xyzad -rw-r--r-- 1 mlx mlx 15M 2009-08-23 12:32 xyzae -rw-r--r-- 1 mlx mlx 15M 2009-08-23 12:32 xyzaf -rw-r--r-- 1 mlx mlx 15M 2009-08-23 12:32 xyzag -rw-r--r-- 1 mlx mlx 15M 2009-08-23 12:32 xyzah -rw-r--r-- 1 mlx mlx 15M 2009-08-23 12:32 xyzai -rw-r--r-- 1 mlx mlx 15M 2009-08-23 12:32 xyzaj -rw-r--r-- 1 mlx mlx 32K 2009-08-23 12:32 xyzak # On reconstitue limage iso $ cat xyz* > disque.iso # On vrifie le rsultat $ md5sum debian-502-i386-netinst.iso disque.iso eb436947414480e2c8ad60248d64ae59 debian-502-i386-netinst.iso eb436947414480e2c8ad60248d64ae59 disque.iso

7.5.2.22. stat
Afche les informations sur un chier ou un SGF.
$ touch a

132

Chapitre 7. SR001 Commandes GNU/Linux (Shell)


$ ln a b $ stat b File: b Size: 0 Blocks: 0 Device: 807h/2055d Inode: 984298 Access: (0644/-rw-r--r--) Uid: ( 1000/ Access: 2009-08-23 12:37:13.000000000 +0200 Modify: 2009-08-23 12:37:13.000000000 +0200 Change: 2009-08-23 12:37:17.000000000 +0200

IO Block: 4096 Links: 2 mlx) Gid: ( 1000/

mlx)

Notez le nombre de liens (Links). Le chier b est en effet un lien physique.

7.5.2.23. su
su permet de changer dID utilisateur ou de passer root (Voir aussi la commande sudo ci-dessous).
filostene$ su Mot de passe : debstafil# debstafil# exit exit filostene$ filostene$ su eeeee Mot de passe : eeeee$ # Prendre lidentite de root

# Prendre lidentit de lutilisateur eeeee

7.5.2.24. sudo
Source(s):

OF: sys01-ch24-sudo.pdf (docs/sys01-ch24-sudo.pdf) Tutoriel:Activer le compte systme root (Une opration fortement dconseille !) (http://doc.ubuntu-fr.org/root)

sudo permet dexcuter une commande avec des droits privilgis. Toute action est archive et la dnition des droits, groupes et utilisateurs seffectue grce la commande visudo qui sassure galement de la cohrence de la syntaxe du chier. Application :
$ nano /etc/sudoers

133

Chapitre 7. SR001 Commandes GNU/Linux (Shell)

... std ALL=NOPASSWD:/bin/more

# autorise sudo more /etc/sudoers # lutilisateur std # sans mot de passe # Active la journalisation dans # dans le fichier /var/log/sudo.log

... Defaults log_year, logfile=/var/log/sudo.log

$ man sudo

# options -u : sudo execute une commande en tant que lutilisateur spcifi en non plus root -c : ci-dessous, lis les commandes depuis la chane de caractre au lieu de lentre standar sudo -u yazza ls ~yazza # # # # # # # # # #

sudo -u www vi ~www/htdocs/index.html sudo shutdown -r +15 "quick reboot" sudo sh -c "cd /home ; du -s * | sort -rn > USAGE"

liste repertoire home de yazza sur une machine ou le systme de fichi contenant ~yazza nest pas exportable en tant que root editer un fichier html en tant quutilisateur www redmarrer la machine Liste repertoire dans /home partition Execute dans un sous-shell pour faire fonctionner cd et la redirection

Note : Sous Ubuntu, le compte root est dsactiv par dfaut et il est autement recommend de ne pas lactiver.
$ sudo -i $ exit # Obtenir un shell route sous Ubuntu # Pour en sortir

$ sudo passwd root # Pour utiliser le vrai compte root au lieu de sudo $ sudo passwd --lock root # Dsactiver le compte root prcedement activ # Si vous aviez configur sudo de faon ce quil demande votre mot de # effectuez la manipulation inverse ! Autrement, sudo sera compltement

Ubuntu dconseillent (sans argumenter, dailleurs) dactiver le compte root ; quels sont les inconvnients/avantages entre compte root / utilisation de sudo ? Il est difcile de savoir sil y a vraiment des avantages et des inconvnients. L il sagit dune stratgie ubuntu certainment li au poste client. Les coordinateurs nont encore jamais vu de serveur ou le compte root navait pas de mot de passe ;-)

134

Chapitre 7. SR001 Commandes GNU/Linux (Shell)

7.5.2.25. tail & head


tail et head permettent respectivement de lire un nombre de lignes en n ou en dbut de chier.
# Lire 50 lignes... $ tail -n 50 /var/log/messages # ... les premires ... $ head -n 50 /var/log/messages # ... les dernires ... # Afficher tout ce qui arrive dans le fichier $ tail -f /var/log/auth.log

7.5.2.26. tar
Source(s):

Tutoriel:Archiver & Compresser (http://www.siteduzero.com/tutoriel-3-74290-archiver-et-compresser.html)

tar permet de raliser des archives c.a.d de regrouper des chiers et repertoires en un seul chier.

###### ## TAR uniquement # $ tar -cvf monarchive.tar fichier1 fichier2 fichier3 # -cvf Crer un archive \a partir de fi $ tar -cvf monarchive.tar mondossier/ # -cvf Crer un archive partir dun repertoire (equi # -c cr une archive tar # -v affichier le detail des operations # -f assembler larchive dans un fichier

# Il est toujours prferable de regrouper tous les fichiers dans un seul dossier avant de le $ tar -tf monarchive.tar # -tf : afficher le contenu de larchive sans lextraire # -t liste contenu de larchive # -f utilise fichier archive $ # # # $ # # # tar -rvf monarchive.tar fichier4_en_plus # -rvf Ajouter un fichier -r Ajouter au fichier archives existant -v afficher le detail des operations -f assembler larchive dans un fichier tar -xvf monarchive.tar # -xvf Extraire les fichiers de larchive -x pour eXtract) : -v afficher le detail des operations -f d-assembler larchive depuis un fichier

######

135

Chapitre 7. SR001 Commandes GNU/Linux (Shell)


## TAR & Compression gzip # $ tar -zcvf monarchive.tar mondossier/ # -zcvf Archiver et compresser en gzip # -z archive automatiquement compresse avec gzip. # Dcompresser $ tar -zxvf monarchive.tar.gz # -zxvf d-archiver et dcompresser depuis gzip

###### ## TAR & Compression bzip # $ tar -jcvf monarchive.tar.bz2 mondossier/ # -jcvf Archiver et compresser en bzip2 $ tar cvf - mondossier/ | bzip2 > monarchive.tar.bz2 # Equivaut la commande prcdente mai # -j archive automatiquement compresse avec bzip2. # Dcompresser $ tar -jxvf tutoriels.tar.bz2 tutoriels/ # -jxvf D-archiver et d-compresser depuis bzip2

###### ## Exclure des fichiers # # Loption --exclure MOTIF permet de ne pas archiver certains type de fichiers selon le MOTI # Pour exclure plusieurs MOTIF, repter loption autant de fois que necessaire. # $ tar -jcvf monarchive.tar.bz2 mondossier/ --exclude=*.disk --exclude *~

7.5.2.27. tee
Permet de lire un ux sur une entre standard (console, chier, socket. . . et dcrire le ux sur la sortie standard et dans un chier.

###### ## TEST # $ tee > out.txt $ ls $ ls -al $ ps # <-------- Ici faire CTRL Z pour arrter (-eq fin de fichier) [1]+ Stopped tee > out $ more out.txt ls ls -al ps

136

Chapitre 7. SR001 Commandes GNU/Linux (Shell)

7.5.2.28. tr
tr permet de transformer ou supprimer des caractres.
# Conversion en majuscules $ echo toto | tr "a-z" "A-Z" TOTO $ echo toto | tr "[:lower:]" "[:upper:]" TOTO # Remplacement de caractres echo toto | tr "po" "ta" tata # Suppression de caractres echo toto | tr -d o tt

7.5.2.29. tzselect, tzcong & tzdata


Ces commandes permettent dafcher ou de congurer les fuseaux horaires (timezone) du systme.
###### ## Afficher les fuseaux horaires (timezone)... # $ tzselect Please identify a location so that time zone rules can be set correctly. Please select a continent or ocean. 1) Africa 2) Americas 3) Antarctica 4) Arctic Ocean 5) Asia 6) Atlantic Ocean 7) Australia 8) Europe 9) Indian Ocean 10) Pacific Ocean 11) none - I want to specify the time zone using the Posix TZ format. #? 8 Please select a country. 1) Aaland Islands 18) Greece 35) Norway 2) Albania 19) Guernsey 36) Poland 3) Andorra 20) Hungary 37) Portugal 4) Austria 21) Ireland 38) Romania 5) Belarus 22) Isle of Man 39) Russia 6) Belgium 23) Italy 40) San Marino 7) Bosnia & Herzegovina 24) Jersey 41) Serbia 8) Britain (UK) 25) Latvia 42) Slovakia

137

Chapitre 7. SR001 Commandes GNU/Linux (Shell)


9) Bulgaria 26) Liechtenstein 43) Slovenia 10) Croatia 27) Lithuania 44) Spain 11) Czech Republic 28) Luxembourg 45) Sweden 12) Denmark 29) Macedonia 46) Switzerland 13) Estonia 30) Malta 47) Turkey 14) Finland 31) Moldova 48) Ukraine 15) France 32) Monaco 49) Vatican City 16) Germany 33) Montenegro 17) Gibraltar 34) Netherlands #? 15 The following information has been given: France Therefore TZ=Europe/Paris will be used. Local time is now: Mon Dec 14 11:36:37 CET 2009. Universal Time is now: Mon Dec 14 10:36:37 UTC 2009. Is the above information OK? 1) Yes 2) No #? 1 You can make this change permanent for yourself by appending the line TZ=Europe/Paris; export TZ to the file .profile in your home directory; then log out and log in again. Here is that TZ value again, this time on standard output so that you can use the /usr/bin/tzselect command in shell scripts: Europe/Paris

Variable denvironement du fuseau horaire: : Le fuseau horaire est enregistr dans la variable denvironement $TZ, il peut donc tre utilis dans les scripts ou congur diffrement pour chaque utilisateur via le chier .prole dand leur repertoire personnel. TZ=Europe/Paris; export TZ # Modie la variable denvironement

###### ## Ajuster le fuseau horaire (timezone)... [DEPRECATED] # $ tzconfig WARNING: the tzconfig command is deprecated, please use: dpkg-reconfigure tzdata ###### ## Ajuster le fuseau horaire (timezone)... [DEBIAN UI TEXTE INTERFACE] # $ dpkg-reconfigure tzdata #Ajuster le fuseau horaire (timezone)... Current default timezone: Europe/Paris Local time is now: Wed Dec 9 12:10:34 CET 2009. Universal Time is now: Wed Dec 9 11:10:34 UTC 2009.

138

Chapitre 7. SR001 Commandes GNU/Linux (Shell)

7.5.2.30. wc
wc compte le nombre doctets, de caractres ou de lignes dun chiers.
$ wc -l /var/log/auth.log 1671 /var/log/auth.log

7.5.2.31. xargs
xargs permet de rcuprer la sortie standard dune commande comme une liste de paramtres pour leur appliquer une autre commande.
# Rechercher tous les fichiers standards et leur appliquer # de nouveaux droits $ find . -type f | xargs chmod 755 # Ici pour des rpertoires $ find . -type d | xargs chmod 711 # Recherche tous les fichiers .bak et les supprime $ find . -name "*.bak" | xargs rm # Recherche tous les fichiers de plus de 50 Mo et les affiche $ find . -size +50M | xargs ls -alh

Note : Attention lutilisation de cette commande, notamment si vous passez en paramtre une commande rm ou mv car sil y a une erreur les consquences peuvent tre graves.

7.5.3. Applications
Toutes les commandes sont ralises sur une ligne laide de pipes si besoin. 1. Donner la liste de tous les comptes et uniquement ceux-la, issus du chier passwd, tris par ordre alphabtique. Le rsultat sera mis dans le chier /tmp/out. Vous utiliserez cut et sort.
$ cut -f 1 -d: /etc/passwd | sort > tmp.out

139

Chapitre 7. SR001 Commandes GNU/Linux (Shell) 2. Donner le nombre de chier dans /usr/bin. Vous utiliserez ls et wc.
$ ls -Al /usr/bin | wc -l

3. Rechercher dans /usr/share/doc, tous les chiers compresss (.gz) et indiquer le nombre. Vous utiliserez nd et wc.
$ find /usr/share/doc -name "*.gz" | wc -l

4. Donner la liste des processus shell (bash) lancs par des utilisateurs. Vous utiliserez ps et un grep.
$ ps aux | grep bash

5. Ralisez une archive compresse avec bzip2 de /etc/. Larchive sera dans /tmp/etc.tar.bz2.
$ tar -jcvf /tmp/etc.tar.bz2 /etc/ $ tar -cf /etc | bzip2 > /tmp/etc.tar.bz2

# Equivalent

6. Rpartissez etc.tar.bz2 laide de split en autant de chiers de 1 Mo que possible. Le prxe sera etc.
$ split -b 1M /tmp/etc.tar.bz2 etc

7. Reconstruisez laide de cat et des chiers split un chier new-etc.tar.bz2


$ cat etc* > new-etc.tar.bz2 # Attention avec etc* sinon etc.tar.bz2 ou tout autre fichier $ cat etcaa etcab etcac etcad etcae etcaf > new-etc.tar.bz2

8. Vriez laide de la commande md5sum que les deux chiers etc.tar.bz2 et new-etc.tar.bz2 sont bien identiques.
md5sum new-etc.tar.bz2 /tmp/etc*

9. Rechercher dans /home tous les chiers appartenant au compte foo et changez le propritaire et le groupe qui devient bar. Vous utiliserez nd, xargs et chown.
$ find /home -user foo -print0 | xargs -0 /bin/chown bar:bar $ find /home -user foo | xargs sudo chown bar :bar

# Variant

140

Chapitre 7. SR001 Commandes GNU/Linux (Shell) 10. Que se passe t-il la suite de la commande: cat /etc/passwd | tr \n \r > /tmp/newpasswd Testez les deux chiers /etc/passwd et /tmp/newpasswd sous Linux et sous Windows. La commande cre une copie du chier de mot de passe en remplacant tous les caractres nouvelle ligne (\n) du chier original par le caractre retour (\r). Sous linux, les deux chiers apparaissent de faon identique (une entre par ligne), sous windows, les lignes apparaissent concatnes les unes aux autres (toutes les entres sur la mme ligne) pour le chier original /etc/passwd. n est le caractre de contrle de changement de ligne standard sous les systmes *nix, ici il est remplac par un CR/LF qui est plus standard pour Windows.

7.5.4. grep et les expressions rationnelles (ou regulires, regexp, ...)


Source(s):

OF: SR001-sys02-ch03-expression-rationnelle.pdf (docs/eof/sr001-sys02-ch03-expression-rationnelle.pdf) Tutoriels: Shell scripts - Filtres (http://www.ac-creteil.fr/reseaux/systemes/linux/shell-scripts/ltres.html) Shell scripts - Expressions rgulires (http://www.ac-creteil.fr/reseaux/systemes/linux/shell-scripts/expr-regulieres.html)

7.5.4.1. Introduction
Les expressions rationnelles ("Regular Expression", "regexp" en Anglais) permettent de rechercher et selectionner une (ou des) chanes de caratre partir de linterpretation dun motif de critres ou modles de recherche ("Pattern" en Anglais) Une fois la (ou les) chane(s) selectionne(s) suivant le motif, lobjectif est simplement deffectuer des traitements comme des subtitutions, des validations, etc... sur les chaines trouves. Leur utilisation stend de certains ltres shell : grep, sed, awk, ... des langages de scripts : perl, php, ... et aux diteurs de texte : vi , emacs, ...
Note : !!! Attention !!! lorthographe dune expression peut varier dun outil un autre. Certains caractres (comme le ? ou le | avec vi) peuvent galement ne pas tre supports. Il faut donc toujours se rfrer la documentation de loutil. certains caractres spciaux sont communs avec les caractres gnriques de dsignation de chiers, mais ils ont une interprtation diffrente. Donc il faut toujours prter attention au contexte.

141

Chapitre 7. SR001 Commandes GNU/Linux (Shell)

7.5.4.2. Syntaxe avec grep...


La syntaxe la plus courante est:
$ grep [options] expreg [fichiers]

Voir grep pour plus dinfo sur cette commande. Avec grep, les motifs doivent tre saisis entre guillemets (exemple : UnMotif) ou entre apostrophes si le motif contient un $ (exemple : $UnMotif).

7.5.4.3. Caractre particuliers ou "mta-caractres"


Appels aussi caractres spciaux, ce sont des caractres interprts en contexte expression rationnelle comme des oprateurs. En voici la liste avec un bref descriptif :
. x* x+ x? x|y [...] [^...] [^0-9] ^abc abc$ x{n} x{n,} x{0,m} x{n,m} <abc abc>

. (point) remplace tout caractre sauf \n (astrisque) chane contenant 0 ou n fois le caractre x = rpetition du caractre q chane contenant 1 ou n fois le caractre x = au moins une occurence chane contenant 0 ou 1 fois x = au plus une occurence chane contenant x ou bien alors y (crochets) chane comprenant tout caractre contenu entre les crochets = un ensemble le ^ lintrieur des [ ] signifie le "non" boolen ou le complment = Ensemble complmentaire Par exemple [^0-9] signifie tout ce qui nest pas un chiffre. recherche la chane "abc" en dbut de ligne recherche de la chane "abc" en fin de ligne chane chane chane chane contenant contenant contenant contenant

n fois le caractre x au moins n fois le caractre x de 0 m fois le caractre x de n m fois le caractre x = nombre de rptitions attendus du ca

mot commenant pas la chane "abc" mot se terminant pas la chane "abc" mta-caractre, pour jouer le rle du caractre usuel

\ annule le rle de

Les principaux caractres de contrles : \t tabulation \n retour ligne \r retour chariot \s espace

142

Chapitre 7. SR001 Commandes GNU/Linux (Shell)


Note : Lantislash \ inhibe linterprtation des caractres spciaux et force leur interprtation usuelle.
.\.txt recherche les chaines du genre c.txt , o c est un caractre unique qcq \*$ recherche les chaines qui se terminent ($) par le caractre astrisque (\*)

Note : Un caractre particulier comme ?, *. . . exprim entre [ ] est pris dans son sens littral. Cest dire quil nest pas interprt.

Note : Dans les expressions rationnelles simples, les mta-caractres ?, +, {, |, (, et ) perdent leur signication spciale, il faut utiliser la place leurs versions avec la contre-oblique \ ?, \+, \{, \|, \(, et \) pour leur conserver leur caractre particulier(interprtable) ou alors utiliser le mode tendu de grep avec loption -E.

7.5.4.4. Jeu dessai...


# Recherche la chane "perl" $ grep perl jeu_essai.txt perle perlant perl Parler parle perl langage Le langage c ou perl le le le langage gage ge ppppppperl ppeeerrrllll peeerrlllll peerrlllll # Recherche la chane "Perl" $ grep Perl jeu_essai.txt Perl le language C ou Perl # Recherche la chane "perl" ou "Perl" $ grep [pP]erl jeu_essai.txt Perl perle perlant perl Parler parle perl langage Le langage c ou perl le le le langage gage ge ppppppperl ppeeerrrllll peeerrlllll peerrlllll le language C ou Perl ... $ grep $ grep $ grep ## Ces "<pe" jeu_essai.txt "rl>" jeu_essai.txt "<perl>" jeu_essai.txt trois l donnent aucun # Mot commenant par "pe" # Mot finissat par "rl" # Mot "perl" resultat bizarre bizarre ?!

143

Chapitre 7. SR001 Commandes GNU/Linux (Shell)


## En fait aprs un rapide coup doeil dans la page de man ## il apparat quil faut plutt utiliser: $ grep "\Bpe" jeu_essai.txt # Mot commenant par "pe" le le le langage gage ge ppppppperl ppeeerrrllll peeerrlllll peerrlllll $ grep "rl\b" jeu_essai.txt # Mot finissat par "rl" Perl perl Parler parle perl langage Le langage c ou perl le le le langage gage ge ppppppperl ppeeerrrllll peeerrlllll peerrlllll le language C ou Perl $ grep "\Bperl\b" jeu_essai.txt # Mot "perl" # Ligne commenant par "perl" $ grep "^perl" jeu_essai.txt perle perlant perl Parler parle perl langage # Exclure "abc" $ grep "[^abc]" jeu_essai.txt Perl perle perlant parlant Parlant parler perl Parler parle perl langage alpha qwertz exe language exe qwertz qwertz alpha exe qwertz qwertz alpha Langage Language Le langage c ou perl le le le langage gage ge ppppppperl ppeeerrrllll peeerrlllll peerrlllll le language C ou Perl 02.03.05.03 03.236.5696 zro un deux trois quatre cinq six sept huit neuf 0 1 2 3 5 6 7 8 9 400000 401000 402000 403000 404000 405000 400 401 402 403 404 405 4 41 42 43 44 45 4 1 2 3 4 5 ami tel age joe 05-55-33-22-55 23 ans bar 10-23-22-55-63 35 ans team 03-02-21-12-25 99 ans # Ligne terminant par "Perl" $ grep "Perl$" jeu_essai.txt Perl

144

Chapitre 7. SR001 Commandes GNU/Linux (Shell)


le language C ou Perl # Le deuxime caractre est indiffrent parl, pbrl, pcrl... $ grep "p.erl" jeu_essai.txt le le le langage gage ge ppppppperl ppeeerrrllll peeerrlllll peerrlllll

# Ligne commenant par un point $ grep "^\." jeu_essai.txt .juste pour le teste # Cette a t rajouter manuellement la fin du fichier jeu_essai. # Chane commence par une majuscule et termine par la chane "erl" $ grep "[A-Z]erl" jeu_essai.txt Perl le language C ou Perl # Chane ayant 0, 1, ou n majuscules $ grep "[A-Z]*" jeu_essai.txt Perl perle perlant parlant Parlant parler perl Parler parle perl langage alpha qwertz exe language exe qwertz qwertz alpha exe qwertz qwertz alpha Langage Language Le langage c ou perl le le le langage gage ge ppppppperl ppeeerrrllll peeerrlllll peerrlllll le language C ou Perl 02.03.05.03 03.236.5696 zro un deux trois quatre cinq six sept huit neuf 0 1 2 3 5 6 7 8 9 400000 401000 402000 403000 404000 405000 400 401 402 403 404 405 4 41 42 43 44 45 4 1 2 3 4 5 ami tel age joe 05-55-33-22-55 23 ans bar 10-23-22-55-63 35 ans team 03-02-21-12-25 99 ans .juste pour le teste # Squence alphanumrique $ grep "[0-9a-zA-Z]*" jeu_essai.txt

145

Chapitre 7. SR001 Commandes GNU/Linux (Shell)


$ grep "[[:alnum:]]*" jeu_essai.txt # Equivalent Perl perle perlant parlant Parlant parler perl Parler parle perl langage alpha qwertz exe language exe qwertz qwertz alpha exe qwertz qwertz alpha Langage Language Le langage c ou perl le le le langage gage ge ppppppperl ppeeerrrllll peeerrlllll peerrlllll le language C ou Perl 02.03.05.03 03.236.5696 zro un deux trois quatre cinq six sept huit neuf 0 1 2 3 5 6 7 8 9 400000 401000 402000 403000 404000 405000 400 401 402 403 404 405 4 41 42 43 44 45 4 1 2 3 4 5 ami tel age joe 05-55-33-22-55 23 ans bar 10-23-22-55-63 35 ans team 03-02-21-12-25 99 ans .juste pour le teste # le chiffre 0 ou 3 ou 7 $ grep "[037]" jeu_essai.txt 02.03.05.03 03.236.5696 0 1 2 3 5 6 7 8 9 400000 401000 402000 403000 404000 405000 400 401 402 403 404 405 4 41 42 43 44 45 4 1 2 3 4 5 joe 05-55-33-22-55 23 ans bar 10-23-22-55-63 35 ans team 03-02-21-12-25 99 ans # les chanes "langage" ou "language" ou grep -E "lang[u]?age" $ grep "lang[u]\?age" jeu_essai.txt $ grep -e "lang[u]\?age" jeu_essai.txt # Equivalent perl Parler parle perl langage alpha qwertz exe language

146

Chapitre 7. SR001 Commandes GNU/Linux (Shell)


Le langage c ou perl le le le langage gage ge ppppppperl ppeeerrrllll peeerrlllll peerrlllll le language C ou Perl $ grep -E "lang[u]\?age" jeu_essai.txt ## Aucun resultat ! # Recherche des chanes "ppp" ou "pppp" $ grep "p{3,4}" jeu_essai.txt ## Aucun resultat ?! $ grep -E "p{3,4}" jeu_essai.txt le le le langage gage ge ppppppperl ppeeerrrllll peeerrlllll peerrlllll # Chane au format mm.mmm.mmmm avec m compris entre 0 et 9 $ grep "[0-9]{2}\.[0-9]{3}\.[0-9]{4}" jeu_essai.txt ## Aucun resultat ?! $ grep -E "[0-9]{2}\.[0-9]{3}\.[0-9]{4}" jeu_essai.txt 03.236.5696 # Recherche chane "e+" $ grep "e+" jeu_essai.txt # Caractre + est pris littralement. ce+ci est un autre essai... $ grep -E "e+" jeu_essai.txt # Caractre + est pris au sens tendu. $ grep "e\+" jeu_essai.txt # Equivalent Perl perle perlant parler perl Parler parle perl langage alpha qwertz exe language exe qwertz qwertz alpha exe qwertz qwertz alpha Langage Language Le langage c ou perl le le le langage gage ge ppppppperl ppeeerrrllll peeerrlllll peerrlllll le language C ou Perl zro un deux trois quatre cinq six sept huit neuf ami tel age joe 05-55-33-22-55 23 ans team 03-02-21-12-25 99 ans .juste pour le teste lang?age ce+ci est un autre essai... # Ne pas oublier les quotes ! $ grep -E p{3,} jeu_essai.txt grep: p: Aucun fichier ou rpertoire de ce type $ grep -E "p{3,}" jeu_essai.txt le le le langage gage ge ppppppperl ppeeerrrllll peeerrlllll peerrlllll

147

Chapitre 7. SR001 Commandes GNU/Linux (Shell)


# Attention aux caractres spciaux... $ grep \\$ jeu_essai.txt $ grep [$] jeu_essai.txt # Equivalent Encore un derni$r essai.

7.5.4.5. Exercice
# - 0 - Trouver les lignes vides $ grep "^$" jeu_essai.txt $ grep -v "[[:alnum:]+[:punct:]+]" jeu_essai.txt

# Equivalent ???

# - 1 - Chane contenant au minimum 3 "p" $ grep "[p]{3,}" jeu_essai.txt # Commande KO, donne aucun resultat, erreur de syntaxe $ grep "[p]\{3,\}" jeu_essai.txt # Commande OK $ grep ".p.p.p." jeu_essai.txt # Equivalent ??? le le le langage gage ge ppppppperl ppeeerrrllll peeerrlllll peerrlllll # - 2 - Mot termin par "age" $ grep "age>" jeu_essai.txt ## Dans me cas, cette command retourne aucun resultat ?! Bizarre ## Il faut plutt utiliser: $ grep "age\b" jeu_essai.txt perl Parler parle perl langage alpha qwertz exe language Langage Language Le langage c ou perl le le le langage gage ge ppppppperl ppeeerrrllll peeerrlllll peerrlllll le language C ou Perl ami tel age lang?age # - 3 - Mot termin par "guage" ou "gage" $ grep "g[u]*age>" jeu_essai.txt ## Dans me cas, cette command retourne aucun resultat ?! Bizarre ## Il faut plutt utiliser: $ grep "g[u]*age\b" jeu_essai.txt perl Parler parle perl langage alpha qwertz exe language Langage Language Le langage c ou perl le le le langage gage ge ppppppperl ppeeerrrllll peeerrlllll peerrlllll le language C ou Perl # - 4 - Chane contenant "rla" $ grep "rla" jeu_essai.txt perlant parlant

148

Chapitre 7. SR001 Commandes GNU/Linux (Shell)


Parlant # - 5 - Lignes termines par "ans" $ grep "ans$" jeu_essai.txt $ grep ans$ jeu_essai.txt # Equivalent joe 05-55-33-22-55 23 ans bar 10-23-22-55-63 35 ans team 03-02-21-12-25 99 ans # - 6 - Chane contenant les sous-chanes "alpha" ou "exe" $ grep "alpha\|exe" jeu_essai.txt # le caractre "|" matrialise le "ou" alpha qwertz exe language exe qwertz qwertz alpha exe qwertz qwertz alpha

# - 7 - Ligne ne commenant pas par un chiffre $ grep -v "^[[:digit:]]" jeu_essai.txt # Fonctionne mais nutilise pas compltement les exp $ grep "^[^0-9]" jeu_essai.txt # Mieux $ grep "^[^[:digit:]]" jeu_essai.txt # Equivalent du mieux :) Perl perle perlant parlant Parlant parler perl Parler parle perl langage alpha qwertz exe language exe qwertz qwertz alpha exe qwertz qwertz alpha Langage Language Le langage c ou perl le le le langage gage ge ppppppperl ppeeerrrllll peeerrlllll peerrlllll le language C ou Perl zro un deux trois quatre cinq six sept huit neuf ami tel age joe 05-55-33-22-55 23 ans bar 10-23-22-55-63 35 ans team 03-02-21-12-25 99 ans .juste pour le teste lang?age ce+ci est un autre essai... Encore un derni$r essai. 2009 # - 8 - Ligne commenant par une voyelle ou un chiffre $ grep "^[aeiouy]\|^[[:digit:]]" jeu_essai.txt

149

Chapitre 7. SR001 Commandes GNU/Linux (Shell)


$ grep "^[aeiouy]\|^[0-9]" jeu_essai # Equivalent alpha qwertz exe language exe qwertz exe qwertz 02.03.05.03 03.236.5696 0 1 2 3 5 6 7 8 9 400000 401000 402000 403000 404000 405000 400 401 402 403 404 405 4 41 42 43 44 45 4 1 2 3 4 5 ami tel age # - 9 - Ligne ne commenant pas par une voyelle $ grep "^[^aeiouy]" jeu_essai.txt alpha qwertz exe language exe qwertz exe qwertz ami tel age # - 10 - Ligne commenant ou se terminant par un chiffre $ grep "^[[:digit:]]\|[[:digit:]]$" jeu_essai.txt $ grep "^[0-9]\|[0-9]$" jeu_essai.txt # Equivalent 02.03.05.03 03.236.5696 0 1 2 3 5 6 7 8 9 400000 401000 402000 403000 404000 405000 400 401 402 403 404 405 4 41 42 43 44 45 4 1 2 3 4 5 Encore un derni$r essai. 2009 # - 11 - Les lignes qui font moins de 10 caractres. $ grep "^.\{1,10\}$" jeu_essai.txt $ grep -E "^.{1,10}$" jeu_essai.txt # Equivalent Perl perle perlant parlant Parlant parler exe qwertz exe qwertz Langage Language lang?age

150

Chapitre 7. SR001 Commandes GNU/Linux (Shell)

7.5.4.6. Extra...
# Ligne contenant "alpha" et "quertz" $ grep "alpha" jeu_essai.txt | grep "qwertz" alpha qwertz exe language qwertz alpha qwertz alpha # Ligne avec mots contenant 401, 402, 403... 409 $ grep "40[0-9]" jeu_essai.txt 400000 401000 402000 403000 404000 405000 400 401 402 403 404 405 # Ligne avec mot commenant par 401, 402, 403... 409 $ grep "\B40[0-9]" jeu_essai.txt 400000 401000 402000 403000 404000 405000 # Ligne avec mot finissant par 401, 402, 403... 409 $ grep "40[0-9]\b" jeu_essai.txt 400 401 402 403 404 405 # Les numros de tlphone compos de 10 chiffres. $ grep -E "((([0-9]{2})-){4})[0-9]{2}" jeu_essai.txt joe 05-55-33-22-55 23 ans bar 10-23-22-55-63 35 ans team 03-02-21-12-25 99 ans # Rechercher une adresse email "\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b" # Trouver les paires de tags HTML "<([A-Z][A-Z0-9]*)\b[^>]*>(.*?)</\1>"

# Pour valider une adresse IP "\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|

7.5.5. Editeur en mode texte : VI(m), Emacs, Nano, mcedit, etc...


Source(s):

OF: SR001-sys02-ch04-vi.pdf (docs/eof/sr001-sys02-ch04-vi.pdf) VIM: vim (http://www.vim.org/) Vim : lditeur de texte du programmeur (http://www.siteduzero.com/tutoriel-3-88344-vim-l-editeur-de-texte-du-programmeur.html) Vim as XML Editor (http://www.pinkjuice.com/howto/vimxml) Vim Video Tutorial (http://www.youtube.com/watch?v=71YTkxUNwmg)

151

Chapitre 7. SR001 Commandes GNU/Linux (Shell)

Web: 7 Habits For Effective Text Editing 2.0 (http://video.google.fr/videoplay?docid=2538831956647446078&ei=lUemS6z1CorkAbJvsSWDQ&q=vim&hl=fr#)

De multiple editeurs de texte sont disponible sous Linux: vi(m), emacs, nano, mcedit, etc... Ils ont tous leurs avantages et dfauts en terme de fonctionalits, de vitesse et dutilisabilit (ergonomie)... Pour linstant ni VI(m), ni Emacs ne mont convaincus en terme dutilisabilit... il faut peut-tre plusieurs semaines de pratique avant de rellement maitriser les fonctionalits et les atots de ces diteurs de texte. Ils ont tous lavantage dtre accessible en modem console et VI(m) semble tre celui le plus disponsible par dfaut sur les systemes Linux/Unix de tout genre... pour raison historique... quoi que Emacs soit aussi trs rpendu... Chacun possde un tutorial (un petit logiciel dentranement incorpor Vi, nomm vimtutor), qui vous permet de vous entraner souhait sur ces outils. Cest ce quil est conseill de faire, en faisant de toutes les mthodes imprimes ou autres, car Emacs et Vi sont des outils de travail qui doit avant tout vous rentrer dans les doigts. Il faut que je me penche sur Nano, qui semble tre le vainceur dun combat eternelle entre VI et Emacs... tester pour faire son experience... dun premier abord il semble plus facile daccs sans experience et faire laffaire pour ladministration de systme :)) Dans Nano, le menu en bas de fentre semble tre trs conviviale... mais il est certainement moins volu que VI ou Emacs... Je regrette quaucun ne fournisse un simple copier/coller avec CTRL+C / CTRL+V par dfaut... et je nai pas encore vraiment compris pourquoi... pour de raison historique certainement ou peut-tre trop windowsien au got des dveloppeurs :)) ... En personalisant les raccourcis on doit pouvoir sy retrouver... Le raccourcis clavier devrait aussi faire lobjet dun standard international partag par tous :)... cela existe peut-tre certainement mais jai pas encore eu loccasion de chercher :)) Ce chapitre devra tre approfondi ultrieurement... Il existe videment bien dautre diteur en mode graphique: gedit, kate, quanta, etc... peut-tre pas aussi puissant mais ergonomique et modulaire...

152

Chapitre 7. SR001 Commandes GNU/Linux (Shell)

7.5.5.1. vim
## Tutorial $ vimtutor ## Ouvrir un fichier $ vim monfichier

# Editer monfichier

## Quitter/Enregistrer :q! (ou ZQ) # Quitter SANS enregistrer :wq (ou ZZ ou :x) # Enregistrer ET Quitter :w monfichier # Sauvegarder dans monfichier mais rester dans fichier ouvert :saveas monfichier # Sauvegarder dans monfichier et ouvrir monfichier ## Activer Mode <Echap> # Normal/Commande (par dfaut) v # Visuel : dmarrer la selection de texte i # Insertion : Insrer caractres SOUS le curseur a (ou A) # Insertion : Insrer caractres APRS (AVANT) le curseur o (ou O) # Insertion : Ouvrir un ligne SOUS (AU DESSUS) de la line courante ## Se dplacer en Mode Normal (haut) k (gauche) h l (droite) j (bas) ## Mouvements w e 0 $ #G G gg CTRL-G en Mode Normal # Aller jusquau dbut du prochain mot # Aller jusqu la fin du mot courant # (zro) Aller jusquau dbut de la ligne # Aller jusqu la fin de ligne # Aller la ligne numro # # Aller la la FIN du fichier # Aller au dbut du fichier # Afficher position + chemin[tat] du fichier

## Rpter un mouvement en Mode Normal 2w # Aller au dbut du 3ime mot (saute 2 mots) 3e # Aller la fin du 3ime mot (saute 3 mots) ## Operations en Mode Normal # Couper/Effacer x # Effacer caractre sous le curseur d # Couper/Effacer dd # Couper/Efface une ligne # Copier y yy

# Copier # Copie une ligne

153

Chapitre 7. SR001 Commandes GNU/Linux (Shell)


# Coller p :<Echap>.

# Coller (Aprs le curseur/En dessous de la ligne courante)

# Changer/Remplacer rx # (caractre) remplacer le caractre sous le curseur par caractre x R # (caractre) remplacer plusieurs caractres sous le curseur jusqu <Echap> c # (mots) changer ce # (mots) remplacer le mot sous le curseur # Annuler u U CTRL-R

# # # # #

(Undo) Annule dernire commande Appyer plusieurs fois pour annuler plusieurs commandes (Undo) Annule toutes les dernires commande sur la ligne Rcupre toute la ligne avant modification (Redo) Annule les annulations :)

## Rpter une opration en Mode Normal ## Syntaxe: ## [Operation][Mouvement] ## Nombre [Operation] ## [Operation] Nombre [Mouvement] 3x # Effacer 3 caractres dw # Effacer 1 mot (jusquau mot suivant) d2w # Effacer 2 mots d$ # Effacer jusqu fin de ligne 3dd # Coupe 3 lignes 4yy # Copie 4 lignes ## Recherche /texte ?texte n N % /texte\c

# Recherche texte en AVANT # Recherche texte en ARRIRE # Trouver le resultat suivant # Trouver le resultat prcdent # Trouver ),] ou } correspondante # Recherche avec option ignorer la case !

## Substitution ## Remplacer ancien par nouveau :s/ancien/nouveau # Dans la 1re occurance seulement de la ligne courante :s/ancien/nouveau/g # Dans toutes les occurances de la ligne courante :#,#s/ancien/nouveau/g # Toutes les occurences dun texte entre deux lignes # - #,# numeros de ligne de la plage de substitution couverte :%s/ancien/nouveau/g # Toutes les occurences dans tout le fichier :%s/ancien/nouveau/gc # Avec confirmation ## Executer une commande externe :!x # Executer la commande externe x (shell) :!ls # Execute la commande ls :!rm monfichier # Execute la commande rm - Efface monfichier

154

Chapitre 7. SR001 Commandes GNU/Linux (Shell)


## Selection/Copier/Coller v [Movement] y [Movement] p v [Movement] :w monfichier

# Selectionner/Copier/Coller dans fichier courant # Enregistrer une selection de texte dans un fichier externe

## Rcupration et fusion de fichier :r monfichier # Inclure le contenu de monfichier # la position courante du curseur :r !ls # Inclure le resultat de la commande externe ls # la position courante du curseur ## Auto-compltion : CTRL-D # Affiche la liste de toutes les commandes disponibles :e CTRL-D # Affiche la liste des commandes commenant par e :e <TAB> # Compltion automatique (nom de commande/fichier) <Flche-Haut> # Affiche les commandes prcdentes ## Activer les options ## Syntaxe: ## :set xxx (xxx=option) :set ic # Activer loption ignorer la case pour la recherche :set noic # Dsactiver loption (idem prcdente) :set hls # Active loption Mise en lumire des resultats de recherche :set hlsearch :nohlsearch # Desactive loption (idem prcdente) :set is # Montrer les appartenance partielles :set ruler # Affiche la barre de localisation du curseur (ligne, column, etc...) ## Fichier de configuration $ vim ~/.vimrc # Editer fichier configuration depuis le shell :edit $MYVIMRC # ---------------------------- depuis vim :version # Liste les fichiers de configurations pris en compte :r $VIMRUNTIME/vimrc_example.vim # Exemple de fichier de configuration ## Aide en Ligne :help # Accder la page daide <F1> CTRL-W CTRL-W # Sauter dune fentre lautre :q<Entree># Quitter laide ## Accs par sujet :help vimrc-intro :help w :help :edit :help c_CTRL-D :help c_<T :help insert-index :help user-manual ## Copier/Coller entre fichiers directement #1. Depuis le Mode Normal (mode commande) presser : #2. Entrer le numro de ligne dbut,fin #3. Presser w

155

Chapitre 7. SR001 Commandes GNU/Linux (Shell)


#4. Entrer le nom du fichier :43,52w monfichier # copie lignes 43 52 vers le nouveau fichier monfichier :43,52w>> monfichier # ajouter la fin dun fichier existant ## Copier/Coller entre fichier via mmoir tampon ## Depuis le Mode Normal (mode commande) presser la suite de commande suivante: "a5yy # Copier 5 lignes dans la mmoire tampon nomme a :e monfichier # Copier mmoire tampon vers un autre fichier, # changer vers le nouveau fichier avec la syntaxe :e "ap # Colle le contenu de la mmoire tampon a lemplacement du curseur :w # Sauvegarder les changements avant de retourner :e# # Retour au fichier original

7.5.6. Editeur en mode graphique : Gedit, Kate, Quanta+, Bluesh, Notepad++, etc...
...

7.5.7. Editeur XML (XML Copy Editor)


Source(s):

Web: XML Copy Editor (http://xml-copy-editor.sourceforge.net)

XML Copy Editor est un logiciel bien pratique pour travailler avec des chiers .xml, .xsl, .xsd, etc... ## FONCTIONALITES * Validation DTD/XML Schema/RELAX NG * XSLT * XPath * "Belle-Impression" * Coloration syntaxique * Pliage de code, repliage (folding en anglais) * Auto-completion de Tag * Editer ses propres Tag * Correction orthographique et syntaxique * Supporte XHTML, XSL, DocBook et TEI * Import/Export sans perte de documents Microsoft Word (seulement sous Windows) Sous ubuntu, il devrait tre inclu dans les paquets fournis. Toutefois dans la version 64bits il ne semble pas disponible. Pour Ubuntu 9.10 64bits la compilation depuis le source semble donc simposer :)... voir plus tard...

156

Chapitre 7. SR001 Commandes GNU/Linux (Shell)

7.5.8. Environnement de dveloppement intgr (IDE) : Eclipse, Netbeans, Aptana, etc...


Source(s):

Web: Eclipse vs NetBeans (http://mahmudahsan.wordpress.com/2009/01/25/eclipse-vs-netbeans-ide-for-php) My new IDE Netbeans (http://kevin.vanzonneveld.net/techblog/article/my_new_ide_netbeans) Projet PDT (PHP Development Tools Project) (http://www.eclipse.org/pdt) eric-ide (python-project.org) (http://eric-ide.python-projects.org) Tutorial: phpEclipse (http://jp-grossglauser.developpez.com/tutoriels/logiciels/phpeclipse/) Installing Netbeans 6.5 in Debian Lenny (kawruhboso.com/?p=17)

Note : Tout comme les editeurs de texte, le meilleurs moyens den choisir un cest den essayer plusieurs et dutiliser quelques temps celui qui nous convient le mieux. Puis de retenter lexperience avec les autres aprs quelques versions de mise jour :)

Un IDE est un programme regroupant un ensemble doutils pour le dveloppement de logiciels. En rgle gnrale, un EDI regroupe un diteur de texte, un compilateur, des outils automatiques de fabrication, et souvent un dbogueur. Ecrire du code, requiert au moins un diteur de texte :) mais un IDE peut grandement aider plus de productivit et de crativit :) Sous Linux, plusieurs options (mais in ne cela dpend aussi grandement du language dans lequel on souhaite programmer) : NetBeans, Eclipse (avec phpEclipse plugin), Apatana (avec radrails plugin), etc... Voir aussi mon installation de Netbeans, que jai utilis dans le cadre de la formation pour les dveloppements PHP et XML. Pour PHP, Sylvain utilise le projet PDT (http://www.eclipse.org/pdt) bas sur Eclipse qui est assez proche de netbean en terme de fonctionnalits. Pour Python, Sylvain suggre eric-ide (http://eric-ide.python-projects.org) (un peu complexe son got), Netbean et Eclipse dispose tout deux dun plugin Python (jai utilis celui de Netbeans pour mes dveloppements sous Python).

157

Chapitre 7. SR001 Commandes GNU/Linux (Shell)

7.5.9. Programmation en Langage SHELL (Bash) sous Linux


Source(s):

OF: SR001-sys02-ch06-langage-shell.pdf (docs/eof/sr001-sys02-ch06-langage-shell.pdf)

7.5.9.1. Short Description du language


Cette information est disponible via man bash ou man sh
# Entte de dclaration de linterprteur de commande (aprs le sha-bang #!) #!/bin/bash # Rendre monscript.sh excutable $ chmod u+x monscript.sh # # # # # Paramtres Quand on lance un script : sh ./foobar.sh blah1 blah2 bla3 les paramtres sont passs automatiquement dans $1, $2...$n, par exemple : Dans le script $1 vaut blah1, $2 vaut blah2...

# Variables prdfinies $@ liste des paramtres $# nombre de paramtres $$ numro (PID) du script $0 nom du script $? valeur de retour dun script ou dune fonction # Varialbles affectes $ nom="Pierrot" # Chane de caractres # Utiliser "(double quote) ou (simple quote) $ echo "Salut Pierrot" Salut Pierrot $ echo "Salut \"Pierrot\"" Salut "Pierrot" $ echo "Salut $nom" Salut Pierrot $ echo Salut $nom Salut $nom $ echo "Salut Pierrot" Salut Pierrot $ echo Salut Pierrot Salut Pierrot $ echo Salut "Pierrot" Salut "Pierrot"

158

Chapitre 7. SR001 Commandes GNU/Linux (Shell)


# Suite de commande commande1;commande2;commande3; # equivaut commande1 commande2 commande3 # Structure IF if expression ; then commande1;commande2; ... comandeN elif expression ; then ... else ... fi # Structure CASE case chane in regex) commande1;commande2; commande3 commande4 ... ;; ... *) ... ## Default action ;; esac # Structure FOR for x [ in list ] do commandes done

# Spare par des ;(points virgule) # Spare par des nouvelle ligne

# list = * or cat monfichierlist or 1 2 3 or ...

# Alternative for ((i=0;i<10;i=i+1));do commande $i; done # Structure JUSQUA until test; do commandes ... done

# test = [ $a == 10 ] or ...

# Structure TANTQUE while test; do # test = [ $a -lt 10 ] or ... commandes ... done

159

Chapitre 7. SR001 Commandes GNU/Linux (Shell)

function commande { ... # On accde aux paramtres avec $1...$n resultat = commande $1 } # Function prdfinies: # LET # Initialisation (ajouter 1 i) let i=$i+1 # L on ne met pas despace let "i = $i + 1" # Ici mettez des espaces

# READ #lecture dune valeur au clavier echo -n "Entrez votre nom :" # loption -n dsactive le retour de chariot de fin de chane read nom echo $nom # SELECT # rcuprer un lment dans une liste. select CHOIX [ in liste ; ] do commandes done

# Le numro du choix est affect la variable $REPLY, le nom du choix la variable $CHOIX. # Exemple : Si lutilisateur tape 1, $REPLY vaudra 1 et $CHOIX vaudra "Choix A". select CHOIX in "Choix A" "Choix B"; do case $REPLY in 1) echo "$CHOIX --> $REPLY";; 2) echo "$CHOIX --> $REPLY";; *) echo "Vous avez tap nimporte quoi !";; esac done # # # # # TEST Tester une expression boolenne. On peut aussi noter un test entre des [ ], [ expression ]. Attention laisser un espace aprs le [ et avant le ]. Retourne 0 si Vrai, une autre valeur dans les autres cas.

# Test sur les entiers if test $n1 -eq $n2 ... # n1 -eq n2, si n1 est gal n2 if [ $n1 -eq $n2 ] ... # oprateurs -ne not equal (!=) -eq equal (=) -gt greater (>) -lt lower (<) -le lower or equal (<=) -ge greater or equal (>=) -a AND boolen # Ex: if [ a == a -a b == b ] ; then echo true ; fi

160

Chapitre 7. SR001 Commandes GNU/Linux (Shell)


-o OR boolen # Ex: if [ a == z -o b == b ] ; then echo true ; fi

# Test sur les fichiers -d si cest un rpertoire # [ -d $1 ] -e si le fichier existe # [ -e $1 ] -f si le fichier existe et si cest un fichier standard # [ -f $1 ] # Test sur if test $1 if [ $1 == if test $1 les chanes == $2 ... # s1 == s2, si les chanes s1 et s2 sont identiques $2 ]... # equivalent == $2 ... # s1 != s2, si les chanes sont diffrentes.

# SOURCE . (inclure un fichier . fichier [arguments] # source fichier [arguments] # # # # # SOUS-SHELL (cmd1;cmd2;...)

externe) Lire et excuter les commandes contenues dans fichier avec l de linterprteur courant, puis renvoyer ltat final de la mande excute dans fichier. Si le nom du fichier ne contient oblique, les chemins daccs contenus dans PATH sont rechercher le rpertoire contenant le fichier.

# Cre un sous shell avec son propre environement hrit du parent et modif # cmd1;cmd2;... est un suite de commande excuter (mme syntaxe que pour

7.5.9.2. Exercices dapplication sur la programmation SHELL


7.5.9.2.1. TP 1 utilisation de la fonction test crivez un script qui dit si le paramtre pass est :

un chier un rpertoire nexiste pas

Par exemple, si le script se nomme "premier.sh" la commande ./premier.sh premier.sh, doit indiquer que cest un chier. Resultat : SR001-sys02-ch06-rlscript01.sh (docs/sys02-ch06-rlscript01-sh.txt) SR001-sys02-ch06-eofscript01.sh (docs/sys02-ch06-eofscript01-sh.txt)
# Sans paramtre affiche laide $ ./sys02-ch06-rlscript01.sh Paramtre manquant Usage: ./sys02-ch06-rlscript01.sh FICHIER # Avec en paramtre un fichier inexistant $ ./sys02-ch06-rlscript01.sh test test nexiste pas !

161

Chapitre 7. SR001 Commandes GNU/Linux (Shell)

# Avec en paramtre un dossier inexistent $ ./sys02-ch06-rlscript01.sh /test/ /test/ nexiste pas ! # Avec en paramtre le fichier du script lui mme $ ./sys02-ch06-rlscript01.sh sys02-ch06-rlscript01.sh sys02-ch06-rlscript01.sh existe Cest un fichier # Avec un dossier existant $ ./sys02-ch06-rlscript01.sh /etc /etc existe Cest un repertoire # Avec un lien symbolique ==> On voit quil est trait comme un simple fichier $ ./sys02-ch06-rlscript01.sh /etc/locale.gen /etc/locale.gen existe Cest un fichier

Cet exercise ma permis de bien comprendre limportance de mettre un espace entre "[" et "]" entourant une expression tester. Le message derreur tant peu explicite, une telle erreur devient vite invisible dans le cas ou le script nest pas test correctement en pas pas. crivez un script qui nafche que les rpertoires. Resultat : SR001-sys02-ch06-rlscript02.sh (docs/sys02-ch06-rlscript02-sh.txt) SR001-sys02-ch06-eofscript02.sh (docs/sys02-ch06-eofscript02-sh.txt)
# Resultat avec commande standard $ ls --file-type generate.bash~ generate.log generate.sh # Resultat avec script $ ./sys02-ch06-rlscript02.sh public_html source

public_html/

source/

Cet exercise ma permis de bien comprendre limportance de bien suivre les instructions telles qunonces et faire attention aux interpretation par rapport la mthode amenant au rsultat. Mon script est bien diffrent de celui de lEOF, ce dernier nutilise que la fonction test comme cela etait demand :)) Bon cela montre aussi que differents moyens sont bons pour parvenir un rsultat, le tout sera dapprendre avec lexperience obtenir le rsultat avec le moindre effort en bon dveloppeur :))

162

Chapitre 7. SR001 Commandes GNU/Linux (Shell) crivez un script qui nafche que les chiers. Resultat : SR001-sys02-ch06-rlscript03.sh (docs/sys02-ch06-rlscript03-sh.txt) SR001-sys02-ch06-eofscript02.sh (docs/sys02-ch06-eofscript02-sh.txt)
$ sys02-ch06-rlscript03.sh jeu_essai.txt jeu_essai.txt~ sys02-ch01-environnement.pdf sys02-ch02-commandes-advanced.pdf sys02-ch03-expression-rationnelle.pdf sys02-ch04-vi.pdf sys02-ch06-eofscript01.sh sys02-ch06-eofscript02.sh sys02-ch06-eofscript02.sh~ sys02-ch06-langage-shell.pdf sys02-ch06-rlscript01.sh sys02-ch06-rlscript01.sh~ sys02-ch06-rlscript02.sh sys02-ch06-rlscript02.sh~ sys02-ch06-rlscript03.sh sys02-ch06-rlscript03.sh~ sys02-ch06-sh-con.pdf sys02-ch08-exercice3.pdf tmp.out toto.sh

Mon script dans cet exercise maura au moins permis de savoir comment lister simplement des repertoires avec la commande ls (ls -Ad */) crivez un script qui donne le nombre de chiers et de rpertoires. Resultat : SR001-sys02-ch06-rlscript04.sh (docs/sys02-ch06-rlscript04-sh.txt) SR001-sys02-ch06-eofscript02.sh (docs/sys02-ch06-eofscript02-sh.txt)
$ sys02-ch06-rlscript04.sh Nombre de fichiers: 8 Nombre de repertoires: 8 $ ls --file-type 01-UI003-Environnement-de-travail/ 02-SR001-Commandes-de-bases-de-GNULinux-Shell/ 03-UI004-Raliser-des-documents-avec-LaTeX/ 04-UI005-Publier-des-documents-techniques-avec-DocBook/ 05-SR009-Interfacer-Apache-avec-un-langage-de-script-et-un-serveur-de-base-de-donnes/ 06-SR004-Interconnecter-un-rseau-TCP-IP/

163

Chapitre 7. SR001 Commandes GNU/Linux (Shell)


hello.c~ Links reference.txt Logiciels reference.txt Module summary.txt monjournal/ shell_fc_tp2_correction.txt tmp2~ tmp.txt tmp.txt~ www.lagadec.org_oef/

Pour cette exercise, je trouvais interressant de capitaliser sur mes propres scripts. Toutefois, le script de lEOF est clair et vident maintenant :)) Question: Pourquoi utiliser j=expr $j + 1 au lieu de let j=j+1 ? Est-ce du pareil au mme ou est-ce pour raison de portabilit ? Attente de rponse de lOF... 7.5.9.2.2. TP 2 utilisation de la fonction selon que (case) Resultat : SR001-sys02-ch06-rlscript05.sh (docs/sys02-ch06-rlscript05-sh.txt) SR001-sys02-ch06-eofscript05.sh (docs/sys02-ch06-eofscript05-sh.txt)
$ sh sys02-ch06-rlscript05.sh *********** Menu gnral ************* <1> Comptabilit <2> Gestion commerciale <3> Paie <9> Quitter ************************************** Saisissez une option:1 Option Comptabilit choisie $ sh sys02-ch06-rlscript05.sh *********** Menu gnral ************* <1> Comptabilit <2> Gestion commerciale <3> Paie <9> Quitter ************************************** Saisissez une option:2 Option Gestion commerciale choisie $ sh sys02-ch06-rlscript05.sh *********** Menu gnral *************

164

Chapitre 7. SR001 Commandes GNU/Linux (Shell)


<1> Comptabilit <2> Gestion commerciale <3> Paie <9> Quitter ************************************** Saisissez une option:4 4 est une option inconnue! $ sh sys02-ch06-rlscript05.sh *********** Menu gnral ************* <1> Comptabilit <2> Gestion commerciale <3> Paie <9> Quitter ************************************** Saisissez une option:9 Option Quitter choisie... Goodbye !!!

Dans cet exercise, jai compris limportance decrire read option et non pas read $option, cette dernire ne fonctionne bien videment pas et laisse la variable $option vide. Jai aussi compris quil est possible de concatener des chane de caractre comme ceci:
menu="part1\n" menu+="part2\n" menu+="part3\n" echo $menu # Dans mon case toutefois le \n nest pas correctement interprter quesaquo ?

Question: Pourquoi loption \n (retour la ligne) ne fonctionne pas dans mes scripts ? Par exemple echo "test\ntest" afche le resultat sur une ligne et non deux comme attendu ! La rponse est simple, il faut utiliser loption -e de la commande echo pour interprter les caractres dspcis par une contre-oblique: echo -e "test\ntest"
$ echo "test\ntest" test\ntest $ echo -e "test\ntest" test test

165

Chapitre 7. SR001 Commandes GNU/Linux (Shell) 7.5.9.2.3. TP 3 Utilisation de la fonction pour (for) Resultat : SR001-sys02-ch06-rlscript06.sh (docs/sys02-ch06-rlscript06-sh.txt) SR001-sys02-ch06-eofscript06.sh (docs/sys02-ch06-eofscript06-sh.txt)
$ sys02-ch06-rlscript06.sh -50 30 5 ### Fonction y=2x+3 avec x allant de -10 10 x=-10 y=-20 x=-9 y=-18 x=-8 y=-16 x=-7 y=-14 x=-6 y=-12 x=-5 y=-10 x=-4 y=-8 x=-3 y=-6 x=-2 y=-4 x=-1 y=-2 x=0 y=0 x=1 y=2 x=2 y=4 x=3 y=6 x=4 y=8 x=5 y=10 x=6 y=12 x=7 y=14 x=8 y=16 x=9 y=18 x=10 y=20 ### ### Fonction y=x^2 avec x allant de -10 10 x=-10 y=100 x=-9 y=81 x=-8 y=64 x=-7 y=49 x=-6 y=36 x=-5 y=25 x=-4 y=16 x=-3 y=9 x=-2 y=4 x=-1 y=1 x=0 y=0 x=1 y=1 x=2 y=4 x=3 y=9 x=4 y=16 x=5 y=25 x=6 y=36 x=7 y=49 x=8 y=64 x=9 y=81 x=10 y=100 ###

166

Chapitre 7. SR001 Commandes GNU/Linux (Shell)


### Fonction y=x^2 avec x allant de -10 10 avec la fonction JUSQUA x=-10 y=100 x=-9 y=81 x=-8 y=64 x=-7 y=49 x=-6 y=36 x=-5 y=25 x=-4 y=16 x=-3 y=9 x=-2 y=4 x=-1 y=1 x=0 y=0 x=1 y=1 x=2 y=4 x=3 y=9 x=4 y=16 x=5 y=25 x=6 y=36 x=7 y=49 x=8 y=64 x=9 y=81 x=10 y=100 ### ### Fonction y=x^2 avec x allant de MIN MAX avec la fonction JUSQUA ### Usage: script.sh MIN MAX INCREMENT ### Resultat pour: ./sys02-ch06-rlscript06.sh -50 30 5 x=-50 y=2500 x=-45 y=2025 x=-40 y=1600 x=-35 y=1225 x=-30 y=900 x=-25 y=625 x=-20 y=400 x=-15 y=225 x=-10 y=100 x=-5 y=25 x=0 y=0 x=5 y=25 x=10 y=100 x=15 y=225 x=20 y=400 x=25 y=625 x=30 y=900 ###

Dans cet exercise, jai dcouvert les boucles for et until et la ncessit de bien crire les expressions de conditions. Double "((" et "))" pour la boucle for, les espaces avant et aprs "[" , "]", bien choisir loprateur pour les tests de conditions darrt pour viter les erreurs dinterprtation et de logique...

167

Chapitre 7. SR001 Commandes GNU/Linux (Shell) Aussi bien faire attention la syntaxe de la fonction let o le $ peut vite tre oubli ou plac au mauvais endroit. 7.5.9.2.4. TP 4 tude de la fonction si (if) Resultat : SR001-sys02-ch06-rlscript07.sh (docs/sys02-ch06-rlscript07-sh.txt)
$ sys02-ch06-rlscript07.sh *********** Menu gnral ************ 1> Comptabilit 2> Gestion commerciale 3> Paie 9> Quitter ************************************* Saisir une option:2 Option Gestion commerciale choisie $ ./sys02-ch06-rlscript07.sh *********** Menu gnral ************ 1> Comptabilit 2> Gestion commerciale 3> Paie 9> Quitter ************************************* Saisir une option:4 4 est une option inconnue! $ sys02-ch06-rlscript07.sh *********** Menu gnral ************ 1> Comptabilit 2> Gestion commerciale 3> Paie 9> Quitter ************************************* Saisir une option:9 Option Quitter choisie... Goodbye !!! ********** Affichage denregistrement dont la valeur est > 10 Source: sys02-ch06-rlscript07-data.txt troisime 25 cinquime 12

Cet exercice permis de dcouvrir la lecture de donne dun chier et le traitement de ces donnes... Question: Pourquoi si je cre une variable lsup="Liste denregistrement" en dehors de la boucle, que je modie cette variable globale par lsup+=$ligne dans la boucle, je narrive pas obtenir le result de la

168

Chapitre 7. SR001 Commandes GNU/Linux (Shell) concatenation avec un echo $lsup nal en dehors de la boulce la n ? Jobiens uniquement la valeur intiale !!! :(( 7.5.9.2.5. TP 5 tude de la fonction rpter jusqu (until. . .do. . .done) Resultat : SR001-sys02-ch06-rlscript08.sh (docs/sys02-ch06-rlscript08-sh.txt) SR001-sys02-ch06-eofscript08.sh (docs/sys02-ch06-eofscript08-sh.txt)
$ ./sys02-ch06-rlscript08.sh ******************************************************* Saisissez une commande, commande Q ou q pour quitter. ******************************************************* Commande: ps PID TTY TIME CMD 2493 pts/0 00:00:01 bash 3108 pts/0 00:00:00 sys02-ch06-rlsc 3109 pts/0 00:00:00 ps ******************************************************* Saisissez une commande, commande Q ou q pour quitter. ******************************************************* Commande: pwd /mnt/hsubuntu/02-SR001-Commandes-de-bases-de-GNULinux-Shell/sys02 ******************************************************* Saisissez une commande, commande Q ou q pour quitter. ******************************************************* Commande: pq ./sys02-ch06-rlscript08.sh: line 28: pq: command not found ******************************************************* Saisissez une commande, commande Q ou q pour quitter. ******************************************************* Commande: q Goodbye !

Dans cet exercise, jai vu au combien il est important de mettre des espaces pour chaque argument de toute expression tester (entre crochet), la cration dune fonction, la concatenation de chane et lutilisation de loption -e de echo (pour valuer \n). Cela a t aussi loccasion de redcouvrir la fonction eval pour lvaluation de commande.

169

Chapitre 7. SR001 Commandes GNU/Linux (Shell) 7.5.9.2.6. TP 6 tude de la fonction tant que (while) Resultat : SR001-sys02-ch06-rlscript09.sh (docs/sys02-ch06-rlscript09-sh.txt) SR001-sys02-ch06-eofscript09.sh (docs/sys02-ch06-eofscript09-sh.txt)
$ ./sys02-ch06-rlscript09.sh ******************* Menu gnral *********************** 1> Afficher la date (date) 2> Afficher le nombre de personnes connectes (who) 3> Afficher la liste des processus (ps) 9> Quitter ********************************************************* Commande: 1 Commande choisie: 1 dimanche 20 dcembre 2009, 23:02:19 (UTC+0100) ******************* Menu gnral *********************** 1> Afficher la date (date) 2> Afficher le nombre de personnes connectes (who) 3> Afficher la liste des processus (ps) 9> Quitter ********************************************************* Commande: 2 Commande choisie: 2 filostene tty7 2009-12-20 19:04 (:0) filostene pts/0 2009-12-20 19:10 (:0.0) ******************* Menu gnral *********************** 1> Afficher la date (date) 2> Afficher le nombre de personnes connectes (who) 3> Afficher la liste des processus (ps) 9> Quitter ********************************************************* Commande: 3 Commande choisie: 3 PID TTY TIME CMD 2493 pts/0 00:00:01 bash 3235 pts/0 00:00:00 sys02-ch06-rlsc 3239 pts/0 00:00:00 ps ******************* Menu gnral *********************** 1> Afficher la date (date) 2> Afficher le nombre de personnes connectes (who) 3> Afficher la liste des processus (ps) 9> Quitter ********************************************************* Commande: 4 Commande choisie: 4 Commande inconnue, tentative dvaluation: ./sys02-ch06-rlscript09.sh: line 55: 4: command not found ******************* Menu gnral *********************** 1> Afficher la date (date) 2> Afficher le nombre de personnes connectes (who) 3> Afficher la liste des processus (ps) 9> Quitter

170

Chapitre 7. SR001 Commandes GNU/Linux (Shell)


********************************************************* Commande: whoami Commande choisie: whoami Commande inconnue, tentative dvaluation: filostene ******************* Menu gnral *********************** 1> Afficher la date (date) 2> Afficher le nombre de personnes connectes (who) 3> Afficher la liste des processus (ps) 9> Quitter ********************************************************* Commande: 9 Au revoir !

Dans cet exercise, jai pris conscience de lutilit de toujour initialiser ses variables et de la commande clear. La boucle while tant trs similaire la boucle jusqu cela na pas pos de problme majeur 7.5.9.2.7. TP 7 tude de la fonction select Resultat : SR001-sys02-ch06-rlscript10.sh (docs/sys02-ch06-rlscript10-sh.txt) SR001-sys02-ch06-eofscript10.sh (docs/sys02-ch06-eofscript10-sh.txt)

*********************** Menu gnral *************************** 1) Afficher la liste des utilisateurs connects 2) Afficher la liste des processus 3) Afficher lutilisateur son nom, son UID, son GID, son TTY1 4) Terminer #? 1 Utilisateurs Connects: filostene tty7 2009-12-20 19:04 (:0) filostene pts/0 2009-12-20 19:10 (:0.0) #? 2 Liste des processus: PID TTY TIME CMD 2493 pts/0 00:00:02 bash 3598 pts/0 00:00:00 sys02-ch06-rlsc 3601 pts/0 00:00:00 ps #? 6 Action inconnue, essayer encore... taper 1, 2, 3 ou 4 #? 3 Info Utilisateur filostene: uid=1000(filostene) gid=1000(filostene) groupes=20(dialout),24(cdrom),25(floppy),29(audio),4 #? 4 Au revoir !

171

Chapitre 7. SR001 Commandes GNU/Linux (Shell)

Dans cet exercise, on a pu voir que la commande select permet de rapidement construire un menu de selection. Si on utilise des variables pour la selection il faut bien faire attention de les entourer de guillement "(double quote) aprs "in", sinon le formatage du menu peut-tre erron! Lutilisation de variable nest pas ncessaire, la liste du menu peut-tre directement construite partir dune suite de chane spar par le caractre \ et une nouvelle ligne (voir script OF) Il parat aussi important de toujours bien penser crer un cas daction par defaut "*)" pour sassurer que toute action non dnit est trait avec au moins lafchage dun message derreur ! 7.5.9.2.8. TP 8 Cration de fonction shell Resultat : SR001-sys02-ch06-rlscript11-1.sh (mul.sh) (docs/sys02-ch06-rlscript11-1-sh.txt) SR001-sys02-ch06-rlscript11-2.sh (calculatrice) (docs/sys02-ch06-rlscript11-2-sh.txt) SR001-sys02-ch06-eofscript11-1.sh (docs/sys02-ch06-eofscript11-sh.txt)
$ ./sys02-ch06-rlscript11-1.sh 1 ou 3 paramtres attendues... Usage: --Table de multiplication de N (borne 1 10): ./sys02-ch06-rlscript11-1.sh N --Table de multiplication de N (borne MIN MAX): ./sys02-ch06-rlscript11-1.sh N MIN MAX $ ./sys02-ch06-rlscript11-1.sh 4 Table de multiplication de 4 (borne 1 10): 4 x 1 = 4 4 x 2 = 8 4 x 3 = 12 4 x 4 = 16 4 x 5 = 20 4 x 6 = 24 4 x 7 = 28 4 x 8 = 32 4 x 9 = 36 4 x 10 = 40 $ ./sys02-ch06-rlscript11-1.sh 4 5 12 Table de multiplication de 4 (borne 5 12): 4 x 5 = 20 4 x 6 = 24 4 x 7 = 28 4 x 8 = 32 4 x 9 = 36 4 x 10 = 40 4 x 11 = 44

172

Chapitre 7. SR001 Commandes GNU/Linux (Shell)


4 x 12 = 48

Calculatrice: Saisir un nombre:14 Saisir un operande (+,-,*,/,=) suivit dun Saisir un operande (+,-,*,/,=) suivit dun Erreur: \-1 nest pas un oprande reconnu, Saisir un operande (+,-,*,/,=) suivit dun Saisir un operande (+,-,*,/,=) suivit dun Saisir un operande (+,-,*,/,=) suivit dun Saisir un operande (+,-,*,/,=) suivit dun Total= 14

espace puis un nombre: espace puis un nombre: essayer encore... espace puis un nombre: espace puis un nombre: espace puis un nombre: espace puis un nombre:

+ 1 -1 - 1 / 2 * 2 =

Dans cet exercise, jai approfondis lutilisation de fonctions et notament le passage de paramtre ainsi que la possiblit daffecter des variables multiple avec la fonction read en une seule fois. Jai aussi appris la ncessit dchapper certains caractres spciaux et la comparaison de chane de caractre lors de test de boucle... 7.5.9.2.9. TP 9 Appels et contrles de scripts - Communication inter-scripts. Resultat : SR001-sys02-ch06-rlscript12-pere.sh (docs/sys02-ch06-rlscript12-pere-sh.txt) SR001-sys02-ch06-rlscript12-enfant1.sh (docs/sys02-ch06-rlscript12-enfant1-sh.txt) SR001-sys02-ch06-rlscript12-enfant2.sh (docs/sys02-ch06-rlscript12-enfant2-sh.txt) SR001-sys02-ch06-rlscript12-enfant3.sh (docs/sys02-ch06-rlscript12-enfant3-sh.txt) SR001-sys02-ch06-eofscript12.sh (docs/sys02-ch06-eofscript12-sh.txt)
$ ./sys02-ch06-rlscript12-pere.sh pere(PID=6009) enf1(PID=6010) started ping ping ping Kill enf1(6010): kill -9 6010 enf2(PID=6016) started pong pong pong ./sys02-ch06-rlscript12-pere.sh: line 45: Kill enf1(6016): kill -9 6016 ./sys02-ch06-rlscript12-pere.sh: line 45: pere(PID=6009) enf1(PID=6023) started ping Kill enf1(6023): kill -9 6023 enf2(PID=6027) started pong ./sys02-ch06-rlscript12-pere.sh: line 69:

6010 Processus arrt 6016 Processus arrt

$enf1 $enf2

6023 Processus arrt

$enf1

173

Chapitre 7. SR001 Commandes GNU/Linux (Shell)


Kill enf1(6027): kill -9 6027 ./sys02-ch06-rlscript12-pere.sh: enf3(PID=6031) started pang Kill enf1(6031): kill -9 6031 enf2(PID=6035) started pong ./sys02-ch06-rlscript12-pere.sh: Kill enf1(6035): kill -9 6035 ./sys02-ch06-rlscript12-pere.sh: pere(PID=6009) enf1(PID=6039) started ping Kill enf1(6039): kill -9 6039 enf2(PID=6043) started pong ./sys02-ch06-rlscript12-pere.sh: Kill enf1(6043): kill -9 6043 enf3(PID=6047) started pang ./sys02-ch06-rlscript12-pere.sh: Kill enf1(6047): kill -9 6047 enf2(PID=6051) started pong ./sys02-ch06-rlscript12-pere.sh: Kill enf1(6051): kill -9 6051 ./sys02-ch06-rlscript12-pere.sh:

line 32:

6027 Processus arrt

$enf2

line 69: line 32:

6031 Processus arrt 6035 Processus arrt

$enf3 $enf2

line 69:

6039 Processus arrt

$enf1

line 69:

6043 Processus arrt

$enf2

line 69: line 70:

6047 Processus arrt 6051 Processus arrt

$enf3 $enf2

Dans cet exercise, la notion de processus pere et enfant a t revue. Le dbugage dun enchainement de script ne me semble pas trs ais. Peut-tre est-ce un problme de mthode ou dexperience ! On verra avec le temps :)). Cetait aussi loccasion de dcouvrir la fonction sleep qui permet de pause un processus en cours dexecution. Question: La commande kill provoque lafchage dun message que je nai pas su rorienter pour le grer meilleur escient et viter le charbiat ! A voir plus tard... avec lOF !

7.5.9.3. Script: Compter les mots dun chier xml/xhtml/html


Resultat : countwords.sh (docs/countwords-sh.txt)
$ ./countwords.sh ./xml/siteMap/fr_FR.xml 39 80 635 ./xml/home/fr_FR_homeIntro.xml 27 36 291 ./xml/home/fr_FR_homeNews.xml 15 4 62 ./xml/support/fr_FR.xml 337 1672 11423

# wc retourne 3 chiffres : # NumLignes NumMots NumCaractres

174

Chapitre 7. SR001 Commandes GNU/Linux (Shell)


./xml/who/fr_FR.xml 16 274 1785 ./xml/newAccount/fr_FR.xml 65 241 1673 ./xml/contact/fr_FR.xml 28 139 981 ./xml/ogoneReturn/fr_FR.xml 21 110 806 ./xml/auth/fr_FR.xml 39 200 1316 ./xml/cart/fr_FR.xml 150 588 4160 ./xml/customer/fr_FR_customerActivate.xml 31 124 853 ./xml/customer/fr_FR_customerApps.xml 10 2 37 ./xml/customer/fr_FR_customerIds.xml 16 49 386 ./xml/customer/fr_FR_customerBilling.xml 22 15 153 ./xml/customer/fr_FR_customerGodfather.xml 15 58 409 ./xml/customer/fr_FR_customerAddCredit.xml 13 13 108 ./xml/customer/fr_FR_customerSupport.xml 68 282 1701 ./xml/customer/fr_FR_customerMyAccess.xml 15 8 72 ./xml/customer/fr_FR_customerCommand.xml 50 82 626 ./xml/customer/fr_FR_customerInfos.xml 31 49 402 ./xml/customer/fr_FR_customer.xml 23 23 227 ./xml/cgv/fr_FR.xml 306 7884 51999 ./xml/press/fr_FR.xml 12 5 57 ./xml/concept/fr_FR.xml 10 6 57 ./xml/fr_FR.xml 146 466 3293 ./xml/legal/fr_FR.xml 54 1300 9162 ./xml/popUp/fr_FR_popupConfirm.xml 7 1 17 ./xml/popUp/fr_FR_popupbuy.xml 11 21 155 ./xml/popUp/fr_FR_popupLanguage.xml 10 12 113 ./xml/popUp/fr_FR_popuplogout.xml 10 39 280 ./xml/popUp/fr_FR_popupDelete.xml 9 22 171 ./xml/products/fr_FR_overviewPack.xml 49 88 766 ./xml/products/fr_FR_overviewDetectOuv.xml 22 371 2621 ./xml/products/fr_FR_introductionAcc.xml 40 267 1981 ./xml/products/fr_FR_overviewT2T.xml 21 143 967 ./xml/products/fr_FR_overviewDetectFuiteau.xml 21 268 1666 ./xml/products/fr_FR_overviewMyAlertI.xml 24 679 4582 ./xml/products/fr_FR_overviewMotionDetector.xml 17 145 933 ./xml/products/fr_FR_overviewDetectIR.xml 21 324 2198 ./xml/products/fr_FR_overviewClavierCommand.xml 21 224 1456 ./xml/products/fr_FR_overviewClavierCommande.xml 17 223 1407 ./xml/products/fr_FR_overviewPPADist.xml 21 208 1360 ./xml/products/fr_FR_overviewAcc.xml 37 76 661 ./xml/products/fr_FR_introductionProducts.xml 33 80 780 ./xml/products/fr_FR_overviewMyAlertD.xml 23 394 2774 ./xml/products/fr_FR_overviewMyAlertP.xml 23 555 3786 ./xml/products/fr_FR_overviewDetectSirInt.xml 21 277 1725 ./xml/products/fr_FR_overviewDetectFumee.xml 21 214 1374 ./xml/products/fr_FR_overviewMyAlertS.xml 24 377 2694

175

Chapitre 7. SR001 Commandes GNU/Linux (Shell)

7.5.10. Programmation en Langage SHELL (Bash) dans une console - Exercices


Source(s):

OF: SR001-sys02-ch06-sh-con.pdf (docs/eof/sr001-sys02-ch06-sh-con.pdf)

### # Les lignes ci-dessous comportent des erreurs. Essayez de les identifiez et proposez des co KO: if [ a == a] ; then echo true ; fi OK: if [ a == a ] ; then echo true; fi KO: if [ a == a ] ; echo true ; fi OK: if [ a == a ] ; then echo true; fi # Espace manquant entre a et le crochet ]

# instruction then manquante dans la dclaration if

KO: a=3 ; echo $a # On souhaite afficher la valeur de a OK: KO?: if [ a != b ] ; then echo true ; fi # Je ne vois pas derreur ici... et vous ?

??: Pourquoi le premier sous-shell affiche 3 et le second affiche 2 dans le code ci-dessous a=3; (echo \$a); a=3; (a=2; echo \$a) ==> Parce que : - dans le premier cas, lenvironement est hrit du parent donc il a accs la varialbe $a - dans le second cas, lenvironement est hrit du parent mais est immdiatement modifi (no

7.5.11. Evaluation - Exercice 3


Source(s):

OF: SR001-sys02-ch08-exercice3.pdf (docs/eof/sr001-sys02-ch08-exercice3.pdf)

1. Dans quels rpertoires sont stocks les scripts qui activent les serveurs (deamons) ?

/etc/init.d (Debian, Ubuntu, etc...) /etc/rc.d/init.d (RedHat, Mandriva, etc...)

2. Dans quel(s) rpertoire(s) sont gnralement stocks les chiers logs ? /var/log

176

Chapitre 7. SR001 Commandes GNU/Linux (Shell) 3. Dans quel(s) rpertoire(s) sont gnralement stocks les numros des processus une fois lancs ?

/var/run (pour la plupart) ~/ (comme chier cach dans le repertoire utilisateur parfois)

4. Que fait le bloc dinstruction suivant, tir du paquet acct ?


if [ -f /etc/default/acct ] then . /etc/default/acct else ACCT_ENABLE="1" ACCT_LOGGING="30" fi

Si le chier /etc/default/acct existe, lit et execute, dans lenvironement du shell courant, les commandes contenu dans acct et retourne le status de completion de la dernire commande executer depuis acct. Sinon modie les variables denvironement ACCT_ . La commande . lename [arguments] est quivalent source lename [arguments]

5. De quel chier peut-on saider pour crire un script de lancement dun service serveur ? /etc/init.d

7.6. Aller plus loin !


7.6.1. Dautres commandes
7.6.1.1. Rseaux(ip, mtr, traceroute, ping, ifcong, hostname, host, whois, dig, ...)
Voir section rsaux

177

Chapitre 7. SR001 Commandes GNU/Linux (Shell)

7.6.1.2. Intialisation (Init, Shutdown, Reboot, Halt, rcS, rcX...)


Voir section init

7.7. Examples de commandes utiles


Source: http://sleepyhead.de/howto/?href=scripting $ sort -t. -k1,1n -k2,2n -k3,3n -k4,4n $ echo Test | tr [:lower:] [:upper:] $ echo foo.bar | cut -d . -f 1 $ PID=$(ps | grep script.sh | grep bin | awk {print $1}) $ PID=$(ps axww | grep [p]ing | awk {print $1}) $ IP=$(ifconfig $INTERFACE | sed /.*inet addr:/!d;s///;s/ .*//) $ IP=$(ifconfig $INTERFACE | sed /.*inet /!d;s///;s/ .*//) $ if [ diff file1 file2 | wc -l != 0 ]; then [...] fi

# Sort IPv4 ip addresses # Case conversion # Returns foo

# PID of a running scrip # PID of ping (w/o grep # Linux # FreeBSD # File changed?

$ cat /etc/master.passwd | grep -v root | grep -v \*: | awk -F":" \ # Create http passwd $ { printf("%s:%s\n", $1, $2) } > /usr/local/etc/apache2/passwd $ $ $ $ $ $ $ $ testuser=$(cat /usr/local/etc/apache2/passwd | grep -v \ # Check user in passwd root | grep -v \*: | awk -F":" { printf("%s\n", $1) } | grep ^user$) :(){ :|:& };: # bash fork bomb. Will kill tail +2 file > file2 # remove the first line ls *.cxx | awk -F. {print "mv "$0" "$1".cpp"} | sh ls *.c | sed "s/.*/cp & &.$(date "+%Y%m%d")/" | sh rename .cxx .cpp *.cxx for i in *.cxx; do mv $i ${i%%.cxx}.cpp; done

# e.g. copy *.c to *.c.20080401 # Rename all .cxx to cpp # with bash builtins

7.8. Noyau GNU/Linux


... TO DO ...

178

Chapitre 8. UI004 Raliser des documents avec LaTeX [EMPTY]


..latex +++

179

Chapitre 9. UI005 Publier des documents techniques avec DocBook [EMPTY]


Source(s):

Web: Traitement des chier XML aprs un copier/coller de pdf (http://ferry.eof.eu.org/lesjournaux/pg/public_html/x13895.html) XML - Managing Data Exchange/DocBook (http://en.wikibooks.org/wiki/XML_-_Managing_Data_Exchange/DocBook)

180

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes
10.1. SR009 Base
10.1.1. Presentation Squence
Source(s):

OF: SR009-ch00-presentation.pdf (docs/eof/sr009-ch00-presentation.pdf)

10.1.1.1. But

Savoir congurer un environnement pour quil fonctionne Acqurir une mthodologie pour intgrer une ensemble de composants logiciels dans un environnement complexe

10.1.1.2. Dmarche

Raliser les oprations par tapes Sassurer que chaque composant fonctionne parfaitement avant de les intgrer Appliquer des procdures pour diagnostiquer de faon mthodique la source dun dysfonctionnement Acqurir le rexe de se rfrer la documentation dun produit ou aux ressources mises disposition

10.1.2. Architecture logicielle de lenvironnement de dveloppement (Server HTTP + BD + script PHP)


Source(s):

OF: SR009-ch01-concepts.pdf (docs/eof/sr009-ch01-concepts.pdf)

181

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes Mise en place dune station de dveloppement permettant la conception ou le dploiement dapplications accessibles par internet et dont les donnes sont stockes dans une base de donnes: pages web dynamiques.

10.1.3. Serveur Web - Apache - Installation et conguration


Source(s):

Web: Apache Serveur HTTPD (http://httpd.apache.org) Documentation Version 2.2 (http://httpd.apache.org/docs/2.2/fr)

La premire brique dont nous avons besoin cest le service server HTTP (server Web) pour pouvoir publier des pages HTML (statique ou dynamique).
Un serveur HTTP ou daemon HTTP ou HTTPd (HTTP daemon) ou (moins prcisment) serveur Web, est un logiciel servant des requtes respectant le protocole de communication client-serveur Hypertext Transfer Protocol (HTTP), qui a t dvelopp pour le World Wide Web. http://fr.wikipedia.org/wiki/Serveur_HTTP

Ici nous installerons Apache mais il en existe dautres: lightpd, zeus, etc (http://fr.wikipedia.org/wiki/Serveur_HTTP#Logiciels_de_serveur_HTTP)

10.1.3.1. Installation de base


Je pourrais compiler Apache et linstaller (http://httpd.apache.org/docs/2.2/install.html) depuis la source mais dans le cadre dune premire dcouverte je me contenterais du paquet Debian avec la conguration par dfaut. Ce sera gage dune meilleure stabilit dans un premier temps.
## Listons les paquets disponibles dans Debian li Apache $ apt-cache search apache alpine - Text-based email client, friendly for novices but powerful alpine-dbg - Text-based email clients debugging symbols ... libapache-asp-perl - perl Apache::ASP - Active Server Pages for Apache with mod_perl libapache-authenhook-perl - Perl API for Apache 2.1 authentication ... libapache2-mod-auth-openid - OpenID authentication module for Apache2 ... libapache2-mod-proxy-html - Apache2 filter module for HTML links rewriting libapache2-mod-python - Python-embedding module for Apache 2 libapache2-mod-python-doc - Python-embedding module for Apache 2 - documentation ... libapr1 - The Apache Portable Runtime Library ... libcommons-codec-java - encoder and decoders such as Base64 and hexadecimal codec

182

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes
libcommons-csv-java - a Java library for working with csv (comma separated values) files ... libconfig-general-perl - Generic Configuration Module libdotconf-dev - Configuration file parser library - development files ... liblemonldap-ng-conf-perl - Lemonldap::NG apache administration interface part ... mod-chroot-common - run Apache in a secure chroot environment ... php-auth-http - HTTP authentication php-config - Your configurations swiss-army knife ... tomcat5.5-admin - Java Servlet engine -- admin & manager web interfaces tomcat5.5-webapps - Java Servlet engine -- documentation and example web applications ... apache2 - Apache HTTP Server metapackage apache2-dbg - Apache debugging symbols apache2-doc - Apache HTTP Server documentation apache2-mpm-event - Apache HTTP Server - event driven model apache2-mpm-itk - multiuser MPM for Apache 2.2 apache2-mpm-prefork - Apache HTTP Server - traditional non-threaded model apache2-mpm-worker - Apache HTTP Server - high speed threaded model apache2-prefork-dev - Apache development headers - non-threaded MPM apache2-src - Apache source code apache2-suexec - Standard suexec program for Apache 2 mod_suexec apache2-suexec-custom - Configurable suexec program for Apache 2 mod_suexec apache2-threaded-dev - Apache development headers - threaded MPM apache2-utils - utility programs for webservers apache2.2-common - Apache HTTP Server common files ...

Beaucoup de librairie et modules lis Apache !!! Je vais rstraindre la recherche


$ apt-cache search "Apache HTTP Server" emboss-explorer - web-based GUI to EMBOSS libtcnative-1 - Tomcat native library using the apache portable runtime wu-ftpd - powerful and widely used FTP server apache2 - Apache HTTP Server metapackage apache2-doc - Apache HTTP Server documentation apache2-mpm-event - Apache HTTP Server - event driven model apache2-mpm-prefork - Apache HTTP Server - traditional non-threaded model apache2-mpm-worker - Apache HTTP Server - high speed threaded model apache2.2-common - Apache HTTP Server common files

Bon maintenant installons ce qui parat indispensable: le server & la doc !


# Installation de lessentiel :) $ apt-get install apache2 apache2-doc Lecture des listes de paquets... Fait

183

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes

Construction de larbre des dpendances Lecture des informations dtat... Fait apache2-doc est dj la plus rcente version disponible. Les paquets supplmentaires suivants seront installs : apache2-mpm-worker apache2-utils apache2.2-common libapr1 libaprutil1 libpq5 Paquets suggrs : apache2-suexec apache2-suexec-custom Les NOUVEAUX paquets suivants seront installs : apache2 apache2-mpm-worker apache2-utils apache2.2-common libapr1 libaprutil1 libpq5 0 mis jour, 7 nouvellement installs, 0 enlever et 14 non mis jour. Il est ncessaire de prendre 0o/1765ko dans les archives. Aprs cette opration, 5829ko despace disque supplmentaires seront utiliss. Souhaitez-vous continuer [O/n] ? O ATTENTION : les paquets suivants nont pas t authentifis. libapr1 libpq5 libaprutil1 apache2-utils apache2.2-common apache2-mpm-worker apache2 Faut-il installer ces paquets sans vrification (o/N) ? o Slection du paquet libapr1 prcdemment dslectionn. (Lecture de la base de donnes... 143263 fichiers et rpertoires dj installs.) Dpaquetage de libapr1 ( partir de .../libapr1_1.2.12-5+lenny1_i386.deb) ... Slection du paquet libpq5 prcdemment dslectionn. Dpaquetage de libpq5 ( partir de .../libpq5_8.3.8-0lenny1_i386.deb) ... Slection du paquet libaprutil1 prcdemment dslectionn. Dpaquetage de libaprutil1 ( partir de .../libaprutil1_1.2.12+dfsg-8+lenny4_i386.deb) ... Slection du paquet apache2-utils prcdemment dslectionn. Dpaquetage de apache2-utils ( partir de .../apache2-utils_2.2.9-10+lenny6_i386.deb) ... Slection du paquet apache2.2-common prcdemment dslectionn. Dpaquetage de apache2.2-common ( partir de .../apache2.2-common_2.2.9-10+lenny6_i386.deb) Slection du paquet apache2-mpm-worker prcdemment dslectionn. Dpaquetage de apache2-mpm-worker ( partir de .../apache2-mpm-worker_2.2.9-10+lenny6_i386.d Slection du paquet apache2 prcdemment dslectionn. Dpaquetage de apache2 ( partir de .../apache2_2.2.9-10+lenny6_all.deb) ... Traitement des actions diffres ( triggers ) pour man-db ... Paramtrage de libapr1 (1.2.12-5+lenny1) ... Paramtrage de libpq5 (8.3.8-0lenny1) ... Paramtrage de libaprutil1 (1.2.12+dfsg-8+lenny4) ... Paramtrage de apache2-utils (2.2.9-10+lenny6) ... Paramtrage de apache2.2-common (2.2.9-10+lenny6) ... Paramtrage de apache2-mpm-worker (2.2.9-10+lenny6) ... Starting web server: apache2. Paramtrage de apache2 (2.2.9-10+lenny6) ...

On voit que dautres paquets sont par dfaut ncessaire au bon fonctionement dApache notemment des utilitaires (apache2-utils) que javais hsit install ! On observe aussi que le server est dmarr automatiquement aprs linstallation.
$ ps x | grep apache 9700 ? Ss 0:00 /usr/sbin/apache2 -k start

184

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes

# -k start|restart|graceful|stop|graceful-stop Signal apache2 de dmarrer, re-dmarrer, ou sarrter ### Attention ne pas se tromper ## Sous Unix, le programme httpd est lanc en mode dmon et ## sexcute de manire permanente en arrire-plan pour grer les requtes. $ ps x | grep httpd 9806 pts/1 S+ 0:00 grep httpd ## Afficher la version et les paramtres de compilation ## Trs utile quand on a pas compiler soit mme !!! $ apache2 -V ## option -V (en majuscule) Server version: Apache/2.2.9 (Debian) Server built: Nov 14 2009 20:21:34 Servers Module Magic Number: 20051115:15 Server loaded: APR 1.2.12, APR-Util 1.2.12 Compiled using: APR 1.2.12, APR-Util 1.2.12 Architecture: 32-bit Server MPM: Worker threaded: yes (fixed thread count) forked: yes (variable process count) Server compiled with.... -D APACHE_MPM_DIR="server/mpm/worker" -D APR_HAS_SENDFILE -D APR_HAS_MMAP -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled) -D APR_USE_SYSVSEM_SERIALIZE -D APR_USE_PTHREAD_SERIALIZE -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT -D APR_HAS_OTHER_CHILD -D AP_HAVE_RELIABLE_PIPED_LOGS -D DYNAMIC_MODULE_LIMIT=128 -D HTTPD_ROOT="" -D SUEXEC_BIN="/usr/lib/apache2/suexec" -D DEFAULT_PIDLOG="/var/run/apache2.pid" -D DEFAULT_SCOREBOARD="logs/apache_runtime_status" -D DEFAULT_ERRORLOG="logs/error_log" -D AP_TYPES_CONFIG_FILE="/etc/apache2/mime.types" -D SERVER_CONFIG_FILE="/etc/apache2/apache2.conf" ## Afficher la version seulement $ apache2 -v ## option -v (en minuscule) Server version: Apache/2.2.9 (Debian) Server built: Nov 14 2009 20:21:34 # # # # # La version est toute rcente ! Apache v2 fait partie dune nouvelle gnration du server web Apache. Cette version a t totalement r-crite pour introduire de nouvelles amlioration tel que : le "threading", une nouvelle API, le support de lIPv6, filtrage de requte/reponses, etc...

185

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes

10.1.3.2. Accder la documentation

En local (apache2-doc) : Documentation du Serveur HTTP Apache Version 2.2 (le:///usr/share/doc/apache2-doc/manual/fr/index.html) En ligne (web) : Documentation du Serveur HTTP Apache Version 2.2 (http://httpd.apache.org/docs/2.2/fr) Manuel (man) :

$ man apache2 ## La page de manuel reste toutefois accessible uniquement via cette commande et non pas v

10.1.3.3. Arrt/Dmarrage du service HTTPD (daemon) - apache2ctl


Si la directive Listen spcie dans le chier de conguration est sa valeur par dfaut de 80 (ou tout autre port infrieur 1024), il est ncessaire de possder les privilges root pour pouvoir dmarrer apache2, et lui permettre dtre associ ce port privilgi. Il est recommand dutiliser le script de contrle apache2ctl pour invoquer lexcutable httpd. apache2ctl accepte des arguments de ligne de commande, ainsi toute option de httpd. Il est donc possible dditer directement le script apache2ctl en modiant la variable HTTPD situe en dbut de script pour spcier la localisation du binaire httpd et tout argument de ligne de commande que lon souhaite voir systmatiquement prsent.
Note : La conguration par dfaut de Debian requiert les variable denvironement APACHE_RUN_USER, APACHE_RUN_GROUP, et APACHE_PID_FILE dtre congur dans /etc/apache2/envvars.
$ cat /etc/apache2/envvars # envvars - default environment variables for apache2ctl # Since there is no sane way to get the parsed apache2 config in scripts, some # settings are defined via environment variables and then used in apache2ctl, # /etc/init.d/apache2, /etc/logrotate.d/apache2, etc. export APACHE_RUN_USER=www-data export APACHE_RUN_GROUP=www-data export APACHE_PID_FILE=/var/run/apache2.pid

Arrt/Dmarrage de HTTPD:
## Avec le script de service activ au dmarrage de la machine

186

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes
$ /etc/init.d/apache2 start # | stop | restart ## Avec /usr/sbin/apache2ctl $ apache2ctl start # Donne une erreur si dj en cours dexcution # quivaut apache2ctl -k start $ apache2ctl restart # Re-dmarrage brut # Vrifie le fichier de configuration avant de rdmarrer # Re-dmarrage doux # Les connections ouvertes ne sont pas abandonnes # Les vieux fichiers de log ne sont pas ferms immdiatement # quivaut apache2ctl -k graceful # Arrt brut (mme effet que gracefull) # quivaut apache2ctl -k stop

$ apache2ctl graceful

$ apache2ctl stop

$ apache2ctl graceful-stop # Arrt brut # quivaut apache2ctl -k graceful-stop $ apache2ctl status # Affiche un brief raport de status Apache Server Status for localhost Server Version: Apache/2.2.9 (Debian) Server Built: Nov 14 2009 20:21:34 __________________________________________________________________ Current Time: Tuesday, 29-Dec-2009 18:03:47 GMT Restart Time: Tuesday, 29-Dec-2009 17:52:22 GMT Parent Server Generation: 0 Server uptime: 11 minutes 25 seconds 1 requests currently being processed, 49 idle workers ...

10.1.3.4. Fichier de Conguration - apache2.conf, httpd.conf, ports.conf


Au dmarrage, la premire chose queffectue httpd est de localiser et lire le chier de conguration httpd.conf . La localisation de ce chier est dnie la compilation, mais il est possible den spcier une autre lexcution en utilisant loption de ligne de commande -f comme suit:
$ /usr/local/apache2/bin/apache2ctl -f /usr/local/apache2/conf/httpd.conf

187

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes
Note : Tout changement dans le chier de conguration peut-tre test avec la commande :
$ apache2ctl configtest # OU $ apache2ctl -t # quivalent httpd -t # Excuter un test de syntaxe du fichier de configuration # retourne OK ou une erreur

O se trouve le chier de conguration utilis par le serveur lors de linstallation par dfaut (Debian package) Pour connatre tous moment quel chier de conguration est utilis :
## Fichier de configuration par dfaut $ apache2ctl -V | grep SERVER_CONFIG -D SERVER_CONFIG_FILE="/etc/apache2/apache2.conf"

## Localisation dfinit la compilation

## On peut vrifier quau dmarrage un autre chemin de fichier nest pas indiqu dans les fi $ cat /usr/sbin/apache2ctl ## Script de controle dApache2 serveur HTTPD $ cat /etc/init.d/apache2 ## Script de service au dmarrage

QUESTION: Si un autre chier de conguration a t indiqu lors dun dmarrage manuel du server, il semble que quil ne soit pas possible de le voir directement sans faire des recherche de tout les .conf existant et dans les chiers de log...? La conguration global du serveur (/etc/apache2/apache2.conf) inclus dautres chiers:

/etc/apache2/ports.conf : ports dcoute du server (80 par dfaut) /etc/apache2/httpd.conf : conguration utilisateur (additionelle) /etc/apache2/mods-enabled/*.load & /etc/apache2/mods-enabled/*.conf : chargement des modules /etc/apache2/sites-enabled/[^.#]* : chargement vhosts /etc/apache2/conf.d/[^.#]* : autre conguration local (ajout manuellement ou par dautre paquets) Sexecute en tant que: www-data (user) www-data (group) /usr/sbin/apache2 : Fichier de commande binaire Apache2 /usr/sbin/apache2ctl : Script/Interface de controle Apache2

188

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes
Note : Apache2 supporte IPv4 et IPv6, par contre pour le faire fonctionner sur les deux types dadresses il faut mettre les @ IPv6 entre [] puisque le sparateur des digits est le : or pour Apache le : indique les ports : Listen 10.0.0.1:80 Listen [2001::1]:80

Quelques commandes utiles:


## Affiche les paramtres charg depuis le fichier de configuration ## prsent affiche uniquement les paramtres virtualhost VirtualHost configuration: wildcard NameVirtualHosts and _default_ servers: is a NameVirtualHost *:80 default server debstafil4.ermansion.net (/etc/apache2/sites-enabled/000-default:1) port 80 namevhost debstafil4.ermansion.net (/etc/apache2/sites-enabled/000-default:1) Syntax OK $ apache2ctl -L $ apache2ctl -l $ apache2ctl -M ## Affiche la liste des directives et leurs arguments ## Affiche la liste des modueles compils dans le serveur. ## Affiche la liste des modules statique et partags $ apache2ctl -S

Comme on le voit ci-dessus loption -S ne donne pas beaucoup dinfo allons donc voir directement la conguration dans les chiers.
### Config UTILISATEUR $ cat /etc/apache2/httpd.conf (empty) ### Config PORTS $ cat /etc/apache2/ports.conf # If you just change the port or add more ports here, you will likely also # have to change the VirtualHost statement in # /etc/apache2/sites-enabled/000-default # This is also true if you have upgraded from before 2.2.9-3 (i.e. from # Debian etch). See /usr/share/doc/apache2.2-common/NEWS.Debian.gz and # README.Debian.gz NameVirtualHost *:80 Listen 80 <IfModule mod_ssl.c> # SSL name based virtual hosts are not yet supported, therefore no # NameVirtualHost statement here Listen 443 </IfModule>

189

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes
## Config GLOBAL $ cat /etc/apache2/apache2.conf (voir lien en bas de ce listing) ## Config SITES (hosts) $ cat /etc/apache2/sites-enabled/000-default <VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www/ <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ <Directory "/usr/lib/cgi-bin"> AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory> ErrorLog /var/log/apache2/error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog /var/log/apache2/access.log combined Alias /doc/ "/usr/share/doc/" <Directory "/usr/share/doc/"> Options Indexes MultiViews FollowSymLinks AllowOverride None Order deny,allow Deny from all Allow from 127.0.0.0/255.0.0.0 ::1/128 </Directory> </VirtualHost>

apache2.conf (docs/sr009-ch01-apache2-conf-original.txt) (conguration par dfaut) On voit notemment la conguration est tablit par des directives encadr par des tag XML, que le serveur est sens couter le port 80; que Server Root "/etc/apache2" est le repertoire contenant les chiers de conguration, erreur, logs, etc; que des sites par dfaut est congur et pointe vers /var/www

190

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes Si je pointe mon navigateur sur http://localhost ou http://debstal4.ermansion.net, je vois bien par le bien du serveur HTTP le contenu du repertoire /var/www.

10.1.3.5. Rgle dOR: Vrier linstallation du serveur Web avec le systme


Note : Ne jamais faire conance aux scripts de dmarrage et ce quils renvoient lcran !!! Toujours vrier linstallation avec le systme.

###==> Par dfaut le service http (indiqu www ici) utilise le port 80 par dfaut $ grep http /etc/services # Updated from http://www.iana.org/assignments/port-numbers and other # sources like http://www.freebsd.org/cgi/cvsweb.cgi/src/etc/services . www 80/tcp http # WorldWideWeb HTTP https 443/tcp # http protocol over TLS/SSL https 443/udp http-alt 8080/tcp webcache # WWW caching service http-alt 8080/udp # WWW caching service

### Pas besoin de le dmarrer il fonctionne dj $ apache2ctl start httpd (pid 12090) already running ### Vrifions la table de processus $ ps aux | grep apache root 12090 0.0 0.6 13252 2764 www-data 12091 0.0 0.4 13160 1984 www-data 12092 0.0 0.8 234732 3384 www-data 12095 0.0 0.6 234732 2608 root 12713 0.0 0.1 3940 776

? ? ? ? pts/7

Ss S Sl Sl S+

21:19 21:19 21:19 21:19 23:39

0:04 0:00 0:00 0:00 0:00

/usr/sbin/apache2 /usr/sbin/apache2 /usr/sbin/apache2 /usr/sbin/apache2 grep apache

-f -f -f -f

/etc/a /etc/a /etc/a /etc/a

### Le service est actif, verifions quil le port 80 $ netstat -natupw | grep 80 tcp 0 0 127.0.0.1:3306 0.0.0.0:* tcp 0 0 0.0.0.0:80 0.0.0.0:* udp6 0 0 :::58033 :::*

LISTEN LISTEN

4580/mysqld 12090/apache 1649/avahi-d

### Test de connection $ telnet 10.0.1.5 80 Trying 10.0.1.5... Connected to 10.0.1.5. Escape character is ^]. GET index.html <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>400 Bad Request</title> </head><body> <h1>Bad Request</h1> <p>Your browser sent a request that this server could not understand.<br />

191

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes
</p> <hr> <address>Apache/2.2.9 (Debian) Server at debstafil4.ermansion.net Port 80</address> </body></html> Connection closed by foreign host.

A ce stade, je suis sr que le service est bien oprationnel. Sil y a un problme, cela ne vient pas de sa conguration de base. Soit cela vient dextensions (domaines virtuels, conguration sur des rpertoires, droits daccs...), mais le service globalement fonctionne.
Note : la place du client telnet on aurait pu utliser le client nc de lapplication netcat (http://netcat.sourceforge.net).

10.1.3.6. Fichier de trace (logs)


Source(s):

Web: Apache Log Files (http://httpd.apache.org/docs/2.2/fr/logs.html)

Trace dErreur (Error log) : Nom et localisation paramtrs par la directive ErrorLog (/var/log/apache2/error.log (docs/sr009-ch01-apache-error-log.txt) par dfaut). Trace les erreurs rencontres lors du traitement des requte et des information de diagnostic. A regarder en premier. La directive LogLevel (niveau de gravit) permet dajuster le type derreur enregistr.
$ tail -f /var/log/apache2/error.log

## Monitorer en temps rel ce qui se passe sur le se ## Ideal en priode de test :)

Trace dAccs (Access log) : Nom et localisation paramtr par la directive CustomLog (/var/log/apache2/access.log (docs/sr009-ch01-apache-access-log.txt) par dfaut). Trace toutes les requtes traites par la serveur. La directive LogFormat permet de simplier la selection du contenu. Trace de sites (Vhost Access log) : Si les directives CustomLog ou ErrorLog sont placs linterieur de la section <VirtualHost> (/var/log/apache2/other_vhosts_access.log (docs/sr009-ch01-apache-other_vhosts_access-log.txt) par dfaut), toutes les requtes ou erreurs pour lhte virtuel irrons senregistrer dans le chier spci. Les traces de tout hte virtuel qui nont pas ces directives renseignes, sont simplement enregistres avec les traces du serveur. Autres (Module logs) : Trace des octets mis et reu, "Forensic Logging", Fichier de PID (PID File), Trace de Script (Script Log), Trace de r-criture des URL (Rewrite Log), etc...

192

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes

10.1.4. Base de donnes - MYSQL - Installation et conguration


Source(s):

OF: SR009-ch02-mysql.pdf (docs/eof/sr009-ch02-mysql.pdf) Web: mysql.com (http://www.mysql.com/)

La deuxime brique dont nous avons besoin, cest une base de donnes pour enregistrer les informations de nos pages dynamique
Une base de donnes (Abr. : BD ou BDD ) est un stock dinformations organis et structur de manire pouvoir tre facilement manipul et stocker efcacement de trs grandes quantits dinformations http://fr.wikipedia.org/wiki/Base_de_donnes (http://fr.wikipedia.org/wiki/Base_de_donn%C3%A9es)

Petit point dactualit sur MySQL :)


In April 2009, Oracle Corporation entered into an agreement to purchase Sun Microsystems, current owners of the MySQL intellectual property. Suns board of directors unanimously approved the deal, it was also approved by Suns shareholders, and by the U.S. government on August 20, 2009. On December 14 2009, Oracle pledged to continue to enhance MySQL. In Europe the merge is under scrutiny by EU antitrust regulators, whose main concerns are on conict of interests with existing database software by Oracle. Michael Widenius, father of MySQL, launched a petition to pledge EU Commission to stop the deal. http://en.wikipedia.org/wiki/MySQL#Product_History

Ici nous installerons MySQL mais il en existe dautres: PostgreSQL, SQLlite, IngresDB, etc (http://fr.wikipedia.org/wiki/Syst%C3%A8me_de_gestion_de_base_de_donn%C3%A9es#Quelques_SGBD)

10.1.4.1. Installation de base


Je pourrais compiler Mysql et linstaller (http://dev.mysql.com/doc/refman/5.0/en/installing-binary.html) depuis la source mais dans le cadre dune premire dcouverte je me contenterais du paquet Debian avec la conguration par dfaut. Ce sera gage dune meilleure stabilit dans un premier temps.
## Installation $ apt-get update $ apt-get install mysql-server-5.0 ## En fin dinstallation le mot de passe root ## pour laccs la BD est requis comme paramtre obligatoire ## Vrification Version $ mysql --version mysql Ver 14.12 Distrib 5.0.51a, for debian-linux-gnu (i486) using readline 5.2

193

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes
## Localisation $ whereis mysqld mysqld: /usr/sbin/mysqld /usr/share/man/man8/mysqld.8.gz ## Processus $ ps aux | grep mysql root 4541 0.0 0.1 4692 mysql 4580 0.1 0.7 119332

560 ? 2836 ?

S Sl

Dec28 Dec28

root

4581

0.0

0.1

3800

492 ?

Dec28

0:00 /bin/sh /usr/bin/mysqld_saf 4:54 /usr/sbin/mysqld --basedir= --datadir=/var/lib/mysql --pid-file=/var/run/mysqld --skip-external-locking ---socket=/var/run/mysqld/m 0:00 logger -p daemon.err -t mys

## Connection $ mysql -u root ERROR 1045 (28000): Access denied for user root@localhost (using password: NO)

$ mysql -h localhost -u root -p ## localhost cest ma machine, Enter password: ## -p est indispensable pour pouvoir entrer le mot de passe Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 39 Server version: 5.0.51a-24+lenny2 (Debian) Type help; or \h for help. Type \c to clear the buffer. mysql> ## Sortie XML $ mysql --xml -u root -e "SHOW VARIABLES LIKE version%" -p Enter password:

<resultset statement="SHOW VARIABLES LIKE version% " xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <row> <field name="Variable_name">version</field> <field name="Value">5.0.51a-24+lenny2</field> </row> <row> <field name="Variable_name">version_comment</field> <field name="Value">(Debian)</field> </row> <row> <field name="Variable_name">version_compile_machine</field> <field name="Value">i486</field> </row> <row> <field name="Variable_name">version_compile_os</field> <field name="Value">debian-linux-gnu</field>

194

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes
</row> </resultset>

10.1.4.2. Mot de passe: root, debian-sys-maint


Lors de linstallation de MySQL, un certain nombre dutilisateurs sont crs automatiquement :

- debian-sys-maint : utilisateur qui sert certains scripts Debian : il ne doit pas tre su - root@localhost : il sagit du compte administrateur, ayant tous les droits sur toutes les

Les utilisateurs de MySQL (ainsi que dautres informations relatives notamment aux droits daccs) sont contenus dans la table user dune base de donnes nomme mysql.
mysql> use mysql ## Selectionner la BD named "mysql" mysql> select host,user,password from user; ## Lancer une requte sur la table "user" +------------+------------------+-------------------------------------------+ | host | user | password | +------------+------------------+-------------------------------------------+ | localhost | root | *F83365F186D5B45C390EBD9B01A200B1D113D0BC | | debstafil4 | root | *F83365F186D5B45C390EBD9B01A200B1D113D0BC | | 127.0.0.1 | root | *F83365F186D5B45C390EBD9B01A200B1D113D0BC | | localhost | debian-sys-maint | *2377A473D938D4CE7A0C76D42F6DE68BB247CF68 | +------------+------------------+-------------------------------------------+ 4 rows in set (0.00 sec)

Note : Pour changer le mot de passe root:


mysql> set password for root@localhost=PASSWORD(mot_de_passe_root);

Choisir un bon mot de passe, cest--dire dau moins huit caractres, et contenant des majuscules, minuscules et au moins un chiffre.

10.1.4.3. Accder la documentation

En local :
$ man mysql

Au promt serveur :

$ mysql> help chane_rechercher ## indiquer dans la chane_rechercher les mots clefs de re

195

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes

## Par exemple mysql> help ## Liste MySQL commandes mysql> help content ## Affiche le contenu de laide mysql> help set ## Obtenir information sur la commande SET Name: SET Description: Syntax: SET variable_assignment [, variable_assignment] ... variable_assignment: user_var_name = expr | [GLOBAL | SESSION] system_var_name = expr | [@@global. | @@session. | @@]system_var_name = expr The SET statement assigns values to different types of variables that affect the operation of the server or your client. Older versions of MySQL employed SET OPTION, but this syntax is deprecated in favor of SET without OPTION. URL: http://dev.mysql.com/doc/refman/5.0/en/set-option.html

En ligne (web) : MySQL 5.0 Reference Manual (EN) (http://dev.mysql.com/doc/refman/5.0/en/index.html) MySQL 5.0 Reference Manual (FR) (http://dev.mysql.com/doc/refman/5.0/fr/index.html)

10.1.4.4. Arrt/Dmarrage du service de BD (daemon) - mysql

## Le mieux est dutiliser le script de dmarrage utilis lors de linitialisation de la mac ## En tant que root... ## start|stop|restart|reload|force-reload|status $ /etc/init.d/mysql stop Stopping MySQL database server: mysqld. $ /etc/init.d/mysql start Starting MySQL database server: mysqld .. Checking for corrupt, not cleanly closed and upgrade needing tables.. $ /etc/init.d/mysql reload $ /etc/init.d/mysql force-reload Reloading MySQL database server: mysqld. $ /etc/init.d/mysql status /usr/bin/mysqladmin Ver 8.41 Distrib 5.0.51a, for debian-linux-gnu on i486 Copyright (C) 2000-2006 MySQL AB This software comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to modify and redistribute it under the GPL license Server version 5.0.51a-24+lenny2 Protocol version 10

196

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes
Connection Localhost via UNIX socket UNIX socket /var/run/mysqld/mysqld.sock Uptime: 27 sec Threads: 1 Questions: 80 Slow queries: 0 Opens: 23 Flush tables: 1 Open tables: 17

Que

## Alternatives /usr/sbin/mysqld /usr/bin/mysqld_safe

## Dmarrer le service de BD ## Essaie de dterminer les options correctes avant de lancer mysqld

10.1.4.5. Fichier de Conguration (my.conf) et de donnes


Source(s):

Web: Fichier doptions my.cnf (http://dev.mysql.com/doc/refman/5.0/fr/option-les.html) Variables du serveur MySQL (http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html)

Il y a trois chiers de conguration, qui sont lus successivement dans lordre ci-dessous, les options dnies en dernier crasant celles dnies prcdemment.

GLOBAL - /etc/mysql/my.cnf (docs/sr009-ch02-mysql-etc-my-cnf.txt) : Il sagit du chier de conguration global du serveur MySQL fonctionnant sur la machine. SERVEUR - DATADIR/my.cnf : est le chier de conguration propre chaque serveur MySQL. Il se trouve dans le dossier de base du serveur. Aucun existant par dfaut. UTILISATEUR - ~/.my.cnf (docs/sr009-ch02-mysql-user-my-cnf.txt) : plac dans le dossier dun utilisateur, ce chier de conguration donne les options pour cet utilisateur. Aucun existant par dfaut. SPECIFIC - defaults-extra-le : Le chier spci par --defaults-extra-le=#

On peut placer dans ce chier le login et le mot de passe, en sassurant videmment quil ne soit pas lisible par dautres utilisateurs. MySQL serveur maintient un system de plusieurs variables qui indiquent comment il est congur. Chaque variables a une valeur par dfaut. Ces variables peuvent-tre paramtres au dmarrage du service avec les options de ligne de commande ou via un chier de conguration. La plupart peuvent changer dynamiquement lorsque le serveur est en cours dexecution en utilisant la commande SET qui permet des modications sans stopper ou redmarrer le serveur. Il y a plusieurs moyens de connatres ses variables et leur valeur:
$ mysqld --verbose --help

## Afficher les variables/valeurs par dfaut la co ## et modifies par le fichier de configuration. $ mysqld --no-defaults --verbose --help ## Afficher les variables/valeurs par dfaut la co

197

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes

$ mysql > SHOW VARIABLES; $ my_print_defaults client mysql

## ignorant toute modification ultrieure. ## Afficher les variables/valeurs courantes du serve ## Afficher les options des groupes [client] et [mys

Plus dinformation : Variables du serveur MySQL (http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html)


## Extrait 1 $ mysqld --verbose --help mysqld Ver 5.0.51a-24+lenny2 for debian-linux-gnu on i486 ((Debian)) Copyright (C) 2000 MySQL AB, by Monty and others This software comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to modify and redistribute it under the GPL license Starts the MySQL database server Usage: mysqld [OPTIONS] Default options are read from the following files in the given order: /etc/mysql/my.cnf ~/.my.cnf /usr/etc/my.cnf The following groups are read: mysql_cluster mysqld server mysqld-5.0 The following options may be given as the first argument: --print-defaults Print the program argument list and exit --no-defaults Dont read default options from any options file --defaults-file=# Only read default options from the given file # --defaults-extra-file=# Read this file after the global files are read -?, --help Display this help and exit. --abort-slave-event-count=# Option used by mysql-test for debugging and testing of replication. --allow-suspicious-udfs Allows use of UDFs consisting of only one symbol xxx() without corresponding xxx_init() or xxx_deinit(). That also means that one can load any function from any library, for example exit() from libc.so -a, --ansi Use ANSI SQL syntax instead of MySQL syntax. This mode will also set transaction isolation level serializable. --auto-increment-increment[=#] Auto-increment columns are incremented by this --auto-increment-offset[=#] Offset added to Auto-increment columns. Used when auto-increment-increment != 1 ... --log-slave-updates Tells the slave to log the updates from the slave thread to the binary log. You will need to turn it on if you plan to daisy-chain the slaves. --log-slow-admin-statements

198

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes
Log slow OPTIMIZE, ANALYZE, ALTER and other administrative statements to the slow log if it is open. ... --old-passwords Use old password encryption method (needed for 4.0 and older clients). --old-style-user-limits Enable old-style user limits (before 5.0.3 user resources were counted per each user+host vs. per account) --pid-file=name Pid file used by safe_mysqld. ... --wait_timeout=# The number of seconds the server waits for activity on a connection before closing it. Variables (--variable-name=value) and boolean options {FALSE|TRUE} --------------------------------help abort-slave-event-count allow-suspicious-udfs auto-increment-increment auto-increment-offset ... master-retry-count master-ssl ... old-passwords old-style-user-limits pid-file port port-open-timeout profiling_history_size relay-log ... sysdate-is-now tc-heuristic-recover temp-pool timed_mutexes tmpdir ... wait_timeout

Value (after reading options) ----------------------------TRUE 0 FALSE 1 1 86400 FALSE FALSE FALSE /var/run/mysqld/mysqld.pid 3306 0 15 (No default value) FALSE (No default value) TRUE FALSE /tmp 28800

To see what values a running MySQL server is using, type mysqladmin variables instead of mysqld --verbose --help.

## Extrait 2 $ mysql> show variables; +---------------------------------+-----------------------------+ | Variable_name | Value | +---------------------------------+-----------------------------+ | auto_increment_increment | 1 | | auto_increment_offset | 1 | | automatic_sp_privileges | ON |

199

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes
| back_log | 50 | | basedir | /usr/ | | binlog_cache_size | 32768 | | bulk_insert_buffer_size | 8388608 | | character_set_client | latin1 | | character_set_connection | latin1 | ... | version_comment | (Debian) | | version_compile_machine | i486 | | version_compile_os | debian-linux-gnu | | wait_timeout | 28800 | +---------------------------------+-----------------------------+ 232 rows in set (0.00 sec)

Pour savoir o se trouve le repertoire DATADIR :


$ mysql> show variables where Variable_name like datadir; +---------------+-----------------+ | Variable_name | Value | +---------------+-----------------+ | datadir | /var/lib/mysql/ | +---------------+-----------------+ 1 row in set (0.01 sec) # Alternative $ mysqld --verbose --help | grep datadir -h, --datadir=name Path to the database root. datadir /var/lib/mysql/

Par dfaut on voit que, MySQL DATADIR (repertoire de donnes) est /var/lib/mysql. Cest cet endroit que les base de donnes sont stockes. Un dossier par base de donnes.
## Fichiers associs la base de donne mysql sur le serveur $ ls /var/lib/mysql/mysql columns_priv.frm help_relation.MYI time_zone_leap_second.frm columns_priv.MYD help_topic.frm time_zone_leap_second.MYD columns_priv.MYI help_topic.MYD time_zone_leap_second.MYI db.frm help_topic.MYI time_zone.MYD db.MYD host.frm time_zone.MYI db.MYI host.MYD time_zone_name.frm func.frm host.MYI time_zone_name.MYD func.MYD proc.frm time_zone_name.MYI func.MYI proc.MYD time_zone_transition.frm help_category.frm proc.MYI time_zone_transition.MYD help_category.MYD procs_priv.frm time_zone_transition.MYI help_category.MYI procs_priv.MYD time_zone_transition_type.frm help_keyword.frm procs_priv.MYI time_zone_transition_type.MYD help_keyword.MYD tables_priv.frm time_zone_transition_type.MYI

200

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes
help_keyword.MYI help_relation.frm help_relation.MYD tables_priv.MYD tables_priv.MYI time_zone.frm user.frm user.MYD user.MYI

Note : Il est possible de changer le repertoire DATADIR simplement en changeant dans le chier de conguration. Attention migrer toutes base de donnes existantes: Moving the MySQLs datadir directory (http://rajshekhar.net/blog/archives/90-Moving-the-MySQLs-datadir-directory..html).

Dans les scripts Shell, on peut aussi utiliser le programme my_print_defaults pour analyser les chiers doptions. Lexemple suivant montre le rsultat que my_print_defaults peut produire lorsquon lui demande dafcher les options des groupes [client] et [mysql] :
$ my_print_defaults client mysql --port=3306 --socket=/var/run/mysqld/mysqld.sock ## Sans prciser des groupes on obtient... $ my_print_defaults my_print_defaults Ver 1.6 for debian-linux-gnu at i486 This software comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to modify and redistribute it under the GPL license Prints all arguments that is give to some program using the default files Usage: my_print_defaults [OPTIONS] groups -c, --config-file=name Deprecated, please use --defaults-file instead. Name of config file to read; if no extension is given, default extension (e.g., .ini or .cnf) will be added -#, --debug[=#] This is a non-debug version. Catch this and exit -c, --defaults-file=name Like --config-file, except: if first option, then read this file only, do not read global or per-user config files; should be the first option -e, --defaults-extra-file=name Read this file after the global config file and before the config file in the users home directory; should be the first option -g, --defaults-group-suffix=name In addition to the given groups, read also groups with this suffix -e, --extra-file=name Deprecated. Synonym for --defaults-extra-file. -n, --no-defaults Return an empty string (useful for scripts). -?, --help Display this help message and exit. -v, --verbose Increase the output level -V, --version Output version information and exit. Default options are read from the following files in the given order: /etc/mysql/my.cnf ~/.my.cnf /usr/etc/my.cnf

201

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes

Variables (--variable-name=value) and boolean options {FALSE|TRUE} --------------------------------config-file defaults-file defaults-extra-file defaults-group-suffix extra-file

Value (after reading options) ----------------------------my my (No default value) (No default value) (No default value)

Example usage: my_print_defaults --defaults-file=example.cnf client mysql

Comme indiqu ci-dessus et observ dans le chier de conguration my.cnf, les options peuvent tre regroupes par groupes :

[mysql] ou [mysqld] : sont des options lus et appliqus uniquement par le serveur MySQL. [client] : sont des options de group lus et appliqus par tous les programs client mais pas par le serveur mysqld. Elle specie les options appliquer au client. Par example on peut specier le mot de passe utiliser pour se connecter au serveur (,dans ce cas le chier ne doit pas tre lu par dautres utilisateurs !!!).

Quelques options de base interressantes :

[client] port = 3306 ## Port utiliser par les programmes client socket = /var/run/mysqld/mysqld.sock ## Prise de communication utiliser par les programme ... [mysqld] user pid-file socket port basedir datadir tmpdir language

= = = = = = = =

mysql /var/run/mysqld/mysqld.pid /var/run/mysqld/mysqld.sock 3306 /usr /var/lib/mysql /tmp /usr/share/mysql/english

## ## ## ##

Utilisateur par dfaut si non spcifi sur la lign Fichier didentifiant du processus Prise de communication Port dcoute du serveur

## Repertoire de donnes ## Language par dfaut du serveur

Modions la langue utilise pour que les messages derreur apparaissent en franais:
$ ls /usr/share/mysql/ charsets ## pour voir les options disponible

202

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes
czech danish ... english ... french ... ukrainian

## Beaucoup de langues disponible par dfaut...

## Mofifions le fichier de configuration /etc/mysql/my.cnf language = /usr/share/mysql/french ## Puis redmarrons le service pour quil prenne en compte le changement $ /etc/init.d/mysql restart

## Vrifions $ mysql ## Sans spcifier dutilisateur ERROR 1045 (28000): Accs refus pour lutilisateur: root@@localhost (mot de passe: NON)

Dnissons des options propres lutilisateur root dans le chier de conguration /root/.my.cnf. On pourrait faire de mme pour un autre utilisateur.
# /root/.my.cnf [client] user = root password = mot_de_passe_root [mysql] database = mysql

## Bien prendre soin de remplace mot_de_passe_root par le mdp

## TEST OK $ mysql Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 29 Server version: 5.0.51a-24+lenny2 (Debian) Type help; or \h for help. Type \c to clear the buffer. mysql> prompt (\u@\h) [\d]>\_ PROMPT set to (\u@\h) [\d]>\_ (root@localhost) [mysql]> ## En changeant laffichage du prompt (man mysql)

## Je vois bien que je suis connect en tant que root

## Alternativement pour vrifier qui je suis et quelle BD est en cours dutilisation mysql> status --------------

203

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes
mysql Ver 14.12 Distrib 5.0.51a, for debian-linux-gnu (i486) using readline 5.2

Connection id: 32 Current database: mysql ## Base de donnes mysql OK Current user: root@localhost ## Utilisateur root OK SSL: Not in use Current pager: stdout Using outfile: Using delimiter: ; Server version: 5.0.51a-24+lenny2 (Debian) Protocol version: 10 Connection: Localhost via UNIX socket Server characterset: latin1 Db characterset: latin1 Client characterset: latin1 Conn. characterset: latin1 UNIX socket: /var/run/mysqld/mysqld.sock Uptime: 16 min 50 sec Threads: 1 Questions: 145 -------------Slow queries: 0 Opens: 23 Flush tables: 1 Open tables: 17

Qu

Note : Ce chier de conguration contient des donnes sensibles (mot de passe), il est donc ncessaire dassurer sa condentialit :
$ ls -l .my.cnf -rw-r--r-- 1 root root 66 jan $ chmod go-rwx .my.cnf $ ls -l .my.cnf -rw------- 1 root root 66 jan ## Droits par dfaut 1 23:55 .my.cnf ## Enlve tous les droits au groupe et ## aux utilisateurs autres que le propritaire 1 23:55 .my.cnf ## Vfification nouveaux droits

Note : Plusieurs possibilits pour changer les prompt MySQL (user@host) [database]> par exemple. Pour plus dinformation voir la page : man mysql (section MYSQL COMMANDES).
# Utiliser les variables denvironements $ export MYSQL_PS1="(\u@\h) [\d]> " # Utiliser loption de ligne de commande mysql --prompt $ mysql --prompt="(\u@\h) [\d]> " # Utliser une option de configuration dans le groupe [mysql] [mysql] prompt=(\\u@\\h) [\\d]>\\_ ## Les anti-slashe doivent tre doubls dans ce cas... # Utiliser la mthode inter-active

204

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes
mysql> prompt (\u@\h) [\d]>\_

10.1.4.6. Rgle dOR: Vrier linstallation de la Base de Donnes avec le systme


Note : Ne jamais faire conance aux scripts de dmarrage et ce quils renvoient lcran !!! Toujours vrier linstallation avec le systme.

Sassurer que le service de BD est bien actif et oprationnel:

### Un serveur de base de donnes comme MySQL ou PostgreSQL attend des requtes sur un port. ### pour PostgreSQL il sagit du port 5432. ### Par dfaut le service mysql (indiqu mysqld ici) utilise le port 3306 $ grep mysql /etc/services mysql 3306/tcp mysql 3306/udp ### Pas besoin de le dmarrer le service fonctionne dj $ /etc/init.d/mysql start Starting MySQL database server: mysqld already running. ### Vrifions la table de processus $ ps aux | grep mysql root 3649 0.0 0.3 4692 1288 ? mysql 3688 0.1 4.2 127376 16972 ?

S Sl

Jan01 Jan01

root root

3689 3889

0.0 0.0

0.1 0.1

3800 3940

612 ? 768 pts/1

S R+

Jan01 00:28

0:00 /bin/sh /usr/bin/mysqld_saf 0:02 /usr/sbin/mysqld --basedir= --datadir=/var/lib/mysql --user= --pid-file=/var/run/mysqld/mysql --skip-external-locking --port=3 --socket=/var/run/mysqld/mysqld. 0:00 logger -p daemon.err -t mys 0:00 grep mysql

### Le service est actif, verifions quil coute le port 3306 $ netstat -natupw | grep 3306 tcp 0 0 127.0.0.1:3306 0.0.0.0:* ### Test de connection $ telnet 10.0.1.5 3306 Trying 10.0.1.5... telnet: Unable to connect to remote host: Connection refused $ telnet 127.0.0.1 3306 Trying 127.0.0.1... Connected to 127.0.0.1.

LISTEN

3688/mysqld

205

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes
Escape character is ^]. 5.0.51a-24+lenny2...Connection closed by foreign host. $ mysql -h 10.0.1.5 -u root -p Enter password: ERROR 2003 (HY000): Cant connect to MySQL server on 10.0.1.5 (111) $ mysql -h 127.0.0.1 -u root -p Enter password: Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 36 Server version: 5.0.51a-24+lenny2 (Debian) Type help; or \h for help. Type \c to clear the buffer. mysql>

A ce stade, je suis sr que le service est bien oprationnel. Sil y a un problme, cela ne vient pas de sa conguration de base. Soit cela vient dextensions, mais le service globalement fonctionne. QUESTION : On voit bien ci-dessus quil est possible de se connecter que par laddresse 127.0.0.1 et pas 10.0.1.5 est-ce normal ? Puisque cette dernire nest pas lcoute ? Ou pas autoris dans la base MySQL ? QUESTION : Les commandes indiques dans le cours sont tapes en majuscules mais elles fonctionnent sans soucis en minuscules. Sagit-il dune convention dans le monde des bases de donnes ? juste pour le cours ? Doit-on prendre cette habitude ? Oui, cest purement conventionnel an de distinguer les mots rservs du reste.

10.1.4.7. Cration dun compte utilisateur et mise en place des droits


Cration dun utilisateur nomm mysqlUser auquel nous nassignerons aucun droit sur aucune base dans un premier temps
mysql> GRANT USAGE ON *.* TO mysqlUser@localhost IDENTIFIED BY mdpmysqlUser; Query OK, 0 rows affected (0.00 sec) mysql> SELECT user FROM users; ERROR 1146 (42S02): La table mysql.users nexiste pas

206

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes
mysql> SELECT user FROM user; +------------------+ | user | +------------------+ | root | | root | | debian-sys-maint | | mysqlUser | | root | +------------------+ 5 rows in set (0.01 sec)

## Test de connection $ mysql -u mysqlUser -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 36 Server version: 5.0.51a-24+lenny2 (Debian) Type help; or \h for help. Type \c to clear the buffer. mysql> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | +--------------------+ 1 row in set (0.00 sec) mysql> SHOW TABLES; +---------------------------------------+ | Tables_in_information_schema | +---------------------------------------+ | CHARACTER_SETS | | COLLATIONS | | COLLATION_CHARACTER_SET_APPLICABILITY | | COLUMNS | | COLUMN_PRIVILEGES | | KEY_COLUMN_USAGE | | PROFILING | | ROUTINES | | SCHEMATA | | SCHEMA_PRIVILEGES | | STATISTICS | | TABLES | | TABLE_CONSTRAINTS | | TABLE_PRIVILEGES | | TRIGGERS | | USER_PRIVILEGES | | VIEWS | +---------------------------------------+ 17 rows in set (0.00 sec)

207

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes

mysql> USE mysql; ## Accs une autre base refus ! ERROR 1044 (42000): Acc<65533>s refus<65533> pour lutilisateur: mysqlUser@@localhost. B

La base de donnes information_schema fournit un accs aux mtadonnes sur les bases de donnes. Chaque utilisateur MySQL a le droit daccder ces donnes, mais seules les lignes concernant des objets pour lesquels il a des droits seront visibles.

10.1.4.8. Cration dune base de donne et dune table


Note : En mode interactif, les guillemets simple () et double (") ne sont pas accepter par linterprteur... pour la cration dune base de donne ou dune table il ne sont pas requis...dans ce mode

Cration dune petite base de donnes permettant de grer une bibliothque. Creating and Selecting a Database (http://dev.mysql.com/doc/refman/5.0/en/creating-database.html) :
mysql> CREATE DATABASE bibliotheque; Query OK, 1 row affected (0.00 sec) mysql> USE bibliotheque; ## Crer la BD bibliotheque

## Utiliser la BD bibliotheque

Cette base de donnes ne contient quune seule table livre, dont les champs sont dnis dans le tableau suivant :
champ idLivre titre auteur annee Type entier chane chane type anne Taille 3 chiffres 128 caractres 128 caractres 4 chiffres

Commentaire doit sincrmenter automatiquement, unique pour ch titre du livre auteur du livre anne de parution

Creating a Table (http://dev.mysql.com/doc/refman/5.0/en/creating-tables.html) :


mysql> CREATE TABLE livre ( -> idLivre INT (3) NOT NULL AUTO_INCREMENT, -> titre VARCHAR(128) NOT NULL, -> auteur VARCHAR(128) NOT NULL, -> annee YEAR(4) NOT NULL, -> UNIQUE(idLivre) -> )TYPE=MYISAM; ## ## ## ## ## ## ##

Crer une nouvelle table livre dans cet Identifiant du livre 3 chiffres, champs n Titre de 128 charactres maximum, champs Auteur de 128 charactres maximum, champs Anne 4 chiffres, champs non-vide Identifiant du livre doit tre unique Choix du type de table: MYISAM

208

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes
Query OK, 0 rows affected, 1 warning (0.04 sec) mysql> SHOW TABLES; +------------------------+ | Tables_in_bibliotheque | +------------------------+ | livre | +------------------------+ 1 row in set (0.00 sec)

## Afficher les tables de la BD bibliothequ

mysql> DESCRIBE livre; ## Afficher la structure de la table livre +---------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +---------+--------------+------+-----+---------+----------------+ | idLivre | int(3) | NO | PRI | NULL | auto_increment | | titre | varchar(128) | NO | | NULL | | | auteur | varchar(128) | NO | | NULL | | | annee | year(4) | NO | | NULL | | +---------+--------------+------+-----+---------+----------------+ 4 rows in set (0.00 sec)

Ajouter un enregistrement dans cette table. Loading Data into a Table (http://dev.mysql.com/doc/refman/5.0/en/loading-tables.html) :

mysql> INSERT INTO livre (idLivre,titre,auteur,annee) VALUES (,Une brve histoire du temps Query OK, 1 row affected, 1 warning (0.05 sec) mysql> INSERT INTO livre (idLivre,titre,auteur,annee) VALUES (,MySQL 5, Cyril Thibaud, Query OK, 1 row affected, 1 warning (0.00 sec)

Note : idLivre sincrmente automatiquement...

Afchons le contenu de notre table. Retrieving Information from a Table (http://dev.mysql.com/doc/refman/5.0/en/retrieving-data.html) :


mysql> SELECT * FROM livre; ## Afficher tous les enregistrements de la table +---------+------------------------------+-----------------+-------+ | idLivre | titre | auteur | annee | +---------+------------------------------+-----------------+-------+ | 1 | Une brve histoire du temps | Stephen Hawking | 1990 | | 2 | MySQL 5 | Cyril Thibaud | 2006 | +---------+------------------------------+-----------------+-------+ 2 rows in set (0.02 sec)

209

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes
mysql> SELECT annee, auteur FROM livre; +-------+-----------------+ | annee | auteur | +-------+-----------------+ | 1990 | Stephen Hawking | | 2006 | Cyril Thibaud | +-------+-----------------+ 2 rows in set (0.00 sec) ## Filtrer sur les colonnes

mysql> SELECT * FROM livre WHERE auteur LIKE Stephen Hawking; ## Filtrer sur les enregist +---------+------------------------------+-----------------+-------+ | idLivre | titre | auteur | annee | +---------+------------------------------+-----------------+-------+ | 1 | Une brve histoire du temps | Stephen Hawking | 1990 | +---------+------------------------------+-----------------+-------+ 1 row in set (0.00 sec)

mysql> SELECT annee, auteur FROM livre WHERE annee=1990; +-------+-----------------+ | annee | auteur | +-------+-----------------+ | 1990 | Stephen Hawking | +-------+-----------------+ 1 row in set (0.02 sec)

## Filter sur lignes et colonne

Mettre jour un enregistrement existant :


mysql> UPDATE livre SET annee=2000 WHERE auteur=Stephen Hawking; Query OK, 1 row affected (0.01 sec) Enregistrements correspondants: 1 Modifis: 1 Warnings: 0 mysql> SELECT * FROM livre WHERE auteur LIKE Stephen Hawking; +---------+------------------------------+-----------------+-------+ | idLivre | titre | auteur | annee | +---------+------------------------------+-----------------+-------+ | 1 | Une brve histoire du temps | Stephen Hawking | 2000 | +---------+------------------------------+-----------------+-------+ 1 row in set (0.00 sec)

Autoriser lutilisateur mysqlUser accder la base de donnes bibliotheque. En root, on excute la commande suivante :
mysql> GRANT select ON bibliotheque.* TO mysqlUser@localhost; Query OK, 0 rows affected (0.07 sec)

## bibliotheque.* accorde le ## toutes les tables de la b

210

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes
## Vrification... (mysqlUser@localhost) [(none)]> USE bibliotheque Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed (mysqlUser@localhost) [bibliotheque]> SELECT * FROM livre; +---------+------------------------------+-----------------+-------+ | idLivre | titre | auteur | annee | +---------+------------------------------+-----------------+-------+ | 1 | Une brve histoire du temps | Stephen Hawking | 2000 | | 2 | MySQL 5 | Cyril Thibaud | 2006 | +---------+------------------------------+-----------------+-------+ 2 rows in set (0.00 sec)

(mysqlUser@localhost) [bibliotheque]> INSERT INTO livre (idLivre, titre, auteur, annee) > VALUES (, "On a perdu la moiti de lUnivers", Jean-Pierre Petit, 2001); ERROR 1142 (42000): La commande INSERT est interdite lutilisateur: mysqlUser@@localh ##==> mysqlUser peut pas ajouter un enregistrement

Autoriser lutilisateur mysqlUser ajouter des donnes dans la table livre :


mysql> GRANT insert ON bibliotheque.* TO mysqlUser@localhost; Query OK, 0 rows affected (0.00 sec)

## Vrification... (mysqlUser@localhost) [bibliotheque]> INSERT INTO livre (idLivre, titre, auteur, annee) > VALUES (, "On a perdu la moiti de lUnivers", Jean-Pierre Petit, 2001); Query OK, 1 row affected, 1 warning (0.00 sec)

(mysqlUser@localhost) [bibliotheque]> UPDATE livre SET annee=1995 WHERE auteur=Stephen Ha ERROR 1142 (42000): La commande UPDATE est interdite lutilisateur: mysqlUser@@localh ##==> mysqlUser peut pas modifier un enregistrement

Note : Pour que le changement de droits soit effectif, il semble ncessaire que lutilisateur se dconnecte/re-connecte au serveur MySQL

Accorder tous les droits sur la base de donnes (slection, insertion, cration de nouvelles tables. . .), la syntaxe est la suivante :
mysql> GRANT ALL PRIVILEGES ON bibliotheque.* TO mysqlUser@localhost; Query OK, 0 rows affected (0.00 sec)

211

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes

## Vrification... (mysqlUser@localhost) [bibliotheque]> UPDATE livre SET annee=1995 WHERE auteur=Stephen Ha Query OK, 1 row affected (0.00 sec) Enregistrements correspondants: 1 Modifis: 1 Warnings: 0

10.1.4.9. Executer des requtes SQL dans un script (batch le)


Il est possible dexecuter des requtes SQL dans un script via un chier (batch le mode) Syntaxe :
$ mysql db_name < script.sql > output.tab

10.1.4.10. Sauvegarde & Restauration


Differentes mthodes disponible en bref... Pour plus dinformation : Backup and Recovery (http://dev.mysql.com/doc/refman/5.0/en/backup-and-recovery.html) Mthode1: Copier les chiers de tables (via commande systme cp, scp, tar, rsync) :
Pour lengin de stockage qui reprsente chaque table dans son propre fichier, les tables peuvent tre sauvegards en copiant simplement ces fichiers. Par example, les tables MyISAM sont stocks dans des fichiers :*.frm, *.MYD, and *.MYI, il suffit simplement des les copiers. Pour obtenir une sauvegarde consistent, il est ncessaire de stopper le serveur ou de faire un LOCK TABLES sur chacune des tables suivit dun FLUSH TABLES pour les tables.

Mthode2 : Crer des chiers texte contenu des tables :


## Syntaxe mysql> SELECT * INTO OUTFILE file_name FROM tbl_name; ## Example mysql> SELECT * INTO OUTFILE livre.txt FROM livre; Query OK, 3 rows affected (0.01 sec)

212

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes

mysql> SELECT * INTO OUTFILE /home/filostene/livre.txt FROM livre; ERROR 1 (HY000): Cant create/write to file /home/filostene/livre.txt (Errcode: 13)

Note : Par dfaut, le chier livre.txt (docs/sr009-ch02-bibliotheque-livre.txt) est cr dans le repertoire /var/lib/mysql/bibliotheque/. Il nest pas possible de changer cette location moins de donner accs lutilisateur systme mysql cette dite location

Mthode3 : mysqldump (programme)


## Syntaxe $ mysqldump db_name > dump_file $ mysqldump --tab=/path/to/some/dir db_name ## Example $ mysqldump bibliotheque > bibliotheque.txt $ mkdir /tmp/dump/ $ chgrp mysql /tmp/dump/ $ chmod g+w /tmp/dump/ $ mysqldump --tab=/tmp/dump/ bibliothequels $ ls -l /tmp/dump/ -rw-r--r-- 1 root root 1403 jan 2 15:42 livre.sql -rw-rw-rw- 1 mysql mysql 141 jan 2 15:42 livre.txt

## Alternative

Resultat : bibliotheque.txt (docs/sr009-ch02-mysqldump1-bibliotheque.txt) livre.sql (docs/sr009-ch02-mysqldump2-livre.sql) livre.txt (docs/sr009-ch02-mysqldump2-livre.txt)


Note : mysqldump est plus gnral parce quil peut sauvegarder tout type de tables tandis que mysqlhotcopy ne fonctionne pas avec tous les engins de stockage.

RESTAURER : les chiers dump au format SQL on peut utiliser le client mysql. Pour les chiers text-dlmits on peut utiliser la commande MySQL LOAD DATA INFILE ou le script mysqlimport. Mthode4: mysqlhotcopy (script pour tables MyISAM), ibbackup (script pour tables InnoDB) :
## Syntaxe $ mysqlhotcopy db_name /path/to/some/dir ## Example $ mysqlhotcopy bibliotheque /tmp/dump/ Locked 1 tables in 0 seconds. Flushed tables (bibliotheque.livre) in 1 seconds.

213

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes
Copying 4 files... Copying indices for 0 files... Unlocked tables. mysqlhotcopy copied 1 tables (4 files) in 1 second (1 seconds overall). $ ls -l /tmp/dump/bibliotheque -rw-rw---- 1 mysql mysql 65 jan -rw-rw---- 1 mysql mysql 8664 jan -rw-rw---- 1 mysql mysql 152 jan -rw-rw---- 1 mysql mysql 2048 jan

2 2 2 2

12:05 12:40 14:02 15:52

db.opt livre.frm livre.MYD livre.MYI

RESTAURER: Utiliser mysqlhotcopy (ou ibbackup pour InnoDB) pour copier en retour les tables dans le repertoire dorigine

10.1.5. Vulnrabilits du moteur PHP


Source(s):

Web: Vulnrabilits du moteur PHP (AtLab la scurit offensive) (http://www.ossir.org/paris/supports/2010/2010-01-12/ATLAB-OSSIR.pdf)

10.1.6. Language de script - PHP - Installation et conguration


Source(s):

OF: SR009-ch03-php.pdf (docs/eof/sr009-ch03-php.pdf)

La troisime brique dont nous avons besoin est un language de script pour interfacer nos page Web dynamique avec la base de donnes.
Un langage de script est un langage de programmation qui permet de manipuler les fonctionnalits dun systme informatique congur pour fournir linterprteur de ce langage un environnement et une interface qui dterminent les possibilits de celui-ci. Le langage de script peut alors saffranchir des contraintes de bas niveau prises en charge par lintermdiaire de linterface et bncier dune syntaxe de haut niveau. http://fr.wikipedia.org/wiki/Langage_de_script

214

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes Ici nous installerons PHP mais il en existe dautres: python, ruby, perl, etc... (http://fr.wikipedia.org/wiki/Langage_de_script#Liste_des_langages_de_script)
PHP (ofciellement, ce sigle est un acronyme rcursif pour PHP: Hypertext Preprocessor) est un langage de scripts gnraliste et Open Source, spcialement conu pour le dveloppement dapplications web. Il peut tre intgr facilement au HTML. http://www.php.net/manual/fr/intro-whatis.php

10.1.6.1. Installation de base


Source(s):

Web: Considrations gnrales sur linstallation (http://www.php.net/manual/fr/install.general.php) Apache 2.0 sur les systmes Unix (http://www.php.net/manual/fr/install.unix.apache2.php) Notes dinstallation sous Debian GNU/Linux (http://www.php.net/manual/fr/install.unix.debian.php)

Dans le cadre dune premire dcouverte je me contenterais du paquet Debian avec la conguration par dfaut. Ce sera gage dune meilleure stabilit dans un premier temps. Description des paquets de base :

php5

Il sagit dun mtapaquet qui, une fois install, vous guarantit que vous disposez dun interprteur php5 cot serveur fonctionnel. Si Apache 2 est install sur votre machine, alors le paquet libapache2-mod-php5 sera automatiquement install. Pour Apache 1.3, ce sera le paquet libapache-mod-php5. ce paquet vous fournit linterprteur de commande /usr/bin/php5 utile pour tester les scripts php dans un terminal, ou mme pour crire de vritables scripts si python ou perl vous font peur. ce paquet fournit un module php pour les connexions directes aux bases de donnes MySQL depuis un script php.

php5-cli

php5-mysql

Installation :
$ apt-get update $ apt-get install php5 php5-cli php5-mysql Lecture des listes de paquets... Fait Construction de larbre des dpendances Lecture des informations dtat... Fait Les paquets supplmentaires suivants seront installs : apache2-mpm-prefork libapache2-mod-php5 php5-common Paquets suggrs :

215

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes
php-pear Les paquets suivants seront ENLEVS : apache2-mpm-worker Les NOUVEAUX paquets suivants seront installs : apache2-mpm-prefork libapache2-mod-php5 php5 php5-cli php5-common php5-mysql 0 mis jour, 6 nouvellement installs, 1 enlever et 2 non mis jour. Il est ncessaire de prendre 5628ko dans les archives. Aprs cette opration, 12,0Mo despace disque supplmentaires seront utiliss. ... Stopping web server: apache2 ... waiting .. ... Starting web server: apache2. ... Paramtrage de php5-common (5.2.6.dfsg.1-1+lenny4) ... Paramtrage de libapache2-mod-php5 (5.2.6.dfsg.1-1+lenny4) ... Creating config file /etc/php5/apache2/php.ini with new version Reloading web server config: apache2. Paramtrage de php5 (5.2.6.dfsg.1-1+lenny4) ... Paramtrage de php5-cli (5.2.6.dfsg.1-1+lenny4) ... Creating config file /etc/php5/cli/php.ini with new version Paramtrage de php5-mysql (5.2.6.dfsg.1-1+lenny4) ...

Le serveur Apache a t redmarr durant lopration... Deux chiers de conguration on t crs...

10.1.6.2. Test en ligne de commande - Premier script


Vrier si linterprteur en ligne de commande est correctement install et fonctionnel:
$ ls -lh /usr/bin/php lrwxrwxrwx 1 root root 21 jan

2 16:39 /usr/bin/php -> /etc/alternatives/php

$ ls -lh /etc/alternatives/php lrwxrwxrwx 1 root root 13 jan 2 16:39 /etc/alternatives/php -> /usr/bin/php5

## Test mode interactif $ php -a Interactive mode enabled <?php echo "Hello world!"; Hello world! ?> ^C

## lancer linterprteur en mode interactif

## Appuyez sur ctrl+C pour quitter linterprteur.

## Test mode script $ cat > test.php <<EOF

216

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes
> > > > > > <?php echo "Ceci est un script php\n"; \$i=1; echo "i vaut \$i\n"; ?> EOF

$ php test.php Ceci est un script php i vaut 1

Note : En mode interactif, il nest pas forcment ncessaire dintroduire le script par <?php, cette commande peut parfois ne pas tre reconnue par linterprteur et peut gnrer une erreur. Pour PHP, lorsquon lance linterprteur en cli, il est normal de ne pas avoir besoin de lui prciser quon vas faire du PHP, puisquon es dj dans linterprteur php :)

Rendons le script excutable directement :


## Ajouter simplement la ligne suivante au dbut du programme ## pour indique directement dans le script linterprteur utiliser : #!/usr/bin/php ## Rendre le script executable $ chmod u+x test.php ## Lancer le script $ ./test.php Ceci est un script php i vaut 1

10.1.6.3. Interrogation dune base de donnes


Un script minimaliste bibliotheque.php (docs/sr009-ch03-bibliotheque-php.txt) permet de se connecter la base de donnes bibliotheque que nous avez cre prcdemment et y faire une requte. La connexion la base de donnes se fera avec lutilisateur mysqlUser. Il est suppos que la base de donnes bibliotheque est cre et que lutilisateur peut effectivement se connecter cette base de donnes.
$ chmod u+x bibliotheque.php $ ./bibliotheque.php connexion russie ! la slection de la base a russi !

217

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes
rsultat : ======== Une brve histoire du temps Stephen Hawking 1995 MySQL 5 Cyril Thibaud 2006 On a perdu la moiti de lUnivers Jean-Pierre Petit 2001

Note : Si une erreur du type suivant avait t obtenu :

Fatal error: Call to undefined function mysql_pconnect() in /home/grossard/bibliotheque.php on lin

Il aurait fallut vriez que la ligne suivante soit dcommente dans le chier /etc/php5/cli/php.ini :
extension=mysql.so ## Module PHP de connection la base de donnes MySQL

10.1.6.4. Test avec le serveur HTTP (Apache)


Lobjectif est ici de vrier que Apache est capable dinterprter correctement un script php : test.php On copie le chier la racine des documents du serveur Apache /var/www, on ouvre un navigateur et on saisielURL :
http ://localhost/test.php

Note : La page ne safche pas correctement, le navigateur propose simplement de la tlcharger ! Apache doit tre congurer pour interprter les script PHP.

Congurer Apache :

218

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes
Modifier le fichier de configuration de Apache afin de linformer : 1. quil doit utiliser la bilbiothque de php5, 2. quil doit considrer les fichiers portant les extensions php, php3 ou php4 (ou ce que vous voulez) comme des scripts php, 3. quil doit automatiquement interprter index.php sil existe.

Les modications nont pas t effectues automatiquement lors de linstallation de PHP. Vriez tout de mme la prsence des lignes suivantes dans les chier de conguration dApache.
$ ls /etc/apache2/mods-enabled/ ... php5.load ... ## Le fichier existe

$ cat /etc/apache2/mods-enabled/php5.load ## Contenu OK LoadModule php5_module /usr/lib/apache2/modules/libphp5.so ## Indique Apache o trouver ## la bibliothque de fonctions $ ls -l /usr/lib/apache2/modules/libphp5.so ## Bibliothque bien prsente -rw-r--r-- 1 root root 5450680 nov 22 02:49 /usr/lib/apache2/modules/libphp5.so

$ ls -l /etc/apache2/mods-available/php5.conf -rw-r--r-- 1 root root 133 nov 22 02:48 /etc/apache2/mods-available/php5.conf

$ cat /etc/apache2/mods-available/php5.conf <IfModule mod_php5.c> AddType application/x-httpd-php .php .phtml .php3 ## indique Apache que les fichiers av AddType application/x-httpd-php-source .phps ## .php .phtml et .php3 sont interpr </IfModule> ## comme des scripts php

La conguration est correcte ! Essayons de re-dmarrer le serveur pour quil reprenne en compte cet conguration :
$ /etc/init.d/apache2 restart Restarting web server: apache2 ... waiting . ## Testons nouvau dans le navigateur... http ://localhost/test.php

Note : Cette fois a marche, la page safche correctement, le script test.php est correctement interprt. Si on le renome en index.php, le serveur Apache le prends en compte directement.

219

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes Figure 10-1. Script PHP avec Apache

10.1.6.5. Accder la documentation

Page de Manuel en Local (man) :


$ man php

En ligne (web) : Documentation / Tutoriels (http://php.net/docs.php) Manuel PHP (FR) (http://php.net/manual/fr/index.php)

10.1.6.6. Fichier de Conguration - php.ini

Web : Congurer PHP (FR) (http://www.php.net/manual/fr/conguration.php) Directives du php.ini (http://www.php.net/manual/fr/ini.php) Dernire version du php.ini (http://svn.php.net/viewvc/php/php-src/trunk/php.ini-production?view=co)

220

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes Toutes les options de conguration de php sont regroupes dans un chier unique nomm php.ini se trouvant dans les dossiers :
$ find / -name php.ini -print /etc/php5/apache2/php.ini /etc/php5/cli/php.ini

## Utilis par le serveur web Apache ## Utilis par la librairie CLI (ligne de commande - Interf

On peut y congurer des choses comme les balises prendre en compte, la gestion de la scurit ou encore les ressources du systme alloues php. Ce chier est galement lu par Apache chaque dmarrage du serveur web ou par utilis par la librairie CLI (php en ligne de commande - Interface interactive). Dans un premier temps, laissons les chiers dorigine avec les options par dfaut : /etc/php5/apache2/php.ini (docs/sr009-ch03-apache2-php-ini.txt) & /etc/php5/cli/php.ini (docs/sr009-ch03-cli-php-ini.txt) La diffrence entre les deux chiers est minime :
$ diff /etc/php5/apache2/php.ini /etc/php5/cli/php.ini 270c270 < memory_limit = 128M ; Maximum amount of memory a script may consume (128MB) --> memory_limit = 32M ; Maximum amount of memory a script may consume (32MB)

Quelques options de conguration intressantes :


Option doc_root rpertoire

open_basedir rpertoire

include_path rpertoire

magic_quotes_gpc on|off

magic_quotes_runtime on|off

max_execution_time secondes memory_limit octets

Description Nom du rpertoire racine de php. Quand loption safe_mode est active, seuls les scripts php accessibles sont ceux situ ce rpertoire liste des rpertoires accessibles aux fonctions daccs aux fi de php. . indique que seuls les fichiers du rpertoire cou peuvent tre ouverts liste des rpertoires dans lesquels chercher les fichiers appe par les fonctions include et require. Ceci permet de crer des bibliothques de fonctions communes plusieurs sites Si cette option est active, les apostrophes, \ et NULL sont a tomatiquement prcds dun \ pour les variables GET, POST et les cookies Si cette option est active, les apostrophes, \ et NULL sont a matiquement prcds dun \ pour les chanes provenant dune base de donnes ou dun fichier Temps maximal dexcution dun script mmoire maximale alloue un script

221

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes
track_vars on|off

Si cette option est active, les tableaux associatifs HTTP_GET_VARS, HTTP_POST_VARS et HTTP_COOKIE_VARS sont crs au dbut de chaque script file_uploads on|off Si cette option est active, le client peut envoyer des fichie sur le serveur upload_tmp_dir rpertoire rpertoire dans lequel sont stocks les fichiers envoys par l client (/tmp par dfaut sous Linux) upload_max_filesize taille taille maximale des fichiers envoys par le client safe_mode on|off Si cette option est active, php est excut en mode scuris. ce cas, seuls les scripts situs sous doc_root peuvent tre ex safe_mode_exec_dir rpertoire si loption safe_mode est active, seuls les programmes situs dans ce rpertoire pourront tre excuts avec la fonction sys

10.1.6.7. Afcher conguration courante : phpinfo()


La fonction phpinfo() permet dafcher de nombreuses informations sur PHP, concernant sa conguration courante : options de compilation, extensions, version, informations sur le serveur, et lenvironnement (lorsquil est compil comme module), environnement PHP, informations sur le systme, chemins, valeurs gnrales et locales de conguration, en-ttes HTTP et la licence PHP.

Comme tous les systmes sont congurs diffremment, phpinfo() sert gnralement vrier la conguration ainsi que les variables prdnies, pour une plate-forme donne. phpinfo() est un bon outil de dbogage, car il afche le contenu de toutes les variables EGPCS (Environnement, GET, POST, Cookie, Serveur). http://uk3.php.net/manual/fr/function.phpinfo.php

Crons un chier info.php contenant le code suivant, et plaons le dans repertoire /var/www/ :
$ > > > > cat > /var/www/info.php <<EOF <?php phpinfo(); ?> EOF

Puis ouvrons le navigateur :


http://localhost/info.php

222

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes Figure 10-2. Script PHPinfo() avec Apache

C ti pa bo a !!!

10.1.6.8. Rgle dOR: Vrier linstallation de PHP avec le systme


Note : Ne jamais faire conance aux scripts de dmarrage et ce quils renvoient lcran !!! Toujours vrier linstallation avec le systme.

Sassurer que PHP est bien actif et oprationnel. Le langage doit tre install, ventuellement avec ses bibliothques. Comment vrier quil est bien prsent (on ne parle pas encore des bibliothques). Il y a plusieurs faons de faire :

223

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes
## Liste des paquets php qui sont installs $ dpkg -l * | grep php | grep ^ii ii libapache2-mod-php5 5.2.6.dfsg.1-1+lenny4 ii php5 5.2.6.dfsg.1-1+lenny4 ii php5-cli 5.2.6.dfsg.1-1+lenny4 ii php5-common 5.2.6.dfsg.1-1+lenny4 ii php5-mysql 5.2.6.dfsg.1-1+lenny4

server-side, server-side, command-line Common files MySQL module

HTML-embedded scripting lang HTML-embedded scripting lang interpreter for the php5 scr for packages built from the for php5

## Emplacement de linterprteur (vue du systme donne par la variable $PATH) $ which php5 | xargs ls -al -rwxr-xr-x 1 root root 5318592 nov 22 02:49 /usr/bin/php5 ## Version installe $ php -v PHP 5.2.6-1+lenny4 with Suhosin-Patch 0.9.6.2 (cli) (built: Nov 22 2009 02:38:03) Copyright (c) 1997-2008 The PHP Group Zend Engine v2.2.0, Copyright (c) 1998-2008 Zend Technologies ## Vrifions que linterprteur fonctionne avec un script $ cat > test.php <<EOF > <?php > echo coucou; > ?> > EOF $ php test.php coucou

L plus de soucis, a fonctionne :))

10.1.7. phpMyAdmin - Installation et conguration


Source(s):

OF: SR009-ch04-phpmyadmin.pdf (docs/eof/sr009-ch04-phpmyadmin.pdf) Web: phpMyAdmin on the web (EN) (http://www.phpmyadmin.net/home_page/) phpMyAdmin on SourceForge (EN) (http://sourceforge.net/projects/phpmyadmin/)

phpMyAdmin (PMA) est une interface de gestion pour systme de gestion de base de donnes MySQL ralise en PHP et distribue sous licence GNU GPL. http://fr.wikipedia.org/wiki/PhpMyAdmin

224

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes

10.1.7.1. Installation de base


Jaurais pu tlcharger et installer la dernire version disponible de phpMyAdmin (http://www.phpmyadmin.net/home_page/downloads.php) mais dans le cadre dune premire dcouverte je me contenterais du paquet Debian avec la conguration par dfaut. Ce sera gage dune meilleure stabilit dans un premier temps. Linstallation de phpMyAdmin est immdiate :
$ apt-get install phpmyadmin Lecture des listes de paquets... Fait Construction de larbre des dpendances Lecture des informations dtat... Fait Les paquets supplmentaires suivants seront installs : libgd2-xpm libmcrypt4 libt1-5 php5-gd php5-mcrypt Paquets suggrs : libgd-tools libmcrypt-dev mcrypt Les paquets suivants seront ENLEVS : libgd2-noxpm Les NOUVEAUX paquets suivants seront installs : libgd2-xpm libmcrypt4 libt1-5 php5-gd php5-mcrypt phpmyadmin 0 mis jour, 6 nouvellement installs, 1 enlever et 2 non mis jour. Il est ncessaire de prendre 3384ko dans les archives. Aprs cette opration, 11,3Mo despace disque supplmentaires seront utiliss. ... Paramtrage de phpmyadmin (4:2.11.8.1-5+lenny3) ... Reloading web server config: apache2.

Durant linstallation, lcran suivant est apparu et a t renseign comme suit :

225

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes Figure 10-3. phpMyAdmin Install Prompt

lissue de linstallation, tous les scripts de phpMyAdmin (et autres chiers) sont placs dans le rpertoire /usr/share/phpmyadmin et il y a normalement un lien symbolique dans /var/www qui pointe sur le rpertoire dinstallation :

226

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes
$ ls /usr/share/phpmyadmin/ browse_foreigners.php license.php server_sql.php calendar.php main.php server_status.php changelog.php navigation.php server_variables.php ... config.header.inc.php phpinfo.php tbl_addfield.php config.inc.php phpmyadmin.css.php tbl_alter.php ... db_sql.php print.css tbl_replace.php db_structure.php querywindow.php tbl_row_action.php docs.css readme.php tbl_select.php Documentation.html scripts tbl_sql.php error.php server_binlog.php tbl_structure.php ... lang server_privileges.php user_password.php libraries server_processlist.php view_create.php $ ls -l /var/www/ drwxr-xr-x 2 root root 4096 dc 25 01:12 htdig -rw-r--r-- 1 root root 117 jan 2 17:47 index.php -rw-r--r-- 1 root root 20 jan 3 15:18 info.php

Note : Pour une raison que jignore il ny a pas de lien symbolique dans /var/www/ mais cela ne semble pas utile.

Vrions que cela fonctionne, naviguons :


http://localhost/phpmyamdin

## Il faut videmment au pralable lancer les serveurs Apache e

227

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes Figure 10-4. phpMyAdmin - Page daccueil

228

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes

10.1.7.2. Accder la documentation

En local : http://localhost/phpmyadmin/Documentation.html (EN) (http://localhost/phpmyadmin/Documentation.html) Web : phpMyAdmin Manuel (FR) (http://www.phpmyadmin.net/localized_docs/fr/Documentation.html) Documentation principale (EN) (http://www.phpmyadmin.net/home_page/docs.php) Documentation en Francais (FR) (http://www.phpmyadmin.net/localized_docs/fr/)

10.1.7.3. Conguration de phpMyAdmin


Source(s):

Web: Description des paramtres de conguration (http://www.phpmyadmin.net/localized_docs/fr/Documentation.html#cong)

Il y a les chiers de conguration dans /etc/phpmyadmin cest l que lon peut modier les paramtres :
## Fichiers utiliss sur Debian $ ls -l /etc/phpmyadmin/ -rw-r--r-- 1 root root 983 -rw-r--r-- 1 root root 168 -rw-r--r-- 1 root root 168 -rw-r--r-- 1 root root 1936 -rw-r----- 1 root www-data 8 -rw-r--r-- 1 root root 500

oct oct oct oct jan oct

24 24 24 24 3 24

12:34 12:34 12:34 12:34 18:24 12:34

apache.conf ## Ce fichier est copier config.footer.inc.php (docs/sr009-ch04-phpmyadm config.header.inc.php (docs/sr009-ch04-phpmyadm config.inc.php (docs/sr009-ch04-phpmyadmin-etchtpasswd.setup lighttpd.conf

## Fichiers non utiliss sur Dbian $ ls -l /usr/share/phpmyadmin/conf* -rw-r--r-- 1 root root 181 oct 24 12:34 -rw-r--r-- 1 root root 181 oct 24 12:34 -rw-r--r-- 1 root root 1263 oct 24 12:34 -rw-r--r-- 1 root root 1751 jui 28 2008

/usr/share/phpmyadmin/config.footer.inc.php (docs/s /usr/share/phpmyadmin/config.header.inc.php (docs/s /usr/share/phpmyadmin/config.inc.php (docs/sr009-ch /usr/share/phpmyadmin/config.sample.inc.php

$ diff /etc/apache2/conf.d/phpmyadmin.conf /etc/phpmyadmin/apache.conf ## Aucune diffrence. Le premier est celui effectivement utilis par Apache...

Presque toutes les donnes de conguration sont places dans cong.inc.php.

229

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes
Note : Attention, il y a un chier dans /etc/phpmyadmin et un autre dans /usr/share/phpmyadmin qui fait les inclusions de chiers (de /etc/phpmyadmin et autres...) et congure des valeurs par dfaut si besoin. Sur Debian, le chier de conguration est maintenu dans /etc/phpmyadmin et peut-tre different certains gard de la documentation phpMyAdmin (source: Distribution Debian spcique (http://www.phpmyadmin.net/home_page/downloads.php#distributions)).

Les paramtres relatifs la conception (comme les couleurs), se trouvent dans themes/themename/layout.inc.php. Il est possible galement de modier les chiers cong.footer.inc.php et cong.header.inc.php pour ajouter du code spcique inclure en en-tte et en pied de chaque page. Quelques options interressantes :
$cfg[blowfish_secret] chane Le mode dauthentification par cookie utilise lalgorithme blowfish pour chiffrer le mot de passe. $cfg[Servers] tableau Contient les informations de connexions pour les diffrents serveurs. Le premier $cfg[Servers][$i][host] contient le nom dhte du premier serveur, le second $cfg[Servers][$i][host] le nom dhte du second serveur, etc. $cfg[Servers][$i][host] chane Le nom dhte ou ladresse IP de votre $i-me serveur MySQL. Cest--dire localhost. $cfg[Servers][$i][port] chane Le numro de port de votre $i-me serveur MySQL. Par dfaut : 3306 (laissez blanc pour utiliser la valeur par dfaut). $cfg[Servers][$i][socket] chane Le chemin daccs vers le socket utiliser. Laissez blanc pour utiliser la valeur par dfaut. $cfg[Servers][$i][ssl] boolen Pour activer ou pas une connexion SSL vers le serveur MySQL.

$cfg[Servers][$i][connect_type] chane Quel type de connexion utiliser avec le serveur MySQL. Vos choix sont socket et tcp. Par dfaut, cest tcp... $cfg[Servers][$i][extension] chane Dfinit lextension php MySQL utilise pour la connexion. Les options autorises sont : mysql : Lextension MySQL classique. Cest loption recommande et par dfaut ce jour. mysqli : Lextension MySQL amliore. Cette extension devient disponible avec php

230

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes
version 5.0.0, et recommande pour se connecter sur un serveur excutant MySQL version 4.1.x ou suivantes.

$cfg[Servers][$i][compress] boolen Pour utiliser ou non un protocole compress pour la connexion au serveur MySQL (exprime Cette fonctionnalit requiert PHP version 4.3.0 ou ultrieure.

$cfg[Servers][$i][auth_type] chane [HTTP|http|cookie|config|signon] Dfinit le mode dauthentification config, cookie, signon ou HTTP qui sera utilis sur l ... Veuillez consulter la section Installation sur Utiliser les modes dauthentification pour plus de renseignements. $cfg[Servers][$i][user] chane $cfg[Servers][$i][password] chane En utilisant auth_type = config, cest la paire utilisateur/mot de passe quutilisera phpMyAdmin pour se connecter au serveur MySQL. Cette paire utilisateur/mot de passe nest pas ncessaire quand les modes dauthentification HTTP ou cookie sont utiliss, et doit rester vide.

$cfg[Servers][$i][only_db] chane ou tableau Sil est indiqu un nom de base de donnes (ou un tableau de noms de bases de donnes) , seule(s) cette (ces) base(s) sera (seront) affiche(s) lutilisateur. $cfg[Servers][$i][pdf_pages] chane Depuis la version 2.3.0, phpMyAdmin peut crer des pages PDF montrant les relations entre vos tables. Pour ce faire, il a besoin de deux tables pdf_pages (qui stocke les informations sur les pages PDF disponibles) et table_coords (qui stocke les coordonnes o chaque table sera place sur le schma PDF ralis). ... Astuce dutilisation : Ralisation de PDF. $cfg[Servers][$i][AllowRoot] boolen Autoriser ou non un accs la racine. Il sagit seulement dun raccourci pour les rgles AllowDeny ci-dessous. $cfg[Servers][$i][AllowNoPassword] boolen Permet dautoriser les connexions sans mot de passe. La valeur par dfaut est false... $cfg[Servers][$i][AllowDeny][order] chane Si votre rgle order est vide, alors lauthentification IP est dsactive.

Si votre rgle order est dfinie deny,allow alors le systme applique toutes les rgles deny puis les rgles allow . Laccs est autoris par dfaut... $cfg[Servers][$i][SignonURL] chane URL o sera redirig lutilisateur pour se connecter avec le mode dauthentification signon. Doit tre absolue et inclure le protocole. $cfg[Servers][$i][LogoutURL] chane URL o sera redirig lutilisateur aprs la dconnexion (ceci naffecte pas la mode dauthentification config). Doit tre absolue et inclure le protocole.

231

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes

$cfg[ServerDefault] entier Si vous avez plus dun serveur, vous pouvez dfinir $cfg[ServerDefault] sur nimporte lequel dentre eux pour sauto-connecter sur celui-ci quand phpMyAdmin est dmarr, ou le dfinir 0 sur tous les serveurs pour avoir une liste de serveurs auxquels se connecter. Si vous navez quun seul serveur, $cfg[ServerDefault] DOIT tre dfini sur ce serveur

$cfg[PersistentConnections] boolen Dfinit si les connexions persistantes doivent tre utilises (mysql_connect ou mysql_pc $cfg[ForceSSL] boolen Pour forcer ou pas lutilisation de https lors de laccs phpMyAdmin. $cfg[ExecTimeLimit] entier [nombre de secondes] Dfinit le nombre de secondes alloues un script pour sexcuter. Si le nombre de secondes est dfini zro, aucune limite de temps nest impose. $cfg[MemoryLimit] entier [nombre doctets] Dfinit le nombre doctets quun script est autoris allouer. Si ce nombre est dfini zro, aucune limite nest impose. $cfg[ShowSQL] boolen Dfinit si les requtes SQL gnres par phpMyAdmin doivent tre affiches. $cfg[ShowPhpInfo] boolen $cfg[ShowChgPassword] boolen $cfg[ShowCreateDb] boolen Dfinit si on affiche les liens Afficher les informations relatives PHP et Modifier le mot de passe ou le formulaire de crtion de base de donnes dans le cadre principal (de droite) de dmarrage. ...

$cfg[MaxRows] entier Nombre de colonnes affiches lors de la navigation sur un ensemble de rsultats. Si le nombre des colonnes est suprieur, des liens Suivant et Prcdent seront a

$cfg[ZipDump] boolen $cfg[GZipDump] boolen $cfg[BZipDump] boolen Dfinit si on utilise la compression zip/GZip/BZip2 lors de la cration de fichiers dex

$cfg[CompressOnFly] boolen Dfinit si on autorise la compression la vole pour des exportations au formats GZip/B

$cfg[DefaultLang] chane Dfinit la langue par dfaut utiliser, si ce nest pas le cas, la configuration du navigateur ou celle de lutilisateur sera utilise. Voir le script select_lang.lib.php pour connatre les valeurs autorises pour ce paramt

$cfg[Lang] chane Force : toujours utiliser cette langue (doit tre dfini dans le script select_lang.lib.

232

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes

$cfg[FilterLanguages] chane Limite la liste des langues disponibles celle concordant une expression rgulire do Par exemple, si vous ne voulez que le tchque et langlais, vous devrez dfinir le filtre suivant : ^(cs|en). $cfg[TrustedProxies] tableau Liste les proxies et les en-ttes HTTP qui sont srs pour IP Allow/Deny. Cette liste est vide par dfaut. $cfg[SaveDir] chane Le nom du rpertoire o les fichiers dexportation peuvent tre sauvegards. Si vous voulez un rpertoire diffrent pour chaque utilisateur, %u sera remplac par le nom dutilisateur... $cfg[TempDir] chane Le nom du rpertoire o les fichiers temporaires peuvent tre stocks... $cfg[Export] tableau Dans ce tableau sont dfinis les paramtres par dfaut pour les fichiers dexportation; $cfg[Import] tableau Dans ce tableau sont dfinis les paramtres par dfaut pour limportation. ...

10.1.7.4. Modes dauthentication


Il existe trois modes dauthentication dans phpMyAdmin :
- par HTTP - par cookie (par dfaut) - partir du fichier de configuration

Note : Quelle que soit la mthode dauthentication utilise, gardons lesprit que le mot de passe transite en clair, moins dutiliser le protocole HTTPS. Pour ma part je choisis de conserver la mthode par dfaut pour le moment.

10.1.7.4.1. Par HTTP Avec ce mode dauthentication, lors de la connexion phpMyAdmin, le serveur Apache propose une bote dauthentication dans laquelle il demande le nom dutilisateur et le mot de passe. Il doit sagir dun compte MySQL valable. Si cest le cas, une session est ouverte.

233

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes Pour ce mode dauthentication, phpMyAdmin a besoin dun utilisateur de contrle - pma - ayant seulement le privilge SELECT sur les tables mysql.user. Sur Debian, lors de linstallation de phpMyAdmin, cet utlisateur est automatiquement cr dans MySQL et ses droits correctements positionns. Si aucun compte na encore t cr, le comte root du serveur de base de donnes peut tre utilis. Pour activer ce mode dauthentication, assurez-vous que la ligne suivante est prsente dans le chier cong.inc.php :
$cfg[Servers][$i][auth_type] = http;

10.1.7.4.2. Par cookie (mode par dfaut) Bien sr, avec cette mthode dauthentication, lutilisateur doit activer les cookies dans son navigateur. Avec ce mode, lutilisateur peut rellement se dconnecter de phpMyAdmin et se reconnecter avec le mme nom dutilisateur. La mthode dauthentication par cookie utilise lalgorithme blowsh pour chiffrer le mot de passe. Voici la ligne correspondante dans le chier de conguration /var/lib/phpmyadmin/blowsh_secret.inc.php :
$cfg[blowfish_secret] = mettez ici la phrase de votre choix; ## Fait ;-)

Note : Il y a un chier de cr par dfaut dans /etc/phpmyadmin qui est inclus (directive include) dans /usr/share/phpmyadmin/

Jy est rentr la phrase de mon choix. Elle sera utilise de manire interne par lalgorithme blowsh : cette phrase mot de passe ne mest plus demande. Le nombre maximum de caractres pour ce paramtre semble tre 46. La mthode dauthentication sur cookie peut galement tre paramtrer dans le chier de conguration cong.inc.php :
$cfg[Servers][$i][auth_type] = cookie;

234

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes 10.1.7.4.3. Par chier de conguration (le moins scuris) Ce mode est le moins scuris car il requiert de remplir les champs $cfg[Servers][$i][user] et $cfg[Servers][$i][password] dans le chier de conguration. Mais vous navez pas besoin de dnir un utilisateur de contrle - pma , ici lutilisation de $cfg[Servers][$i][only_db] savre sufsante. Il est recommend de ne pas dutiliser cette mthode dauthentication, dautant plus que lutilisateur de contrle pma est dj cr sur mon systme. 10.1.7.4.4. Test de connection Figure 10-5. phpMyAdmin - Connection Root

Figure 10-6. phpMyAdmin - Connection Utilisateur

235

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes

10.1.7.5. Conseils pour scuriser phpMyAdmin


Si vous utilisez un serveur qui ne peut pas tre accd par dautres personnes, il est sufsant dutiliser la protection de rpertoire fournie avec votre serveur web (avec Apache vous pouvez utiliser les chiers .htaccess, par exemple). Si dautres personnes ont un accs telnet votre serveur, vous devriez utiliser la fonctionnalit dauthentication HTTP de phpMyAdmin. Suggestions :

- Votre fichier config.inc.php devrait tre chmod 660. - Tous les fichiers phpMyAdmin devraient tre chown -R phpmy :apache, o phpmy est un utilis dont le mot de passe est connu de vous seul, et apache (en gnral www-data sur les dist sur Debian) est le groupe avec lequel Apache est excut. - Vous devriez utiliser le mode scuris de PHP, pour vous protger des autres utilisateurs inclure votre fichier config.inc.php dans leurs scripts.

10.1.7.6. phpMyAdmin, apprenons nous en passer !


Le mode interactif "mysql>" nest pas si terrible prendre en main ; il faut tre bien au fait des commandes et syntaxe SQL, ce qui demande un certain apprentissage que phpMyAdmin peut aider acqurir. MySQLnavigator (http://sourceforge.net/projects/mysqlnavigator/) est un autre outil en interfaces graphiques qui semble plus lger utiliser que phpMyAdmin, il ne ncessite pas de browser web. Dans le cadre de la formation CP2LL, on nous demande dinstaller phpMyAdmin, mais par la suite, il faudra quon sache faire sans (interfaces graphiques), cela nous rendra dautant plus performant... En matire dadministation de serveur on a rarement les machines sous la main et quasiment jamais dinterface graphique.

10.1.7.7. Didacticiel
En suivant le didacticiel contenu dans le poly OF...les requtes ci-dessous safchent...
## Root execute : # requte SQL 1: CREATE DATABASE videotheque ;

236

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes
# requte SQL 2: CREATE USER michel@localhost IDENTIFIED BY ******;

GRANT USAGE ON * . * TO michel@localhost IDENTIFIED BY ****** WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTION # requte SQL 3: GRANT SELECT , INSERT , UPDATE , DELETE , CREATE , DROP , INDEX , ALTER , CREATE TEMPORARY TABLES , CREATE VIEW , SHOW VIEW , CREATE ROUTINE, ALTER ROUTINE, EXECUTE ON videotheque . * TO michel@localhost;

Figure 10-7. phpMyAdmin - Connection Michel

## Michel execute : # requte SQL 4: CREATE TABLE videotheque.dvd ( idDvd INT( 3 ) NOT NULL AUTO_INCREMENT PRIMARY KEY , titre VARCHAR( 128 ) NOT NULL , realisateur VARCHAR( 128 ) NOT NULL , annee YEAR( 4 ) NOT NULL ) ENGINE = MYISAM # requte SQL 5: INSERT INTO videotheque.dvd ( idDvd , titre , realisateur , annee ) VALUES (

237

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes
NULL , Harry Potter le Prince de sang ml, David Yates, 2009 ), ( NULL , L-haut, Pete Docter, 2009 );

Figure 10-8. phpMyAdmin - Table DVD (Resultant du Didacticiel)

238

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes

10.1.8. Atelier - Installation dune application (Promethe) tlcharge partir dun zip ou dun tar.gz
Source(s):

OF: SR009-ch05-installation-application.pdf (docs/eof/sr009-ch05-installation-application.pdf)

Installation de lapplication Promethe http ://promethee.eu.org/ qui est un logiciel visant fournir un intranet pdagogique et administratif clef en main aux tablissements de lenseignement public.

10.1.8.1. Tlcharger les sources de lapplication et la documentation

## Tlcharger la dernire version francaise disponible... $ mkdir /mnt/hsubuntu/promethee $ cd /mnt/hsubuntu/promethee/ $ wget http://promethee.eu.org/demo/download/source/promethee.zip ## Tlcharger la documentation $ wget http://promethee.eu.org/index.php?file=download/ftp/docs/documentation $ wget http://promethee.eu.org/index.php?file=download/ftp/docs/documentation $ wget http://promethee.eu.org/index.php?file=download/ftp/docs/documentation $ wget http://promethee.eu.org/index.php?file=download/ftp/docs/documentation $ wget http://promethee.eu.org/index.php?file=download/ftp/docs/documentation $ wget http://promethee.eu.org/index.php?file=download/ftp/docs/documentation $ wget http://promethee.eu.org/index.php?file=download/ftp/docs/documentation $ wget http://promethee.eu.org/index.php?file=download/ftp/docs/documentation ## Autres Documents collaboratifs dipsonible : http://promethee.eu.org/index.php?item=34&IDgroup=0&IDroot=5

francaise/Debi francaise/Inst francaise/Guid francaise/Guid francaise/Guid francaise/Guid francaise/eof. francaise/plaq

10.1.8.2. Installation de base


Pour installer PROMETHEE sur ma machine, il faut au pralable vrier que mon systme dexploitation donne accs :
- un serveur de pages internet (ex : Apache - www.apache.org) - au langage de programmation PHP4 ou suprieur (www.php.org) - au systme de base de donnes MySQL (www.mysql.com)

239

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes Suite aux diffrentes tapes dcritent dans les sections prcdente de mon journal, je peux dire que cest dj le cas :) Linfrastructure LAMP existe et est entirement oprationnel. Je souhaite que lapplication soit disponible via http://localhost/promethee et que les chiers de lapplication Web soit dans le repertoire /var/www/promethee La premire tape est de crer le repertoire o sera localis lapplication :
$ mkdir /var/www/promothee

Il ne doit tre accessible que par lapplication elle mme (le serveur web), donc on change les droits...
$ chown -R www-data:www-data /var/www/promothee # ls -l /var/www/ ... drwxr-xr-x 2 www-data www-data 4096 jan 4 00:31 promethee

La deuxime tape est donc de congurer le serveur Web Apache pour que cela soit le cas :)) Je cre le chier /etc/apache2/conf.d/promethee.conf qui contient :
# phpMyAdmin default Apache configuration Alias "/promethee" "/var/www/promethee/" <Directory "/var/www/promethee/"> Options Indexes FollowSymLinks Includes AllowOverride All #Order allow,deny Allow from all </Directory>

Puis je redmarre Apache pour prendre en compte la conguration :


$ /etc/init.d/apache2 restart

Le serveur a bien redmarr, je vrie les logs /var/log/apache2/error.log pour tre sr... mais rien de particulier signaler...

240

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes Soyons fou, je copie /var/www/test.php et /var/www/info.php (mes deux scripts de tests crs dans les sections prcdente lors de linstallation de linfrastructure LAMP) et je tente une tentative de connection :
http://localhost/promethee/ ## Affiche index.php http://localhost/promethee/info.php ## Affiche info sur PHP

Ourah ! a marche impecable :)) Cette application peut apparement fonctionner sans base de donnes mais comme conseill, il est prfrable den utiliser une pour amliorer la gestion. Nous utiliserons MySQL. Je vais donc crer une base "epl" et un utilisateur "epl-admin" ddi pour la gestion de cette base. Il aura tous les droits sur cette base et pourra donner des droits dautres. Ceci permettrais ou permettra de dlguer la gestion de la base au besoin sans donner accs au compte root ou dautres bases. A laide de phpMyAdmin connect en tant que root :
# requte SQL 1: CREATE DATABASE epl ; # requte SQL: CREATE USER epl-admin@localhost IDENTIFIED BY *********; GRANT USAGE ON * . * TO epl-admin@localhost IDENTIFIED BY ********* WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ; # requte SQL: CREATE USER epl-admin@localhost IDENTIFIED BY *********; GRANT USAGE ON * . * TO epl-admin@localhost IDENTIFIED BY ********* WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;

On vrie la connection la base de donne :


$ mysql -u epl-admin -p epl Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 115 Server version: 5.0.51a-24+lenny2 (Debian) Type help; or \h for help. Type \c to clear the buffer. mysql> status -------------mysql Ver 14.12 Distrib 5.0.51a, for debian-linux-gnu (i486) using readline 5.2

241

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes

Connection id: 115 Current database: epl Current user: epl-admin@localhost SSL: Not in use Current pager: stdout Using outfile: Using delimiter: ; Server version: 5.0.51a-24+lenny2 (Debian) Protocol version: 10 Connection: Localhost via UNIX socket Server characterset: latin1 Db characterset: latin1 Client characterset: latin1 Conn. characterset: latin1 UNIX socket: /var/run/mysqld/mysqld.sock Uptime: 10 hours 48 min 40 sec Threads: 1 Questions: 1578 -------------mysql> Slow queries: 0 Opens: 26 Flush tables: 1 Open tables: 19

Connection OK ! Maintenant il nous faut dzipper lapplication tlcharg et copier le contenu dans le repertoire Web :
$ unzip /mnt/hsubuntu/05-SR009-Interfacer-Apache-avec-un-langage-de-script-etun-serveur-de-base-de-donnes/promethee/promethee.zip -d /var/www/promethee/

An que les utilisateurs de promethee puissent disposer des sources PROMETHEE, on copie larchive ZIP dans le rpertoire download/source.
$ cp /mnt/hsubuntu/05-SR009-Interfacer-Apache-avec-un-langage-de-script-etun-serveur-de-base-de-donnes/promethee/promethee.zip /var/www/promethee/download/source/

En fait il faut que le propritaire et le groupe soient bien Apache (www-data) et les droits Unix soient positionns rwxr-xr-x pour les chiers et les sous rpertoires, comme indiqu dans la doc :
$ chown -R www-data:www-data /var/www/promethee/ $ ls -l /var/www/promethee/ -rw-r--r-- 1 www-data www-data 4815 nov 10 21:22 absent_flash.php -rw-r--r-- 1 www-data www-data 12551 oct 8 15:14 absent_gestion.htm ...

242

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes

$ chmod -R 755 /var/www/promethee/* $ ls -l /var/www/promethee/ total 4592 -rwxr-xr-x 1 www-data www-data 4815 nov 10 21:22 absent_flash.php -rwxr-xr-x 1 www-data www-data 12551 oct 8 15:14 absent_gestion.htm -rwxr-xr-x 1 www-data www-data 1789 sep 16 19:06 absent_mvc.php ...

Je me connecte maintenant Promethee pour me laissez-vous guider par la procdure dinstallation automatise en 4 tapes.
http://localhost/promethee/setup.php

## Se rfrer au guide dinstallation pour plus dinfo

243

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes Figure 10-9. Promethe - Installation 1/7

244

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes Figure 10-10. Promethe - Installation 2/7

245

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes Figure 10-11. Promethe - Installation 3/7

246

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes Figure 10-12. Promethe - Installation 4/7

247

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes Figure 10-13. Promethe - Installation 5/7

248

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes

Figure 10-14. Promethe - Installation 6/7

249

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes Figure 10-15. Promethe - Installation 7/7

250

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes Figure 10-16. Promethe - Ecran de connexion

Je me connecte avec :
ID Utilisateur : admin Mot de passe : (laisser vide)

251

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes Figure 10-17. Promethe - Ecran dAccueil

La premire chose faire cest de changer le mot de passe de lutilisateur "admin" et de supprimer le chier "setup.php" dans le dossier /var/www/promethee :)) Ca y est ! PROMETHEE est congur et oprationnel. Il ne reste plus qu :

- crer les comptes des utilisateurs (table user_id), - crer les comptes des lves (table user_student), - ventuellement, renseigner les adresses IP des postes clients connects au serveur intrane (table ip) afin didentifier les stations et de scuriser lintranet par filtrage IP7.

Il existe deux mthodes pour crer un compte :


- par invitation, - par importation de donnes.

Pour le reste consulter le guide dinstallation et dadministration.

252

Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes

10.1.9. Dveloppement dune application et mise disposition sous la forme dun tgz
Source(s):

OF: SR009-ch06-developpement-application.pdf (docs/eof/sr009-ch06-developpement-application.pdf) Rsultat: sr009.tar.gz (docs/sr009.tar.gz)

Cest loin dtre parfait... mais dans lensemble cela devrait rpondre au cahier des charges...

253

Chapitre 11. SR004 Interconnecter un rseau TCP/IP


11.1. Outils de test - Laboratoire: Netkit & Clownix
Source(s):

Tools: Netkit -The poor mans system to experiment computer networking (netkit.org) (http://wiki.netkit.org/index.php/Main_Page) Prsentation de netkit (Keepin.eu) (http://keepin.org/pdf/keepin-netkit.pdf) Clownix (http://clownix.net/) (Jeune Projet, pas encore mature)

11.1.1. Netkit
11.1.1.1. Installation
# # $ $ # $ $ $ # $ $ $ Netkit installation Crer un dossier dinstallation mkdir ~/netkit cd ~/netkit

Tlcharger Netkit Core, Filesystem et Kernel wget http://wiki.netkit.org/download/netkit/netkit-2.7.tar.bz2 wget http://wiki.netkit.org/download/netkit-filesystem/netkit-filesystem-i386-F5.1.tar.bz2 wget http://wiki.netkit.org/download/netkit-kernel/netkit-kernel-i386-K2.8.tar.bz2 Dcompresser tar -xjSf netkit-2.7.tar.bz2 tar -xjSf netkit-filesystem-i386-F5.1.tar.bz2 tar -xjSf netkit-kernel-i386-K2.8.tar.bz2

# Ajouter les lignes suivante dans le fichier ~/.bashrc ###### ## RL Customisation :) # # Environment variable for netkit export NETKIT_HOME=/home/filostene/Documents/netkit/netkit export MANPATH=:$NETKIT_HOME/man export PATH=$NETKIT_HOME/bin:$PATH # Tester $ cd ~/netkit/netkit $ ./check_configuration.sh

254

Chapitre 11. SR004 Interconnecter un rseau TCP/IP


# Si tout OK, dmarrer un simple machine virtuelle $ vstart pc1 # Afficher les machines virtuelles dmarres $ vlist USER VHOST PID filostene pc1 4486 Total virtual machines: Total consumed memory: 1 (you), 61588 KB (you),

SIZE 61588

INTERFACES

1 (all users). 61588 KB (all users).

# Arrter la machine virtuelle depuis lhte des machines $ vhalt pc1 Halting virtual machine "pc1" (PID 4486) owned by filostene [.....

# Par dfaut conserve l # pour les dmarrages

# OU $ vhalt -r pc1 Halting virtual machine "pc1" (PID 4486) owned by filostene [..... Removing filesystem "/home/filostene/Documents/netkit/netkit/pc1.disk"... done. ## On peut aussi maintenant enlever le fichier log : pc1.log

# Option # et la

## Alternativement, les machines virtuelles (VM) peuvent tre arrter directement depuis la $ halt

11.1.1.2. Un petit lab ! en trois temps trois mouvement


Source(s):

Exemple de lab Netkit: Archives ofciels de laboratoires virtuels ofciels implments avec Netkit (http://wiki.netkit.org/index.php/Main_Page) Ces laboratoires prsentent des concepts rseau spcique: 1 hte (http://wiki.netkit.org/netkitlabs/netkit-labs_basic-topics/netkit-lab_single-host/netkit-lab_single-host.pdf), 2 htes (http://wiki.netkit.org/netkit-labs/netkit-labs_basic-topics/netkit-lab_two-hosts/netkit-lab_twohosts.pdf), adresse static (prsentation (http://wiki.netkit.org/netkit-labs/netkit-labs_basic-topics/netkit-lab_static-routing/netkit-lab_staticrouting.pdf), lab (http://wiki.netkit.org/netkit-labs/netkit-labs_basic-topics/netkit-lab_static-routing/netkit-lab_staticrouting.tar.gz)), ARP, routage interdomain. Chacun est quip dune prsentation qui introduit les sujets considr et les experimentations proposes ralis de faon interactive sur le lab.

Mes labs netkit: sr004-net01-ch03-etude-de-cas-rlr-netkit-lab03.tar.bz2 (docs/sr004-net01-ch03-etude-de-cas-rlr-netkit-lab03.tar.bz2) sr011-ch02-tp-pare-feu-rlr-netkit-lab04.tar.bz2 (docs/sr011-ch02-tp-pare-feu-rlr-netkit-lab04.tar.bz2)

255

Chapitre 11. SR004 Interconnecter un rseau TCP/IP


Note : Avant de se lancer dans la conguration dun lab Netkit on prendra soin de toujours faire un diagramme claire du scenario que lon souhaite muler!

## Un petit lab avec 2 babasses et un routeur au milieu ## Merci qui ? Merci Alix pour le tuyau !!! $ mkdir myLAB && cd myLAB $ mkdir -p pc1 pc2 routeur $ cat << EOF >lab.conf pc1[0]=A pc2[0]=B routeur[0]=A routeur[1]=B EOF $ lstart ##Y a plus qu jouer avec la commande ifconfig ou ip ;-) $ ifconfig eth0 10.0.0.1 netmask 255.255.255.0 broadcast 10.0.0.255 up # OU alternativement pour obtenir une configuration permanente # il suffit dditer avec vi ou mcedit le fichier # /etc/network/interfaces ( linterieur de la VM pc1, 2 ou routeur) et dajouter: auto eth0 iface eth0 inet static address 10.0.0.1 network 10.0.0.0 netmask 255.255.255.0 # Rpter pour chacune des machines. # La configuration sera permante jusqua tout changement ultrieur # ou que le systme de fichier est effac lors de larrt de la VM

11.1.1.3. Connecter son Lab une rseau rel (LAN, Internet,...)


Connecter une VM un rseau externe un rseau rel est possible. Les droits administrateur son requis pour cela (root ou sudo). Suivant comment Netkit est congur, le mot de passe root peut-tre demand par Netkit.
###### ## Attacher une interface rseau virtuel eth0 la VM pc1, # # Executer: $ vstart pc1 --eth0=tap,TAP-ADDRESS,GUEST-ADDRESS # OU # Ajouter une option dans le fichier de configuration lab.conf: vm[0]=tap,TAP-ADDRESS,GUEST-ADDRESS

# TAP-ADDRESS est ladresse IP dune nouvelle interface du ct de lhte qui est utilis po # GUEST-ADDRESS est ladresse IP automatiquement assign linterface linterieur de la m

256

Chapitre 11. SR004 Interconnecter un rseau TCP/IP

# TAP-ADDRESS et GUEST-ADDRESS doivent appartenir au mme rseau local quel quil soit (Netk # Voir la page man de vstart pour plus dinformation.

Note : La mot de passe root ne sera demand quune seule fois. TAP-ADDRESS sappliquera uniquement la premire machine virtuelle qui dmarrera avec linterface tap. Pour utiliser une autre TAP-ADDRESS pour une autre interface du lab ou dun autre lab, il est necessaire de r-initialiser la TAP-ADDRESS.
###### ## Re-initialiser la TAP-ADDRESS # # Arrter toutes les machines virtuelles puis executer: $ vclean -T # Rarement utilis car comme netkit utilise NAT, la TAP-ADDRESS a rarement besoin dtre change.

11.2. NET01 Base


11.2.1. En Bref
Source(s):

Tutoriel: TP Conguration du rseau (http://www.ac-creteil.fr/reseaux/systemes/linux/debian/deb-tp-reseau.html) Introduction to Debian Networking Setup (http://www.debian-administration.org/article/An_introduction_to_Debian_networking_setup)

Ceci est une bref introduction la conguration rseau sous Debian. Elle est comparable aux autres distributions GNU/Linux, notemment dans la conguarion DNS (Domain Name Server = Server de Nom de Domaine).

257

Chapitre 11. SR004 Interconnecter un rseau TCP/IP

11.2.1.1. Quatres points essentiels: Nom dhte / Addresse IP / Passerelle / Domaine (Nom et DNS)
Les lments suivants constituent les quatres points essentiels de conguration dun rseau:

le nom dhte (Hostname): Ceci est le nom de la machine qui complet avec le nom de domaine forme le FQDN (fully qualied domain name = Nom de domaine quali complet) laddresse IP (IP Address) : Numero identiant la machine de faon unique sur le rseau la passerelle par dfaut (default gateway - GW) : Adresse IP de la machine permettant de communiquer avec dautres rseaux le nom de domaine et le(s) server(s) DNS (Domain Name Server = Server de Nom de Domaine) : permettent didentier ladresse dune machine sur un domaine via son nom.

11.2.1.2. Congurer le nom dhte


Le nom dhte est habituellement conguer lors de linstallation Il peut tre afch ou changer tout moment avec la commande hostname.
# Voir le nom dhte $ /bin/hostname debstafil # Changer le nom dhte temporairement $ /bin/hostname newname # Changer le nom dhte de faaon permanente Editer le fichier /etc/hostname et indiquer un nouveau nom. Ce fichier est lu automatiquement au dmarrage du systme. Le changement sera effective au prochain dmarrage.

11.2.1.3. Conguer laddresse IP


Laddresse IP associe une carte rseau est lue depuis le chier /etc/network/interfaces (man interfaces pour plus dinfo)
##### ## Pour une machine avec addresse IP static ## Adresse IP 192.168.1.90 ## Passerelle par dfaut 192.168.1.1 ## Masque rseau 255.255.255.0

258

Chapitre 11. SR004 Interconnecter un rseau TCP/IP


## le fichier de configuration serait: # The loopback network interface auto lo iface lo inet loopback # The primary network interface auto eth0 iface eth0 inet static address 192.168.1.90 gateway 192.168.1.1 netmask 255.255.255.0 network 192.168.1.0 broadcast 192.168.1.255 ##### ## Pour une machine configure via DHCP ## le fichier de configuration serait: # The loopback network interface auto lo iface lo inet loopback # The primary network interface - use DHCP to find our address auto eth0 iface eth0 inet dhcp

Note : La conguration DHCP requiert linstallation dun client DHCP : paquet pump (http://packages.debian.org/search?suite=default&section=all&arch=any&searchon=names&keywords=pump) ou dhcp-client (http://packages.debian.org/search?keywords=dhcp-client).

Pour rendre tout changement de conguration dans ce chier effectif, executer:

$ /etc/init.d/networking restart ou $ ifup -a

11.2.1.4. Conguer la passerelle par dfaut (Gateway GW)


Comme indiqu dans la section prcdente, la passerelle par dfaut pour une machine avec une adresse IP statique est congure dans le chier /etc/network/interfaces.
# Afficher la passerelle par dfaut courante:

259

Chapitre 11. SR004 Interconnecter un rseau TCP/IP


$ netstat -nr Kernel IP routing table Destination Gateway 192.168.1.0 0.0.0.0 0.0.0.0 192.168.1.1

Genmask 255.255.255.0 0.0.0.0

Flags U UG

MSS Window 0 0 0 0

irtt Iface 0 eth0 0 eth0

# Commande alternative $ /sbin/route # ou $ /sbin/route pour Kernel IP routing table Destination Gateway Genmask 192.168.1.0 255.255.255.0 * default router 0.0.0.0

afficher les numeros de rseau au lieu de le Flags Metric Ref U 0 0 UG 0 0 Use Iface 0 eth0 0 eth0

# Pour changer la passerelle par dfaut, il faut dabbord supprimer la courante: $ /sbin/route del default gw 192.168.1.1

# Sans passerelle, la machine sera incapable de communiqer avec dautres localis hors du r # Ajouter un nouvelle passerelle par dfaut $ /sbin/route add default gw 192.168.1.100

11.2.1.5. Conguer nom de domaine et DNS (serveur de nom)


Pour des resolutions de noms static ajouter des entres (Adresse IP Nom dhte.Domain Alias) dans le /etc/hosts La machine peut aussi consulter des servers de nom (DNS), pour cela il suft dindiquer leur adresse IP dans le chier /etc/resolv.conf
###### ## Pour le serveur DNS (IP address 192.168.1.1) ## le ficher serait : # search my.flat nameserver 192.168.1.1

11.2.2. Cours IP (Protocole Internet) - Concept retenir :)


Source(s):

OF: SR004-net01-ch01-ip.pdf (docs/eof/sr004-net01-ch01-ip.pdf) Cours: Le guide de ladministration de la couche IP avec Linux (http://linux-ip.net)

260

Chapitre 11. SR004 Interconnecter un rseau TCP/IP

Tutoriel: Structure des trames et fonctionnement de protocoles de transport (TCP, UDP) (http://www.frameip.com) A quoi ressemblent les paquets IP, TCP, UDP (http://www.netlter.org/documentation/HOWTO/fr/networking-concepts-HOWTO-8.html) Web: Networking-concepts HOWTO (http://www.netlter.org/documentation/HOWTO/fr/networking-concepts-HOWTO.html) Linux in the Network (http://www-uxsup.csx.cam.ac.uk/pub/doc/suse/sles9/adminguide-sles9/ch21.html)

11.2.2.1. TCP/IP
TCP/IP (Transmission Control Protocol/Internet Protocol) est une famille de protocoles rseaux qui gre le routage sur les systmes informatiques (Unix/Linux, Windows. . .) et lInternet. Ses spcications sont dnies dans des documents RFC (Request For Comments - Appels commentaires) du domaine public. Ils sont produits par lIETF ( Internet Engineering Task Force) au sein de lIAB (Internet Architecture Board). TCP/IP et OSI: Chaque couche du modle TCP/IP correspond une ou plusieurs couches du modle OSI (Open Systems Interconnection) dni par lISO (International Standards Organization). Comparer (docs/sr004-net01-ch01-TCP-IP-OSI.pdf) Figure 11-1. Datagramme IP

261

Chapitre 11. SR004 Interconnecter un rseau TCP/IP TCP (Transmission Control Protocol,Protocole de contrle de la transmission) - FIABLE fournit un service scuris de remise des paquets. TCP fournit un protocole able, "scuris", orient connexion, au-dessus dIP (ou encapsul lintrieur dIP). TCP/IP est adapt pour la transmission de donnes base sur la session, les applications client-serveur et les services critiques tels que le courrier lectronique ... Ce protocole exige du destinataire un accuse rception (ACK) ... Sur une connexion TCP entre deux machines du rseau, les messages (ou paquets TCP) sont acquitts et dlivrs en squence. UDP (User Datagram Protocol) - MULTICAST UDP est un protocole de transport, comme TCP, mais qui offre un service de datagrammes sans connexion qui ne garantit ni la remise ni lordre des paquets dlivrs (sommes de contrle facultatives) ... permet dchanger des donnes sur des rseaux abilit leve sans utiliser inutilement des ressources rseau ou du temps de traitement ... Les messages (ou paquets UDP) sont transmis de manire autonome (sans garantie de livraison) ... Le protocole UDP prend galement en charge lenvoi de donnes dun unique expditeur vers plusieurs destinataires (Multicast). ICMP (Internet Control Message Protocol) - PING ICMP (Internet Control Messaging Protocol) est un protocole de maintenance utilis pour les tests et les diagnostics, qui vhicule des messages de contrle. Il permet deux systmes dun rseau IP de partager des informations dtat et derreur. RIP (Routing Information Protocol) RIP est un protocole de routage dynamique qui permet lchange dinformations de routage sur un inter-rseau. ARP (Address Resolution Protocol) Le protocole ARP permet de dterminer ladresse physique (ou MAC) dun noeud partir de son adresse IP ... Informations transmises et leur enveloppe, selon le niveau:

message(ou de ux) entre applications datagramme (ou segment) au niveau TCP paquet au niveau IP trames au niveau de linterface rseau (Ethernet ou Token Ring)

Les protocoles application connus :

HTTP (Hyper Text Transfer Protocol) : accs aux documents HTML et le transfert de chiers depuis un site WWW FTP (File Transfer Protocol) : pour le transfert de chiers (TCP) Telnet (remplac par ssh) : connexion distance en mulation terminal, un hte Unix/Linux SMTP (Simple Mail Transfer Protocol) : messagerie lectronique (UDP et TCP) SNMP (Simple Network Management Protocol) : ladministration du rseau NFS (Network File System) : partage des chiers Unix/Linux POP/IMAP : remise de courrier

262

Chapitre 11. SR004 Interconnecter un rseau TCP/IP ... Figure 11-2. Applications TCP/IP : Modle client/serveur

Sur la machine serveur un processus serveur (en jargon daemon qui nest autre quun service) traite les requtes des clients. Client et serveur dialoguent en changeant des messages qui contiennent des requtes et des rponses.

263

Chapitre 11. SR004 Interconnecter un rseau TCP/IP Diffrents Services: Email, Web, FTP, Serveur de Noms, ... Par exemple un navigateur Internet (Firefox) envoie une requte TCP un serveur Web tournant sur un autre noeud du rseau. Mais imaginons que le noeud qui fait tourner un serveur Web dispose aussi dun serveur de courrier lectronique, dun serveur FTP et dun serveur de noms: comment savoir quel serveur est destine la connexion TCP? Cest pour a que le TCP et lUDP possdent le concept de ports. Chaque paquet contient un espace mmoire o il stocke son port de destination, qui dit quel service le paquet est adress. Par exemple, le port TCP 25 est le serveur mail, et le port TCP 80 le serveur Web (bien quon puisse parfois trouver des serveurs Web sur des ports diffrents). Une liste de ports peut tre trouve dans /etc/services. De mme, lorsque deux fentres Firefox accdent chacune une partie diffrente dun mme site Web, comment fait la machine Linux pour distinguer quels paquets TCP sont destins un Firefox plutt qu lautre ? Cest ici que le port source entre en jeu: chaque nouvelle connexion TCP reoit un port source diffrent, pour que chacune puisse tre diffrencie, mme si elles sont diriges vers la mme adresse IP et le mme port de destination. Habituellement le premier port source donn sera le port 1024 et sera incrment au fur et mesure des connexions.
Note : Protocole de communication entre applications = un numro de protocole + un numro de port (pour identier lapplication)

Des numros de port [entre 0 et 1023] sont rservs pour les applications standards. Ce sont les ports bien connus (Well Known Ports) comme assigns par lIANA1 (http://www.iana.org/assignments/port-numbers) Des numros de port [entre 1024 et 65535] sont disponibles pour les applications dveloppes par les utilisateurs Liste des ports de services (docs/sr004-net01-ch01-serviceports.txt) (/etc/services) Rseaux et Adresses physiques (MAC) ; Rseaux et adresses logiques (IP) ; Toute machine sur un rseau IP a 2 adresses:

une adresse MAC (Medium Access Control) : 48 bits soit six octets (par exemple : 08-00-14-57-69-69) - Addresse physique unique (et permanante) de la carte rseau qui sert communiquer au niveau de la couche liaison. Rseaux physique. ET

264

Chapitre 11. SR004 Interconnecter un rseau TCP/IP

une adresse IP : IPv4 32 bits soit quatres octets (par exemple : 172.18.1.2) ou IPv6 [TOCOMPLETE] - Addresse logique unique (et modiable) du poste rseau qui sert communiquer au niveau de la couche transport. Rseaux logiques. LIcann de lInter-NIC (Network Information Center) garantie lunicit des identicateurs de rseau IP sur toute la plante.

Le protocole ARP (Adress Resolution Protocol) assure la correspondance entre ladresse IP et ladresse MAC en effectuant une diffusion (multicast) du type "qui est X.X.X.X ?" et en conservant la rponse dans une cache (Table IP<=>MAC) pour une une dure de vie limite (TTL ou Time To Leave).
Note : Adresse IP = Numro de rseau + Numro dhte (noeud n au sein du rseau)

Different classe dadresse IPv4 existe:

X.0.0.0 (Classe A, X de 1 126) X.Y.0.0 (Classe B, X.Y de 128.0 191.255) X.Y.Z.0 (Classe C, X.Y.Z de 192.0.0 223.255.255)

Voir poly OF pour plus dinformation. Blocs dadresse reserves:


0.0.0.0 (route par defaut) 127.0.0.0 (blouclage=loopack) A X.0.0.0|B X.Y.0.0|C X.Y.Z.0 (rseau) A X.255.255.255|B X.Y.255.255|C X.Y.Z.255 (diffusion=multicast) A 10.0.0.0/8->255.0.0.0|B 172.16.0.0/16->172.31.0.0|C C 192.168.0.0/24->192.168.255.0 (prive) 169.254.0.0/16(auto-conguration)

Voir RFC 3330 (http://www.rfc-archive.org/getrfc.php?rfc=3330) et RFC 1918 (http://www.rfc-archive.org/getrfc.php?rfc=1918) pour les block dadresses spciaux et rserves.

265

Chapitre 11. SR004 Interconnecter un rseau TCP/IP Figure 11-3. Dcoupage des blocs dadresses IPv4

Autres formats disponibles avec liens actifs pour ce document: PDF (docs/sr004-net01-ch01-ip-special-address-blocks.pdf), ODS (docs/sr004-net01-ch01-ip-special-address-blocks.ods).
Note : Pour les rseaux privs de classe C, ne serait-ce pas plutt 192.168.0.0/16 comme indiqu sur la RFC 3330 de Septembre 2002 ? Il est exact que cest lintgralit de la plage qui est rserve lusage priv, mais, pour les raisons de classe vu prcdemment, des raisons historiques donc, on dcoupe en /24 dans ce range. Cest donc un abus de langage. Toute la plage est effectivement rserve cet usage, en /16, mais avec des dcoupages la plupart du temps en /24. La 3330 le dit bien, mais la rfrence est la 1918.

Le masque de rseau (netmask) sert identier prcisment les bits qui concernent le N de rseau dune adresse IP (il "masque" la partie hte de ladresse): A 255.0.0.0|B 255.255.0.0|C 255.255.255.0 Les masques de sous-rseaux (subnet mask) permettent de segmenter un rseau en plusieurs sous-rseaux. On utilise alors une partie des bits de ladresse dhte pour identier des sous-rseaux. Toutes les machines appartenant un sous-rseau possdent le mme numro de rseau. Pour connatre ladresse du sous-rseau auquel une machine appartient, on effectue en ralit un ET logique entre ladresse de la machine et le masque. Une passerelle (gateway) ou un routeur est un quipement qui fait le lien (routage) entre diffrents rseaux ou entre sous-rseaux. Pour cela elle utilise une table de routage pour dterminer la meilleure route pour transfrer les paquets IP hors du rseau local vers un rseau distant. Si lhte de destination se trouve sur le rseau local, les donnes sont transmises lhte destination directement (pas de routage). Routage Dynamique: RIP (Routing Information Protocol) et le protocole OSPF (Open Shortest Path First) sont des protocoles dchange dynamique des tables de routage IP sur un rseau local. Mis en

266

Chapitre 11. SR004 Interconnecter un rseau TCP/IP oeuvre pour construire dynamiquement les chemins entre routeurs. Domaine dacheminement: EGP (Exterior Gateway Protocol) et BGP (Border Gateway Protocol) sont des protocoles particuliers dchanges entre passerelles de chaque domaine de routage.

11.2.2.2. Exercices dapplication


## On donne ladresse 193.12.10.195/26, on demande : - quelle classe appartient le rseau dorigine ? 1er octet entre 192 et 223 donc classe C - Combien de sous-rseaux ont t crs ? /26 signifie que les 26 premiers bits du masque sont 1 Le masque rseaux est donc: 11111111.11111111.11111111.11000000 soit 255.255.255.192 Nombre de 1 dans le dernier octet = 2 Donc 2 ^ 2 = 4 sous-rseaux possible - quel sous rseau appartient la machine ? 255.255.255.192/26 (voir rponse prcedente) - Combien peut-on mettre dhtes par sous-rseau ? Nombre de 0 dans le dernier octet = 6 Donc 2 ^ 6 - 2 (reserve: rseau/diffusion) = 62 adresses dhtes - Quelle est ladresse de la machine dans le sous-rseau ? IP:193.12.10.195/26 donc Numro dhte 0.0.0.3 (195 - 192 = 3) - Quelle est ladresse de diffusion du sous-rseau ? Si on place tout les bits dhte 1 on obtient 11111111 = 255 193.12.10.255 ## On donne ladresse 160.1.129.195/17, on demande : - quelle classe appartient le rseau dorigine ? 1er octets entre 128 et 191 donc classe B - Combien de sous-rseaux ont t crs ? /17 signifie que les 17 premiers bits du masque sont 1 Le masque rseau est donc: 11111111.11111111.10000000.00000000 soit 255.255.128.0 Nombre de 1 dans lavant dernier octets = 1 Donc 2 ^ 1 = 2 sous-rseaux - quel sous rseau appartient la machine ? 255.255.128.0/17 (voir rponse prcedente) - Combien peut-on mettre dhtes par sous-rseau ? Nombre de 0 dans les deux derniers octets = 15 Donc 2 ^ 15 - 2 (reserve: rseau/diffusion) = 32766 adresse dhtes - Quelle est ladresse de la machine dans le sous-rseau ? IP:160.1.129.195/17 donc Numro dhte 0.0.1.195 (129.195 - 128.0 = 1.195) - Quelle est ladresse de diffusion du sous-rseau ? Si on place tout les bits dhte 1 on obtient 11111111.11111111 = 255.255 160.1.255.255 ## On donne ladresse 13.0.0.0/8, on demande : - Quel masque faut-il pour avoir 3 sous-rseaux ? 2 ^ 1 = 2 2 ^ 2 = 4 # Pour avoir 3 sous-rseaux il faut au moins 2 bits supplmentaire pour le numro Donc 11111111.11000000.00000000.00000000 soit 255.196.0.0

267

Chapitre 11. SR004 Interconnecter un rseau TCP/IP

- Quel masque faut-il pour avoir 256 sous-rseaux ? 2 ^ 8 = 256 # Pour avoir 256 sous-rseaux il faut au moins 8 bits supplmentaire pour le num Donc 11111111.11111111.00000000.00000000 soit 255.255.0.0 - Combien dadresses dispose t-on si on masque sur 20 bits ? Masque de 20 bits: 11111111.11111111.11110000.00000000 32-20 = 12 bits disponibles pour laddressage des htes soit 2 ^ 12 - 2 (reserve: rseau/diffusion) = 2094 adresse dhtes

11.2.3. Adresse IP publique et prive


Toutes adresse IP appartenant au block dadresse non reserv est considr comme une addresse IP Publique. Elle est potentiellement accessible par tous via le rseau Internet. Identier mon adresse IP publique : mon-ip.com (http://mon-ip.com/) whatismyip.com (http://www.whatismyip.com/) adresseip.com (http://www.adresseip.com/mon-ip.php)

11.2.4. Outil pour les calculs IP (masque, etc...) : gip, sipcalc


outil de calcul IP/masque pour calculer les ip en binaire, les sous rseaux, les masques, ladresse de diffusion, etc... gip () : en mode graphique

# Installation $ sudo apt-get install gip # Dmarrage $ gip

sipcalc () : outil en ligne de commande


# Installation $ sudo apt-get install sipcalc # Calculer sipcalc 10.0.1.5/24 -[ipv4 : 10.0.1.5/24] - 0 [CIDR] Host address Host address (decimal)

- 10.0.1.5 - 167772421

268

Chapitre 11. SR004 Interconnecter un rseau TCP/IP


Host address (hex) Network address Network mask Network mask (bits) Network mask (hex) Broadcast address Cisco wildcard Addresses in network Network range Usable range A000105 10.0.1.0 255.255.255.0 24 FFFFFF00 10.0.1.255 0.0.0.255 256 10.0.1.0 - 10.0.1.255 10.0.1.1 - 10.0.1.254

11.2.5. DMZ - Zone dmilitarise


Voir section ddie SR010 Scurit > Un epace hermtique > DMZ (Zone dmilitarise)

11.2.6. Les chiers importants


Source(s):

OF: SR004-net01-ch02-net-le.pdf (docs/eof/sr004-net01-ch02-net-le.pdf)

11.2.6.1. /etc/hostname : nom dhte de la machine locale (modiable par ladministrateur avec la commande hostname).
# cat /etc/hostname debstafil # hostname debstafil4 # cat /etc/hostname debstafil # hostname debstafil4

# Renomer lhte avec un nouveau nom

Question: Pourquoi sur ma machine, la commande hostname nafche pas la mme chose que la commande cat ? Voir commande hostname pour lexplication...

11.2.6.2. /etc/hosts : table statique pour la rsolution de noms dhtes


Ligne au format AdresseIP Nom1 [Nom2 ...]
$ cat /etc/hosts

269

Chapitre 11. SR004 Interconnecter un rseau TCP/IP


127.0.0.1 localhost 127.0.1.1 debstafil4.ermansion.net debstafil4 10.0.1.4 macfil.ermansion.net 10.0.1.3 debstafil3.ermansion.net

fil4 macfil hsbuntu debstafil3

# The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters ff02::3 ip6-allhosts

11.2.6.3. /etc/host.conf : congurer le processus de rsolution de nom de la machine


$ cat /etc/host.conf multi on

Question: Pourquoi le chier host.conf sur ma Debian ne contient ni la mention hosts, ni la mention bind (service DNS) comme cela devrait ? Est-ce parce que loption multi est ON ?

11.2.6.4. /etc/resolv.conf : dclarer les serveurs de noms (DNS) utiliss par le poste.
Source(s):

Web: Rsolution des noms avec resolvconf sous Linux Debian (http://www.coagul.org/spip.php?article488)

# cat /etc/resolv.conf ### BEGIN INFO # # Modified_by: NetworkManager # Process: /usr/bin/NetworkManager # Process_id: 2044 # ### END INFO

### # Example OF search foo.bar

# Par dfaut, rechercher rsoudre le nom "blabla.foo.bar" # si uniquement le nom hte "blabla" est indiqu

270

Chapitre 11. SR004 Interconnecter un rseau TCP/IP


nameserver 192.168.1.1 nameserver 192.168.1.2 nameserver 192.168.1.3

Question: Le chier /etc/resolv.conf est vide par dfaut. Il nest utile que si le host utilise un service DNS pour la resolution de noms. Ce chier ne devrait-il pas contenir au moins des DNS publique par dfaut ? Rponse: non. DNS fonctionne indpendamment de ton chier host. Par contre, il est utile, voire recommand davoir le localhost dni dans le chier, sinon, on peux rencontrer des problmes. Pour savoir pourquoi il est vide, il faudrait demander aux dveloppeurs Debian. Souvent il ne lest pas :))

11.2.6.5. /etc/network/interfaces : conguration des interfaces rseau (utiliser man interfaces pour connatre les options disponibles).
Ce chier est utilis par les commandes ifup et ifdown pour congurer/decongurer les interfaces rseaux.
#### # Sur ma Debian :-) $ cat /etc/network/interfaces # This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback # The primary network interface allow-hotplug eth0 iface eth0 inet dhcp

# Autre configuration possible pour # la carte rseau principale eth0 ... auto eth0 iface eth0 inet static address 192.168.1.90 gateway 192.168.1.1 netmask 255.255.255.0 network 192.168.1.0 broadcast 192.168.1.255 ## Utilisation de resolvconf avec une interface de type eth0 dns-nameservers 192.168.0.1 212.27.53.252 212.27.52.252 ## Serveur DNS de la Gateway et dns-search mon-domaine.local ...

271

Chapitre 11. SR004 Interconnecter un rseau TCP/IP

Voir un autre exemple de chier de conguration: section above. eth0 est la premire interface ethernet, eth0 serait la deuxime, etc...
Note : Au dmarrage la command "ifup -a" est execute (via script de dmarrage) pour activer les interfaces rseaux dont la ligne commence par "auto" dans le chier /etc/network/interfaces

Note : La conguration DHCP requiert linstallation dun client DHCP : paquet pump (http://packages.debian.org/search?suite=default&section=all&arch=any&searchon=names&keywords=pump) ou dhcp-client (http://packages.debian.org/search?keywords=dhcp-client).

Pour rendre tout changement de conguration dans ce chier effectif, executer:

$ /etc/init.d/networking restart ou $ ifup -a

ALIAS: Une interface peut avoir plusieurs adresses, par exemple:


eth0:0 eth0:1 ... 192.168.0.1 192.168.0.2

Note : La notion dalias est intressante car elle permet de congurer plusieurs adresses IP la fois sur une seule et unique carte rseau physique. A tester plus tard !

Note : Sous RedHat et similaires (Fedora/Mandrake), les scripts ou paramtres de dmarrage du rseau se trouvent sous /etc/syscong/network Sous FreeBSD /etc/rc.network

272

Chapitre 11. SR004 Interconnecter un rseau TCP/IP

11.2.6.6. /etc/networks : affecter un nom logique un rseau


Pour pouvoir afcher un rseau ou ladresser par son nom au lieu de son adresse. Le(s) nom(s) peuvent tre utiliser pour modier la table de routage.
# cat /etc/networks default 0.0.0.0 loopback 127.0.0.0 link-local 169.254.0.0

# Passerelle par dfaut # Hte lui mme

11.2.6.7. /etc/services (docs/sr004-net01-ch01-serviceports.txt) : dcrit pour chaque grand service le ou les ports utiliss
Utile de sy rfrer quand on ne connat pas le port utilis par un service. Utilis par les commandes rseau comme netstat pour afcher les noms des services eu lieu des ports.
### # Liste des services utilisant le protocole SSL et leur numro de port $ cat /etc/services | grep SSL https 443/tcp # http protocol over TLS/SSL nntps 563/tcp snntp # NNTP over SSL ldaps 636/tcp # LDAP over SSL ftps-data 989/tcp # FTP over SSL (data) telnets 992/tcp # Telnet over SSL imaps 993/tcp # IMAP over SSL ircs 994/tcp # IRC over SSL pop3s 995/tcp # POP-3 over SSL suucp 4031/tcp # UUCP over SSL suucp 4031/udp # UUCP over SSL ssmtp 465/tcp smtps # SMTP over SSL

Par exemple le protocole HTTPs utilise le port 443 pour les communications encrypts.

11.2.6.8. /etc/protocols (docs/sr004-net01-ch01-protocols.txt) : rfrence par protocole, son numro et son nom
ce chier est utilis par les analyseurs de trame pour afcher les noms des protocoles en lieu et place des numros.
$ grep tcp /etc/protocols tcp 6 TCP # transmission control protocol $ grep udp /etc/protocols ## Protocole NUM=6 udp 17 UDP # user datagram protocol udplite 136 UDPLite # UDP-Lite ## Protocole NUM=136

273

Chapitre 11. SR004 Interconnecter un rseau TCP/IP

11.2.7. Les commandes rseaux importantes : ip, ifcong, ifup/ifdown, arp, route, netstat, traceroute, dig, host, hostname, whois, ping, mtr, bing, telnet, curl, nc(netcat), iftop
Source(s):

OF: SR004-net01-ch03-net-cmd.pdf (docs/eof/sr004-net01-ch03-net-cmd.pdf)

Web: Conguration et test dune interface rseau sur une station GNU/Linux (http://webmail.appert44.org/~plegal/index.php/Conguration_et_test_d%27une_interface_r%C3%A9seau_sur_une_stat

11.2.7.1. ifcong
conguration des interfaces rseau et de visualiser la conguration IP dune interface. Voir aussi la commande ip Syntaxe: ifcong interface adresse [parametres]
# OPTIONS USUELLES interface logique ou physique, il est obligatoire, up active linterface down dsactive linterface mtu dfinit lunit de transfert des paquets netmask affecter un masque de sous-rseau broadcast dfinit ladresse de broadcast arp ou !-arp activer ou dsactiver lutilisation du cache arp de linterface metric paramtre utilis pour ltablissement des routes dynamiques, et dterminer le ~cot~ (nombre de sauts ou ~hops~) dun chemin par le protocole RIP. multicast active ou non la communication avec des machines qui sont hors du rseau. promisc ou !-promisc activer ou dsactiver le mode promiscus de linterface. En mode promiscuous, tous les paquets qui transitent sur le rseau sont reus galement par linterface. Cela permet de mettre en place un analyseur de trame ou de protocole.

274

Chapitre 11. SR004 Interconnecter un rseau TCP/IP

## Afficher information sur la configuration de mes interfaces rseaux $ /sbin/ifconfig # Le chemin complete doit tre indiqu dans mon cas, sinon la commande est eth3 Link encap:Ethernet HWaddr 08:00:27:89:1d:4f inet adr:10.0.2.15 Bcast:10.0.2.255 Masque:255.255.255.0 adr inet6: fe80::a00:27ff:fe89:1d4f/64 Scope:Lien UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:2434 errors:0 dropped:0 overruns:0 frame:0 TX packets:2289 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 lg file transmission:1000 RX bytes:2254590 (2.1 MiB) TX bytes:380079 (371.1 KiB) Interruption:11 Adresse de base:0xd020 lo Link encap:Boucle locale inet adr:127.0.0.1 Masque:255.0.0.0 adr inet6: ::1/128 Scope:Hte UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:42 errors:0 dropped:0 overruns:0 frame:0 TX packets:42 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 lg file transmission:0 RX bytes:3120 (3.0 KiB) TX bytes:3120 (3.0 KiB) ## Dsactiver les interfaces $ /sbin/ifconfig lo down $ ping localhost PING localhost (127.0.0.1) 56(84) bytes of data. --- localhost ping statistics --17 packets transmitted, 0 received, 100% packet loss, time 16127ms $ /sbin/ifconfig lo up ## Ractiver loopback $ ping localhost PING localhost (127.0.0.1) 56(84) bytes of data. 64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.042 ms 64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.039 ms 64 bytes from localhost (127.0.0.1): icmp_seq=3 ttl=64 time=0.036 ms ^C --- localhost ping statistics --3 packets transmitted, 3 received, 0% packet loss, time 1998ms rtt min/avg/max/mdev = 0.036/0.039/0.042/0.002 ms $ route -n # Loption -n pour afficher les addresses Table de routage IP du noyau Destination Passerelle Genmask Indic 10.0.2.0 0.0.0.0 255.255.255.0 U 0.0.0.0 10.0.2.2 0.0.0.0 UG $ route del -net 10.0.2.0/24 dev eth3 $ route -n Table de routage IP du noyau Destination Passerelle Genmask 0.0.0.0 10.0.2.2 0.0.0.0

IP des reseaux au lieu de leur noms (p Metric Ref 0 0 0 0 Use Iface 0 eth3 0 eth3

Indic Metric Ref UG 0 0

Use Iface 0 eth3

275

Chapitre 11. SR004 Interconnecter un rseau TCP/IP


# 3 machines Host Ubuntu (10.0.1.4), VM3 Debian Fil3 (10.0.1.3), VM4 Debian Fil4 (10.0.1.5) # - Sur 10.0.1.5 faites un ifconfig, relevez les valeurs des registres TX/RX. debstafil4:~# ifconfig eth3... RX packets:530 ... TX packets:613 ... # - sud 10.0.1.4 faites un ping 10.0.1.5 macfil:~$ ping debstafil4 PING debstafil4.ermansion.net (10.0.1.5) 56(84) bytes of data. 64 bytes from debstafil4.ermansion.net (10.0.1.5): icmp_seq=1 ttl=64 time=18.9 ms ...

# - sur 10.0.1.5 relevez les nouvelles valeurs des registres TX/RX. Il y a bien eu change R debstafil4:~# ifconfig eth3... RX packets:539 ... TX packets:621 ... # - 10.0.1.4 faites un ping 10.0.1.3 macfil:~$ ping debstafil3 PING debstafil3.ermansion.net (10.0.1.3) 56(84) bytes of data. 64 bytes from debstafil3.ermansion.net (10.0.1.3): icmp_seq=1 ttl=64 time=16.7 ms ...

# - sur 10.0.1.5 relevez les nouvelles valeurs des registres TX/RX. debstafil4:~# ifconfig eth3... RX packets:547 ... # Rx est bien modifi TX packets:623 ... # mais pas Tx. La machine bien reu des paquets (arp) mais n

# - sur 10.0.1.4 faites un ping 10.0.1.4. ifconfig nindique aucun registre modifi, donc le debstafil4:~# ping 10.0.1.5 PING 10.0.1.5 (10.0.1.5) 56(84) bytes of data. 64 bytes from 10.0.1.5: icmp_seq=1 ttl=64 time=0.000 ms ... debstafil4:~# ifconfig eth3... RX packets:547 ... TX packets:623 ...

# - sur 10.0.1.5 modifiez le MTU ( Message Transfert Unit ) qui dtermine lunit de transfe # Il est par dfaut 1500, mettez le 300, avec la commande : debstafil4:~# ifconfig eth3... MTU:576 ... # Tiens mon MTU dorigine est inferieur a celui par dfaut :)) # Certainement du a la virtualisation et/ou au pont rseau... # sur lhte Ubuntu il est 1500 debstafil4:~# ifconfig eth3 mtu 300 debstafil4:~# ifconfig eth3... MTU:300 ...

Pour chaque interface (couche 1) il faudra indiquer une route au protocole de routage (couche 3)

pour atteindre le rseau ; sinon aucun paquet ne va jusqu la carte, donc ne sort sur le rseau ;

276

Chapitre 11. SR004 Interconnecter un rseau TCP/IP


Le ping sur une adresse locale ne teste pas les routes, cela signie que la pile de protocoles

TCP/IP peut fonctionner tandis que le systme ne descend pas jusqu la couche 2 ou 1 (interface physique). Pas de communication entre lhte et son voisin sur le mme rseau locale.

Note : LOOPBACK (ou bouclage): cette interface permet de tester un programme utilisant le protocole IP sans envoyer de paquets sur le rseau physiquement.

Questions: -- Pourquoi /sbin/ifcong requit au lieu de ifcong ? -- Pourquoi mon interface eth03 ne peut pas tre dsactiv ? Elle semble ractive automatiquement... udev ? upstart ? Remarques: erreur dans le poly OF cest route del -net 10.0.2.0/24 dev eth3 et non pas route -del net 10.0.2.0/24 dev eth3

11.2.7.2. ifup / ifdown


Dmarrer/Stopper linterface rseau. Congure / Dcongurer les interfaces rseaux suivant les paramtres du chier /etc/network/interfaces.
#Stopper linterface rseau eth0 : $ ifdown eth0 # Dmarrer linterface rseau eth0 : ifup eth0

# Ceci ne doit pas tre confondu avec la commande qui suit, qui relance explicitement tous l /etc/init.d/networking restart

11.2.7.3. arp (Address Resolution Protocol)


Visualiser ou modier la table du cache de linterface (correspondance entre une adresse IP et une adresse Ethernet (MAC)).Cette table peut tre statique et(ou) dynamique.
# Afficher la table ARP $ arp Address macfil.ermansion.net Base-Station-e1c421.loc

HWtype ether ether

HWaddress 00:26:bb:13:31:96 00:17:f2:e1:c4:21

Flags Mask C C

Iface eth3 eth3

$ arp -va macfil.ermansion.net (10.0.1.4) at 00:26:bb:13:31:96 [ether] on eth3 Base-Station-e1c421.local (10.0.1.1) at 00:17:f2:e1:c4:21 [ether] on eth3 Entres: 2 Ignores: 0 Trouves: 2

277

Chapitre 11. SR004 Interconnecter un rseau TCP/IP

# Ajouter une entre statique - option -s $ arp -s 10.0.1.6 00:71:f2:1e:4c:21 $ arp -va ? (10.0.1.6) at 00:71:f2:1e:4c:21 [ether] PERM on eth3 Base-Station-e1c421.local (10.0.1.1) at 00:17:f2:e1:c4:21 [ether] on eth3 Entres: 2 Ignores: 0 Trouves: 2 # Supprimer une entre - option -d $ arp -d 10.0.1.6 $ arp -va ? (10.0.1.6) at incomplete> on eth3 Base-Station-e1c421.local (10.0.1.1) at 00:17:f2:e1:c4:21 [ether] on eth3 Entres: 2 Ignores: 0 Trouves: 2 # Utilisation # a. Premire partie (aucun commentaire) # b. Deuxime partie ... ## - Quel est le contenu, aprs cela de la table ARP ? $ arp -av Base-Station-e1c421.local (10.0.1.1) 00:17:f2:e1:c4:21 [ether] sur eth2 debstafil3.ermansion.net (10.0.1.3) 08:00:27:89:1d:4f [ether] sur eth2 debstafil4.ermansion.net (10.0.1.5) 08:00:27:89:1d:4f [ether] sur eth2 ==> Conflit daddressage 1 MAC pour 2 IP ?!

11.2.7.4. route
Le routage dnit le chemin emprunt par les paquets entre son point de dpart et son point darrive. Cette commande permet dafcher et de congurer la talbe de routage IP de pc, de switchs, de routeurs, etc... Deux types de routages: statique et dynamique.

Le routage statique (adapt pour les rseau locaux) consiste imposer aux paquets la route suivre. Le routage dynamique (adapt pour les rseaux importants ou tendus) met en oeuvre des algorithmes, qui permettent aux routeurs dajuster les tables de routage en fonction de leur connaissance de la topologie du rseau. Cette actualisation est ralise par la rception des messages reus des n uds (routeurs) adjacents. Le routage dynamique permet davoir des routes toujours optimises, en fonction de ltat du rseau (nouveaux routeurs, engorgements, pannes).
Note : En gnral, les deux types de routages sont combins

278

Chapitre 11. SR004 Interconnecter un rseau TCP/IP

###### ## SYNTAXE: route add [net | host] addr [gw passerelle] [mtric cot] [ netmask masque] [dev ###### - net ou host indique ladresse de rseau ou de lhte pour lequel on tablit une route - adresse de destination, - adresse de la passerelle, - valeur mtrique de la route, - masque de la route ajouter, - interface rseau qui on associe la route. ##### ## Example dajout/suppression de route ##### # Ajoute la route par dfaut vers la passerelle 192.3.2.254 # Identique au champs gateway dans /etc/network/interfaces $ route add default gw 192.3.2.254 # Ajoute la route vers le rseau 130.2.0.0 via la passerelle 192.3.2.1 sur linterface 0 $ route add -net 130.2.0.0 netmask 255.255.0.0 gw 192.3.2.1 dev eth0 # Efface la route vers le rseau 130.2.0.0 $ route del 130.2.0.0 ###### ## Example table de routage ###### Kernel IP routing table Destination Gateway 192.168.1.0 * 127.0.0.0 * default 192.168.1.9

Genmask 255.255.255. 255.0.0.0 0.0.0.0

Flags 0U U UG

Metric 0 0 0

Ref 0 0 0

Use Iface 2 eth0 2 lo 10 eth0

## Explication - Destination : adresse de destination de la route, - Gateway : adresse IP de la passerelle pour atteindre la route, * sinon (voir note ci-desso - Genmask : masque utiliser. - Flags : indicateur dtat (U -> Up, H -> Host, G -> Gateway, D -> Dynamic, M -> Modified), - Metric : cot mtrique de la route (0 par dfaut), - Ref : nombre de routes qui dpendent de celle-ci, - Use : nombre dutilisation dans la table de routage, - Iface : interface eth0, eth1, lo. . .

Note : Les *(astrisque) dans une table de routage IP dsignent les routes dinterface qui sont des itinraires assigns lune des interfaces rseau (cartes rseau connectes directement dans la machine), et non une adresse IP xe (cest--dire celle de la passerelle). De cette faon, il est possible de congurer des routes pour des destinations dont ladresse IP de passerelle nest pas encore connue au moment de la conguration ou lorsque aucune adresse IP nest associe linterface du poste local.

279

Chapitre 11. SR004 Interconnecter un rseau TCP/IP 11.2.7.4.1. Petite tude de cas Le diagramme de ltude de cas a t ralis avec le logiciel Dia. Le laboratoire dtude a t ralis avec Netkit

Sources: SR004-net01-ch03-etude-de-cas.dia (images/sr004-net01-ch03-etude-de-cas.dia) Lab Netkit : sr004-net01-ch03-etude-de-cas-rlr-netkit-lab03.tar.bz2 (docs/sr004-net01-ch03-etude-de-cas-rlr-netkit-lab03.tar.bz2)

Figure 11-4. Diagramme - Etude de cas

280

Chapitre 11. SR004 Interconnecter un rseau TCP/IP


###### ## On veut # - que - que - que

: les stations de chaque rseau puissent accder Internet, les stations de chaque rseau puissent communiquer entre-elles, les stations du rseau B, utilisent le serveur de noms le moins possible.

###### ## On demande : # - Configuration des postes du rseau B, 1. Configuer Nom dhte sur chaque machine Avec netkit le nom dhte est configur automatiquement partir du fichier lab.conf Sinon on peut editer /etc/hostname et indiquer: quartz sur la machine 1 puis executer /etc/init.d/hostname.sh silex sur la machine 2 puis executer /etc/init.d/hostname.sh

2. Configurer linterface rseau eth0 Il est suppos que que chaque machine ne possde quune seule interface rseaux Ethernet eth Ni le rseaux A ni le rseau B ne sont quips de service DHCP donc laddresse IP de chaque 130.2.0.0 est de classe B, donc le masque rseau 255.255.0.0 considrant que B na pas de so Pour la machine quartz executer: $ ifconfig eth0 130.2.0.2 (ou configurer /etc/network/interfaces) Pour la machine silex executer: $ ifconfig eth0 130.2.0.3 (ou configurer /etc/network/interfaces) ==> le masque devrait tre configur automatiquement 3. Verifier le routage et la communication Voir ci-dessous pour les routes 4. Configurer les rseaux dans /etc/networks (pour pAB seulement) 5. Configuer le nom de domaine, sur chacune des machines dans le fichier /etc/hosts Voir ci-dessous pour le contenu :)) ==> ceci permettra aux machines sur le net B dtre interconnect et de pouvoir communiquer ==>Vrifier la resolution des noms locaux.

6. Configurer le DNS sur chacune des machines dans le fichier /etc/resolv.conf ==> Le server DNS netant pas actif pour le moment les autres poste ne sont pas accessible p - Configuration des postes du rseau A, Similaire aux poste B hormis le fichier /etc/hosts pas ncssaire car utilisation du DNS.

Fichiers de conguration pour chaque machine (hosts , resolv.conf , chier de conguration de carte).

Quartz (docs/sr004-net01-ch03-etude-de-cas-quartz_exportcong.txt) Silex (docs/sr004-net01-ch03-etude-de-cas-silex_exportcong.txt)

281

Chapitre 11. SR004 Interconnecter un rseau TCP/IP


pAB (docs/sr004-net01-ch03-etude-de-cas-pAB_exportcong.txt) Platine (docs/sr004-net01-ch03-etude-de-cas-platine_exportcong.txt) Uranus (docs/sr004-net01-ch03-etude-de-cas-uranus_exportcong.txt) Mercure (docs/sr004-net01-ch03-etude-de-cas-mercure_exportcong.txt) rGW (docs/sr004-net01-ch03-etude-de-cas-rGW_exportcong.txt)

- de donner la liste des routes mettre :

## sur les postes du rseau A, route add default gw 192.3.2.254 ==> dfinit dans le fichier /etc/network/interfaces (gatewa

## sur les postes du rseau B, route add default gw 130.2.0.1 ==> dfinit dans le fichier /etc/network/interfaces (gateway)

## pAB - Passerelle qui relie les 2 rseaux, route add default gw 192.3.2.254 dev eth0 ==> dfinit dans le fichier /etc/network/interface

## rGW - Routeur du rseau A. route add -net 130.2.0.0 netmask 255.255.0.0 gw 192.3.2.1 dev eth0 ==> peut-tre dfinit dan

route add default gw 10.0.5.1 dev eth1 ==> dfinit automatiquement par netkit lors quon uti

11.2.7.5. netstat
Tester la conguration du rseau, visualiser ltat des connexions, tablir des statistiques (surveillance).
###### (Sans argument) Donne ltat des connexions $ netstat Connexions Internet actives (sans serveurs) Proto Recv-Q Send-Q Adresse locale Adresse distante Etat tcp 1 0 macfil.local:60882 77.67.21.51:www CLOSE_WAIT tcp 1 0 macfil.local:35879 weather.noaa.gov:www CLOSE_WAIT Sockets du domaine UNIX actives (sans serveurs) Proto RefCnt Flags Type State I-Node Chemin unix 2 [ ] DGRAM 3125 @/org/kernel/udev/udevd unix 2 [ ] DGRAM 5365 @/org/freedesktop/hal/udev_event unix 18 [ ] DGRAM 4820 /dev/log unix 2 [ ] DGRAM 63258 unix 3 [ ] STREAM CONNECTE 51077 @/tmp/.X11-unix/X0 unix 3 [ ] STREAM CONNECTE 51076 ... ###### #-a afficher toutes les informations sur ltat des connexions,

282

Chapitre 11. SR004 Interconnecter un rseau TCP/IP

$ netstat -a Connexions Internet actives (serveurs et tablies) Proto Recv-Q Send-Q Adresse locale Adresse distante Etat tcp 0 0 localhost:ipp LISTEN *:* tcp 1 0 macfil.local:60882 77.67.21.51:www CLOSE_WAIT tcp 1 0 macfil.local:35879 weather.noaa.gov:www CLOSE_WAIT tcp6 0 0 localhost:ipp [::]:* LISTEN udp 0 0 *:mdns *:* udp 0 0 *:58305 *:* udp 0 0 *:bootpc *:* Sockets du domaine UNIX actives (serveurs et tablies) Proto RefCnt Flags Type State I-Node Chemin unix 2 [ ACC ] STREAM LISTENING 9224 /tmp/orbit-filostene/linc-84b-0-5 unix 2 [ ACC ] STREAM LISTENING 9247 /tmp/orbit-filostene/linc-858-0-6 unix 2 [ ACC ] STREAM LISTENING 9332 /tmp/orbit-filostene/linc-87a-0-1 unix 2 [ ACC ] STREAM LISTENING 10674 /tmp/orbit-filostene/linc-8d7-0-3 unix 2 [ ACC ] STREAM LISTENING 13048 /tmp/orbit-filostene/linc-97b-0-7 unix 2 [ ACC ] STREAM LISTENING 34732 /tmp/orbit-filostene/linc-cdb-0-6 unix 2 [ ACC ] STREAM LISTENING 5139 /var/run/acpid.socket ... ######-i affichage des statistiques, $ netstat -i Table dinterfaces noyau Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg eth0 1500 0 0 0 0 0 0 0 0 eth2 1500 0 20667 0 0 0 25814 551 0 lo 16436 0 24 0 0 0 24 0 0 ######-c rafrachissement priodique de ltat du rseau, $ netstat -c | grep gdm unix 3 [ ] STREAM CONNECTE 7464 unix 3 [ ] STREAM CONNECTE 7464 unix 3 [ ] STREAM CONNECTE 7464 unix 3 [ ] STREAM CONNECTE 7464 unix 3 [ ] STREAM CONNECTE 7464 ...

0 BMU 0 BMRU 0 LRU

@/tmp/gdm-session-NgtqpKET @/tmp/gdm-session-NgtqpKET @/tmp/gdm-session-NgtqpKET @/tmp/gdm-session-NgtqpKET @/tmp/gdm-session-NgtqpKET

######-n affichage des informations en mode numrique sur ltat des connexions $ netstat -n Connexions Internet actives (sans serveurs) Proto Recv-Q Send-Q Adresse locale Adresse distante Etat tcp 1 0 10.0.1.4:60882 77.67.21.51:80 CLOSE_WAIT tcp 1 0 10.0.1.4:35879 140.90.128.70:80 CLOSE_WAIT Sockets du domaine UNIX actives (sans serveurs) Proto RefCnt Flags Type State I-Node Chemin unix 2 [ ] DGRAM 3125 @/org/kernel/udev/udevd unix 2 [ ] DGRAM 5365 @/org/freedesktop/hal/udev_event unix 18 [ ] DGRAM 4820 /dev/log unix 2 [ ] DGRAM 63258 unix 3 [ ] STREAM CONNECTE 51077 @/tmp/.X11-unix/X0 unix 3 [ ] STREAM CONNECTE 51076 unix 3 [ ] STREAM CONNECTE 50975 /home/filostene/.pulse/dd63a3c0cc

283

Chapitre 11. SR004 Interconnecter un rseau TCP/IP


unix unix ... 3 3 [ ] [ ] STREAM STREAM CONNECTE CONNECTE 50974 50933

@/tmp/dbus-grsV2mLnzq

######-r affichage des tables de routage, $ netstat -r # Mme resultat que route Table de routage IP du noyau Destination Passerelle Genmask 10.0.1.0 255.255.255.0 * link-local 255.255.0.0 * default Base-Station-e1 0.0.0.0

Indic U U UG

MSS 0 0 0

Fentre irtt Iface 0 0 eth2 0 0 eth2 0 0 eth2

######-t informations sur les sockets TCP $ netstat -t Connexions Internet actives (sans serveurs) Proto Recv-Q Send-Q Adresse locale Adresse distante tcp 1 0 macfil.local:60882 77.67.21.51:www tcp 1 0 macfil.local:35879 weather.noaa.gov:www ... ######-u informations sur les sockets UDP. $ netstat -u Connexions Internet actives (sans serveurs) Proto Recv-Q Send-Q Adresse locale Adresse distante ...

Etat CLOSE_WAIT CLOSE_WAIT

Etat

######-p indique quel programme (PID) utilise la socket $ netstat -p | more Connexions Internet actives (sans serveurs) Proto Recv-Q Send-Q Adresse locale Adresse distante Etat PID/Program name Sockets du domaine UNIX actives(sans serveurs) Proto RefCnt Flags Type State I-Node PID/Program name hemin unix 2 [ ] DGRAM 2325 682/udevd /org/kernel/udev/udevd unix 2 [ ] DGRAM 5535 2004/hald /org/freedesktop/hal/udev_event ...

C @ @

11.2.7.5.1. Exercices sur la commande netstat On donne les rsultats de 3 commandes netstat ci-dessous, extraites de la mme machine :

$ netstat -nr Kernel IP routing table Destination Gateway 198.5.203.0 0.0.0.0

Genmask 255.255.255.0

Flags MSS U 1500

Window irtt Iface 0 0 eth0

284

Chapitre 11. SR004 Interconnecter un rseau TCP/IP


127.0.0.0 0.0.0.0 0.0.0.0 198.5.203.3 255.0.0.0 0.0.0.0 U UG 3584 1500 0 0 0 0 lo eth0

$ netstat Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address Tcp 0 127 uranus:telnet 194.206.6.143:1027 $ netstat -i Iface MTU Met Lo 3584 0 eth0 1500 0

State ESTABLISHED

RX-OK 764 410856

RX-OVR 764 33286

TX-OK 89 210

Flags BLRU BRU

On demande :

## - Quels sont les noms et adresse de la machine consulte ? Comme indiqu dans le champs Local Address la machine sappelle uranus Son addresse est 198.5.203.X (ou X est un nombre qui ne peut tre dtermin mais different d ## - Quel type de session est-elle en train de supporter ? Comme indiqu dans le champs Local Address une session Telnet ## - quoi correspond ladresse 198.5.203.3 ? Cest laddresse IP de la passerelle (Gateway) par dfaut pour cette machine ## - Pourquoi une interface porte-t-elle les Flags BLRU et lautre BRU ? Linterface avec le Flag L est linterface de bouclage (loopback) ## - Quelle est la taille des paquets utilise par la passerelle par dfaut ? 1500 comme indiqu dans la troisime ligne de la colonne MMS de la table de routage

11.2.7.6. traceroute
Source(s):

Web: Effectuer un traceroute - Sortie graphique 2D et 3D (graphviz/imagemagick/visual) (http://trac.secdev.org/scapydoc-com/wiki/FrTraceroute)

traceroute est un outil de diagnostic des rseaux, prsents sur la plupart des systmes dexploitation, permettant de dterminer le chemin suivi par un paquet. La commande traceroute permet ainsi de dresser une cartographie des routeurs prsents entre une machine source et une machine cible. Cette commande est importante, car elle permet dquilibrer la charge dun rseau, en optimisant les routes.

285

Chapitre 11. SR004 Interconnecter un rseau TCP/IP


Note : La commande traceroute permet de suivre la trace le passage de routeur en routeur pour atteindre un hte sur le rseau tandis que la commande ping permet de vrier la abilit dune route donne.

Il semble plus complexe datteindre le server de lOF quun server google !

$ traceroute google.fr traceroute to google.fr (209.85.229.104), 30 hops max, 40 byte packets 1 Base-Station-e1c421.local (10.0.1.1) 7.996 ms 3.998 ms 3.998 ms 2 10.175.104.1 (10.175.104.1) 11.994 ms 15.992 ms 15.992 ms 3 osr01camd-v15.network.virginmedia.net (62.30.250.97) 15.992 ms 15.992 ms 15.992 ms 4 osr02hari-tenge71.network.virginmedia.net (62.30.250.45) 15.992 ms 15.992 ms 15.992 m 5 pop-bb-b-ae1-0.network.virginmedia.net (195.182.178.169) 15.992 ms 15.992 ms 15.992 m 6 pop-bb-a-ae0-0.network.virginmedia.net (213.105.174.229) 11.994 ms 31.984 ms 31.984 m 7 man-bb-b-as1-0.network.virginmedia.net (212.43.162.86) 63.968 ms 63.968 ms 63.968 ms 8 tele-ic-3-ae0-0.network.virginmedia.net (212.43.163.70) 35.982 ms 35.982 ms 35.982 ms 9 158-14-250-212.static.virginmedia.com (212.250.14.158) 35.982 ms 35.982 ms 39.980 ms 10 209.85.252.76 (209.85.252.76) 35.982 ms 35.982 ms 209.85.255.175 (209.85.255.175) 35. 11 66.249.95.170 (66.249.95.170) 67.966 ms 39.980 ms 72.14.232.134 (72.14.232.134) 39.98 12 216.239.49.45 (216.239.49.45) 39.980 ms 72.14.236.191 (72.14.236.191) 31.984 ms 209.85 13 209.85.243.85 (209.85.243.85) 31.984 ms 209.85.243.81 (209.85.243.81) 31.984 ms 209.85 14 ww-in-f104.1e100.net (209.85.229.104) 31.984 ms 31.984 ms 31.984 ms

$ traceroute ferry.eof.eu.org traceroute to ferry.eof.eu.org (195.202.1.13), 30 hops max, 40 byte packets 1 Base-Station-e1c421.local (10.0.1.1) 7.996 ms 7.996 ms 3.998 ms 2 10.175.104.1 (10.175.104.1) 11.994 ms 15.992 ms 15.992 ms 3 osr01camd-v15.network.virginmedia.net (62.30.250.97) 39.980 ms 39.980 ms 39.980 ms 4 osr01hari-tenge71.network.virginmedia.net (62.30.250.33) 27.986 ms 27.986 ms 27.986 m 5 bre-bb-a-ae1-0.network.virginmedia.net (195.182.178.165) 47.976 ms 47.976 ms 43.978 m 6 bre-bb-b-ae0-0.network.virginmedia.net (213.105.174.226) 23.988 ms 27.986 ms 27.986 m 7 telc-ic-1-as0-0.network.virginmedia.net (62.253.185.74) 27.986 ms 11.994 ms 11.994 ms 8 195.66.226.85 (195.66.226.85) 11.994 ms 31.984 ms 31.984 ms 9 * * * 10 212.161.179.106 (212.161.179.106) 39.980 ms 39.980 ms 39.980 ms 11 195.141.236.206 (195.141.236.206) 39.980 ms 35.982 ms 35.982 ms 12 e513-e-rci65-3-ne2.cern.ch (192.65.184.78) 39.980 ms 39.980 ms 31.984 ms 13 192.65.184.61 (192.65.184.61) 31.984 ms 31.984 ms 27.986 ms 14 gw1-cri.citic74.net (195.202.0.132) 27.986 ms 27.986 ms 27.986 ms 15 * * * 16 * * * 17 * * * 18 * * * 19 * * * 20 * * * 21 * * * 22 * * * 23 * * * 24 * * * 25 * * * 26 * * *

286

Chapitre 11. SR004 Interconnecter un rseau TCP/IP


27 28 29 30 * * * * * * * * * * * *

11.2.7.7. dig
Source(s):

Web: Dig HOWTO (EN) (http://www.madboa.com/geek/dig/) Principaux type denregistrements DNS (http://fr.wikipedia.org/wiki/Domain_Name_System#Principaux_enregistrements_DNS)

Note : Voir aussi la section SR005 Administrer un serveur DNS > TP1 pour dautres exemple dutilisation de la commande dig

La commande dig remplace ce qui tait la commande nslookup. Cette commande sert diagnostiquer des dysfonctionnements (ou le bon fonctionnement) dans la rsolution de nom. (Service DNS).
# $ $ $ $ Retourne les informations sur le domaine concern. dig freenix.org # Information de type A (par dfaut) dig ns freenix.org # Information de type NS (Name Server = Serveur de Nom) dig nx freenix.org # Information de type NX (MX ou Mail eXchanger = Serveur SMTP) dig any freenix.org # Tout type dinformation

; >> DiG 9.6.1-P1 >> any freenix.org ;; global options: +cmd ;; Got answer: ;; (HEADER) opcode: QUERY, status: NOERROR, id: 17031 ;; flags: qr rd ra; QUERY: 1, ANSWER: 7, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;freenix.org. IN ANY ;; ANSWER SECTION: freenix.org. 259200 freenix.org. 259200 freenix.org. 259200 freenix.org. 259200 freenix.org. 259200 freenix.org. 259200 freenix.org. 259200

IN IN IN IN IN IN IN

SOA cabale.usenet-fr.net. hostmaster.freenix.org. 2009122101 21600 7 NS ns.eu.org. NS ns6.gandi.net. NS cabale.usenet-fr.net. NS ns2.freenix.org. NS ns.frmug.org. MX 10 ns2.freenix.org.

;; Query time: 77 msec ;; SERVER: 10.0.1.1#53(10.0.1.1) ;; WHEN: Thu Dec 24 23:32:52 2009

287

Chapitre 11. SR004 Interconnecter un rseau TCP/IP


;; MSG SIZE rcvd: 211

11.2.7.8. host (hte)


host interroge les serveurs de noms (DNS). Utilise pour dtecter des dysfonctionnements sur un rseau (serveurs hors services) ou tout simplement pour obtenir le nom dune machine partir dune adresse IP ou linverse. domainname:
$ host ferry.eof.eu.org ferry.eof.eu.org has address 195.202.1.13 $ host 195.202.1.13 13.1.202.195.in-addr.arpa domain name pointer eof.hosting.cri74.org. $ host linux-france.org linux-france.org has address 80.247.225.35 linux-france.org mail is handled by 50 mx2.nfrance.com. linux-france.org mail is handled by 100 mx3.nfrance.com. linux-france.org mail is handled by 10 tuxinette.linux-france.org.

11.2.7.9. hostname (nom dhte - afche/congure) // dnsdomainname (nom de domaine - afche)


Source(s):

Tutoriel: Linux Hostname Conguration (http://jblevins.org/computing/linux/hostname) HOWTO Hostname (http://movealong.org/hostname.html) Debian Rfrence - Hostname (http://www.debian.org/doc/manuals/debian-reference/ch03.fr.html#_the_hostname)

Le noyau conserve le nom de machine du systme. Dans Debian, le script dinitialisation du niveau de fonctionnement S qui est li symboliquement /etc/init.d/hostname.sh dnit le nom de machine hostname au moment du dmarrage (en utilisant la commande hostname) avec le nom qui est enregistr dans /etc/hostname . Ce chier ne devra contenir que le nom de machine du systme et pas un nom de domaine pleinement quali.
# hostname $ hostname debstafil4 $ hostname debstafil4 $ hostname Commande Options # Afficher nom de lhte -s # idem -a # Afficher les alias

288

Chapitre 11. SR004 Interconnecter un rseau TCP/IP

debstafil4 fil4 $ hostname -f # Afficher le FQDN (Fully Qualified Name = NomHte.Domain) debstafil4.ermansion.net $ hostname -d # Afficher le domaine ( utiliser au lieu de domainname proscrire) ermansion.net $ dnsdomainname ermansion.net # Mme rsultat que la commande prcdente ( utiliser au lieu de domainname

# $ $ $ $ $ # # # # $ $ # # # # # # # # # #

Afficher le nom de lhte hostname # Mthode 1 et 2: lit le fichier /etc/hostname cat /etc/hostname uname -n # Mthode 3,4 et 5: lit le fichier /proc/sys/kernel/hostname cat /proc/sys/kernel/hostname sysctl kernel.hostname Nouveau nom dhte, par exemple "filou" Changer le nom de lhte temporairement en informant le noyau dutiliser un nouveau nom jusqu la prochaine requte de changement Requiert les droits root ou sudo hostname filou # Mthode 1 sysctl kernel.hostname=NEW_HOSTNAME # Mthode 2 Changer le nom de lhte de faon permanente Chaque distribution a un script execut au dmarrage pour configurer le nom de lhte La mthode diffre selon la distribution:

Systmes bass sur (Debian, Ubuntu, etc.) Pour changer le nom de domaine de faon permanente, simplement indiquer le nom dhte, et seulement le nom (sans qualifier le domaine) dans /etc/hostname et executer /etc/init.d

Slackware Utiliser /etc/HOSTNAME. Configurer le nom approprier en consquence et executer hostname -

# Sytmes bass sur Red Hat cherche un ligne HOSTNAME=gauss dans /etc/sysconfig/network. # Pour changer le nom immdiatement executer "hostname filou" as root or simply reboot.

11.2.7.10. whois
La commande whois interroge des bases de donnes (directory services) de registrar pour retourner des informations sur des adresses IP ou des noms rseaux (domaines, servers, etc...).
$ whois google.fr %% %% This is the AFNIC Whois server. * %% %% complete date format : DD/MM/YYYY %% short date format : DD/MM . %% version : FRNIC-2.5

* . *

. . * * . .

* * /.\ . /.^\ * /.\ /.^.\ . /.^.\ .

289

Chapitre 11. SR004 Interconnecter un rseau TCP/IP


%% %% %% %% %% %% %% %% %% %% ^^|_|^^ * * Rights restricted by copyright. See http://www.afnic.fr/afnic/web/mentions-legales-whois_en Use -h option to obtain more information about this service. [94.170.73.28 REQUEST] >> -V Md4.7 google.fr RL Net [##########] - RL IP [#########.]

domain: status: hold: holder-c: admin-c: tech-c: zone-c: nsl-id: registrar: anniversary: created: last-update: source: ns-list: nserver: nserver: nserver: nserver: source: registrar: type: address: address: address: country: phone: fax-no: e-mail: website: anonymous: registered: source: nic-hdl: type: contact: address: address: address: address:

google.fr ACTIVE NO GI658-FRNIC TT599-FRNIC MC239-FRNIC NFC1-FRNIC NSL4386-FRNIC eMARKMONITOR Inc. dba MARKMONITOR 03/06 27/07/2000 03/06/2009 FRNIC NSL4386-FRNIC ns1.google.com ns2.google.com ns3.google.com ns4.google.com FRNIC eMARKMONITOR Inc. dba MARKMONITOR Isp Option 1 Emerald Tech Center 391 N. Ancestor Place ID 83704 BOISE US +1 208 389 5740 +1 208 389 5771 ccops@markmonitor.com http://www.markmonitor.com NO 10/01/2002 FRNIC MC239-FRNIC ROLE MARKMONITOR CCOPS eMarkmonitor Inc. dba MarkMonitor PMB 155 10400 Overland Road 83709-1433 Boise, Id

290

Chapitre 11. SR004 Interconnecter un rseau TCP/IP


address: phone: e-mail: admin-c: tech-c: changed: anonymous: obsoleted: source: ... US +01 2083895740 ccops@markmonitor.com DL534-FRNIC DL534-FRNIC 10/10/2008 ccops@markmonitor.com NO NO FRNIC

11.2.7.11. ip
Source(s):

Web: Manuel de Reference pour la commande ip (http://linux-ip.net/gl/ip-cref/ip-cref.html) Iproute 2 (http://irp.nain-t.net/doku.php/100iproute:020_iproute2) linux-ip.net (http://linux-ip.net/) Linux Advanced Routing & Trafc Control (http://lartc.org/)

La commande ip sert, entre autres, la conguration des interfaces rseaux tout comme ifcong sauf que, ip peut faire beaucoup dautres choses trs sophistiques mais est plus complexe. Elle necessite linstallation du paquet iproute (pas install par dfaut). Elle gre trs bien tout ce quon peut faire en rseau sous GNU/Linux et notament la congurer de tunnel GRE sur une interface.
# Afficher laide de la commande :) $ ip Usage: ip [ OPTIONS ] OBJECT { COMMAND | help } ip [ -force ] [-batch filename where OBJECT := { link | addr | addrlabel | route | rule | neigh | ntable | tunnel | maddr | mroute | monitor | xfrm } OPTIONS := { -V[ersion] | -s[tatistics] | -d[etails] | -r[esolve] | -f[amily] { inet | inet6 | ipx | dnet | link } | -o[neline] | -t[imestamp] } ## Afficher information sur les interfaces rseaux $ ip addr $ ip addr list 1: lo: LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth3: BROADCAST,MULTICAST,UP,LOWER_UP> mtu 300 qdisc pfifo_fast state UNKNOWN qlen 1000 link/ether 08:00:27:89:1d:4f brd ff:ff:ff:ff:ff:ff inet 10.0.1.3/8 brd 10.255.255.255 scope global eth3

291

Chapitre 11. SR004 Interconnecter un rseau TCP/IP


## Autres examples $ ip link show $ ip link list # Equivalent 1: lo: <:LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: eth3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 576 qdisc pfifo_fast state UNKNOWN qlen 1000 link/ether 08:00:27:89:1d:4f brd ff:ff:ff:ff:ff:ff ## Rgle dexploitation des tables de routage (rule = ~nom de la table) $ ip rule list ## Afficher la route $ ip route $ ip route list $ ip route list table local ## Ajouter une route la table de routage pop3 $ ip route add default via 192.168.0.3 dev eth0 table pop3 ## ARP $ ip neigh list ## Afficher la table ARP $ ip neigh flush all ## Vider la table ARP La page "man ip" est trs claire :)) Pour le reste on verra lusure...

QUESTION : Un tunnel cest un lien (link) encrypt, correct ? Est-ce quel les tunnels utiliss pour les rseaux VPN sont ceux la mme cr avec la commande ip ? RPONSE : un tunnel est un tunnel. Il peut ou non tre chiffr. Il y a diffrents types de tunnels et diffrentes manires den faire, comme en utilisant le protocole GRE par exemple. Nous ferons des tunnels dans lavenir (de la formation). QUESTION : - A quoi sert loption "-family link" ( ne pas confondre avec lobjet link), dans quel cas est-elle utlis ? Quel est la difference entre "-family link" et objet "link" ormis le fait que lun est une option, lautre un objet... RPONSE : Voir man ou help ou lune des ressources indiques plus haut. Si ce nest pas l dedans faut aller voir les sources. Apperemment il est rare de trouver quelque chose dintressant sur le net qui puisse aider vraiment sur ip.En ce qui concerne le type de trame, si ce nest pas de lipv4 ni de lipv6 tu peux prciser si cest du decnet, de lafnet, de lipx... QUESTION : Quest ce que lobjet addrlabel ? Comment a sutilise, je veux dire dans quel cas ? Comment un label est choisi et pas un autre au moment de lutilisation dans la table de routage ?

292

Chapitre 11. SR004 Interconnecter un rseau TCP/IP RPONSE : Pas sr que jutilises a dans les mois qui viennent. Cest pour rpondre une problmatique particulire dcrite dans la RFC 3484 "Default Address Selection for Internet Protocol version 6 (IPv6)". Problme qui ne concerne dailleurs pas quIPv6 mais aussi IPv4, savoir (en rsumant hyper vite car cest moins simple que cela), si tu as 1 interface rseaux qui a plusieurs adresses IP (2 en IPv4 et 1 ou 2 en IPv6) tu fais comment pour indiquer celle qui est prioritaire pour les services (rsolution de nom...) et que le processus client ne se casse pas la gure aprs un timeout. Pour du http ce nest pas trop grave, sur une conversation a devient plus gnant et sil agit du pilotage dun drne arm a peut devenir cata. Caricatural, mais cest l quintervient addrlabel.

11.2.7.12. ping
Permet denvoyer une requte ICMP Echo dune machine une autre machine. Si la machine ne rpond pas il se peut que lon ne puisse pas communiquer avec elle. Cette commande rseau de base permet dobtenir des informations et en particulier le temps de rponse de la machine travers le rseau et aussi quel est ltat de la connexion avec cette machine (renvoi code derreur correspondant).
$ ping localhost PING localhost (127.0.0.1) 56(84) bytes of data. 64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.078 ms 64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.038 ms ... --- localhost ping statistics --7 packets transmitted, 7 received, 0% packet loss, time 5994ms rtt min/avg/max/mdev = 0.036/0.056/0.134/0.035 ms $ ping google.fr PING google.fr (74.125.77.104) 56(84) bytes of data. 64 bytes from ew-in-f104.1e100.net (74.125.77.104): icmp_seq=1 ttl=63 time=30.5 ms 64 bytes from ew-in-f104.1e100.net (74.125.77.104): icmp_seq=2 ttl=63 time=497 ms ... --- google.fr ping statistics --4 packets transmitted, 4 received, 0% packet loss, time 3019ms rtt min/avg/max/mdev = 30.512/266.418/501.459/233.148 ms $ ping ferry.eof.eu.org PING ferry.eof.eu.org (195.202.1.13) 56(84) bytes of data. 64 bytes from eof.hosting.cri74.org (195.202.1.13): icmp_seq=1 ttl=63 time=30.2 ms 64 bytes from eof.hosting.cri74.org (195.202.1.13): icmp_seq=3 ttl=63 time=35.8 ms ... --- ferry.eof.eu.org ping statistics --5 packets transmitted, 3 received, 40% packet loss, time 4016ms rtt min/avg/max/mdev = 30.259/189.525/502.480/221.304 ms

11.2.7.13. mtr
La commande mtr est un outil de diagnostic rseau qui combine traceroute et ping...!

293

Chapitre 11. SR004 Interconnecter un rseau TCP/IP


# Installation $ sudo apt-get install mtr

# Installed par dfaut sur Ubuntu # mais pas sur Debian

# Traceroute $ mtr -r -c 30 ferry.eof.eu.org HOST: debstafil4 1. Base-Station-e1c421.local 2. 10.175.104.1 3. osr01camd-v15.network.virgin 4. osr01hari-tenge71.network.vi 5. bre-bb-a-ae1-0.network.virgi 6. bre-bb-b-ae0-0.network.virgi 7. telc-ic-1-as0-0.network.virg 8. 195.66.226.85 9. ??? 10. 212.161.179.106 11. 195.141.236.206 12. e513-e-rci65-3-ne2.cern.ch 13. 192.65.184.61 14. gw1-cri.citic74.net 15. eof.hosting.cri74.org

Loss% 13.3% 16.7% 13.3% 13.3% 6.7% 16.7% 16.7% 16.7% 100.0 10.0% 13.3% 10.0% 3.3% 13.3% 3.3%

Snt 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30

Last 0.0 12.0 16.0 16.0 8.0 16.0 12.0 36.0 0.0 40.0 32.0 32.0 28.0 28.0 36.0

Avg 4.8 13.0 14.2 15.4 15.9 21.1 14.7 15.8 0.0 44.8 52.9 39.4 35.6 34.2 33.9

Best 0.0 4.0 8.0 8.0 4.0 4.0 8.0 8.0 0.0 28.0 24.0 28.0 28.0 28.0 24.0

Wrst StDev 8.0 2.5 20.0 4.5 28.0 4.4 48.0 8.4 36.0 8.0 76.0 17.9 36.0 5.6 48.0 10.1 0.0 0.0 184.1 30.4 240.1 52.4 140.1 22.5 48.0 5.7 52.0 6.0 48.0 7.3

11.2.7.14. bing
un testeur de bande passante. Outil de mesure de bande passante brut (raw) en point point bas sur ping.
# Bing nest pas install par dfaut # Pour installer $ apt-get install bing # Test $ bing -S 400 10.0.1.5 google.fr BING 10.0.1.5 (10.0.1.5) and ew-in-f104.1e100.net (74.125.77.104) 44 and 400 data bytes (5696 bits) ew-in-f104.1e100.net: 0.003bps 2147483614.984ms 377016084.091292us/bit ew-in-f104.1e100.net: 0.003bps 2147483614.984ms 377016084.091292us/bit ew-in-f104.1e100.net: 0.003bps 2147483614.984ms 377016084.091292us/bit ew-in-f104.1e100.net: 0.003bps 2147483614.984ms 377016084.091292us/bit ^Cew-in-f104.1e100.net: 0.003bps 2147483614.984ms 377016084.091292us/bit --- 10.0.1.5 statistics --bytes out in dup loss rtt (ms): min 44 5 5 0% 0.000 400 5 5 0% 0.000

avg 0.000 0.000

max 0.000 0.000

std dev 0.000 0.000

--- ew-in-f104.1e100.net statistics --bytes out in dup loss rtt (ms): min avg max 44 5 5 0% 32.016 37.619 48.024 400 4 0 100%

std dev 7.801

294

Chapitre 11. SR004 Interconnecter un rseau TCP/IP

--- estimated link characteristics --host bandwidth ms ew-in-f104.1e100.net: not enough received packets

11.2.7.15. telnet (mieux vaux utiliser ssh [ou cURL pour test HTTP])
telnet est une commande permettant de crer une session Telnet sur une machine distante. Cette commande a dabord t disponible sur les systmes Unix, puis elle est apparue sur la plupart des systmes dexploitation. Telnet (TErminal NETwork ou TELecommunication NETwork, ou encore TELetype NETwork) est un protocole rseau utilis sur tout rseau supportant le protocole TCP/IP. Il appartient la couche session du modle OSI et la couche application du modle ARPA. Il est normalis par lIETF (RFC 854 et RFC 855). Selon, lIETF, le but du protocole Telnet est de fournir un moyen de communication trs gnraliste, bi-directionnel et orient octet. http://fr.wikipedia.org/wiki/Telnet ### Test de connection hte 10.0.1.5 sur $ telnet 10.0.1.5 80 Trying 10.0.1.5... Connected to 10.0.1.5. Escape character is ^]. GET index.html <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML <html><head> <title>400 Bad Request</title> </head><body> <h1>Bad Request</h1> <p>Your browser sent a request that this </p> <hr> <address>Apache/2.2.9 (Debian) Server at </body></html> Connection closed by foreign host. le port 80

2.0//EN">

server could not understand.<br />

debstafil4.ermansion.net Port 80</address>

11.2.7.16. cURL/libcurl (Test requte HTTP,FTP,etc... en ligne de commande - automatiser les jobs HTTP)
Source(s):

Web: Using cURL to automate HTTP jobs (http://curl.haxx.se/docs/httpscripting.html) cURL (Wikipedia EN) (http://en.wikipedia.org/wiki/CURL) cURL (Wikipedia FR) (http://fr.wikipedia.org/wiki/CURL)

295

Chapitre 11. SR004 Interconnecter un rseau TCP/IP cURL est un outil en ligne de commande (bas sur la bibliothque logicielle libcurl) pour transferrer/rcuprer des donnes/ressources accessibles sur un rseau informatique via divers protocols. Les protocoles supports sont : FTP, FTPS, HTTP, HTTPS, TFTP, SCP, SFTP, Telnet, DICT, FILE et LDAP. La ressource est dsigne laide dune URL. Le logiciel permet de crer ou modier une ressource (contrairement wget, lcriture peut se faire en HTTP en utilisant les commandes POST ou PUT), il peut ainsi tre utilis en tant que client REST. La bibliothque libcurl est accessible aux programmeurs qui veulent disposer des fonctionnalits daccs au rseau dans leurs programmes. Des interfaces ont t cres dans de nombreux langages (C++, Java, .NET, Perl, PHP, Ruby...).
Note : cURL est un bon remplacement de Telnet pour tester des requtes HTTP et visualiser les en-tte et rponses.

# Requte HTTP GET standard sur port 80 $ curl http://google.fr # Rponse (contenu) <HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8"> <TITLE>301 Moved</TITLE></HEAD><BODY> <H1>301 Moved</H1> The document has moved <A HREF="http://www.google.fr/">here</A>. </BODY></HTML> # Inclure len-tte HTTP $ curl http://google.fr -i # avec le contenu de la rponse $ curl http://google.fr -I # sans le contenu (affiche uniquement len-tte) HTTP/1.1 301 Moved Permanently Location: http://www.google.fr/ Content-Type: text/html; charset=UTF-8 Date: Sat, 29 May 2010 09:14:29 GMT Expires: Mon, 28 Jun 2010 09:14:29 GMT Cache-Control: public, max-age=2592000 Server: gws Content-Length: 218 X-XSS-Protection: 1; mode=block (...) # Afficher des statistiques (utile pour verifier des transferts de fichier # Requiert de rediriger le resultat de requte (option -o) $ curl http://google.fr -o resultat.txt % Total % Received % Xferd Average Speed Time Time Time Dload Upload Total Spent Left 109 218 109 218 0 0 237 0 --:--:-- --:--:-- --:--:-PUT, GET)

Current Speed 683

296

Chapitre 11. SR004 Interconnecter un rseau TCP/IP

11.2.7.17. nc (netcat) Couteau Suisse TCP/IP de larme ! [peu remplacer telnet]


Source(s):

Web: netcat (http://netcat.sourceforge.net)

netcat est un utilitaire permettant douvrir des connexions rseau, que ce soit UDP ou TCP. Il est conu pour tre incorpor aisment dans un large panel dapplications. En raison de sa polyvalence, netcat est aussi appel le couteau suisse du TCP/IP . Il existe sur plusieurs systmes dexploitation et sutilise en ligne de commande. Il peut tre utilis pour connatre ltat des ports la faon dun scan de ports. http://fr.wikipedia.org/wiki/Netcat ### Test de connection hte 10.0.1.5 sur $ nc 10.0.1.5 80 get index.html <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML <html><head> <title>400 Bad Request</title> </head><body> <h1>Bad Request</h1> <p>Your browser sent a request that this </p> <hr> <address>Apache/2.2.9 (Debian) Server at </body></html> le port 80

2.0//EN">

server could not understand.<br />

debstafil4.ermansion.net Port 80</address>

11.2.7.18. iftop
Source(s):

Web: iftop (http://webmail.appert44.org/~plegal/index.php/Conguration_et_test_d%27une_interface_r%C3%A9seau_sur_une_stat

iftop permet de mesurer le trac sur une interface rseau


$ iftop -i eth3

297

Chapitre 11. SR004 Interconnecter un rseau TCP/IP

11.2.8. Utilisation de commandes rseau


Source(s):

OF: SR004-net01-ch04-trace-reseau.pdf (docs/eof/sr004-net01-ch04-trace-reseau.pdf) Kivio Diagramme: SR004-net01-ch04-traceroute.w (images/sr004-net01-ch04-traceroute.w)

Lobjectif dans cet exercise est de dcouvir les relations entre les routeurs, la topographie dInternet, au moins en partie, etc... de voir comment nous sommes tous interconnects et comment certaines passerelles peuvent tre incontournable (noeud racine du rseau Internet).

298

Chapitre 11. SR004 Interconnecter un rseau TCP/IP Figure 11-5. Diagramme - Traceroute

299

Chapitre 11. SR004 Interconnecter un rseau TCP/IP

###### ## Voici mes tentatives du jour... toutes ne marchent pas sauf les deux dernires, miracle ! # ## Trace vers OF # tracert ferry.eof.eu.org # tcptraceroute ferry.eof.eu.org # traceroute ferry.eof.eu.org -w # traceroute ferry.eof.eu.org -w # traceroute ferry.eof.eu.org -w # traceroute ferry.eof.eu.org -w # traceroute ferry.eof.eu.org -w # traceroute ferry.eof.eu.org -w

0.5 0.5 0.5 0.5 0.5 0.5

-N -N -N -N -N

1 1 1 1 1

-p -p -p -p

80 80 -q 1 80 -q 1 -F 80 -q 1 -F -I

# traceroute ferry.eof.eu.org -N 1 -p 80 -q 1 -F -I # traceroute ferry.eof.eu.org -N 1 -p 443 -I # Les options minimum indiquer sont: # -N traceroute to ferry.eof.eu.org (195.202.1.13), 30 hops max, 40 byte packets 1 Base-Station-e1c421.local (10.0.1.1) 12.006 ms 2 10.175.104.1 (10.175.104.1) 12.006 ms 3 osr01camd-v15.network.virginmedia.net (62.30.250.97) 16.008 ms 4 osr01hari-tenge71.network.virginmedia.net (62.30.250.33) 12.006 ms 5 bre-bb-a-ae1-0.network.virginmedia.net (195.182.178.165) 16.008 ms 6 bre-bb-b-ae0-0.network.virginmedia.net (213.105.174.226) 16.008 ms 7 telc-ic-1-as0-0.network.virginmedia.net (62.253.185.74) 12.006 ms 8 195.66.226.85 (195.66.226.85) 16.008 ms 9 * 10 212.161.179.106 (212.161.179.106) 28.014 ms 11 195.141.236.206 (195.141.236.206) 28.014 ms 12 e513-e-rci65-3-ne2.cern.ch (192.65.184.78) 32.016 ms 13 192.65.184.61 (192.65.184.61) 24.012 ms 14 gw1-cri.citic74.net (195.202.0.132) 36.018 ms 15 eof.hosting.cri74.org (195.202.1.13) 28.014 ms

## Trace de moi vers Christiane # traceroute 86.67.63.125 -N 1 -p 80 -I traceroute to 86.67.63.125 (86.67.63.125), 30 hops max, 40 byte packets 1 Base-Station-e1c421.local (10.0.1.1) 4.002 ms 8.004 ms 4.002 ms 2 10.175.104.1 (10.175.104.1) 8.004 ms 16.008 ms 12.006 ms 3 osr01camd-v11.network.virginmedia.net (62.30.144.161) 12.006 ms 28.014 ms 20.010 ms 4 osr01hari-tenge71.network.virginmedia.net (62.30.250.33) 12.006 ms 12.006 ms 12.006 m 5 bre-bb-a-ae1-0.network.virginmedia.net (195.182.178.165) 36.018 ms 20.010 ms 12.006 m 6 gfd-bb-b-as1-0.network.virginmedia.net (212.43.163.105) 12.006 ms 32.016 ms 24.012 ms 7 redb-ic-1-as0-0.network.virginmedia.net (62.253.185.78) 8.004 ms 16.008 ms 12.006 ms 8 linx.n9uf.net (195.66.224.214) 40.020 ms 24.012 ms 24.012 ms 9 145.178.96-84.rev.gaoland.net (84.96.178.145) 44.022 ms 24.012 ms 40.020 ms 10 154.243.103-84.rev.gaoland.net (84.103.243.154) 28.014 ms 40.020 ms 28.014 ms 11 206.237.70-86.rev.gaoland.net (86.70.237.206) 32.016 ms 52.026 ms 28.014 ms 12 125.63.67-86.rev.gaoland.net (86.67.63.125) 72.036 ms 64.032 ms 64.032 ms ## Trace de moi vers Pierre-Yves

300

Chapitre 11. SR004 Interconnecter un rseau TCP/IP

$ traceroute 82.67.118.36 -N 1 -p 80 -I traceroute to 82.67.118.36 (82.67.118.36), 30 hops max, 40 byte packets 1 Base-Station-e1c421.local (10.0.1.1) 8.004 ms 0.000 ms 0.000 ms 2 10.175.104.1 (10.175.104.1) 12.006 ms 20.010 ms 20.010 ms 3 osr01camd-v15.network.virginmedia.net (62.30.250.97) 140.070 ms 156.078 ms 204.102 ms 4 osr02hari-tenge71.network.virginmedia.net (62.30.250.45) 16.008 ms 16.008 ms 12.006 m 5 pop-bb-b-ae1-0.network.virginmedia.net (195.182.178.169) 12.006 ms 16.008 ms 8.004 ms 6 pop-bb-a-ae0-0.network.virginmedia.net (213.105.174.229) 12.006 ms 20.010 ms 16.008 m 7 amst-ic-1-as0-0.network.virginmedia.net (213.105.175.6) 16.008 ms 28.014 ms 20.010 ms 8 amsix-6k-1.routers.proxad.net (195.69.144.251) 24.012 ms 24.012 ms 20.010 ms 9 londres-6k-1-po100.intf.routers.proxad.net (212.27.56.41) 20.010 ms 32.016 ms 32.016 10 bzn-crs16-1-be1102.intf.routers.proxad.net (212.27.51.185) 48.024 ms 52.026 ms 36.018 11 cbv-6k-1-po20.intf.routers.proxad.net (212.27.50.190) 32.016 ms * 36.018 ms 12 * * rennes-6k-1-v804.intf.routers.proxad.net (212.27.50.142) 48.024 ms 13 vil35-1.dslg.proxad.net (213.228.11.145) 40.020 ms 44.022 ms 44.022 ms 14 * * * 15 vil35-1-82-67-118-36.fbx.proxad.net (82.67.118.36) 68.034 ms 64.032 ms 68.034 ms ## Trace de Christiane vers moi $ sudo traceroute 94.170.73.28 -N 1 -p 80 -q 1 -F -I [sudo] password for chr: traceroute to 94.170.73.28 (94.170.73.28), 30 hops max, 60 byte packets 1 neufbox (192.168.1.1) 4.149 ms 2 * 3 205.237.70-86.rev.gaoland.net (86.70.237.205) 43.286 ms 4 153.243.103-84.rev.gaoland.net (84.103.243.153) 44.054 ms 5 * 6 195.66.224.23 (195.66.224.23) 58.086 ms 7 gfd-bb-b-as0-0.network.virginmedia.net (62.253.185.77) 58.785 ms 8 bre-bb-a-as3-0.network.virginmedia.net (212.43.163.106) 63.355 ms 9 osr01hari-pc200.network.virginmedia.net (195.182.178.166) 61.672 ms 10 osr01camd-tenge71.network.virginmedia.net (62.30.250.34) 61.807 ms 11 camd-cmts-10-ge02.network.virginmedia.net (62.30.144.181) 61.740 ms 12 cpc3-camd10-0-0-cust283.hari.cable.virginmedia.com (94.170.73.28) 73.569 ms

11.2.9. Init : initialisation du systme sous Linux


Source(s):

OF: SR004-net01-ch05-init.pdf (docs/eof/sr004-net01-ch05-init.pdf) Web: Cours Linux Runlevels (http://www.generation-linux.fr/index.php?post/2009/01/22/Cours-Linux-%3A-les-runlevels)

301

Chapitre 11. SR004 Interconnecter un rseau TCP/IP

11.2.9.1. Processus de BOOT (5 tapes dinitialisation)


BIOS ==> charge bootstrap qui contient chargeur Chargeur de Systme (Grub, LILO, autres...) ==> charge noyau Noyau de Linux (micro-systme) ==> initialise matriel et priphriques, charge pilote et module, start programme init Init (programme et periphriques) ==> execute dautres scripts et programmes (/etc/init.d/rcS puis /etc/rcx.d) Extensions et services (daemons)

11.2.9.2. Les niveaux dexecution (N)


S : Initialiser le systme au dmarrage 0 : Arrter le systme 1 : Mode mono-utilisateur 2 5 : Diffrents modes multi-utilisateurs 6 : Redmarrer le systme

## Afficher le niveau dexcution en cours $ runlevel N 5

Note : Le niveau dexecution est dni dans /etc/inittab (ex: "id:2:initdefault:"). Suivant la distribution, ce niveau par dfaut peut tre diffrent : Debian 2, Mandriva 5, etc...

Question: A quoi serve les differents mode multi-utilisateurs ? Dans quel cas sont-ils utiliss ? Rponse: [2 : rseau][3 : multi utilisateur][4 : xdm][5 : X] mais bon, cest pour les vieux de la vieille, a na plus aucun sens maintenant. man init. Question: Pour le niveau 5, est-ce que tous les scrips des niveaux prcdent (excpt 0) sont-ils executs ou uniquement ceux du niveau 5 ? Est-ce que le systme passe par chacun des niveaux avant datteindre celui souhait ? Rponse: les scripts prsents dans 2, 3 ou 4 sont-ils prsent dans 5 ? Si oui, la rponse est implicite... en fait cest le cas donc on va directement au niveau souhait sans pass par les autres...

302

Chapitre 11. SR004 Interconnecter un rseau TCP/IP

11.2.9.3. Changer le niveaux dexecution (/sbin/telinit)


Le niveau dexecution peut-tre chang si un administrateur excute la commande /sbin/telinit qui envoie les signaux appropris au processus init pour lui indiquer de changer le niveau dexcution. Mais dautres mthode existes... Pour changer le niveau dexecution:
### Par dfaut... # Le mode dexcution par dfaut peut tre modifi dans /etc/inittab (action initdefault) ### Lors du dmarrage de Linux... # A laffichage du prompt boot: linux single ## Mode mono-utilisateur # ou boot: linux 1 ### En cours dexcution... $ /sbin/telinit 5 ## (Re-)Initialise le systme au niveau dexecution 5

11.2.9.4. /sbin/init & /etc/inittab

/sbin/init : Program (ou commande) dinitialisation. Premier processus lanc aprs dmarrage du noyau.
## (Re-)Initialise le systme au niveau dexecution 5 $ /sbin/init 5 # ou $ /sbin/telinit 5 # Prfrable de passer par telinit

/etc/inittab : Fichier de conguration tu processus dinitialisation. Consulter la page de manuel: man inittab

$ cat /etc/inittab ... # The default runlevel. id:2:initdefault: ## Niveau dexecution par dfaut ... # Boot-time system configuration/initialization script. si::sysinit:/etc/init.d/rcS ## Premier script dinitialisation dmarr ... l0:0:wait:/etc/init.d/rc 0 ## Suite dinstructions: "code:niveau daction:action:comman l1:1:wait:/etc/init.d/rc 1 ## Pour initialiser au niveau dexecution souhait l2:2:wait:/etc/init.d/rc 2 ... ### code:

reference unique de lenregistrement dans inittab

303

Chapitre 11. SR004 Interconnecter un rseau TCP/IP

niveau daction: action:

liste des niveaux dexcution pour lesquels laction doit tre lance action executer: - respawn (redmarr si terminer), - wait (init attends la fin dexecution du processus), - once (excuter processus une fois seulement) - boot (excuter processus au dmarrage) - initdefault (dfinir niveau dexcution aprs dmarrage) - sysinit (excuter processus au dmarrage avant "boot") processus excuter

commande: ###

Note : Le chier de conguration dinit, /etc/inittab, spcie que le premier script excuter est /etc/init.d/rcS (rc.sysinit sur dautres distributions que Debian).

Note : Il y a plusieurs versions dinit : BSD , System V . BSD a ses chiers de conguration dans /etc tandis que System V (prononcer systme cinq) a ses chiers dans un sous-dossier de /etc/rc.d. init System V tend devenir le standard sous Linux.

11.2.9.5. dmesg & /var/log

dmesg : les messages de la phase de dmarrage sont consultables avec cette commande.
$ dmesg | more [ 0.000000] Initializing cgroup subsys cpuset [ 0.000000] Initializing cgroup subsys cpu [ 0.000000] Linux version 2.6.26-2-686 (Debian 2.6.26-19lenny2) (dannf@debian .org) (gcc version 4.1.3 20080704 (prerelease) (Debian 4.1.2-25)) #1 SMP Wed Nov 4 20:45:37 UTC 2009 [ 0.000000] BIOS-provided physical RAM map: [ 0.000000] BIOS-e820: 0000000000000000 - 000000000009fc00 (usable) [ 0.000000] BIOS-e820: 000000000009fc00 - 00000000000a0000 (reserved) [ 0.000000] BIOS-e820: 00000000000f0000 - 0000000000100000 (reserved) [ 0.000000] BIOS-e820: 0000000000100000 - 0000000018ff0000 (usable) [ 0.000000] BIOS-e820: 0000000018ff0000 - 0000000019000000 (ACPI data) [ 0.000000] BIOS-e820: 00000000fffc0000 - 0000000100000000 (reserved) [ 0.000000] WARNING: strange, CPU MTRRs all blank? [ 0.000000] ------------[ cut here ]-----------[ 0.000000] WARNING: at arch/x86/kernel/cpu/mtrr/main.c:696 mtrr_trim_uncache d_memory+0x178/0x183() [ 0.000000] Modules linked in: [ 0.000000] Pid: 0, comm: swapper Not tainted 2.6.26-2-686 #1 [ 0.000000] [<c01225f3>] warn_on_slowpath+0x40/0x66 [ 0.000000] [<c02b9b2b>] _spin_lock_irqsave+0x16/0x2f [ 0.000000] [<c02b9bb9>] _spin_unlock_irqrestore+0xd/0x10

304

Chapitre 11. SR004 Interconnecter un rseau TCP/IP


[ 0.000000] [ 0.000000] --Plus-[<c0122a94>] release_console_sem+0x173/0x18c [<c0122f0b>] vprintk+0x2d2/0x2de

/var/log : Fichier de journalisation des messages de la phase de dmarrage.

11.2.9.6. /etc/init.d/rcS & /etc/init.d/rcS.d

/etc/init.d/rcS : Script dinitialisation systme. Premier script lanc par init. Il lance tous les scripts localiss dans /etc/init.d/rcS.d /etc/init.d/rcS.d : Contient des liens symboliques (ln -s) vers des scripts qui sont dans /etc/init.d, tous ces scripts sont lancs par /etc/init/d/rcS dans leur ordre dapparition, pour excuter des initialisations comme la vrication et le montage des systmes de chiers, le chargement des modules, le dmarrage des services rseau, le rglage de lhorloge et lexcution dautres initialisations.

11.2.9.7. /etc/init.d & /etc/rcN.d (N = chiffre entre 0 et 6)


Quand le script /etc/init.d/rcS se termine, init va ensuite excuter tous les scripts associs un niveau dexcution (runlevel) souhait.

/etc/init.d/rcN.d : Les rpertoires rc0.d rc6.d correspondent aux programmes qui seront chargs en fonction du niveau dexcution de Linux. Ces repertoires contiennent des liens symboliques (ln -s) vers des scripts qui sont dans /etc/init.d, tous les scripts localiss dans /etc/init.d/rcN.d sont lancs par /etc/init dans leur ordre dapparition, pour excuter des initialisations correspondant au niveau dexecution N. Par exemple, si 2 est le niveau dexcution souhait, le systme va excuter les scripts qui sont dans /etc/rc2.d. Si le script commence par K il sera arrt (kill). Sil commence par S, il sera dmarr (start). /etc/init.d : Contient tous les scripts dinitialisation, un script par service lanc au dmarrage (nfs, ftp, inet. . .). Tous les scripts dans /etc/init.d/rcX.d (X=[S|0|1|2|3|4|5|6]) sont des liens symboliques pointant vers les scripts qui sont dans /etc/init.d. Ceci an de ne pas multiplier les scripts sur la machine.

11.2.9.8. /etc/rc.local, /etc/rc.boot, /etc/rc.d, rc.serial, rc.news...

/etc/rc.local : Dans Debian, il ny a pas non plus de script rc.local par dfaut. Il est possible den mettre un dans /etc/init.d, mais il faut sassurer quil est excut en dernier, avant le chargement de linterface graphique. Ce script sert souvent, ladministrateur pour modier la conguration globale du systme une fois celle-ci termine par le systme. /etc/rc.boot : Les scripts de ce dernier dossier sont habituellement rservs ladministrateur systme, et leur utilisation dans des paquets est obsolte. /etc/rc.d : Debian nutilise pas de rpertoire rc.d mais dmarre son arborescence directement partir de /etc. Le rpertoire rc.d peut contenir galement les chiers rc.local, rc.serial, rc.news. . . rc.serial, rc.news. : Dautres scripts dinitialisation pouvant exister...

305

Chapitre 11. SR004 Interconnecter un rseau TCP/IP

11.2.9.9. Utilitaire de conguration: update-rc.d & rcconf


Permettent de congurer le lancement des services. Il cre ou supprime automatiquement les liens symboliques vers les scripts dinitialisation de type System-V. La commande update-rc.d est plus gnralement utilise. Loutil rcconf est un outil pratique sous Debian.
# Dmarre le daemon /etc/init.d/daemonx dans les niveaux 2,3,4,5 et # le stopper dans les niveaux 0,1,6 # pour une priorit (ou ordre de lancement) 20 $ update-rc.d daemonx start 20 2 3 4 5 . stop 20 0 1 6 . # Pour dsactiver le script compltement $ update-rc.d -f daemonx remove

11.2.9.10. Dmarrer/Arrter un service


$ $ $ $ /etc/init.d/NomDuService stop /etc/init.d/NomDuService start /etc/init.d/NomDuService status /etc/init.d/NomDuService

# pour certains # vous donne lusage

Si vous avez besoin de lancer un script il est toujours possible de le crer dans /etc/init.d et de linitialiser pour quil soit excut dans les runlevels que vous voulez. Voir ci-avant. Pour excuter une commande chaque lancement, vous pouvez utiliser le script rc.local (ce script est excut en dernier, il permet dadapter la conguration de votre systme. Ce script nexistant pas sous Debian, il est possible de le crer:
# Mettre rc.local (mon code) dans /etc/init.d. $ emacs /etc/init.d/rc.local (coder ici) # Rendre le script executable. $ chmod 755 /etc/init.d/rc.local # Crez les liens symbolique avec update-rc.d de faon # ce quil soit excut en dernier dans les niveaux dexcution souhait. $ update-rc.d rc.local defaults 99 ## adapter

306

Chapitre 11. SR004 Interconnecter un rseau TCP/IP

11.2.9.11. Arrter le systme: shutdown, halt, reboot, poweroff


Source(s):

Web: How to let normal users shut down the computer in Linux (http://www.spencerstirling.com/computergeek/shutdown.html)

shutdown : teindre le systme


Syntaxe: /sbin/shutdown [-t sec] [-arkhncfFHP] time [warning-message]

halt : Arrter le systme reboot : Redmarrer le systme


Note : Ne pas utiliser halt ou reboot mais prfrer shutdown. Sur les anciens systme, halt et reboot ne doivent pas tre invoqu directement. Depuis la version 2.74. ces deux commandes invoque shutdown si le systme nest pas en niveau dexcution 0 ou 6.

# $ # $ # $ # $

Arrter le systme immdiatement shutdown -h now ## -h pour halt ou halt Re-dmarrer le systme (Arrter et relancer) shutdown -r now ## -r pour reboot ou reboot

# Arrter le systme et prvenir les utilisateurs par un message # Les utilisateurs auront un message sur leur console et auront le temps de quitter leur ses $ shutdown -h +10 "les services rseaux vont sarrter et reprendre dans 10 minutes" # le temps peut tre indiqu : # au dlai: +m (m=nombre de minutes) # lheure: hh:mm (hh=heure dhorloge, mm=minutes) # # # # # # #

Autres options: -c annule la procdure darrt en cours -k nagit pas, mais envoi le messages aux utilisateurs -f ne pas contrler le systme de fichier (fsck) au dmarrage. -F forcer un contrle du systme de fichier (fsck) au dmarrage. -a utilise /etc/shutdown.allow pour vrifier si lutilisateur est autoris ou non teind -P arrter et teindre le courant

QUESTION: Jai essay de crer un chier /etc/shutdown.allow avec mon nom dutilisateur mais la commande shutdown refuse de sexecuter mme avec loption -a le compte root semble requis..., pourquoi ? Faut-il redmarrer un service pour le changement tre effectif ?

307

Chapitre 11. SR004 Interconnecter un rseau TCP/IP Peut tre parce que ta commande shutdown nappartient qu root ? Et pourquoi passer par l au lieu de passer par un su ou sudo ?
$ ls -l /sbin/shutdown -rwxr-xr-x 1 root root 18196 ao 12

2008 /sbin/shutdown

RPONSE: Quand un utilisateur est enregistr dans shutdown.allow, cela ne signie pas quil peut invoquer la commande shutdown (ou halt, reboot) mais plutt que lutilisateur pourra teindre la machine via CTRL+ALT+DEL si tant es que cela soit congurer dans /etc/inittab. La commande shutdown ne peut-tre utilis que par root. Pour quun utilisateur puisse lutiliser, il doit passer par la commande sudo si tant est quil ait les droits daccs ncessaire comme denit dans le chier /etc/sudoers (utilser la commande visudo pour modier ce chier). [Source: http://www.spencerstirling.com/computergeek/shutdown.html]

11.2.9.12. Upstart ou le successeur de init


Source(s):

Ubuntu: Upstart website (http://upstart.ubuntu.com) Getting started (http://upstart.ubuntu.com/getting-started.html) Successeur dInit ? (https://wiki.ubuntu.com/ReplacementInit) Wiki Upstart - Liste des venements disponible (http://upstart.ubuntu.com/wiki/) Debian: Debian switching to upstart (http://lwn.net/Articles/351013) Dependency based boot sequence (http://wiki.debian.org/LSBInitScripts/DependencyBasedBoot) How Linux Boots: Boot Camp Part I: SysV Init (http://www.linuxplanet.com/linuxplanet/tutorials/7019/1/) Boot Camp Part II: The Upstart Startup Manager (http://www.linuxplanet.com/linuxplanet/tutorials/7033/1/) Tutorial: Use upstart to replace rc.local (http://www.miek.nl/s/8acb776ddc/)

upstart est donn comme le successeur dinit et upstart devrait aussi remplacer terme, cron, atd, anacron et peut-tre mme inetd. Dvelopp linitiative de Canonical Ltd, la socit lorigine de la distribution ubuntu doit rpondre des nouvelles contraintes quamnent les nouveaux noyaux Linux et les nouvelles technologies comme les priphriques hotplug USB. upstart fonctionne de manire asynchrone et remplit dj les tche dinit. Il gre le lancement des tches et daemons au dmarrage de la machine et soccupe galement de larrt lors du shutdown. Cependant, il assure en plus une supervision pendant le fonctionnement du systme. upstart utilise les notions de jobs et dvnements.

308

Chapitre 11. SR004 Interconnecter un rseau TCP/IP

Jobs (placs dans /etc/event.d/) et Evnements : Un job est un script shell qui contient les actions raliser en fonction des vnements qui arrivent (par exemple start ou stop). Le langage utilis pour les scripts qui est beaucoup plus riche que ce qui est utilis avec init. La notion de gestion dvnements prend toute sa dimension car il est possible de dclencher de traitement avant ou aprs (pre-start, post-start) le lancement dun script, avant ou aprs (pre-stop, post-stop) larrt dun script.
## Lister les jobs $ ls /etc/event.d/ | sort

QUESTION: Pourquoi sur ma machine Ubuntu 9.10 il ny a pas de dossier event.d ormis le fait que upstart nest peut-tre pas install ? RPONSE: /etc/event.d no longer used (http://www.ubuntu.com/getubuntu/releasenotes/910#/etc/event.d%20no%20longer%20used). The version of upstart included in Ubuntu 9.10 no longer uses the conguration les in the /etc/event.d directory, looking to /etc/init instead. No automatic migration of changes to /etc/event.d is possible. If you have modied any settings in this directory, you will need to reapply them to /etc/init in the new conguration format by hand.

/etc/event.d/rc-default : Sur les systmes ubuntu, le chier /etc/event.d/rc-default indique le niveau dexcution (runlevel) par dfaut (niveau 2 par dfaut). initctl : commande de contrle des daemons prise en charge par upsart. Elle permet dobtenir la liste des services actifs, en arrter, en lancer...
## Documentation $ man initctl $ initctl --help $ initctl help commandes de Tche : start stop restart reload status list commandes de vnement : emit Autres commandes : reload-configuration version log-priority help

Start job. Stop job. Restart job. Send HUP signal to job. Query status of job. List known jobs.

Emit an event.

Reload the configuration of the init daemon. Request the version of the init daemon. Change the minimum priority of log messages from the init daemon display list of commands

309

Chapitre 11. SR004 Interconnecter un rseau TCP/IP


## Exemples $ initctl list $ initctl status gdm $ initctl stop gdm $ initctl start gdm

# # # #

Liste services et leur status (+PID) Liste status du service gdm Arrter le service gdm Dmarrer le service gdm

Note : Un exemple concret est pass en revue dans le poly de lOF.

11.2.10. Modier ltape de boot


Source(s):

OF: SR004-net01-ch06-cong-init.pdf (docs/eof/sr004-net01-ch06-cong-init.pdf)

Il est possible de raliser des traitements automatiquement lors de linitialisation du systme. Des squelettes de scripts sont fournis avec la distribution. Questions se poser:

Avons nous juste quelques commandes passer (scripts simples) ou souhaitons-nous lancer un service serveur (daemon) ? Y a t-il juste un traitement au lancement du systme, uniquement larrt ou alors aux deux ? Les commandes doivent-elles tre lances avant les autres services ou la n ?

rc.local : Une solution qui permet de faire excuter un script au boot aprs le lancement de tous les services, est dutiliser le script rc.local. Cela revient, utiliser une solution des niveaux dinit de le mettre en S99z pour tre sr quil soit excut en dernier, les scripts tant lancs par ordre alphabtiques. Deux autres solutions :
- Daemon : raliser simplement un daemon (tudier plus loin dans le journal) - Upstart: utiliser upstart pour remplacer rc.local

310

Chapitre 11. SR004 Interconnecter un rseau TCP/IP

11.2.11. Exercice - valuation


Source(s):

OF: SR004-net01-ch07-exercice1.pdf (docs/eof/sr004-net01-ch07-exercice1.pdf)

###### ## SR004-net01-ch07-Exercice1 # # - Donnez les commandes qui permettent de configurer les interfaces rseaux et les routes. "ifconfig" et "ip" pour les interfaces rseaux "route" et "ip" pour la table de routage # - Dans quel fichier sont stocks les paramtres de configuration des interfaces rseaux ? /etc/network/interfaces

# - Jarrive joindre le serveur de lentreprise mais je narrive pas joindre de sites su # alors que mon collgue, lui y arrive. Quel types de problmes peut-il y avoir ? Problme de routage. Les deux machines nont certainement pas la mme passerelle (gateway) p # - Jarrive joindre le serveur de lentreprise avec ping quand je mets ladresse ip mais Problme de rsolution de noms de domaine. Essayer la commande dig. Vrifier les fichier /etc/hosts, /etc/resolv.cong Vrifier que le serveur DNS est accessible sur le rseau (ping, statistics, etc...) Vrifier que le service DNS sur le rseau est accessible et operationel

# - Jai chang ladresse rseau dans le fichier de configuration, mais quand je fais un : # $ ip addr # en fait son adresse na pas chang. Que peut-il se passer ? Tout comme pour hostname, les fichiers de configuration rseau ne sont lu quau dmarrage de Tout changement dans le fichier de configuration doit-tre suivit dune commande qui r-init

QUESTION1: Pour mettre jour les interfaces rseaux suite un changement de configuration, Stopper linterface rseau eth0 : ifdown eth0 Dmarrer linterface rseau eth0 : ifup eth0

Ceci ne doit pas tre confondu avec la commande qui suit, qui relance explicitement tous les /etc/init.d/networking restart Rappel : pour connatre vos diffrentes interfaces rseau, on peut utilisez la commande : /sbin/ifconfig -a

RPONSE1: Pour tout mettre jour, mme les routes, il vaut mieux passer par le script de re

QUESTION2:- Si jai bien compris le service redmarre tous ce qui est li au rseau alors qu

311

Chapitre 11. SR004 Interconnecter un rseau TCP/IP

RPONSE2: Lisons le contenu du script..., humm! Il semble que le script utilise les commande

11.2.12. Autres questions


Lorsque Christophe fais des traceroute, il obtiens assez frquemment des adresses de routeurs traverss en 10.125.x.x Par exemple :
$ whois 10.125.237.14

LIANA dlgue la gestion des .fr lAFNIC, mais que vient faire cette adresse sur sa route ??? Il y a deux ou trois possibilits :

- il reste chez le mme fournisseur et dans ce cas, le traceroute montre les passerelles par - il passe par diffrents fournisseurs et la patte par dfaut du routeur pointe vers une adr - il ny a pas de problme router un rseau non routable si tu restes sur ton rseau inter

11.2.13. Atelier - Fichier Hosts


Source(s):

OF: SR004-net01-ch08-chier-hosts.pdf (docs/sr004-net01-ch08-chier-hosts.pdf)

Dans un rseau, on assigne gnralement un nom chaque hte. Le terme dhte est pris dans son sens large, cest dire un nud de rseau. Une imprimante, un routeur, un serveur, un poste de travail sont des nuds qui peuvent avoir un nom dhte, sils ont une adresse IP. Le nom permet dadresser le noeud, autrement quavec ladresse IP. Le protocole TCP/IP se charge de la rsolution des noms dhtes, ensuite le protocole ARP, se charge de la rsolution des adresses IP en adresses MAC (Ethernet le plus souvent).

312

Chapitre 11. SR004 Interconnecter un rseau TCP/IP Avec un chier /etc/hosts contenant :
127.0.0.1 10.0.1.5 10.0.1.4 10.0.1.3 localhost localhost.ermansion.net debstafil4 hsbuntu fil4

debstafil4.ermansion.net macfil.ermansion.net

macfil

debstafil3.ermansion.net

debstafil3

195.202.1.13

ferry

## Raccourci ;-)

Je teste...
$ ping -c 1 localhost PING localhost (127.0.0.1) 56(84) bytes of data. 64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.052 ms $ ping -c 1 localhost.ermansion.net PING localhost (127.0.0.1) 56(84) bytes of data. 64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.059 ms $ ping -c 1 debstafil4.ermansion.net PING debstafil4.ermansion.net (10.0.1.5) 56(84) bytes of data. 64 bytes from debstafil4.ermansion.net (10.0.1.5): icmp_seq=1 ttl=64 time=0.057 ms $ ping -c 1 debstafil4 PING debstafil4.ermansion.net (10.0.1.5) 56(84) bytes of data. 64 bytes from debstafil4.ermansion.net (10.0.1.5): icmp_seq=1 ttl=64 time=0.051 ms $ ping -c 1 hsbuntu PING macfil.ermansion.net (10.0.1.4) 56(84) bytes of data. 64 bytes from macfil.ermansion.net (10.0.1.4): icmp_seq=1 ttl=64 time=43.6 ms $ ping -c 1 ferry PING ferry (195.202.1.13) 56(84) bytes of data. 64 bytes from ferry (195.202.1.13): icmp_seq=1 ttl=52 time=30.2 ms

Et encore...

$ telnet fil4 3306 ## Resolution du nom dhte OK Trying 10.0.1.5... ## Connection KO - Normal le serveur ncoute pas sur cette address telnet: Unable to connect to remote host: Connection refused $ telnet localhost 3306 Trying 127.0.0.1... Connected to localhost. ... $ telnet ferry ## Resolution du nom dhte OK ## Connection OK

## Resolution du nom dhte OK

313

Chapitre 11. SR004 Interconnecter un rseau TCP/IP


Trying 195.202.1.13... ^C $ ftp ferry ^C $ ftp ferr ftp: ferr: Unknown host ## Resolution du nom dhte OK

## Nom dhte inconnu

Note : Lorsquon utilise souvent laccs ssh ou cvs sur la machine dadresse x.y.z.t qui a pour nom serveur-principal-du-domaine.domaine-qui-en-dit-long.org vous pouvez mettre dans votre chier hosts...
x.y.z.t nc

... et utiliser ensuite nc en lieu et place de lautre nom.

QUESTIONS 1. Quelle est la commande qui permet dobtenir le nom dhte de la machine locale ? hostname ou alternativement cat /etc/hostname ;-) 2. Quelles sont les informations que donne la commande ifcong ? Information sur les interfaces rseaux connectes lhte et leur status... 3. Donnez la commande qui permet de nenvoyer quun seul PING une machine distante (voir man ping) ? ping -c 1 your_hostname 4. Quelle est la taille par dfaut dun paquet envoy par la commande ping ? Par dfaut cest 56 octets qui se traduisent en 64 octets de donnes ICMP lorque combins avec les 8 bits de len-tte ICMP.
Le byte (prononc /bait/), de symbole B, est la plus petite unit adressable dun ordinateur. Aujourdhui, les bytes de 8 bits se sont gnraliss en informatique, alors quen tlcommunications ils peuvent contenir 8 ou 9 bits. En outre, jusque dans les annes 1970, il existait des processeurs avec des bytes de 6, 7, 8 ou 9 bits (et il existe mme, encore aujourdhui pour la programmation des automates ou quipements industriels simples des processeurs trs robustes utilisant des mmoires adressables par quantit de 4 bits voire 1 bit dans certains cas ou certains modes ou zones dadressage). En revanche, un octet, comme son nom lindique, a une taille dexactement 8 bits. http://fr.wikipedia.org/wiki/Byte

5. Quelle est la commande qui permet denvoyer des paquets de 1500 octets ? ping -s 1500 your_hostname

314

Chapitre 11. SR004 Interconnecter un rseau TCP/IP 6. Quelle est la commande ping qui permet denvoyer des paquets en ot ininterrompu ? -c (compteur) et -w (dlai) sont les deux options permettant de jouer sur la dure dexcution du ping. En indiquant un compteur ou un dlai lev on peut rallonger(ou raccourcir) le temps dexcution de la commande ping. Il nest pas possible denvoyer un ot permanant de PING moins dutiliser une boucle :) 7. Quel protocole utilise la commande ping ? ICMP protocol.

Internet Control Message Protocol est lun des protocoles fondamentaux constituant la suite de protocoles Internet. Il est utilis pour vhiculer des messages de contrle et derreur pour cette suite de protocoles, par exemple lorsquun service ou un hte est inaccessible.

ICMP se situe au mme niveau que le protocole IP bien quil ne fournisse pas les primitives de service habituellement associes un protocole de couche rseau. Son utilisation est habituellement transparente du point de vue des applications et des utilisateurs prsents sur le rseau. ICMP version 4 accompagne IPv4. Internet Control Message Protocol V6 accompagne IPv6. http://fr.wikipedia.org/wiki/ICMP

11.2.14. Approche des services Telnet et FTP


Source(s):

OF: SR004-net01-ch09-telnet-ftp.pdf (docs/sr004-net01-ch09-telnet-ftp.pdf)

Mise en place de deux services serveurs :


telnet [telnetd] : protocole [service] dmulation de terminaux virtuels (VTx) ftp [ftpd] : protocole [service] de transfert de chier

Cela doit nous permettre de comprendre le fonctionnement des processus en environnement client/serveur et dapprocher au travers de deux protocoles les premiers aspects de la conguraiton de services serveur sous GNU/-Linux, ainsi que les premiers aspects lis la scurit.
Note : Le service serveur telnetd est remplac par ssh (plus sr) Le service serveur ftpd est remplac par sftpd (plus sr aussi)

315

Chapitre 11. SR004 Interconnecter un rseau TCP/IP

11.2.14.1. Le daemon inetd (ou xinetd) - Internet services daemon


Source(s):

Web: Le "super-serveur" inetd (http://www.freebsd.org/doc/fr_FR.ISO8859-1/books/handbook/network-inetd.html) xinetd a secure replacement for inetd (http://xinetd.org/)

Le daemon inetd (ou xinetd selon la solution utilise) est comparable ce quon pourrait appeler un super serveur, lcoute sur plusieurs ports et qui se charge de recevoir les demandes de connexion de plusieurs clients diffrents (telnet, ftp,. . .) et de lancer le serveur correspondant la demande.
Note : Dans certaines distributions, inetd a t remplac par xinetd (une autre solution plus scuris). Le principe est trs similaire, la seule diffrence est que, dans /etc/xinetd.d , chaque service (telnet, ftp, pop3...) dispose de son propre chier de conguration.

Note : Quand ils ne sont pas lancs par inetd (ou xinetd), ces services sont dits fonctionnant en mode autonome ou standalone.

son dmarrage il consulte les chiers :

/etc/services (docs/sr004-net01-ch01-serviceports.txt) : contient la liste gnrale des services TCP/IP avec leur numro de port et le protocole de transport associ. /etc/inetd.conf (docs/sr004-net01-ch09-inetd-conf.txt) (ou /etc/xinetd.conf (docs/sr004-net01-ch09-xinetd-conf.txt)) : contient la liste des services activs sur une machine donne.

11.2.14.2. Le daemon tcpd (TCP-Wrapper - Enveloppe tcp)


TCP-Wrapper est un service qui vient sinterfacer entre inetd et le service serveur lancer. Cest un outil de scurit rseau qui permet de contrler les accs, les tentatives de connexions sur une machine donne. Il permet tout instant de savoir (par journalisation sysklogd) qui essaie daccder sur un ordinateur mais galement de ltrer les accs. Il permet de mettre en place une stratgie de scurit. En schmatisant :
- Un client telnet passe une requte un serveur telnetd ; - Sur le serveur cest inetd qui reoit la requte et qui doit charger telnetd en mmoire ;

316

Chapitre 11. SR004 Interconnecter un rseau TCP/IP


- Si tcpwrapper est install, en fait inetd va lancer tcpwrapper qui va vrifier que le client par exemple est autoris utiliser telnetd ; - Si le client est autoris, alors telnetd est activ, sinon la requte est rejete.

Pour ltrer les accs sa machine :


- /etc/hosts.deny : on indique dans ce fichier les services et les htes pour lesquels laccs est interdit. - /etc/hosts.allow : on indique dans ce fichier les services et les htes pour lesquels laccs est autoris

Note : Si une rgle est applicable dans hosts.allow, alors cette rgle est applique, sinon, si une rgle est applicable dans hosts.deny, alors cette rgle est applique, sinon, laccs est autoris.

Stratgie de scurit adopter :


1. hosts.allow : dcrire toutes les rgles pour les couples (services/clients) autoriss 2. hosts.deny : interdire systmatiquement tout le reste (ALL:ALL)

Les tentatives daccs depuis des machines extrieures sont toutes enregistres dans des chiers particuliers, les journaux. Ces enregistrements sont effectus par le processus sysklogd qui, son dmarrage, lit le chier /etc/syslog.conf pour trouver dans quel(s) chier(s) il doit enregistrer les diffrentes tentatives daccs.

11.2.15. Telnet et FTP mise en uvre


Source(s):

OF: SR004-net01-ch10-telnet-ftp-tp.pdf (docs/eof/sr004-net01-ch10-telnet-ftp-tp.pdf)

Installer les premiers services serveurs et vrier ensuite quils fonctionnent :


- telnetd sera pris en charge par inetd - ftpd sera install en mode autonome

317

Chapitre 11. SR004 Interconnecter un rseau TCP/IP

11.2.16. Premiers pas dans la scurit


Source(s):

OF: SR004-net01-ch11-secu-init.pdf (docs/eof/sr004-net01-ch11-secu-init.pdf)

11.2.17. Lanalyse de trame (tcpdump, tshark, wireshark)


Source(s):

OF: SR004-net01-ch12-analyse-trame.pdf (docs/eof/sr004-net01-ch12-analyse-trame.pdf) Web: Packet Filtering HOWTO (http://www.netlter.org/documentation/HOWTO/fr/packet-ltering-HOWTO.html)

11.2.17.1. Prsentation
Lanalyse de trame peut-tre utilise pour extraire leur contenus (data), il faut avoir en gnral de bonne raisons pour faire cela (pirates, units de surveillance, ...) car a relve de lespionnage. Par dfaut, les donnes transitent en clair sur le rseau, cest dire quelles ne sont pas chiffres. Les administrateurs utilisent le plus frquemment lanalyse de trame surtout lors de dysfonctionnements sur un rseau, des tables de routage... an den dterminer les causes et pouvoir corriger. a peut tre utilis aussi dans le cadre dune tude statistique pour dterminer des charges, des heures pleines... comme partie dun projet de supervision de rseau an de pouvoir prendre de bonnes dcisions si certains aspects du rseau prsentait des faiblesses (mauvais temps de rponse par exemple). Lanalyse de trame prsente un cot processeur, on ne lutilise donc que ponctuellement comme un outils mis la disposition pour dterminer la source dun problme.

318

Chapitre 11. SR004 Interconnecter un rseau TCP/IP

11.2.17.2. Les analyseurs de trames


Les distribtutions fournissent de nombreux analyseurs de trames. En standard, il existe 3 outils :

tcpdump (http://www.tcpdump.org) (mode texte) : outil fonctionnant en mode commande, incontournable car cest le premier quon a gnralement sous la main. tshark (http://www.wireshark.org/docs/man-pages/tshark.html) (mode texte) : la backend de wireshark qui fonctionne en mode commande . wireshark (http://www.wireshark.org/docs/man-pages/tshark.html) (mode graphique) : lanalyseur de trame graphique qui est devenu un standard.

Note : Les outils en mode commande sont privilgier pour la simple raison quil ny a gnralement pas dinterface graphique sur les serveurs. Cependant comme il est trs facile denregistrer une capture dans un chier , il est possible de retraiter ce chier avec un outils graphique.

11.2.17.3. Mode promiscuous (promisc)


Lanalyse de trame par dfaut nest pas ralisable car une interface rejette tout paquet qui ne lui est pas destin. Il faut donc mettre linterface en mode promiscuous (mode particulier) pour quelle traite tous les paquets quelle reoit. Information sur linterface rseau :
$ ifconfig eth2 eth2 Link encap:Ethernet HWaddr 00:26:bb:13:31:96 inet adr:192.168.1.100 Bcast:192.168.1.255 Masque:255.255.255.0 adr inet6: fe80::226:bbff:fe13:3196/64 Scope:Lien UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 ...

Activer le mode promiscuous :


## En tant que root $ ifconfig eth2 promisc

319

Chapitre 11. SR004 Interconnecter un rseau TCP/IP


## Vrification $ ifconfig eth2 eth2 Link encap:Ethernet HWaddr 00:26:bb:13:31:96 inet adr:192.168.1.100 Bcast:192.168.1.255 Masque:255.255.255.0 adr inet6: fe80::226:bbff:fe13:3196/64 Scope:Lien UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1 ...

Dsactiver le mode promiscuous :


## En tant que root $ ifconfig eth2 -promisc ## Vrification $ ifconfig eth2 eth2 Link encap:Ethernet HWaddr 00:26:bb:13:31:96 inet adr:192.168.1.100 Bcast:192.168.1.255 Masque:255.255.255.0 adr inet6: fe80::226:bbff:fe13:3196/64 Scope:Lien UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 ...

Note : La commande laisse des traces dans les journaux (kernel.log, syslog, messages) Les analyseurs de trame passent, gnralement, les interfaces en mode promisc automatiquement (il faut tre root) Il faut positionner lanalyseur de trame un bon endroit . En effet, certains probl1emes rencontrs peuvent tre li aux quipements de raccordements des n uds, qui sont dsormais des commutateurs (switchs). Il est possible dans ce cas que vous ne voyiez pas passer grand chose hormis vos propres paquets. Le problme est identique avec les Vlans.

11.2.17.4. Utilisation gnrale dun analyseur de trame


Le principe est gnralement identique, il faut savoir :
- sur quelle interface on souhaite lancer la capture - sur quel protocole on souhaite filtrer - pour quelle ou quelles machines on veut capturer le trafic.

320

Chapitre 11. SR004 Interconnecter un rseau TCP/IP


Note : Par dfaut lanalyseur capture tout et sil y a beaucoup de trac, le travail de tri ne sen trouve pas simpli par la suite. Aprs il est possible de raliser des ltres complexes mais nous nirons pas jusque l.

11.2.17.5. tcpdump
## tcpdump options de base Option Description -i ethx prciser sur quelle interface se fait la capture -X afficher la capture en hexa et ascii -n numrique, pas de rsolution des noms -nn pas de rsolution des noms ni des ports -s0 capture de tout le paquet -cx capture seulement x paquets -v, -vv, -vvv augmente le mode verbeux -w outfile crire (write) la capture dans un fichier

## Activer mode promiscuous $ sudo ifconfig eth2 promisc ## Liste interfaces disponibles pour la capture $ tcpdump -D 1.eth0 2.eth2 3.any (Pseudo-device that captures on all interfaces) 4.lo ## Analyse de trame sur linterface eth2 $ tcpdump -i eth2 tcpdump: eth2: You dont have permission to capture on that device (socket: Operation not permitted) ##==> Erreur si pas excut en tant que root !!!

# tcpdump -i eth2 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth2, link-type EN10MB (Ethernet), capture size 96 bytes 12:05:58.896889 ARP, Request who-has 192.168.1.200 tell macfil.local, length 28 12:05:58.897381 IP macfil.local.37681 > resolver2.opendns.com.domain: 43785+ PTR? 200.1.168.192.in-addr.arpa. (44) 12:05:59.139107 ARP, Reply 192.168.1.200 is-at 00:e0:fc:18:21:16 (oui Unknown), length 28 12:05:59.447904 IP resolver2.opendns.com.domain > macfil.local.37681: 43785 NXDomain 0/0/0 ( 12:05:59.548316 IP macfil.local.mdns > 224.0.0.251.mdns: 0 PTR (QM)? 200.1.168.192.in-addr.a 12:06:00.104884 IP filostene.local.netbios-dgm > 192.168.1.255.netbios-dgm: NBT UDP PACKET(1 ... 6 packets captured 35 packets received by filter 0 packets dropped by kernel

321

Chapitre 11. SR004 Interconnecter un rseau TCP/IP


## Sans rsolution de nom -n(numrique) # tcpdump -i eth2 -n ... 12:07:44.469209 IP 192.168.1.100.5060 > 94.75.247.45.5060: SIP, length: 2 12:07:54.472717 IP 192.168.1.100.5060 > 94.75.247.45.5060: SIP, length: 2 12:07:59.469990 ARP, Request who-has 192.168.1.200 tell 192.168.1.100, length 28 12:07:59.478236 ARP, Reply 192.168.1.200 is-at 00:e0:fc:18:21:16, length 28 12:08:04.433021 IP 94.75.247.45.5060 > 192.168.1.100.5060: SIP, length: 244 12:08:04.433712 IP 192.168.1.100.36292 > 208.67.220.220.53: 35811+ A? proxy.localphone.com. ... ## Capturer ce_qui_va_vers_vers/ce_qui_provient_de ladresse host 94.75.247.45 # tcpdump -i eth2 -n host 94.75.247.45 ... 12:11:35.533713 IP 94.75.247.45.5060 > 192.168.1.100.5060: SIP, length: 244 12:11:35.838162 IP 192.168.1.100.5060 > 94.75.247.45.5060: SIP, length: 349 12:11:35.926094 IP 192.168.1.100.5060 > 94.75.247.45.5060: SIP, length: 2 ... ## Capturer le traffic entre les machines 10.0.1.4(ici) et 10.0.1.1(labas) # tcpdump -i eth2 -n host 10.0.1.4 and 10.0.1.1 ... 16:22:44.768175 IP 10.0.1.4.43907 > 10.0.1.1.53: 26177+ A? books.google.com. (34) 16:22:44.784117 IP 10.0.1.1.53 > 10.0.1.4.43907: 26177 7/0/0 CNAME[|domain] 16:22:44.784273 IP 10.0.1.4.43397 > 10.0.1.1.53: 38124+ A? books.google.com. (34) 16:22:44.784291 IP 10.0.1.4.57027 > 10.0.1.1.53: 50650+ A? he.wikipedia.org. (34) 16:22:44.784364 IP 10.0.1.4.34618 > 10.0.1.1.53: 25317+ A? standards.ieee.org. (36) 16:22:44.784465 IP 10.0.1.4.52323 > 10.0.1.1.53: 51064+ A? www.pearsonhighered.com. (41) 16:22:44.786704 IP 10.0.1.1.53 > 10.0.1.4.43397: 38124 7/0/0 CNAME[|domain] ## Filtrer en fonction du sens du traffic dst ou src # tcpdump -i eth2 -n src 10.0.1.4 and dst 10.0.1.1 ... 16:21:50.419211 IP 10.0.1.4.44159 > 10.0.1.1.53: 37337+ A? en.wikipedia.org. (34) 16:21:50.542666 IP 10.0.1.4.53096 > 10.0.1.1.53: 25537+ A? en.wikipedia.org. (34) 16:21:55.413664 ARP, Request who-has 10.0.1.1 tell 10.0.1.4, length 28 16:22:14.292610 IP 10.0.1.4.33792 > 10.0.1.1.53: 11289+ A? upload.wikimedia.org. (38) 16:22:14.295743 IP 10.0.1.4.33038 > 10.0.1.1.53: 14296+ A? upload.wikimedia.org. (38) 16:22:14.794670 IP 10.0.1.4.52186 > 10.0.1.1.53: 47530+ A? creativecommons.org. (37) 16:22:14.794848 IP 10.0.1.4.33388 > 10.0.1.1.53: 21428+ A? meta.wikimedia.org. (36) 16:22:14.803752 IP 10.0.1.4.38521 > 10.0.1.1.53: 8646+ A? tools.ietf.org. (32) ## filtrer sur des ports (revient ## filtrer sur un protocole de niveau application) # tcpdump -n -i eth2 port 80 ... 16:43:46.171494 IP 91.198.174.2.80 > 10.0.1.4.46740: 16:43:46.188814 IP 91.198.174.3.80 > 10.0.1.4.47905: 16:43:46.206384 IP 10.0.1.4.46740 > 91.198.174.2.80: 16:43:46.223608 IP 10.0.1.4.47905 > 91.198.174.3.80: 16:43:46.519621 IP 91.198.174.2.80 > 10.0.1.4.46740: 16:43:46.519681 IP 10.0.1.4.46740 > 91.198.174.2.80: 16:43:46.520518 IP 91.198.174.3.80 > 10.0.1.4.47905:

... ... ... ... ... ... ...

322

Chapitre 11. SR004 Interconnecter un rseau TCP/IP


... ## filtrer sur des protocoles # tcpdump -n -i eth2 arp ... 16:51:48.516162 ARP , Request who-has 10.0.1.1 tell 10.0.1.4, length 28 16:51:48.590694 ARP, Reply 10.0.1.1 is-at 00:17:f2:e1:c4:21, length 28 16:51:52.094244 ARP, Request who-has 10.0.1.3 (00:00:00:04:0a:00) tell 10.0.1.1, length 28 ...

## sortie sur la console et enregistrement du flux dans un fichier -l (line buffered) # tcpdump -n -i eth2 -l -c 10 | tee out.log (docs/sr004-net01-ch12-analyse-trame-out-log.txt tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth2, link-type EN10MB (Ethernet), capture size 96 bytes 16:58:13.403012 IP 10.0.1.4.60965 > 10.0.1.1.53: 58526+ A? en.wikipedia.org. 16:58:13.412130 IP 10.0.1.1.53 > 10.0.1.4.60965: 58526 3/0/0 CNAME[|domain] 16:58:13.412689 IP 10.0.1.4.48262 > 10.0.1.1.53: 55668+ A? en.wikipedia.org. 16:58:13.699918 IP 10.0.1.1.53 > 10.0.1.4.48262: 55668 3/0/0 CNAME[|domain] 16:58:14.003974 IP 10.0.1.4.57221 > 91.198.174.2.80: Flags [S], ... 16:58:14.004622 IP 10.0.1.4.57542 > 10.0.1.1.53: 16882+ A? bits.wikimedia.org. 16:58:14.004744 IP 10.0.1.4.33879 > 10.0.1.1.53: 16914+ A? upload.wikimedia.org. 16:58:14.325252 IP 10.0.1.1.53 > 10.0.1.4.57542: 16882 3/0/0 CNAME[|domain] 16:58:14.325793 IP 10.0.1.4.39747 > 10.0.1.1.53: 2164+ A? bits.wikimedia.org. 10 packets captured 11 packets received by filter 0 packets dropped by kernel 16:58:14.334314 IP 91.198.174.2.80 > 10.0.1.4.57221: Flags [S.], ... ## Sauvegarder dans un fichier pour traitement ultrieur ou via un autre logiciel ## Format libpcap (par ouvrable dans un diteur de texte) # Sauvegarde de la capture dans capture.pcap $ tcpdump -n -i eth2 -c 10 -w capture.pcap tcpdump: listening on eth2, link-type EN10MB (Ethernet), capture size 96 bytes 10 packets captured 10 packets received by filter 0 packets dropped by kernel # Ouverture avec loption -r de tcpdump $ tcpdump -r capture.pcap reading from file capture.pcap, link-type EN10MB (Ethernet) 17:07:20.933398 IP macfil.local.52260 > 10.0.1.1.domain: ... 17:07:20.975444 IP 10.0.1.1.domain > macfil.local.52260: ... 17:07:20.975856 IP macfil.local.41109 > 10.0.1.1.domain: ... 17:07:20.987053 IP 10.0.1.1.domain > macfil.local.41109: ... 17:07:21.434083 IP macfil.local.37014 > rr.esams.wikimedi... ... # Ouverture avec wireshark $ wireshark capture.pcap ## Dsactiver mode promiscuous $ sudo ifconfig eth2 -promisc

323

Chapitre 11. SR004 Interconnecter un rseau TCP/IP

11.2.17.6. Dpannage avec tcpdump


Tester un ping:
## On lance un ping dans un console $ ping 10.0.1.1 -c 2 ## et on capture dans une autre. $ tcpdump -n -i eth0 icmp tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth2, link-type EN10MB (Ethernet), capture size 96 bytes 17:18:36.050403 IP 10.0.1.4 > 10.0.1.1: ICMP echo request,... 17:18:36.520538 IP 10.0.1.1 > 10.0.1.4: ICMP echo reply, ... 17:18:37.051386 IP 10.0.1.4 > 10.0.1.1: ICMP echo request,... 17:18:37.537458 IP 10.0.1.1 > 10.0.1.4: ICMP echo reply, ...

Pour un ping normal et un ping anormal, on voit bien les paquets ICMP echo request mis et les paquets ICMP echo reply reus. Dans le cas anormal o le ping semble ne pas rpondre, on est ainsi sr que la machine distante est bien oprationnelle. tcpdump indique que sur linterface les paquets partent bien et que le retour se fait bien. Dans ce cas, la raison pour un ping anorma est que le rewall local dtruit les paquets ICMP entrants. Analyse de contenu de trame (ftp par example). Lextrait de capture sur un trafc ftp pour montrer que les donnes circulent bien de faon non chiffre sur les rseaux :

## Session tcpdump dans une fentre $ tcpdump -ni lo -s0 -A | grep -Ei "USER|PASS" .......)USER anonymous ........331 Anonymous login ok, (...) ...D... PASS foo@bar.org ...D...D230-Welcome, archive user anonymous@localhost ! ## Tentative de connexion ftp anonyme dans une autre console $ ftp localhost

324

Chapitre 11. SR004 Interconnecter un rseau TCP/IP

Avertissement
"... les chanes didentication et dauthentication apparaissent clairement , et il en est ainsi pour tous les protocoles non chiffrs..."

11.2.17.7. tshark
tshark est lanalyseur de wireshark, le principe fondamental reste peu prs le mme que pour tcpdump. Pour plus dinfo sur son utilisation et le ltre, se rfrer au poly de lof :
## Capture de linterface eth2 $ tshark -i eth2 ## Filtre tcp port 80 et enregistrement dans un fichier. $ tshark -f "tcp port 80" -i eth0 -w /tmp/capture.cap ## Extraction filtre partir dun fichier ## Tous paquets ne correspondant pas au filtre sont omis $ tshark -R "ip.addr == 192.168.1.1" -r /tmp/capture.cap

11.2.17.8. Wireshark (anciennement Ethereal)


Depuis le mois de juin 2006, Ethereal a chang de nom, il sappelle dsormais Wireshark. Produit graphique vraiment accessible. Si vous avez besoin danalyser des trames sur une machine qui na pas dinterface graphique, vous pouvez raliser des captures avec tcpdump ou tshark, enregistrer dans un chier et les reprendre avec wireshark La fentre wireshark est compos de trois parties principale :
#- Liste des trames captures (partie du haut) #- Lencapsulation des diffrentes couches (partie centrale) #- Le contenu de la trame (partie du bas)

# Ouverture avec wireshark dun fichier de capture

325

Chapitre 11. SR004 Interconnecter un rseau TCP/IP


$ wireshark capture.pcap

326

Chapitre 11. SR004 Interconnecter un rseau TCP/IP Figure 11-6. Wireshark : Ouvrir chier .pcap (format libpcap)

327

Chapitre 11. SR004 Interconnecter un rseau TCP/IP

Capture simple dun trafc ARP


## Pralable : vider la cache ARP $ arp -d ... ## Puis lancer wireshark $ wireshark ## Puis choisir une interface (ex: eth2) puis lancer la capture...

328

Chapitre 11. SR004 Interconnecter un rseau TCP/IP Figure 11-7. Wireshark : Capture simple par dfaut (ARP, IP, DNS, etc...)

11.2.17.9. Application
Les tests effectus ci-avant ont permis de se familiarisez avec les outils, et apprendre utiliser les ltres sur des oprations simples.

329

Chapitre 11. SR004 Interconnecter un rseau TCP/IP Avec wireshark, une capture simple qui vous montre un trac ARP entre ma machine et la passerelle du rseau t ralis (voir ci-dessus) Capture avec authentication permettant de retrouver dans le chier les traces de login/mot de passe dun accs un site web ou webmail non chiffrs
## Connection http://192.168.56.101/phpldapadmin ## (Interface dadminsitration LDAP sur machine virtuelle) $ tcpdump -i vboxnet0 host 192.168.56.1 -l -s0 -A | tee snap.txt ... 19:36:52.710509 IP macfil.local.57819 > debstafil4.local.www: ... .1.a..3.cmd=login&server_id=0&dn=cn%3Dmanager%2Cdc %3Dermansion%2Cdc%3Dnet&login_pass=secret&submit=Authenticate ...

11.2.17.10. Exercise
Scnario : vous avez votre poste myhost en 192.168.0.1/32, un serveur DNS dnshost en 192.168.0.2/32 et un serveur qui est la fois serveur HTTP et serveur FTP srvhost en 192.168.0.3/32. Quelles seraient les commandes tcpdump pour raliser les oprations suivantes (passes sur le poste myhost) :
# tout ce qui va vers ou provient de srvhost ; $ tcpdump [-n] -i eth0 host srvhost $ tcpdump [-n] -i eth0 host 192.168.0.1 # Alternative # tout ce qui va vers ou provient de srvhost ou de dnshost ; $ tcpdump [-n] -i eth0 host srvhost or dnshost $ tcpdump [-n] -i eth0 host 192.168.0.1 or 192.168.0.3 # Alternative # capturer uniquement les requtes HTTP qui vont vers srvhost ; $ tcpdump [-n] -i eth0 dst srvhost and port 80 $ tcpdump [-n] -i eth0 dst 192.169.0.1 and port 80 # Alternative # $ $ $ capturer uniquement le trafic concernant la rsolution de nom ; tcpdump [-n] -i eth0 port 53 tcpdump [-n] -i eth0 host dnshost tcpdump [-n] -i eth0 host 192.168.0.2

# tout capturer sauf ce qui concerne la machine srvhost ; $ tcpdump [-n] -i eth0 not host srvhost $ tcpdump [-n] -i eth0 not host 192.168.0.1 # Alternative # tout capturer sauf ce qui concerne le trafic HTTP $ tcpdump [-n] -i eth0 not port 80

330

Chapitre 11. SR004 Interconnecter un rseau TCP/IP

11.2.17.11. Autres utilitaires (ttcp, iptraf, nagios)


ttcp (http://linux.die.net/man/1/ttcp) : utilitaire Unix pour mesurer des dbits TCP et UDP entre diffrentes stations iptraf (http://iptraf.seul.org) : Iptraf est utile pour la visualisation des connexions tcp, de la translation de port et de la translation dadresse :
iptraf -i all iptraf -g iptraf -d eth0 # moniteur de traffic IP # statistiques gnrales des interfaces # informations dtailles dune interface

nagios (http://www.nagios.org) : (anciennement appel Netsaint) est une application permettant la surveillance systme et rseau. Elle surveille les htes et services spcis, alertant lorsque les systmes vont mal et quand ils vont mieux.

11.2.18. Dpannage rseau


Source(s):

OF: SR004-net01-ch13-depannage.pdf (docs/eof/sr004-net01-ch13-depannage.pdf)

11.2.19. netperf/ethtool : Mesure de performance rseau


ethtool : est une commande UNIX permettant dafcher et modier certains paramtres de la carte rseau, comme sa vitesse. netperf : Netperf est un outil de benchmark, qui peut tre utilis pour mesurer diffrents aspects des performances rseaux. Il reste un outil assez simple. Il sert surtout pour des tests de performances de transfert brut (stream ou stream unidirectionnel), et fonctionne sur un modle client/server.

331

Chapitre 11. SR004 Interconnecter un rseau TCP/IP Netperf sinstalle gnaralement depuis le source sur les deux points dextrmit du transfert mesurer. Sur lune on execute netserver (possible en non-root), sur lautre on execute netperf en indiquant lhte qui execute netserver. Voici un petit guide trs rapide sur Netperf (non test) :

Source: http://www-sop.inria.fr/mistral/personnel/Christophe.Retiere/tests.html $ netperf -l dure -H hte_serveur -t [TCP/UDP]_STREAM - m taille_paquets -s taille_buf_local -S taille_buf_dist Deux exemples de scripts simples: Tests pour UDP: #! /bin/sh duree=120 for size in 10 100 300 500 700 900 1100 1300 1400 do rep=/usr/local/sys/bin/netperf -P -v -l $duree -H $1 -t UDP_STREAM -- -m $siz e -s 65535 -S 65535 li=echo $rep | awk { pou=(($4-$9) / $4)*100 print $2":"$10":"pou } echo $li done Tests pour TCP: #! /bin/sh duree=120 for size in 10 100 300 500 700 900 1100 1300 1400 do rep=/usr/local/sys/bin/netperf -P -v -l $duree -H $1 -t TCP_STREAM -- -m $siz e -s 65535 -S 65535 li=echo $rep | awk { print $3":"$5 } echo $li done Les rsultats obtenus sont semblables a Ttcp, si ce nest une diffrence quant aux dbits engendrs en UDP (une diffrence de presque 200Mb/s apparait...A creuser) wsopi98a -> wsopi99a (G) (Sophia -> Sophia) : rsultats TCP et UDP TCP max = 389,28Mb/s UDP max = 699,36Mb/s wsopi98a -> wstli96a (G) (Sophia -> Rocquencourt): rsultats TCP et UDP TCP max = 76,87Mb/s UDP max = 684,12Mb/s

332

Chapitre 11. SR004 Interconnecter un rseau TCP/IP


...

11.2.20. Le protocole ssh (ssh, rssh, sftp, etc...)


Source(s):

OF: SR004-net01-ch14-ssh.pdf (docs/eof/sr004-net01-ch14-ssh.pdf) Tutorial: SSH Tutorial for Linux (http://support.suso.com/supki/SSH_Tutorial_for_Linux) OpenSSH Public Key Authentication (http://sial.org/howto/openssh/publickey-auth/)

Lutilisation de ssh, demande au dbut un minimum dapprentissage, mais une fois ce travail l ralis on ne peut plus sen passer. Plus aucune connexion distante nest ralise sans chiffrement, donc en toute scurit.

11.2.20.1. Installation & Commandes de base


ssh est gnralement compos de 2 paquets :
- le serveur OpenSSH (openssh-server) - le client (openssh-clients)

$ apt-get install openssh-clients openssh-server

# Installation

## Laccs une machine distante requiert : ## - que la machine distante soit accessible via le ## - lexistance dun compte actif pour y accder $ ssh filostene@192.168.56.101 # # # #

rseau 1ere connection la VM Debian (IP 192.168.56.101) un nom de domaine peut-tre utilis en lieu et place de lIP

The authenticity of host 192.168.56.101 (192.168.56.101) cant be established. RSA key fingerprint is f2:16:34:af:0b:f6:3b:51:94:b0:f8:6e:11:37:e4:8e. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 192.168.56.101 (RSA) to the list of known hosts. filostene@192.168.56.101s password: # Entrer mot de passe du compte # filostene sur la machine Debian

Linux debstafil4 2.6.26-2-686 #1 SMP Wed Feb 10 08:59:21 UTC 2010 i686

333

Chapitre 11. SR004 Interconnecter un rseau TCP/IP

The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. You have new mail. Last login: Wed Dec 23 01:11:51 2009 filostene@debstafil4:~$ # Connection tablie :)

$ ssh-keygen -t dsa

# Gneration clefs (publique/prive) # de lutilisateur connect

## Copier la clef publique locale (~/.ssh/id_dsa.pub) vers le server distant $ scp ~/.ssh/id_dsa.pub filostene@192.168.56.101:.ssh/authorized_keys # ou $ cat .ssh/id_dsa.pub | ssh filostene@192.168.56.101 \ # alternative "cat - >>.ssh/authorized_keys" # pour la gestion # de plusieurs clefs # Attention, sur certaines machines, le fichier se nomme # authorized_keys, sur dautres authorized_keys2 # Dans lexemple qui est donn, le rpertoire .ssh doit exister. ## Testons en lanant une simple commande distante $ ssh filostene@192.168.56.101 ls =1000 bibliotheque.php~ Desktop etcaa etcab ... # La premire fois (dans la session en cours) le passphrase de # clef prive est ncessaire pour dverrouiller la clef prive, # les essais successifs ne requiert plus de mot de passe # la fin de session utilisateur :)

Note : A ce stage, le systme distant ne demande plus de mot de passe, par contre il me demande la passphrase si vous en avez mis une. Le mot de passe nest plus demand car ssh a dtect la cl prive sur votre machine et la cl publique sur le serveur distant.

Si cela ne fonctionne pas :


## Vrifier la configuration : - vrifiez que la cl publique est bien -sur le serveur -au bon endroit -dans le bon fichier

334

Chapitre 11. SR004 Interconnecter un rseau TCP/IP


- vrifiez les droits sur les fichiers - essayez avec les options -v, -vv, -vvv de ssh pour obtenir plus de traces. - regardez dans les logs.

11.2.20.2. Emprunte dune clef


## Obtenir le finger print dune cl $ ssh-keygen -l

11.2.20.3. Utilisation dun agent (viter la passephrase)


Lutilisation dun agent, vite davoir retaper la passphrase chaque fois que lon sollicite lutilisation dela cl prive. Un agent stocke en mmoire les cls prives. ssh-agent : programme qui dmarre avant X Windows et dmarre X Windows. Toutes les programmes X Windows hrite dune connection vers le ssh-agent incluant Gnome Terminal, aterm, xterm, etc... ce qui signie que lagent va pouvoir passer votre passe phrase votre place :) La plupart des distributions dmarre ssh-agent louverture de la session utilisateur via le manager de session tel que gdm (graphical login). ssh-add : programme pour ajouter votre passe phrase (une seule fois) au shh-agent Ceci permet une connection automatique par authentication transparente base de clefs (publique/privee) sans interaction humaine (tel que entrer un passphrase ou un mot de passe).
## Vrifier que ssh-agent est en cours dexecution $ ps auxw | grep ssh-agent ## Activer un agent $ ssh-agent # La commande met sur la sortie standard des variables # environnement dclarer et exporter. Faites le. SSH_AUTH_SOCK=/tmp/ssh-hiotV17831/agent.17831; export SSH_AUTH_SOCK; SSH_AGENT_PID=17832; export SSH_AGENT_PID; echo Agent pid 17832; ## Exporter les cls ssh (les mettre dans le cache de lagent) $ ssh-add # demande pour la passephrase Enter passphrase for /home/xyz/.ssh/id_dsa: Identity added: /home/xyz/.ssh/id_dsa (/home/xyz/.ssh/id_dsa)

335

Chapitre 11. SR004 Interconnecter un rseau TCP/IP

## Vrifier la connexion $ ssh filostene@192.168.56.101 ls (...)

# plus besoin de taper # le mot de passe, ni la passphrase.

Toute connection ultrieur une machine distante se fera sans demande de passephrase... Dans le cas contraire, le passephrase est requis pour tablir la connection...
## Savoir quelles cls sont charges par lagent ## option -l $ ssh-add -l 1024 bc:d0:a6:fa:4b:5d:ee:d0:1a:30:68:fe:4f:7b:09:b4 filostene@macfil (DSA)

## Pour supprimer une cl (ici RSA) de lagent ## option -d $ ssh-add -d ~/.ssh/id_rsa ## Pour supprimer toutes les cls de lagent ## option -D $ ssh-add -D

Note : Pour rendre lajout du passephrase plus facile, ssh-add peut-tre ajouter dans la liste de programme dmarrer au dmarrage de la session utilisateur et il fera ainsi apparatre un prompt (ou appelle gtk2-askpass, x11-askpass, etc...) dans X Windows pour demander le passphrase ds que lutilisateur est connect.

11.2.20.4. Utilisation de ssh et mise en en place de services proxy


Utilisation un plus avance de ssh et de la collaboration avec dautres services. ...

11.2.20.5. rssh
Source(s):

Tutorial: SFTP & RSSH : Crer un serveur de chiers scuris (http://www.lealinux.org/documentations/index.php/SFTP_&_RSSH_:_Cr%C3%A9er_un_serveur_de_chiers_s%C3%A9curis%C3%A Principe et conguration de RSSH

336

Chapitre 11. SR004 Interconnecter un rseau TCP/IP (http://www.ba-cst.com/documents-techniques/165-restriction-de-connexions-ssh) HOWTO: chroot SFTP (only) (http://www.minstrel.org.uk/papers/sftp/index.html)

rssh est un interprteur de commandes, dont les fonctionnalits sont rduites autoriser uniquement des transferts de chiers (scp, sftp, cvs, svnserve (Subversion), rdist ou rsync). Ce shell restreint est utilis avec OpenSSH pour faciliter et scuriser davantage lutilisation de ces commandes. Il peut optionellement chrooter les connexions utilisateurs dans un espace clos (prison) lempchant ainsi daccdr aux repertoires et chiers systme. Lactivation de RSSH se fait en le dnissant comme interprteur de commandes pour les utilisateurs concerns. Si jai un serveur sur lequel je veux uniquement autoriser les utilisateurs copier des chiers du serveur via scp sans leur donner un access shell, je peux utiliser rssh. Reposant sur ssh et chroot il en possde les mme atot, contraintes, limitation (trous de scurit potentiels... :)

11.2.21. Exercice - valuation


Source(s):

OF: SR004-net01-ch15-exercice3.pdf (docs/eof/sr004-net01-ch15-exercice3.pdf)

11.2.22. VoIP : Le protocole sip


Source(s):

Web: Session Initial Protocole (SIP) (http://en.wikipedia.org/wiki/Session_Initiation_Protocol) VoIP Info (http://www.voip-info.org) VoIP in depth : Introductino to SIP Protocol (http://arstechnica.com/business/news/2010/01/voip-in-depth-an-introduction-to-the-sip-protocol-part1.ars) how SIP won the VoIP protocol wars (http://arstechnica.com/business/news/2009/12/wired-for-sound-how-sip-won-the-voip-protocolwars.ars) Comparaison: XMPP vs SIP (http://blog.radvision.com/voipsurvivor/2008/11/27/is-there-a-new-successor-to-sip) XMPP vs SIMPLE: The race for messaging standards (http://www.infoworld.com/t/platforms/xmpp-vs-simple-race-messaging-standards-295?page=0,0) SIP Softphone: Twinkle installation QuteCom installation X-Lite installation

337

Chapitre 11. SR004 Interconnecter un rseau TCP/IP Standardis par lIETF Bas sur les standards du web HTTP, DNS, etc... SIP est bas sur les sessions Tous les messages SIP transitent sur une architecture point--point (peer-to-peer) Extensible, il supporte la diffusion de media (audio, vido, ...) - SIMPLE extension

11.2.23. VoIP : Le protocole XMPP (anciennement nomm Jabber)


Source(s):

Web: XMPP Foundation (http://xmpp.org/) Comparaison: XMPP vs IRC (http://wiki.jabberfr.org/Comparatif_entre_MUC_et_IRC) XMPP vs SIP (http://blog.radvision.com/voipsurvivor/2008/11/27/is-there-a-new-successor-to-sip) XMPP vs SIMPLE (SIP): The race for messaging standards (http://www.infoworld.com/t/platforms/xmpp-vs-simple-race-messaging-standards-295?page=0,0)

Standardis par lIETF Bas sur XML et code ouvert (open source) XMMP est bas sur la prsence Tous les messages XMMP passent par un serveur central... supervision... Extensible, il supporte la diffusion de mdia (audio, video, ...)

338

Chapitre 11. SR004 Interconnecter un rseau TCP/IP

11.3. IPv6
11.3.1. Introduction
Cest par ici : Hacking 2010-05 Num 09 : Mcanismes IPv6 avancs p.40 (http://download.hakin9.org/fr/hakin9_05_2010_FR.pdf)

11.3.2. Tester votre connexion IPv6, faite danser la tortue :)


Cest par ici : http://www.kame.net, JP la fait en 2007 dj (http://jp.gaulier.info/blog/index.php?post/2007/12/26/249)..., pourquoi pas vous(nous) !

339

Chapitre 12. SR005 - Administrer un serveur DNS


Le but de ce module est de fournir les connaissances ncessaires la mise en place dun serveur DNS.

12.1. Lespace de noms - Arborescence DNS


Figure 12-1. DNS: Arborescence du Domain Name System

La structuration du systme DNS sappuie sur une structure arborescente dans laquelle sont dnis des domaines de niveau suprieurs (appels TLD, pour Top Level Domains), rattachs un noeud racine reprsent par un point. On appelle nom de domaine chaque noeud de larbre. Chaque noeud possde une tiquette (en anglais label) dune longueur maximale de 63 caractres. Lensemble des noms de domaine constitue ainsi un arbre invers o chaque noeud est spar du suivant par un point ( . ).

340

Chapitre 12. SR005 - Administrer un serveur DNS Lextrmit dune branche est appele hte, et correspond une machine ou une entit du rseau. Le nom dhte qui lui est attribu doit tre unique dans le domaine considr, ou le cas chant dans le sous-domaine. A titre dexemple le serveur web dun domaine porte ainsi gnralement le nom www. Le mot domaine correspond formellement au sufxe dun nom de domaine, cest--dire lensemble des tiquettes de noeuds dune arborescence, lexception de lhte. Le nom absolu correspondant lensemble des tiquettes des noeuds dune arborescence, spares par des points, et termin par un point nal, est appel adresse FQDN (Fully Qualied Domain Name, soit Nom de Domaine Totalement Quali). La profondeur maximale de larborescence est de 127 niveaux et la longueur maximale dun nom FQDN est de 255 caractres. Ladresse FQDN permet de reprer de faon unique une machine sur le rseau des rseaux. Ainsi www.commentcamarche.net. reprsente une adresse FQDN.

12.2. DNS : Domain Name Server (Server de noms)


Source(s):

OF: SR005-ch02-dns.pdf (docs/eof/sr005-ch02-dns.pdf) Web: Domain Name System (DNS) (http://fr.wikipedia.org/wiki/Domain_Name_System) DNS Comment a Marche (http://www.commentcamarche.net/contents/internet/dns.php3) DNS, Domaine, Zone, Dlgation dautorit (Jean-Philippe Gaulier) (http://jp.gaulier.info/cnam/inge/memoire.pdf) [Hors-Ligne] (docs/eof/annexe-memoire-JP-Gaulier.pdf)

Les machines appeles serveurs de nom de domaine permettent dtablir la correspondance entre le nom de domaine et ladresse IP des machines dun rseau. Chaque domaine possde un serveur de noms de domaines, appel serveur de noms primaire (primary domain name server), ainsi quun serveur de noms secondaire (secondary domaine name server), permettant de prendre le relais du serveur de noms primaire en cas dindisponibilit. Chaque serveur de nom est dclar dans un serveur de nom de domaine de niveau immdiatement suprieur, ce qui permet implicitement une dlgation dautorit sur les domaines. Le systme de nom est une architecture distribue, o chaque entit est responsable de la gestion de son nom de domaine. Il nexiste donc pas dorganisme ayant charge la gestion de lensemble des noms de domaines. Les serveurs correspondant aux domaines de plus haut niveau (TLD) sont appels serveurs de noms racine . Il en existe treize, rpartis sur la plante, possdant les noms a.root-servers.net m.root-servers.net .

341

Chapitre 12. SR005 - Administrer un serveur DNS

12.2.1. Protocole DNS (port 53, UDP/TCP)


Un protocole qui va faire la correspondance entre un nom de machine (mmorisable par un humain) et son adresse IP (et vice-versa). Ce mcanisme, appel rsolution de noms, est fourni par le protocole Domain Name System (DNS).

Avertissement
Ce service est, aprs le routage IP, la partie la plus critique et importante dun rseau.

Le protocole DNS est dni par lIETF dans une dizaine de RFC, mais les grands principes sont prsents dans les RFC 1034 (http://www.ietf.org/rfc/rfc1034.txt) et 1035 (http://www.ietf.org/rfc/rfc1035.txt). La rsolution DNS se fait par lenvoi dune question et la rception dune rponse depuis le serveur. Utilise le port 53 et les protocoles UDP (le plus souvent) et TCP (si question DNS >= 512 octets)

12.2.2. Rsolution de Nom - Mcanisme de dlgation


Le mcanisme consistant trouver ladresse IP correspondant au nom dun hte est appel rsolution de nom de domaine. Lapplication permettant de raliser cette opration (gnralement intgre au systme dexploitation) est appele rsolveur (en anglais resolver ). Lorsquune application souhaite se connecter un hte connu par son nom de domaine (par exemple www.commentcamarche.net ), celle-ci va interroger un serveur de noms dni dans sa conguration rseau. Chaque machine connecte au rseau possde en effet dans sa conguration les adresses IP de deux serveurs de noms de son fournisseur daccs. Si une requte DNS porte sur un domaine compltement extrieur, le serveur local ne va pouvoir y rpondre directement, il va aller poser la question un autre serveur DNS responsable du domaine en question. Une requte est ainsi envoye au premier serveur de noms (appel serveur de nom primaire ). Si celui-ci possde lenregistrement dans son cache, il lenvoie lapplication, dans le cas contraire il interroge un serveur racine (dans notre cas un serveur racine correspondant au TLD .net ). Le serveur de nom racine renvoie une liste de serveurs de noms faisant autorit sur le domaine (dans le cas prsent les adresses IP des serveurs de noms primaire et secondaire de commentcamarche.net).

342

Chapitre 12. SR005 - Administrer un serveur DNS La dlgations t mis en place car :

Il est impossible de stocker les donnes DNS du monde entier sur une seule machine, le rsultat serait norme en ressources disque (ou de traitement). a ne correspond pas lesprit originel dInternet (ou plutt dArpanet) o le rseau doit fonctionner correctement mme si des liens taient tombs ou des services injoignables. Il y aurait en permance des problmes de synchronisation.

Chaque serveur ne connat que la zone qui lui a t dlgue (son rseau local par exemple).
Note : Pour viter ces nombreuses requtes chaque question, des caches sont utilises au niveau des diffrents serveurs. Ainsi, si on a dj pos la question, la rponse sera immdiate.

12.2.3. Terminologie

Serveurs autoritaire (ou primaire) : Un serveur DNS en charge des informations dun domaine, cest--dire quil na besoin de contacter personne pour rpondre une question au sujet de sa zone. Serveurs secondaire : serveur autoritaires, mais ce sont des simples miroirs : ils nont quun droit de lecture seule sur les donnes. A loppos des serveurs primaires qui est un serveur autoritaire pour un domaine et est le matre . Pour un serveur secondaire, il suft dindiquer qui est le matre de la zone et la zone va tre automatiquement transfre vers lui.

Zone : domaine pour lequel un serveur DNS est autoritaire. Serveurs de cache (ou esclaves), "forwarders" : Loppos des serveurs autoritaires. Serveurs DNS ne possdant pas dinformation propre. Ils ne savent que poser des questions lextrieur et les mettre en cache pour acclrer les prochaines questions. Ils ont un rle de forwarder et sont (gnralement) rcursifs. Resolver : mcanisme/processus par lintermdiaire duquel la rsolution de nom par le client est faite.

12.2.4. Messages DNS (Enveloppe)


La structure dun message DNS est dnie prcisement dans la RFC 1035 (http://www.ietf.org/rfc/rfc1035.txt).

343

Chapitre 12. SR005 - Administrer un serveur DNS On peut envoyer une ou plusieurs questions dans un mme message DNS pour gagner du temps. Ainsi, il est ncessaire davoir une enveloppe DNS annoncant ce qui arrive (champs QDCOUNT indique le nombre de question). Voir le poly of pour plus de dtail et la schmatique. Lenveloppe contient un identiant(suppos unique), le nombre de questions ou de rponses et diverses options la suite de cette enveloppe, on trouve des ressources records (RR) ou enregistrements qui sont les donnes utiles (questions, rponses, erreurs, etc.). Diffrents types de requtes et principaux enregistrements DNS (http://fr.wikipedia.org/wiki/Domain_Name_System#Principaux_enregistrements_DNS) :
A AAAA NS CNAME SOA PTR 1 Nom vers Addresse IPv4 Nom vers Addresse IPv6

[rsolution dun nom de domaine en une adresse IP

2 Rcupre le nom du serveur autoritaire dun domaine 5 Alias 6 Zone dAutorit [se renseigner sur une zone] 12 Adresse vers nom [requtes DNS inverses : adresse IP vers un ou des nom(s) de domaine] [connatre la machine responsable des mails]

MX TXT

15 Rcupration du serveur de mail 16 Chane de caractres

[peuvent contenir des clefs de chiffrement publiq des informations pour lutter contre le spam (connatre les serveurs de mail sortant) se frayer un tunnel pour contourner les firewall

...

Note : La requte la plus courante, la rsolution de nom, est une requte de type A. Une requte inverse est de type PTR .

12.2.5. Liste des serveurs DNS existant


Plusieurs implmentations de serveurs DNS existent :

bind (http://www.isc.org) (autoritaire ou cache) : "Berkeley Internet Name Domain" est lanctre de tous les serveurs, fonctionnalits intressantes, en retard sur quelques points comme le stockage des zones, le plus respectueux des RFC, le plus compatible avec tous les clients et autres serveurs.

344

Chapitre 12. SR005 - Administrer un serveur DNS Dvelopp initialement par luniversit de Berkeley en Californie BIND est dsormais maintenu par lISC (Internet Systems Consortium).

PowerDNS (http://www.powerdns.com) (autoritaire seulement !) : le plus avanc en terme de fonctionnalits, possibilit de stocker les zones dans des bases de donnes ou de faciliter le load balancing. Doute que leur code ait t audit autant que celui de bind. Politique de scurit (http ://doc.powerdns.com/security-policy.html). MaraDNS (http://www.maradns.org) (autoritaire ou cache) : conu lorigine pour tre un serveur scuris. djbDNS (http://cr.yp.to/djbdns.html) (autoritaire ou cache) : rput pour sa scurit, pas compatible sur certains points (comme le transfert de zones) avec dautres serveurs classiques, licence non libre.

12.2.6. Installation & Maintenance


12.2.6.1. Matriel
Le service DNS nest pas consommateur en ressources, La seule chose importante est davoir une carte rseau correcte. Une simple machine bas de gamme (mais able!) est sufsante, un surplus de RAM nest pas de refus ;-)

12.2.6.2. Choix de version & Installation des paquets ncessaires


La meilleure solution de serveur DNS, par sa maturit et ses fonctionnalits, est bind (Berkeley Internet Name Domain). Pour bncier de fonctionnalits volus (comme les views, les acls,...) il faut utiliser la version stable 9.X .

Avertissement
Pour ne pas se tromper lors de la mise en place de votre serveur, toujours choisir la version fournie par votre distribution en utilisant les paquets crs. Vous serez ainsi sr de toujours avoir une version jour dun point de vue scurit.

Sous Debian GNU/Linux, le paquets bind9 et bind9-host (pour vous aider dans le debugging) peuvent tre installs.
Note : bind9-host fournit le programme host intgr avec les sources de BIND 9.X. Cette version est diffrente de celle livre dans le paquet host , qui est de NIKHEF, et possde un ensemble similaire (mais diffrent) de fonctionnalits/options.

345

Chapitre 12. SR005 - Administrer un serveur DNS

# Paquets disponible sous Debian $ apt-cache search ^bind9 bind9 - Internet Domain Name Server bind9-doc - Documentation for BIND bind9-host - Version of host bundled with BIND 9.X bind9utils - Utilities for BIND libbind9-40 - BIND9 Shared Library used by BIND

# Installation des paquets ncessaires

$ apt-get install bind9 bind9-doc bind9-host Lecture des listes de paquets... Fait Construction de larbre des dpendances Lecture des informations dtat... Fait bind9-host est dj la plus rcente version disponible. Les paquets supplmentaires suivants seront installs : bind9utils Paquets suggrs : resolvconf ufw Les NOUVEAUX paquets suivants seront installs : bind9 bind9-doc bind9utils 0 mis jour, 3 nouvellement installs, 0 enlever et 15 non mis jour. Il est ncessaire de prendre 601ko dans les archives. Aprs cette opration, 2048ko despace disque supplmentaires seront utiliss. Souhaitez-vous continuer [O/n] ? O Rception de : 1 http://security.debian.org lenny/updates/main bind9utils 1:9.5.1.dfsg.P3-1+ Rception de : 2 http://security.debian.org lenny/updates/main bind9 1:9.5.1.dfsg.P3-1+lenny Rception de : 3 http://security.debian.org lenny/updates/main bind9-doc 1:9.5.1.dfsg.P3-1+l 601ko rceptionns en 1s (530ko/s) Prconfiguration des paquets... Slection du paquet bind9utils prcdemment dslectionn. (Lecture de la base de donnes... 144884 fichiers et rpertoires dj installs.) Dpaquetage de bind9utils ( partir de .../bind9utils_1%3a9.5.1.dfsg.P3-1+lenny1_i386.deb) . Slection du paquet bind9 prcdemment dslectionn. Dpaquetage de bind9 ( partir de .../bind9_1%3a9.5.1.dfsg.P3-1+lenny1_i386.deb) ... Slection du paquet bind9-doc prcdemment dslectionn. Dpaquetage de bind9-doc ( partir de .../bind9-doc_1%3a9.5.1.dfsg.P3-1+lenny1_all.deb) ... Traitement des actions diffres ( triggers ) pour man-db ... Paramtrage de bind9utils (1:9.5.1.dfsg.P3-1+lenny1) ... Paramtrage de bind9 (1:9.5.1.dfsg.P3-1+lenny1) ... Ajout du groupe bind (identifiant 118)... Termin. Ajout de lutilisateur systme bind (identifiant : 113)... Ajout du nouvel utilisateur bind (identifiant : 113) avec le groupe bind ... Rpertoire personnel /var/cache/bind non cr. wrote key file "/etc/bind/rndc.key" # Starting domain name service...: bind9.

346

Chapitre 12. SR005 - Administrer un serveur DNS


Paramtrage de bind9-doc (1:9.5.1.dfsg.P3-1+lenny1) ...

12.2.6.3. Maintenance hebdomadaire


Ajout/Suppression d entres dans la zone du rseau Administration classique de la machine (lecture des logs, mise a jour, etc.) Ncessite uniquement une bonne comprhension des rseaux IP et la lecture les pages de manuel.

12.2.7. Documentation
Source(s):

Web: BIND 9 Administrator Reference Manual (9.3.2) (http://www.bind9.net/manuals) DNS Bind9 (Wikipedia) (http://wiki.kartbuilding.net/index.php/DNS_-_Bind9) DNS HowTo (http://www.tldp.org/HOWTO/DNS-HOWTO.html) Bind9 Howto (Mise en place) (http://snow-seb.9online.fr/bind_v2.htm) Example de conguration de base (Ubuntu-fr) (http://doc.ubuntu-fr.org/bind9) Securing an Internet Name Server (http://www.cert.org/archive/pdf/dns.pdf) Documents de rfrence (http://www.linux-france.org/prj/inetdoc/cours/admin.reseau.dns/admin.reseau.dns.refdocs.html)

# Naviguer en local dans BIND 9 Administrator Reference Manual file:///usr/share/doc/bind9-doc/arm/Bv9ARM.html man named man named.conf man host man dig # Aide sur le serveur DNS # Aide sur le fichier de configuration # Aide sur la commande host # Aide sur la command dig

12.2.8. Conguration
La conguration de bind nest base que sur des chiers textes /etc/bind/named.conf dcrit toutes les zones et options du serveur.

347

Chapitre 12. SR005 - Administrer un serveur DNS Peauner la conguration pour quelle corresponde vos besoins (ajout de serveurs secondaires, transfert de zone, limitation des zones, dlgations, etc.). Pour brider votre serveur, il va falloir utiliser les directives allow-transfer, allow-query, allow-recursion ou allow-notify...

12.2.8.1. Options
Liste des options disponibles : En local (le:///usr/share/doc/bind9-doc/arm/Bv9ARM.ch06.html#id2576862) En ligne (http://www.bind9.net/manual/bind/9.3.2/Bv9ARM.ch06.html#id2554668)
options { directory "/var/cache/bind"; allow-query { 10.10.0.0/24; 127.0.0.1;}; allow-transfer { none; } ; allow-recursion { 10.0.0.0/24; 127.0.0.1;} ; };

# # # # # #

Repertoire de cache Htes autoriss faire des requtes DNS Htes autoriss recevoir des transfert de zone depuis ce server Htes autoriss faire des requtes recursives sur ce serveur

12.2.8.2. Zones
Ensuite, pour chaque zone, indiquer le type de service propos : autoritaire ou secondaire. 12.2.8.2.1. Zone de serveur de cache (Forwarders) : Servie par un autre serveur (DNS FAI) Si vous ntes ni le serveur matre, ni le serveur esclave dune zone mais que vous savez qui contacter sans passer par linterrogation des root-servers (exemple des zones internes dune entreprise divise en de nombreux dpartements), vous pouvez donner un ou plusieurs forwarders.
// on sait que la zone hq.bar.org est servie // par 10.0.0.2 donc posons lui nos questions ! zone "hq.bar.org" { type forward; forwarders { 10.0.0.2;}; # DNS du FAI };

Note : Ce type de directive est souvent utilis lorsque vous tes un serveur de cache : Vous transmettez toutes vos requtes au serveur dns de votre fournisseur daccs qui se chargera dinterroger les root-servers votre place, ne vous laissant plus qu mettre en cache la rponse.

348

Chapitre 12. SR005 - Administrer un serveur DNS 12.2.8.2.2. Zone de serveur secondaire (Autoritaire non Matre) Les serveurs secondaires qui sont autoritaires, sont de simples miroirs : ils nont quun droit de lecture seule sur les donnes. Ainsi, pour un serveur secondaire, il suft dindiquer qui est le matre de la zone et la zone va tre automatiquement transfre vers lui. Pareil, si une modication est faite de la zone sur le serveur autoritaire, le serveur secondaire est noti du changement et un transfert de zone a de nouveau lieu.

// Serveur secondaire pour la zone foo.bar.org // en interogeant le matre 10.2.3.4 zone "foo.bar.org." { # Dfinit la zone type slave; # Dfinit comme serveur secondaire pour cette zon masters { 10.2.3.4; }; # Serveurs matres };

12.2.8.2.3. Zone de serveur primaire (Autoritaire Matre) Pour le serveur primaire, le chemin vers le chier qui contient la zone doit tre prcis.

zone "testme.fr" { notify no; type master; # Nous sommes le matre (autoritaire) de la zone testme file "/etc/bind/db.testme.fr"; # Zone dcrite dans le fichier db.testme.fr. };

Fichier db.testme.fr
;;PREAMBULE $TTL 604800 @ IN SOA

; "Time to Life" (Hrs) fix une semaine (604800/3600/24) par dfau

ns0.testme.fr. hostmaster.testme.fr. ( ; @ est un raccourci pour dsigner cette zone. ; IN = Internet ; "Start Of Autority" (SOA), se dclare autoritaire pour ; la zone nomme dans le fichier de conf. named.conf (testme.fr) ; ns0.testme.fr : serveur primaire responsable de cette zone ; hostmaster.testme.fr : adresse email de ladministrateur du servic ; (remplacer premier . par @)

2005081100

; ; ; ; ;

numro de srie ( version de la zone ) utilis lors du transfert de zone concatner lanne (sur quatre chiffres), le mois, le jour et un numro sur deux chiffres (incrment chaque changement si le mme jour).

8H

; rafraichissement (refresh) :

349

Chapitre 12. SR005 - Administrer un serveur DNS


; ; ; ; ; ; ; ; ; ; temps de rafraichissement minimal pour la zone. Ici 8 heures. La valeur recommande est de 24 heures. essai (retry) : temps dattente avant de ressayer en cas dchec. Ici, 2 heures. La valeur recommande est de 2 heures. expiration (expire) : le temps dexpiration, la dure de validit maximale de la zone. Ici, 1 semaine. La valeur recommande est de 1000 heures. minimum : valeur TTL minimum Ici, 1 jour. La valeur recommande est de 2 jours.

2H

1W

1D )

;;DATA ;Chaque ligne dcompose en quatre parties : ;C1: ;C2: ; ;C3: ;C4: ;C1 Nom denregistrement (on le dfinit), si partie est vide, elle dsigne lobjet courant Classe denregistrement, toujours la classe IN (pour Internet) moins dun environement exotique. Type denregistrement, A,NS, MX, CNAME, etc. La donne en dernire colonne ;C2 ;C3 TXT ;C4 "Private Network"

; Dcrit la zone @ (soit testme.fr) ; ; "Name Serveur" (NS) ;

NS NS

ns0.testme.fr. ns1.testme.fr.

;;Syntaxe ; mondomaine.fr. IN NS ns1.domaine.fr.; Dclarer ns0.domaine.fr responsable ; du domaine mondomaine.fr MX MX 10 20 mx1 mx.monfai.fr. ; ; ; ; ;

Service mail [Mail eXchanger (MX)] Pour rcuprer laddresse de la machine en charge de pour envoyer un mail un nom de domaine quivaut testme.fr. MX 10 mx0 testme.fr. MX 20 mx1

; Ici 10 et 20 indiquent la priorit ; le serveur avec la plus petite priorit ; est utilis en premier homer IN A 10.0.0.42 ; ; ; ; Simple nom de machine homer (appartenant au domaine @ ou testme.fr) pointe vers adresse IPv4 de classe IN 10.0.0.42 quivaut homer.testme.fr. IN A 10.0.0.42

homer

IN AAAA 2001:660:305:1::1:2

; Enregistrement daddresse IPv6 ; pour la machine homer ; Enregistrement de la machine ; maggie.testme.fr ; marge.testme.fr

maggie

IN A

10.0.0.33

marge

IN A

10.0.0.88

350

Chapitre 12. SR005 - Administrer un serveur DNS


ns0 ns1 IN A IN A 10.0.0.40 10.0.0.41

;; Pour les addresses IPv4 utiliser record type A ;; Pour les addresses IPv6 utiliser record type AAAA www cvs IN CNAME homer IN CNAME homer ; "Canonical Name" (CNAME) Alias dfinition ; www.testme.fr et cvs.testme.fr pointe vers homer

12.2.8.2.4. Resolution DNS Inverse : Adresse vers nom de domaine partir dune adresse IP, nous pouvons lui faire correspondre un nom de domaine. Similairement la hirarchie de rsolution classique, nous avons les mmes mcanismes pour les requtes inverses. Pour rsoudre 10.0.0.42, on utilise une zone spciale, in-addr.arpa comme racine et on descend dans larbre
// Provide a reverse mapping for the loopback address 127.0.0.1 zone "0.0.127.in-addr.arpa" { type master; file "localhost.rev"; notify no; };

12.2.8.2.5. Alias : "Canonical Name" (CNAME) Lorsque vous tes client dun rseau, il est toujours recommand dutiliser des noms de services comme adresse plutt que les vritables noms de machine. Dune part car il est plus facile et logique de mmoriser cvs.testme.fr plutt que homer.testme.fr mais surtout car le service CVS pourrait tre dplac sur un autre serveur.
www cvs IN CNAME homer IN CNAME homer ; "Canonical Name" (CNAME) Alias dfinition ; www.testme.fr et cvs.testme.fr pointe vers homer

Avertissement
!!!Attention!!! Les "Canonical Name" (CNAME) ne doivent jamais se trouver sur la partie droite dun enregistrement.

351

Chapitre 12. SR005 - Administrer un serveur DNS 12.2.8.2.6. Serveur de nom : "Nameserver" (NS) Un enregistrement Nameserver (NS) sert dclarer les serveurs DNS responsables dun nom de domaine. Ici,on ne fait pas de diffrenciation entre les serveurs primaires ou secondaires, ils doivent simplement tre autoritaires.
mondomaine.fr. IN NS ns0.domaine.fr.

Note : Pour un enregistrement NS le systeme attends un nom dhte... et pas une adresse IP... Il faudra toujours mettre un nom dhte la place de 192.3.2.3 par example ! Voici les passages de la RFC 1035 indiquant quune une ressource NS est forment un nom dhte :
,---| 3.3.11. NS RDATA format | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | / NSDNAME / | / / | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | where: | | NSDNAME A <domain-name> which specifies a host which should be | authoritative for the specified class and domain. ---Puis : ,---| <domain-name> is a domain name represented as a series of labels, and | terminated by a label with zero length. <character-string> is a single | length octet followed by that number of characters. <character-string> | is treated as binary information, and can be up to 256 characters in | length (including the length octet). ----

12.2.8.3. Transfert de Zone & Numros de srie


Source(s):

Web: DNS Zone Transfer (http://en.wikipedia.org/wiki/DNS_zone_transfer)

352

Chapitre 12. SR005 - Administrer un serveur DNS Transfert de Zone DNS, est souvent connu sous son nom de code menmonique AXFR, cest un type de transaction DNS.
$ dig yourdomain.com AXFR # # # # Si le domaine questionn permet les transferts DNS, il est possible de les obtenir :) Mais sur Internet, trs peu de domaine autorise de faon libre et unlimit le transfert de zone.

Cest un des mcanisme disponible ladminsitrateur pour procder la replication des bases de donnes contenant les donnes et enregistrement DNS travers un groupe de server DNS. Le transfert de Zone peut-tre de deux type : complet (opcode AXFR) ou incrmentale (IXFR). La partie prambule dune zone de transfert repose sur le numro de srie, et uniquement le numro de srie,pour dterminer si les donnes de la zone ont chang et donc que la zone requiert un transfert. Pour certains serveur DNS, le numro de srie des enregistrement de type SOA sont maintenu manuellement par les administrateurs. Chaque edition de changement de donne requierts deux changement : un sur lenregistrement changer et lautre sur le numro de srie de la zone. Ceci peut-tre laborieux et sujet erreur, ladminstrateur peut oublier de changer le numro de srie ou le changer de faon incorrect (en le diminuant ou en laugmentant trop).

Avertissement
Lorsquun serveur DNS reoit une mise jour directement (soit partir de ladministrateur, ou via les mises jour dynamiques) son numro de srie doit toujours tre augment .

Lorsquun serveur DNS reoit une mise jour via un transfert de zone :

Si le numro de srie spci dans le dbut de lautorit denregistrement SOA de la copie rplique de la zone est suprieur au numro de srie est spci dans lenregistrement SOA la copie locale de la zone, la zone sera rpliqu (transfert de zone). Si le numro de srie de la zone rplique est identique ou infrieur au numro de srie de la zone local, la zone local reste inchange.

12.2.9. Conguration dun serveur DNS sur le net


Cette conguration est possible , si vous possdez une IP xe ainsi quun nom de domaine. Dans ce cas, il faut renseigner au registrar lIP du serveur DNS.

353

Chapitre 12. SR005 - Administrer un serveur DNS Pour un rseau dentreprise qui possde parfois plusieurs IP publiques , avoir son propre serveur DNS peut savrer tres utile. En effet puisque lon gre de faon autonome son domaine, on peut dnir les noms et alias pour chaque IP publique. Il sufra de crer une zone de notre domaine. La zone inverse tant gre par le registrar , que vous pouvez bien souvent modier via linterface web dadministration sur le site du registrar. Pour lexemple, notre domaine aura pour nom mydomain.com :
$ORIGIN . $ttl 38400 mydomain.com.

IN

$ORIGIN mail www webmail www ftp

SOA mydomain.com. root.mydomain.com. ( 2004110129 5400 3600 604800 38400 ) NS ns.mydomain.com. NS ns.anotherdomain.com. MX 10 mail.mydomain.com. MX 20 mail.anotherdomain.com. A 123.45.67.89 mydomain.com. A 123.45.67.89 123.45.67.90 CNAME mail CNAME www CNAME www

Comme on peut le remarquer le chier de zone est peu prs similaire au chier de zone vu prcedement. On remarque quil y a deux champs NS et MX. Il sagit tout simplement des serveurs DNS (NS) et de courrier (MX) primaires et secondaires, toujours utile en entreprise. Dans lexemple , nous possdons deux adresses IP publiques 123.45.67.89 et 123.45.67.90. Un serveur mail sera hberg sur mail.mydomain.com (123.45.67.89) et un serveur web www.mydomain.com (123.45.67.90). On indique donc, le nom et ladresse IP du serveur correspondant par un champ A. On peut par la suite indiquer des alias grce aux champs CNAME.

354

Chapitre 12. SR005 - Administrer un serveur DNS

12.2.10. Pige viter


Source(s):

Web: Common DNS Operational and Conguration Errors [RFC1912] (http://www.ietf.org/rfc/rfc1912.txt)

Il existe des dizaines de piges mais vous les cultiverez avec le temps et lexprience, la RFC1912 (http://www.ietf.org/rfc/rfc1912.txt) documente les principales erreurs. Lors de la conguration, attention au caractre . (le point). Loubli ou lajout du point dans les noms de domaines est lerreur la plus frquente. Il est dune importance primordiale et vous vous ferez piegez coup sr. Rgle dor : si un nom ne se termine pas par un point, alors cela ajoute la n le domaine courant, autrement, on dsigne le nom pleinement quali "Fully Qualied Domain Name" (FQDN). Lorsqu un nom (homer, marge, etc) est dnit, il nest donc pas ncessaire dajouter la n de chaque nom de machine le domaine courant. Un autre oubli est de ne pas incrmenter le numro de srie de la zone lorsque vous la modiez, ce qui a pour consquence de ne pas mettre jour les serveurs secondaires si vous en avez. Un bon schma suivre pour crire ce serial est de concatner lanne (sur quatre chiffres), le mois, le jour et un numro sur deux chiffres. Par exemple, pour le 18 aot 2005 : 2005081800. Cette numrotation permet dtre assur que les numros de sries se suivent de facon cohrente et quil ny a pas derreur. Si dans une journe, vous fates plus dune modication, incrmentez simplement les deux derniers chiffres. Et si cest une autre journe, rcrivez intgralement le numro de srie : le 20 aot 2005 (2005082000) est forcment suprieur celui du 18 aot car 2005082000 > 2005081800. Ne pas oublier quun alias (CNAME) ne doit pas tre dans la partie droite dun enregistrement. Ainsi, pas de MX pointant sur un CNAME (erreur la plus frquente).

12.2.11. Outils de diagnostique et de vrication de la conguration


Lerreur est humaine et cest bien pour cela quil faut shabituer lutilisation doutils de diagnostique et de logiciels de vrication de zone

12.2.11.1. Outils de ligne de commande


Pour effectuer des requtes manuelles sur des serveurs DNS :

### dig # Le "Domain Information Groper" (dig) est la plus complte et flexible des commandes de dia

355

Chapitre 12. SR005 - Administrer un serveur DNS

Syntaxe : dig [@server] domain [query-type] [query-class] [+query-option] [-dig-option] [%co # The usual simple use of dig will take the form dig @server domain query-type query-class man dig # Pour plus dinfo ;-)

### host # Lutilitaire host (simple et facile) convertit des nom dhte en addresse IP

Syntaxe : host [-aCdlrTwv] [-c class] [-N ndots] [-t type] [-W timeout] [-R retries] hostnam man host # Pour plus dinfo ;-)

### nslookup [Il est recommend dutiliser dig au lieu de nslookup] # Permet de questionner des serveurs DNS pour obtenir des informations sur des htes et doma Syntaxe : nslookup [-option...] [[host-to-find] | [- [server]]]

12.2.11.2. Logiciel de vrication de zone


ZoneCheck (http://www.zonecheck.fr/) : est lun des meilleurs logiciels de vrication de zone. Le programme ZoneCheck effectue plusieurs tests sur la zone (domaine) an de sassurer que celle-ci est correctement congure et peut tre dlgue sans risque, fournissant un certain degr de qualit votre domaine.

12.2.11.3. Outils dadminsitration


### named-checkconf # Programme de vrification de la syntaxe du fichier named.conf $ named-checkconf [-jvz] [-t directory] [filename]

### named-checkzone # Programme de vrification de la syntaxe et cohrence du fichier de lautorit matre $ named-checkzone [-djqvD] [-c class] [-o output] [-t directory] [-w directory] [-k (ignore|warn|fail)] [-n (ignore|warn|fail)] zone [filename]

### rndc # Le "Remote Name Daemon Control" (rndc) programme permet ladminsitrateur # systme de controller les oprations du serveur de nom. $ rndc [-c config] [-s server] [-p port] [-y key] command [command...]

356

Chapitre 12. SR005 - Administrer un serveur DNS

12.2.12. Commandes utiles


12.2.12.1. Vrier les chiers de conguration et Zone
# Vrifier configuation du serveur $ named-checkconf /etc/bind/named.conf # Vrifier configuation dune zone $ named-checkzone blabla.mondomaine.lan /etc/blind/db.blabla.mondomaine.lan

12.2.12.2. Start, Restart, Stop


$ /etc/init.d/bind9 start $ /etc/init.d/bind start # restart | stop # Alternative

12.2.12.3. Flush DNS cache


$ rndc flush $ ndc flush $ /etc/init.d/nscd restart $ service nscd restart $ rndc restart $ rndc exec # Efface la cache dun serveur DNS # Bind9 # Bind8 # Flush DNS # Alternative parfois

# Avec un veille version # Alternative

Dans une machine virtuelle Netkit, il semble quaucune des ces commande ne soite disponisble. Le seul moyen que jai trouv cest de redmarrer tout le lab pour faire un ush DNS sur le machine virtuelle... ce qui est un peu trop barbare ... comment le faire hote par hote ?
# # # # Dans une Machin Virtuelle Netkit... Trouver le fichier named_dump.db et le supprimer Cest une autre solution barbare mais qui peut fonctionner hte par hte... :)

12.2.12.4. Reload conguration sans re-dmarrer


$ rndc reload domain-name-of-zone $ ndc reload domain-name-of-zone $ rndc reload foo.example bar.example # Bind9 # Bind8 # Recharger plusieurs zones

357

Chapitre 12. SR005 - Administrer un serveur DNS

$ /etc/init.d/bind9 reload

12.2.13. Verication du bon fonctionnement du serveur


Avant de lancer le serveur , il faut modier le chier /etc/resolv.conf sur toutes les machines clientes. Il faut indiquer le nom du domaine et ladresse IP du serveur DNS :
#/etc/resol.conf search maison.local nameserver 192.168.0.1

Pour vrier que notre serveur rsout bien les noms du rseau , il faut utiliser lutilitaire dig :
## Requte sur le champ A de machine1.maison.lan $ dig @192.168.0.1 machine1.maison.lan A # # # # # Dig va retourner une srie dinformations, celle qui nous intresse est "ANSWER SECTION" Si elle est absente ou errone, cest que vous vous tes tromps quelques part (srement un point oubli la fin des noms de domaines)

## Requte inverse sur lIP 192.168.0.3 $ dig @192.168.0.1 -x 192.168.0.3

12.2.14. Slow DNS lookup issues with bind9


Source:http://wiki.kartbuilding.net/index.php/DNS_-_Bind9#Slow_DNS_lookup_issues_with_bind9

If ping or netstat etc. takes a long time to return an ip - there is a problem. Carry out th dig www.burkesys.com

Identify the time taken. Try the same test on a different computer (your local one etc.). If

Solutions: Disable ipv6 on Debian Sarge, or Disable ipv6 bind lookup, or use a different dns It is difficult to cleanly disable ipv6 on Sarge, requiring reboot and trial and error.

358

Chapitre 12. SR005 - Administrer un serveur DNS

In order to Disable ipv6 lookup on bind9 with Debian Sarge - a recompile is required. If you The default bind9 that ships with Debian Etch (9.3.2-P1.0-1) can easily be configured to use

vi /etc/default/bind9 OPTIONS="-4 -u bind" //-4 = to use ipv4 only.

As I was using Debian Sarge, and wanted a quick solution to my DNS lookup times, I decided t search domainname.com nameserver 43.111.98.12 nameserver 43.111.21.45

Bind will still serve out all domain names when requested. The above simply uses the ISPs d

12.2.15. Architecture de Service DNS


Larchitecture du service DNS sera diffrente suivant si cest un serveur autoritaire, primaire, secondaire ou simplement de cache. Le point essentiel lors du dploiement des machines est le principe du moindre privilge, dans labsolu, il faudrait une machine par service. Ce rseau de serveurs devrait lui-mme tre contenu dans un rseau part entire (diffrent du rseau des machines clientes) (DMZ, ou zone dmilitarise). Il en est de mme pour le DNS, si possible, il faut un serveur pour traiter les requtes autoritaires , un autre pour les clients internes de votre rseau (pour leur servir de cache) et, dans le meilleur des mondes, un serveur de cache uniquement pour servir votre DMZ . bind (depuis la version 9) a la capacit de faire tourner diffrentes vues, on peut voir une vue comme une instance de bind indpendante des autres permettant de simuler laccs plusieurs machines disponibles. Dans un rseau avec une architecture simple, on peut faire tourner un bind avec deux vues :
### une pour les clients // On est autoritaire et on sert de serveur cache pour // les clients du rseau interne. // De plus, on propose la zone complte testme.fr pour // ces clients view "internal" { match-clients { 10.0.0.0/8; }; recursion yes; zone "testme.fr" {

359

Chapitre 12. SR005 - Administrer un serveur DNS


type master; file "db.full.testme.fr"; }; };

### une autre pour servir le monde entier # (si nous sommes autoritaires pour un quelconque domaine). // Une vue externe pour les requtes provenant dInternet // On offre une vue limite de la zone testme.fr (juste // ce quil faut) et on interdit la rcursion (on ne // veut pas servir de serveur de cache) view "external" { match-clients { any; }; recursion no; zone "testme.fr" { type master; file "db.limited.testme.fr.conf"; }; };

12.3. DNS : Travaux pratiques 1


Source(s):

OF: SR005-ch03-tp1.pdf (docs/eof/sr005-ch03-tp1.pdf)

12.3.1. dig : Mise en application


Source(s):

Web: Dig HOWTO (EN) (http://www.madboa.com/geek/dig/)

Note : Voir aussi la section SR004 Interconnecter un rseau TCP/IP > command dig pour un description de la commande dig

360

Chapitre 12. SR005 - Administrer un serveur DNS Les logiciels les plus courants sont : host, nslookup et dig. Chacun a ses avantages (host afche les informations plus simplement, nslookup a une interface interactive et dig est trs dtaill) dig afche plusieurs sections lorsquon lutilise :
Un rsum en deux lignes de lchange DNS La question qui a t pose La rponse, sil y en a Lautorit qui nous a rpondue Le champs additionnel (optionnel) Diverses donnes comme le temps total de la requte, le serveurs dns utilis ou la taille

Les lignes commencant par un ; (point-virgule) sont des commentaires.

$ dig www.isc.org ## Ligne de commande invoquant dig ; <<>> DiG 9.2.3 <<>> www.isc.org ;; global options: printcmd ## La section douverture indiquant ## - la version (version 9.2.3) ## - les paramtres de commande ## - les options globales ## Peut-tre enlev via loption +nocmd ## ( placer en premier argument de la commande) ;; ;; ;; ## ## Got answer: ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 43071 flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 3 Detail technique de la rponse reu du serveur DNS. Peut-tre ajouter/enlev via loption +[no]comments.

;; QUESTION SECTION: ;www.isc.org. IN A ## Dans la section QUESTION, dig rappel la requte en cours. ## Requte de tip (A) adresse Internet par dfaut. ## Peut-tre ajouter/enlev via loption +[no]question ;; ANSWER SECTION: www.isc.org.

600

IN

204.152.184.88

## Voici la REPONSE tant attendu ! Ladresse IP de www.isc.org est 204.152.184.88. ## Peut-tre ajouter/enlev via loption +[no]answer ;; AUTHORITY SECTION: isc.org. isc.org. isc.org.

2351 2351 2351

IN IN IN

NS NS NS

ns-int.isc.org. ns1.gnac.com. ns-ext.isc.org.

## La SECTION DAUTORIT quels serveurs DNS peuvent ## fournir une rponse autoritaire la question.

361

Chapitre 12. SR005 - Administrer un serveur DNS


## Ici isc.org a trois serveur de nom. ## Peut-tre ajouter/enlev via loption +[no]authority ;; ADDITIONAL SECTION: ns1.gnac.com. ns-int.isc.org. ns-int.isc.org.

171551 2351 2351

IN IN IN

A A AAAA

209.182.216.75 204.152.184.65 2001:4f8:0:2::15

## La SECTION ADDITIONNELLE affiche la liste des adresses IP ## des serveurs DNS list dans la section dautorit. ## Peut-tre ajouter/enlev via loption +[no]additional ;; ;; ;; ;; Query time: 2046 msec SERVER: 127.0.0.1#53(127.0.0.1) WHEN: Fri Aug 27 08:22:26 2004 MSG SIZE rcvd: 173

## La section FINAL de laffichage par dfaut ## contient les statistiques sur la requte ## Peut-tre ajouter/enlev via loption +[no]stats

12.3.2. dig : Resolution DNS Simple


Par dfaut, dig ne fait quune rsolution de type A, vous pouvez nanmoins prciser le type de requte : MX, NS,PTR, AXFR, etc.
$ dig eof.eu.org ; <<>> DiG 9.3.1 <<>> eof.eu.org ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 62239 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 0 ;; QUESTION SECTION: ;eof.eu.org. IN A ;; ANSWER SECTION: eof.eu.org. 259200 IN A 195.115.89.182 ;; AUTHORITY SECTION: eof.eu.org. 259200 IN NS ns.eof.eu.org. eof.eu.org. 259200 IN NS ns2.eof.eu.org. ;; Query time: 26 msec ;; SERVER: 172.16.0.42#53(172.16.0.42) ;; WHEN: Mon Aug 22 10:02:51 2005 ;; MSG SIZE r

362

Chapitre 12. SR005 - Administrer un serveur DNS 1. Interprtez ce rsultat. Qui est en charge de servir la zone eof.eu.org ? Lhte eof sur le domaine eu.org se trouve laddresse IPv4 195.115.89.182. Les serveurs DNS ns.eof.eu.org et ns2.eof.eu.org sont en charge de la zone.

2. Mettez-vous la place dun serveur DNS et indiquez toutes les requtes DNS effectues pour rsoudre eof.eu.org en utilisant dig. QUERY : 1 ==> Une seule requte trait. dig contact le serveur DNS de ma machine (cest dire le server DNS de mon FAI). Le DNS du FAI na pas lautorit sur la zone donc il cherche dans sa cache si lenregistrement existe, auquel cas il rponds directement sinon il rfre un root node (. puis ...). Le server DNS root node fait de mme jusqua ce que lun des serveur DNS en charge de la zone eof.eu.org soit identi. Lun de ses derniers reoit donc la question et y rponde en indiquant laddresse IP de lhte eof sur eu.org et les rfrences de serveur de nom qui peuvent tre mis en cache pour obtenir des rponse plus rapide des requtes sur le mme domaine. Ce quil se passe peut se rsumer ainsi :
$ dig NS . f.root-servers.net. $ dig @f.root-servers.net. NS org. 199.19.56.1 $ dig @199.19.56.1 NS eu.org. ns1.pasteur.fr. $ dig @ns1.pasteur.fr eof.eu.org. 86.64.63.108

3. Parmi les serveurs dns trouvs prcdemment, est-ce quil y en a qui supporte le protocole IPv6 ? Aucun des deux server DNS ne semble supporter le protocole IPv6 :
$ dig ns2.eof.eu.org aaaa ; <<>> DiG 9.6.1-P2 <<>> ns2.eof.eu.org aaaa ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 54613

363

Chapitre 12. SR005 - Administrer un serveur DNS


;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;ns2.eof.eu.org. IN AAAA ;; ;; ;; ;; Query time: 64 msec SERVER: 10.0.1.1#53(10.0.1.1) WHEN: Fri Jan 22 23:06:37 2010 MSG SIZE rcvd: 32

$ dig ns.eof.eu.org aaaa ; <<>> DiG 9.6.1-P2 <<>> ns.eof.eu.org aaaa ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 55315 ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;ns.eof.eu.org. IN AAAA ;; ;; ;; ;; Query time: 56 msec SERVER: 10.0.1.1#53(10.0.1.1) WHEN: Fri Jan 22 23:06:48 2010 MSG SIZE rcvd: 31

Mais ceux en charge deu.org le sont :


% dig ns eu.org ; <<>> DiG 9.6.1-P2 <<>> ns eu.org ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12890 ;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 0, ADDITIONAL: 1 ;; QUESTION SECTION: ;eu.org. ;; ANSWER SECTION: eu.org. eu.org. eu.org. eu.org. eu.org. eu.org. ;; ADDITIONAL SECTION: NS-V6.eu.org.

IN

NS

259200 259200 259200 259200 259200 259200

IN IN IN IN IN IN

NS NS NS NS NS NS

DNS3.GANDI.NET. NS-SLAVE.FREE.org. NS0.PASTEUR.FR. NS-V6.eu.org. NS1.PASTEUR.FR. AUTH1.DNS.ELM.NET.

259200

IN

AAAA

2a01:e35:8b50:2c40::4

364

Chapitre 12. SR005 - Administrer un serveur DNS


;; ;; ;; ;; Query time: 21 msec SERVER: 212.27.40.240#53(212.27.40.240) WHEN: Sun Jan 24 19:02:31 2010 MSG SIZE rcvd: 202

Cela ne veut pas dire que eof.eu.org peut tre atteint via IPv6 non ? Est-ce sufsant davoir le domaine suprieur "question-able" via IPv6 ? Non en effet, cela signie uniquement quon peut connatre les NS deof.eu.org en IPv6 :( Est-ce cela signie que si eu.org reoit la requte via IPv6 il peut la faire suivre en IPv4 vers eof.eu.org et ainsi rpondre ? Non, moins quil soit congur comme forwarder. Si ctait le cas, effectivement, il pourrait faire "bridge v4-v6".

Dautres example de rsolution DNS simple avec la commande dig :


$ dig free.fr $ dig a free.fr

# synonyme du prcdent

; <<>> DiG 9.6.1-P2 <<>> free.fr ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 65478 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;free.fr. IN A ;; ANSWER SECTION: free.fr. 41487 IN A 212.27.48.10 ;; ;; ;; ;; Query time: 7 msec SERVER: 10.0.1.1#53(10.0.1.1) WHEN: Fri Jan 22 21:32:55 2010 MSG SIZE rcvd: 41

$ dig mx free.fr

# Connatre les serveurs de courriel de FREE

; <<>> DiG 9.6.1-P2 <<>> mx free.fr ;; global options: +cmd ;; Got answer:

365

Chapitre 12. SR005 - Administrer un serveur DNS


;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 25682 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;free.fr. IN MX ;; ANSWER SECTION: free.fr. 32845 IN MX 10 mx1.free.fr. free.fr. 32845 IN MX 20 mx2.free.fr. ;; ;; ;; ;; Query time: 7 msec SERVER: 10.0.1.1#53(10.0.1.1) WHEN: Fri Jan 22 21:52:36 2010 MSG SIZE rcvd: 65

$ dig ptr free.fr $ dig 10.48.27.212.in-addr.arpa ptr in

# Incorrect !!! PTR sert faire des resolutions inv # Correct !!!

; <<>> DiG 9.5.1-P3 <<>> 10.48.27.212.in-addr.arpa ptr in ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 49397 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;10.48.27.212.in-addr.arpa. IN PTR ;; ANSWER SECTION: 10.48.27.212.in-addr.arpa. 86400 IN PTR www.free.fr. ;; ;; ;; ;; Query time: 56 msec SERVER: 10.0.1.1#53(10.0.1.1) WHEN: Sat Jan 23 19:12:45 2010 MSG SIZE rcvd: 68

$ dig ns free.fr

# Connatre les serveurs DNS de FREE :)

; <<>> DiG 9.6.1-P2 <<>> ns free.fr ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 56045 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;free.fr. IN NS ;; ANSWER SECTION: free.fr. 70500 IN NS freens2-g20.free.fr. free.fr. 70500 IN NS freens1-g20.free.fr. ;; Query time: 19 msec

366

Chapitre 12. SR005 - Administrer un serveur DNS


;; SERVER: 10.0.1.1#53(10.0.1.1) ;; WHEN: Fri Jan 22 21:56:09 2010 ;; MSG SIZE rcvd: 77

$ dig $ dig ns .

# quivalent

; <<>> DiG 9.6.1-P2 <<>> ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 59510 ;; flags: qr rd ra; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;. IN NS ;; ANSWER SECTION: . 49319 IN NS I.ROOT-SERVERS.NET. . 49319 IN NS C.ROOT-SERVERS.NET. . 49319 IN NS A.ROOT-SERVERS.NET. . 49319 IN NS K.ROOT-SERVERS.NET. . 49319 IN NS E.ROOT-SERVERS.NET. . 49319 IN NS G.ROOT-SERVERS.NET. . 49319 IN NS D.ROOT-SERVERS.NET. . 49319 IN NS M.ROOT-SERVERS.NET. . 49319 IN NS B.ROOT-SERVERS.NET. . 49319 IN NS F.ROOT-SERVERS.NET. . 49319 IN NS L.ROOT-SERVERS.NET. . 49319 IN NS H.ROOT-SERVERS.NET. . 49319 IN NS J.ROOT-SERVERS.NET. ;; ;; ;; ;; Query time: 29 msec SERVER: 10.0.1.1#53(10.0.1.1) WHEN: Fri Jan 22 22:00:54 2010 MSG SIZE rcvd: 228

12.3.3. dig : Resolution inverse


Examinons les requtes suivantes :
$ dig -x 195.115.89.182 ; <<>> DiG 9.3.1 <<>> -x 195.115.89.182 ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 20866 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1 ;; QUESTION SECTION:

367

Chapitre 12. SR005 - Administrer un serveur DNS


;182.89.115.195.in-addr.arpa. ;; ANSWER SECTION: 182.89.115.195.in-addr.arpa. 86390 IN ;; AUTHORITY SECTION: 89.115.195.in-addr.arpa. 86390 ;; ADDITIONAL SECTION: ns1.irisnet.fr. 86390 ;; Query time: 10 msec ;; SERVER: 172.16.0.42#53(172.16.0.42) ;; WHEN: Mon Aug 22 10:36:13 2005 ;; MSG SIZE rcvd: 119 IN PTR PTR pegase.aelif.org. IN IN NS ns1.irisnet.fr. A 195.115.88.35

$ dig ptr 195.115.89.182 ; <<>> DiG 9.3.1 <<>> ptr 195.115.89.182 ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 29005 ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0 ;; QUESTION SECTION: ;195.115.89.182. IN PTR ;; AUTHORITY SECTION: . 10787 IN SOA A.ROOT-SERVERS.NET. \ NSTLD.VERISIGN-GRS.COM. 2005082801 1800 900 604800 86400 ;; Query time: 13 msec ;; SERVER: 172.16.0.42#53(172.16.0.42) ;; WHEN: Mon Aug 22 10:36:11 2005 ;; MSG SIZE rcvd: 107

1. Pourquoi est-ce que les rsultats sont diffrents ? Dans le 1er cas, dig execute la recherche automatiquement partir dun nom comme 182.89.115.195.in-addr.arpa et affecte requte le type PTR et la classe IN. Dans le 2me cas, dig lance une requte de type PTR partir de 195.115.89.182, ce qui est incorrect :)

2. Comment corriger la deuxime requte ? Dans le deuxime cas, pour obtenir le mme resultat que le 1er cas, il faudrait remplacer par :
$ dig 182.89.115.195.in-addr.arpa ptr in

Autres examples :
$ dig -x 212.27.48.10 $ dig -x 212.27.48.10 ptr in

# quivalent

368

Chapitre 12. SR005 - Administrer un serveur DNS

; <<>> -x 212.27.48.10 ptr ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 26199 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;10.48.27.212.in-addr.arpa. IN PTR ;; ANSWER SECTION: 10.48.27.212.in-addr.arpa. 86400 IN PTR www.free.fr. ;; ;; ;; ;; Query time: 67 msec SERVER: 10.0.1.1#53(10.0.1.1) WHEN: Fri Jan 22 22:08:19 2010 MSG SIZE rcvd: 68

12.3.4. Manipulation des ags


Expliquons le rsultat suivant :

# 172.16.0.42 nest pas accessible donc jutilise en lieu et place le server DNS de Google : $ dig @8.8.8.8 +norecurse +short gluck.debian.org # Ligne 1 $ dig @8.8.8.8 +short gluck.debian.org # Ligne 2 150.203.164.38 $ dig @8.8.8.8 +norecurse +short gluck.debian.org # Ligne 3 150.203.164.38

Ligne 1 : Recherche auprs du serveur DNS 8.8.8.8 (Google ici) les information de type A sur le domaine gluck.debian.org sans recursion et afche le resultat selon le format court. ==> Aucun resultat Ligne 2 : Fait de mme mais la recursion est active par dfaut ==> Resulat OK Ligne 3 : Idem Ligne 1 ==> Resultat OK !!! Loption +norecurse de la requte dig permet dviter que le serveur DNS 8.8.8.8 (Google ici) de lancer une requte recursive vers un autre serveur DNS pour laddresse gluck.debian.org au cas ou il ne pourrait rpondre directement la question. Cest pourquoi la ligne 1 on obtient aucune rponse car le serveur DNS nest pas directement responsable de ce domaine.

369

Chapitre 12. SR005 - Administrer un serveur DNS En autorisant la recursivit la ligne 2, le serveur DNS 8.8.8.8 transfert la requte un autre serveur DNS qui lui renvoie la rponse quil met en cache avant de retourner lui mme le rsultat de la requte. En ligne 3, le resulat retourn provient de la cache du serveur DNS 8.8.8.8 car il nest pas autoris transfrer recursivemet la requte un autre serveur. Lorsque le TTL de mise en cache pour cet enregistrement sera atteint, il disparatra de la cache et on obtiendra de nouveau aucun resultat avec la ligne 3. Lors de lexecution de la ligne 1, les informations sur le domaine ntait pas encore dans la cache du serveur DNS 8.8.8.8. Autres examples...
### Option +trace $ dig @8.8.8.8 gluck.debian.org +trace ; <<>> DiG 9.5.1-P3 <<>> @8.8.8.8 gluck.debian.org +trace ; (1 server found) ;; global options: printcmd . 70655 IN NS E.ROOT-SERVERS.NET. . 70655 IN NS H.ROOT-SERVERS.NET. . 70655 IN NS K.ROOT-SERVERS.NET. . 70655 IN NS B.ROOT-SERVERS.NET. . 70655 IN NS C.ROOT-SERVERS.NET. . 70655 IN NS J.ROOT-SERVERS.NET. . 70655 IN NS F.ROOT-SERVERS.NET. . 70655 IN NS D.ROOT-SERVERS.NET. . 70655 IN NS A.ROOT-SERVERS.NET. . 70655 IN NS L.ROOT-SERVERS.NET. . 70655 IN NS M.ROOT-SERVERS.NET. . 70655 IN NS I.ROOT-SERVERS.NET. . 70655 IN NS G.ROOT-SERVERS.NET. ;; Received 228 bytes from 8.8.8.8#53(8.8.8.8) in 33 ms org. 172800 IN NS D0.ORG.AFILIAS-NST.org. org. 172800 IN NS B2.ORG.AFILIAS-NST.org. org. 172800 IN NS B0.ORG.AFILIAS-NST.org. org. 172800 IN NS A2.ORG.AFILIAS-NST.INFO. org. 172800 IN NS C0.ORG.AFILIAS-NST.INFO. org. 172800 IN NS A0.ORG.AFILIAS-NST.INFO. ;; Received 436 bytes from 192.203.230.10#53(E.ROOT-SERVERS.NET) in 209 ms debian.org. 86400 IN debian.org. 86400 IN debian.org. 86400 IN ;; Received 136 bytes NS ns1.debian.org. NS ns2.debian.org. NS ns3.debian.org. from 199.249.120.1#53(B2.ORG.AFILIAS-NST.org) in 42 ms

gluck.debian.org. 1800 IN A 150.203.164.38 debian.org. 28800 IN NS ns3.debian.org. debian.org. 28800 IN NS ns4.debian.com.

370

Chapitre 12. SR005 - Administrer un serveur DNS


debian.org. 28800 IN NS ns1.debian.org. debian.org. 28800 IN NS ns2.debian.org. ;; Received 252 bytes from 140.211.166.43#53(ns2.debian.org) in 213 ms ## Depuis ma machine, sans prciser le DNS de Google la commande ## ci-dessous ne fonctionne pas alors que pour les autres tudiants ## a fonctionne :) $ dig @8.8.8.8 eof.eu.org +trace ; <<>> DiG 9.6.1-P2 <<>> @8.8.8.8 eof.eu.org +trace ; (1 server found) ;; global options: +cmd . 10759 IN NS E.ROOT-SERVERS.NET. . 10759 IN NS H.ROOT-SERVERS.NET. . 10759 IN NS K.ROOT-SERVERS.NET. . 10759 IN NS B.ROOT-SERVERS.NET. . 10759 IN NS C.ROOT-SERVERS.NET. . 10759 IN NS J.ROOT-SERVERS.NET. . 10759 IN NS F.ROOT-SERVERS.NET. . 10759 IN NS D.ROOT-SERVERS.NET. . 10759 IN NS A.ROOT-SERVERS.NET. . 10759 IN NS L.ROOT-SERVERS.NET. . 10759 IN NS M.ROOT-SERVERS.NET. . 10759 IN NS I.ROOT-SERVERS.NET. . 10759 IN NS G.ROOT-SERVERS.NET. ;; Received 228 bytes from 8.8.8.8#53(8.8.8.8) in 45 ms org. 172800 IN NS B0.ORG.AFILIAS-NST.org. org. 172800 IN NS A0.ORG.AFILIAS-NST.INFO. org. 172800 IN NS B2.ORG.AFILIAS-NST.org. org. 172800 IN NS C0.ORG.AFILIAS-NST.INFO. org. 172800 IN NS D0.ORG.AFILIAS-NST.org. org. 172800 IN NS A2.ORG.AFILIAS-NST.INFO. ;; Received 430 bytes from 198.41.0.4#53(A.ROOT-SERVERS.NET) in 102 ms eu.org. 86400 eu.org. 86400 eu.org. 86400 eu.org. 86400 eu.org. 86400 eu.org. 86400 ;; Received 250 IN NS IN NS IN NS IN NS IN NS IN NS bytes dns3.gandi.net. ns1.pasteur.fr. ns-v6.eu.org. auth1.dns.elm.net. ns-slave.free.org. ns0.pasteur.fr. from 199.19.53.1#53(C0.ORG.AFILIAS-NST.INFO) in 21 ms

eof.eu.org. 259200 IN NS NS.eof.eu.org. eof.eu.org. 259200 IN NS NS2.eof.eu.org. ;; Received 95 bytes from 88.191.249.137#53(ns-slave.free.org) in 35 ms eof.eu.org. 86400 IN eof.eu.org. 86400 IN eof.eu.org. 86400 IN ;; Received 111 bytes A 86.64.63.108 NS ns2.eof.eu.org. NS ns.eof.eu.org. from 86.64.63.109#53(NS2.eof.eu.org) in 180 ms

371

Chapitre 12. SR005 - Administrer un serveur DNS


### +noall +answer ~$ dig yahoo.com NS +noall +answer

# Rponse courte - Methode 1

; <<>> DiG 9.5.1-P3 <<>> yahoo.com NS +noall +answer ;; global options: printcmd yahoo.com. 146045 IN NS ns4.yahoo.com. yahoo.com. 146045 IN NS ns1.yahoo.com. yahoo.com. 146045 IN NS ns3.yahoo.com. yahoo.com. 146045 IN NS ns6.yahoo.com. yahoo.com. 146045 IN NS ns5.yahoo.com. yahoo.com. 146045 IN NS ns2.yahoo.com. yahoo.com. 146045 IN NS ns8.yahoo.com.

### +short $ dig www.isc.org AAAA +short 2001:4f8:0:2::d $ dig -x 204.152.184.167 +short mx-1.isc.org.

# Rponse courte - Methode 2 # Adresse IPv6

### +nocmd +multiline $ dig +nocmd eof.eu.org any +multiline +noall +answer ; <<>> DiG 9.5.1-P3 <<>> eof.eu.org any +nocmd +multiline +noall +answer ;; global options: printcmd eof.eu.org. 86400 IN SOA ns.eof.eu.org. olivier.ricou.eu.org. ( 2009051801 ; serial 21600 ; refresh (6 hours) 3600 ; retry (1 hour) 3600000 ; expire (5 weeks 6 days 16 hours) 86400 ; minimum (1 day) ) eof.eu.org. 86400 IN NS ns.eof.eu.org. eof.eu.org. 86400 IN NS ns2.eof.eu.org. eof.eu.org. 86400 IN A 86.64.63.108 eof.eu.org. 86400 IN MX 5 mail.eof.eu.org.

12.3.5. Section additionnelle


$ dig mx eof.eu.org ; <<>> DiG 9.3.1 <<>> mx eof.eu.org ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 25048 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 1 ;; QUESTION SECTION: ;eof.eu.org. IN MX

372

Chapitre 12. SR005 - Administrer un serveur DNS


;; ANSWER SECTION: eof.eu.org. 259200 ;; AUTHORITY SECTION: eof.eu.org. 255046 eof.eu.org. 255046 ;; ADDITIONAL SECTION: mail.eof.eu.org. 259200 ;; Query time: 27 msec ;; SERVER: 172.16.0.42#53(172.16.0.42) ;; WHEN: Mon Aug 22 11:12:05 2005 ;; MSG SIZE rcvd: 100

IN IN IN IN

MX NS NS A

5 mail.eof.eu.org. ns.eof.eu.org. ns2.eof.eu.org. 195.115.88.38

1. Expliquer le but de cette section additionnelle. La section additionnelle afche la liste des adresses IP des serveurs DNS list dans la section dautorit. Elle peut-tre ajouter/enlev via loption +[no]additional.

12.4. DNS : Travaux pratiques 2


Source(s):

OF: SR005-ch04-tp2.pdf (docs/eof/sr005-ch04-tp2.pdf)

Vous tes ladministrateur principal dune trs grosse entreprise internationale, chaque succursale possde un administrateur expriment en charge de toutes les machines clientes et des divers services de chaque agence(serveur Web, etc.). Toutefois, le traitement des courriels entrants doit obligatoirement passer par la maison-mre

12.4.1. Plan de dlgation du rseau


Imaginons que le nom de domaine de la maison mre soit entreprise.int et que lensemble du rseau dentreprise se trouve sur le rseau 150.150.0.0/255.255.0.0 . Le traitement des courriels passerait par la maison mre donc par mail.entreprise.int. Chaque succursale sera donc responsable dun sous-domaine qui leur serait associ lintrieur du domaine de lentreprise : agence1.entreprise.int, agence2.entreprise.int, etc...

373

Chapitre 12. SR005 - Administrer un serveur DNS Chaque service (web, ftp, etc...) serait accessible via web.agenceX.entreprise.int, ftp.agenceX.entreprise.int, etc... o X est le numro identiant lagence :) Pour simplier, je considrais que tous les htes de lentreprises sont sur le mme rseau (masque 255.255.0.0), quil ny a pas de sous-rseaux ni de DMZ. En considrant que lon aurait pas plus de 254 sucursales et pas plus de 254 htes pour chacune dentre elles, ladresse IP 150.150.25.20 correspondrait donc lhte 20 sur le rseau de la 25eme agence (150.150.25.0). Le serveur DNS de lentreprise ns0.entreprise.int serait autoritaire sur les sous-domaines dagence mais dlguerait aux serveurs DNS de chacune des agences ns0.agenceX.entreprise.int lautorit sur leur propre domaine correspondant lagence en question et donc aux htes et services associs. Les htes et services de chacune des agences seraient enregistr et maintenu par les administrateurs dagence sur leur domaine local, tandis que chaque domaine dagence (sous-domaine de lentreprise) serait enregistr et maintenu par la maison mre sur le serveur DNS principal. Figure 12-2. DNS-TP2: Architecture de lentreprise

374

Chapitre 12. SR005 - Administrer un serveur DNS

12.4.2. Procdure et droulement pour arriver au rsultat


Testons linfrastructure DNS en utilisant le laboratoire Netkit cre lors de ltude de cas vu dans la section rseaux TCP/IP. Considrons Mercure comme le serveur DNS de la maison mre :
## Ajoutons sur Mercure dans /etc/bind/named.conf.local zone "entreprise.int" { type master; file "/etc/bind/db.entreprise.int; }

## Ajoutons sur Mercure dans /etc/bind/db.entreprise.int $TTL 3h @ IN SOA 2010012500 8H 2H 1W 1D )

ns0.entreprise.int. hostmaster.entreprise.int. (

;agence1

NS ns0.entreprise.int. NS ns0.entreprise.int.

;agence1 NS 150.150.1.3

; ; ; ;

Ncssaire ultrieurement pour que la Dlgation fonctionne !!! Incorrect !!! Pas daddresse IP dans un enregistrement de type NS

MX 10 mail.entreprise.int. ns0 mail hote1 hote2 IN A 150.150.0.3 IN A 150.150.0.2 IN A 150.150.0.30 IN A 150.150.0.31

## Testons la configuration $ named-checkconf /etc/bind/named.conf /etc/bind/named.conf.local:15: unexpected end of input ## ==> Il manque une " (double quote) la fin ## de la ligne file dans ce fichier ## Aprs correction, on teste nouveau /etc/bind/named.conf:41: missing ; before end of file ## ==> ; est manquant la fin du fichier /etc/bind/named.conf.local

375

Chapitre 12. SR005 - Administrer un serveur DNS


## On teste la zone $ named-checkzone entreprise.int /etc/bind/db.entreprise.int ## OK on peut dmarrer le service bind de la maison mre $ /etc/init.d/bind9 start

## OK on peut tester maintenant... nslookup > server 127.0.0.1 Default server: 127.0.0.1 Address: 127.0.0.1#53 ## Puis on linterroge : > mail.entreprise.int Server: 127.0.0.1 Address: 127.0.0.1#53 Name: mail.entreprise.int Address: 150.150.0.2 > hote1.entreprise.int Server: 127.0.0.1 Address: 127.0.0.1#53 Name: mail.entreprise.int Address: 150.150.0.2 > exit $ dig hote1.entreprise.int ; <<>> DiG 9.5.0-P2 <<>> hote1.entreprise.int ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21063 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1 ;; QUESTION SECTION: ;hote1.entreprise.int.

IN A

;; ANSWER SECTION: hote1.entreprise.int. 10800 IN A 150.150.0.30 ;; AUTHORITY SECTION: entreprise.int. 10800 IN NS ns0.entreprise.int. ;; ADDITIONAL SECTION: ns0.entreprise.int. 10800 IN A 150.150.0.3 ... ## Depuis Uranus (une autre machine sur le mme rseau) jobtiens le mme resultat.

376

Chapitre 12. SR005 - Administrer un serveur DNS


## En effet, sur Uranus, dans le fichier /etc/resolv.conf, le champs nameserver pointe vers ## Mercure (serveur DNS)

Considrons maintenant le serveur DNS de notre 1ere succursale agence1.entreprise.int comme tant Uranus (sur le mme rseau que Mercure) dans mon lab Netkit :
## Ajoutons sur Uranus (Agence1) dans /etc/bind/named.conf.local

zone "agence1.entreprise.int" { # Zone autoritaire grr par ladministrateur type master; # de la succursale file "/etc/bind/db.agence1.entreprise.int"; }; zone "entreprise.int" { type forward; forwarders {150.150.0.3; 192.3.2.4;}; };

# Zone autoritaire grr par ladministrateur # de la maison mre # Transfert de requte vers la maison mre po # resolution de requte sur dautres zone de ## La deuxieme addresse IP existe uniquement ## pour rendre le test fonctionnel dans mon l

## Dans la ralit, la dernire zone ci-dessus est optionel dans la mesure o ## le serveur DNS de la maison mre va tre configur en tant que forwarders ## dans les options du serveur DNS de lagence (voir ci-aprs)

## Ajoutons sur Uranus (Agence 1) dans /etc/bind/db.entreprise.int $TTL 3h @ IN SOA 2010012500 8H 2H 1W 1D )

ns0.agence1.entreprise.int. hostmaster.agence1.entreprise.int. (

NS ns0.agence1.entreprise.int. ns0 IN A 150.150.1.3

srvweb IN A 150.150.1.4 srvftp IN A 150.150.1.5 hote1 IN A 150.150.1.40 hote2 IN A 150.150.1.41 www ftp mail CNAME srvweb // set www.agence1.entreprise.int CNAME srvftp // set ftp.agence1.entreprise.int CNAME mail.entreprise.int. // set mail.agence1.entreprise.int // comme alias du serveur principal

377

Chapitre 12. SR005 - Administrer un serveur DNS

## Testons la configuration $ named-checkconf /etc/bind/named.conf $ named-checkzone agence1.entreprise.int /etc/bind/db.agence1.entreprise.int ## OK on peut dmarrer le service bind de lagence1 $ /etc/init.d/bind9 start

Aprs quelques testes sur le serveur DNS de lagence1, on voit quil fonctionne correctement Maintenant assurons nous que lorsque le serveur de la maison mre sera interrog il sera capable de rsoudre les questions sur les sous-domaines de lentreprise (dlgu chacun des serveurs DNS des sous-domaines) :
## Indiquons dans le serveur DNS de la maison mre (Mercure) ## que le serveur DNS Uranus (Agence1) est en charge du sous domaine agence1.entreprise.int ## Ajoutons dans /etc/bind/db.entreprise.int agence1 IN NS ns0.entreprise.int. ; Serveur DNS en charge de la zone ; de la 1ere succursale (agence1) ; Rcursion sur lui-mme

Note : Dans la zone entreprise.int je suis oblig davoir lenregistrement agence1 NS ns0.entreprise.int pour que la Dlgation fonctionne. Cet enregistrement doit exister en plus de la zone forward agence1.entreprise.int car la zone entreprise.int est parcouru en premier puis avec lenregistrement on redirige vers la zone dlgue agence1.entreprise.int

## ## ## ##

!!!Attention!!! ceci ne permet pas au serveur de la maison mre de resoudre les requtes sur le sous-domaine dagence Il faut donc aussi ajouter une zone forward dans /etc/bind/named.conf.local

zone "agence1.entreprise.int" { type forward; forwarders {150.150.1.3;192.3.2.3;};

## IP du serveur DNS de ma succursale 1 ## La deuxieme addresse IP existe uniquement ## pour rendre le test fonctionnel dans mon lab Ne

};

## On fera de mme pour chacune des succursales (agenceX) ## On prendra soin de remplacer X par le numro de lagence correspondant ! zone "agenceX.entreprise.int" {

378

Chapitre 12. SR005 - Administrer un serveur DNS


type forward; forwarders {150.150.X.3;}; };

## IP du serveur DNS de ma succursale X

## Chaque agence tant ensuite configure de la mme manire que lagence1 dans la ralit :

## Testons le changement de configuration $ named-checkconf /etc/bind/named.conf $ named-checkzone agence1.entreprise.int /etc/bind/db.agenceX.entreprise.int ## OK on recharge la configuration pour le service bind ## pour quil prenne en compte les changements $ /etc/init.d/bind9 reload

Aprs quelques tests, on voit que cela fonctionne mais ni le serveur de la maison mre ni le serveur DNS de la succursale ne peuvent rsoudre des domaines en dehors de celui de lentreprise ! Cest normal car dans ltat actuel, aucun des deux serveurs nont t congur de faon pouvoir transfrer vers un autres serveur les requtes sur des domaines dont ils nauraient pas autorit. Pour cela, nous allons paramtrer les forwarders dans les options de chacun des serveurs DNS :
## Sur DNS de la succursale Agence1 (Uranus) ## dans le fichier /etc/bind/named.conf.options ## on ajoute : options { ... forwarders { 150.150.0.3; 193.3.2.4; }; ... };

## IP du serveur DNS de la maison mre ## La deuxieme addresse IP existe uniquement ## pour rendre le test fonctionnel dans mon lab Netkit :)

## Sur DNS de la maison mre (Mercure) ## dans le fichier /etc/bind/named.conf.options ## on ajoute : options { ... forwarders { 8.8.8.8; 193.3.2.254; }; ... };

## IP des serveurs DNS du FAI de lentreprise ## La deuxieme addresse IP existe uniquement ## pour rendre le test fonctionnel dans mon lab Netkit :)

379

Chapitre 12. SR005 - Administrer un serveur DNS


## Puis sur chacun des serveurs $ named-checkconf /etc/bind/named.conf $ /etc/init.d/bind9 reload

# Test nouvelle configuration # Applique les changements si OK

Note : Sur chacun des serveurs DNS, je me suis assur que le chier /etc/resolve.conf est vide

Avertissement
Pour rendre le test totalement fonctionnel dans mon lab Netkit, le routeur rGW (IP 193.3.2.254) est considr comme un DNS du FAI. En effet, cause de infrastructure TAP (adresse) de Netkit qui implique une translation NAT, il semble que seul le routeur ait directement la possiblit de faire des ping sur des adresses externe ou de recevoir les rponses aux requtes DNS mises.

Pour que cela fonctionnne, il faut donc activer le service DNS sur le routeur est congurer des forwarders :
## Sur routeur rGW ## dans le fichier /etc/bind/named.conf.options ## on ajoute : options { ... forwarders { 8.8.8.8; 8.8.8.4; }; ... };

## IP des serveurs DNS de Google ## qui toutes les requte reu seront transmises

## Puis toujours sur le routeur rGW $ named-checkconf /etc/bind/named.conf $ /etc/init.d/bind9 start

# Test nouvelle configuration # Dmarre le service si OK

Note : Sur le routeur rGW, je me suis assur que le chier /etc/resolve.conf est vide Mme en ajoutant servername 8.8.8.8 dans ce chier, la rsolution de noms de fonctionne pas sans que le service bind soit convenablement congur sur le routeur et dmarr.

380

Chapitre 12. SR005 - Administrer un serveur DNS


Note : Optionellement on pourrait aussi indiquer que le DNS de la maison mre (Mercure) est en charge de la zone entreprise.int sur le routeur :
## Sur le routeur rGW dans /etc/bind/named.conf.local zone "entreprise.int" { type forward; forwarders {150.150.0.3; 192.3.2.4;}; }; # # # # # #

Zone autoritaire grr par ladministrateur de la maison mre Transfert de requte vers la maison mre pour la resolution de requte sur dautres zone de lentr La deuxieme addresse IP existe uniquement pour rendre le test fonctionnel dans mon lab Netk

Ceci ne peut pas tre test et ne sert pas vraiment grand chose, dans le cadre de mes test... cest juste pour la thorie... et pour madapter la structure de mon lab Netkit ;-)

Une fois que cela fonctionne, de la mme manire, on peut modier la conguration sur les deux serveurs pour rajouter une zone de resolution inverse :
0.150.150.in-addr.arpa (# pour la maison mre) X.150.150.in-addr.arpa (# pour les succursales) 1.150.150.in-addr.arpa (# soit pour lagence 1)

12.4.3. Fichiers de conguration (named, options, db, etc) et log de tests


Script utilis pour les tests de dernire colonne : test.sh (docs/sr005-ch04-tp2-testdns-sh.txt) Tableau 12-1. Fichiers de conguration et rsultat de tests Entreprise (IP) Zone dAutorit Nom dhte Netkit VM (IP) Conf. Options Conf. Local

381

Chapitre 12. SR005 - Administrer un serveur DNS Entreprise (IP) Zone dAutorit Nom dhte ns0 Netkit VM (IP) Mercure (192.3.2.4) Conf. Options named.conf.options (docs/sr005-ch04tp2-mercure-nameconf-options.txt) Conf. Local

DNS Maison Mre entreprise.int (150.150.0.3)

named.conf.local (docs/sr005ch04-tp2mercure-nameconf-local.txt)

DNS Succursale X (150.150.X.3)

agenceX.entreprise.int ns0

named.conf.options (docs/sr005ch04-tp2x-namedconfoptions.txt)

named.conf.local (docs/sr005ch04-tp2x-namedconflocal.txt)

DNS Succursale 1 (150.150.1.3)

agence1.entreprise.int ns0

Uranus (192.3.2.4)

named.conf.options (docs/sr005ch04-tp2uranusnamedconfoptions.txt)

named.conf.local (docs/sr005ch04-tp2uranusnamedconflocal.txt)

382

Chapitre 12. SR005 - Administrer un serveur DNS Entreprise (IP) Hote Succursale 1 (150.150.1.40) Zone dAutorit Nom dhte Netkit VM (IP) Conf. Options Conf. Local -

hote1.agence1.entreprise.int -

rGW

named.conf.options (docs/sr005ch04-tp2rGWnamedconfoptions.txt)

named.conf.local (docs/sr005ch04-tp2rGWnamedconflocal.txt)

12.4.4. Server Secondaire


Dans mon lab Netkit, je congure rGW en tant que server DNS secondaire de Mercure (maison mre), uniquement pour la zone entreprise.int et 150.150.0 :
# Ajouter sur rGW dans /etc/bind/named.conf.local $ mcedit /etc/bind/named.conf.local zone "entreprise.int" { type slave; file "/var/cache/bind/db.entreprise.int"; masters { 150.150.0.3; 192.3.2.4; }; }; zone "0.150.150.in-addr.arpa" { type slave; file "/var/cache/bind/db.150.150.0"; masters { 150.150.0.3; 192.3.2.4; }; };

Note : En faisant cela, il est inutile dindiquer les chiers zones (chier db.) sur le serveur DNS secondaire. Les chiers proviendront dune synchronisation avec le DNS primaire.

383

Chapitre 12. SR005 - Administrer un serveur DNS

Avertissement
Lutilisateur faisant fonctionner le serveur DNS doit avoir les droits dcriture sur les chiers zones renseigns dans la conguration ci-dessus.

Si AppArmor est install, il empche de toute manire bind dcrire dans le dossier /etc/bind en conguration type slave. Dans ce cas il faut utiliser le rpertoire /var/cache/bind :
... file "/var/cache/bind/db.entreprise.int"; ... file "/var/cache/bind/db.150.150.0"; ...

# Tester configuration $ named-checkconf /etc/bind/named.conf.local # OK - Chargeons le changement de configuration $ rndc reload

# Test de resolution sur rGW $ dig @127.0.0.1 mail.entreprise.int +short 150.150.0.2 $ dig @127.0.0.1 -x 150.150.0.40 +short hote1.entreprise.int # OK :)

12.5. Scuriser un serveur DNS


Source(s):

Web: Scuriser un serveur de nom (http://www.cgsecurity.org/Articles/dns_bind.html) Securing an Internet Name Server (http://www.cert.org/archive/pdf/dns.pdf) Transaction Signatures (TSIG) Conguration (http://www.cyberciti.biz/faq/unix-linux-bind-named-conguring-tsig) TSIG (Wikipedia) (http://en.wikipedia.org/wiki/TSIG) Domain Name System Security Extensions (DNSSEC) (http://en.wikipedia.org/wiki/DNSSEC)

384

Chapitre 12. SR005 - Administrer un serveur DNS Secure BIND Template (http://www.cymru.com/Documents/secure-bind-template.html) : patrons de chiers de conguration dun service DNS.

12.5.1. Tout interdire par dfaut ?


Prenons le parti dtre parano et interdisons tout par dfaut :
... options { also-notify { none; }; allow-transfer { none; }; allow-query { none; }; }; ...

also-notifydoit contenir les DNS secondaires non ofciels, cela permet de les prvenir immdiatement si une mise jour dune zone est effectue. allow-transfer indique quelles sont les machines autorises effectuer un transfert de zone, cest dire rcuprer toutes les informations dune zone, les seuls DNS secondaires devraient tre autoriss. allow-query indique qui peut interroger le serveur pour une zone donne.

12.5.2. Access Control Lists (ACL)


Les Access Control Lists (ACL) permettent de dnir des ensembles de machines et/ou de rseaux. Quatre ACL sont pr-dnies : any (tout le monde), none (personne), localhost (le serveur seulement) et localnets (ensemble de rseaux dnis par des addresses IP et masques rseau des machines). Une ACL se dnit de la faon suivante :
... acl name { address_match_list }; ... # Par exemple, je peux dfinir lacl mon_parc_info # contenant les IPs des machines de mon rseau.

385

Chapitre 12. SR005 - Administrer un serveur DNS


acl dns_sec_non_officiel { 192.3.4.30; 192.3.4.31; }

Utilisation des ACL :


# Pour obtenir la liste des DNS primaires, il suffit dexcuter la commande $ dig @ns.internic.net . ns > named.ca # La zone pour les requtes par dfaut # est la zone "." dfinie ci-dessous : zone "." { type hint; file "named.ca"; allow-query { mon_parc_info; }; };

# # # #

Dans certains cas darchitecture rseau ou pour des raisons de scurit, on peut vouloir forcer un DNS interne utiliser un serveur DNS bien spcifique pour rpondre aux requtes DNS. Dans ce cas-l, on va lui dfinir cette contrainte dans les options :

options { .... forward only; forwarders { mes_dns_en_sortie; }; };

# Une zone de rsolution inverse, # adresse IP vers nom de machine, # pour ladresse de loopback se dfinit ainsi zone "0.0.127.in-addr.arpa" { type master; allow-query { mon_parc_info; }; file "named.local"; }; # # # # Un serveur primaire doit tre interroger par tous mais nautoriser que les dns secondaires effectuer des transferts de zone. Le transfert de zone est comme son nom lindique le moyen par lequel un DNS rcupre la totalit des paramtres dune zone.

zone "domaine1.org" { type master;

386

Chapitre 12. SR005 - Administrer un serveur DNS


file "domain1/domaine1.org"; also_notify { dns_sec_non_officiel; }; allow-transfer { dns_sec_officiel; dns_sec_non_officiel; }; allow-query { any; }; } # # # # # # # # # # Les DNS indiqus dans le paramtre also_notify sont avertis ds quune modification est intervenue dans une zone. Cest utilis concrtement pour avertir les DNS secondaires non officiels, cest dire ceux qui ne sont pas explicitement dclar comme NS dans le fichier de dfinissant la zone. Certains services proposs par les ISP ne sont accessibles que par lutilisation de leur DNS. Ainsi, pour accder aux news ou lire son mail par linterface webmail de Wanadoo, il faut utiliser le DNS spcifi sur la feuille indiquant le login/password ou donn par le serveur DHCP.

zone "wanadoo.fr" { type forward; forwarders { 193.252.19.3; }; }; NB: Wanadoo filtre les IP accdant aux DNS, serveurs web,... rservs aux abonns.

12.5.3. Transfert scuris - Architecture utilisant les signatures de transfert de zones (TSIG)
12.5.3.1. Description
Transaction SIGnature (TSIG) est un protocole rseau dnit dans la RFC 2845 (http://www.ietf.org/rfc/rfc2845.txt). TSIG est un mcanisme utilis pour scuriser les messages DNS et pour fournir une communication scuris serveur--serveur, habituellement entre un primaire (master) et secondaire (slave) mais cela peut tre tendu au mise jour dynamique. TSIG utilise les "secrets" partags et une fonction hash sens-unique pour authentier les messages DNS en founissant un moyen scuris par cryptographie dindentier chaque extrmit dune connection comme tant autoris faire ou rpondre des mise jour DNS... TSIG est trs lger pour les "resolveur" et le service DNS.

387

Chapitre 12. SR005 - Administrer un serveur DNS TSIG peut protger les transactions suivantes entre deux serveurs DNS :
* * * * Transfert de Zone Notification Mise jour Dynamique Message de requte rcursive

TSIG est disponible dans BIND v8.2 et suprieur.

12.5.3.2. Comment TSIG fonctionne ?


1. Chaque serveur de nom ajoute un enregistrement TSIG dans la section de donnes dune requte ou dun message DNS lors dune communication serveur--serveur. 2. Lenregistrement TSIG signe le message DNS, prouvant que lmetteur du message a un clef cryptographique partage avec le destinataire et que le message na pas t modi aprs son dpart de lmetteur. 3. TSIG utilise un fonction hash sens-unique pour prouver lauthentication et lintgrit du message.

12.5.3.3. Conguration TSIG


Source(s):

Web: Transaction Signatures (TSIG) Conguration (http://www.cyberciti.biz/faq/unix-linux-bind-named-conguring-tsig) DNS dynamique scuris (http://ferry.eof.eu.org/lesjournaux/ll/public_html/ch09s03.html#tp2-secu-dns)

Rappel sur mon environment :


* Serveur DNS Primaire : ns0.entreprise.int - 150.150.0.3 (mercure/192.3.2.4 dans mon lab Netkit) * Serveur DNS Secondaire : ns1.entreprise.int - 150.150.0.10 (rGW/192.3.2.254 dans mon lab Netkit)

dnssec-keygen permet de gnrer des clefs pour DNSSEC (Secure DNS) comme dnit dans la RFC 2535 (http://www.ietf.org/rfc/rfc2535.txt) et RFC 4034 (http://www.ietf.org/rfc/rfc4034.txt). Cet

388

Chapitre 12. SR005 - Administrer un serveur DNS commande peut galement servir gnrer des clef utile une transaction sign (TSIG) comme dnit dans la RFC 2845 (http://www.ietf.org/rfc/rfc2845.txt).
# Options -a Spcifie lalgorithme dencryption (RSASHA1, DSA, DH, HMAC-MD5). -b Spcifie la taille de la clefs (nombre de bit). -n Specify le type de propritaire de la clef (a ZONE, a HOST, ENTITY, or USER) -k Pour gnrer une clef simple au lieu dune clef DNS (DNSKEY) $man dnssec-keygen # Pour plus dinfo...

Cration des clefs partages :


# Sur le serveur DNS Primaire execute $ cd /etc/bind/ $ dnssec-keygen -a DSA -b 1024 -n HOST -k tsig-key # Sans loption -k jobtiens # une erreur "invalid DNSKEY nametype HOST" # Comme cela prend trop de temps pour gnrer la clef dans Netkit, # Je vais rduire mes prententions en terme de scurit et crer # une clef plus simple $ dnssec-keygen -a HMAC-MD5 -b 128 -n HOST tsig-key Ktsig-key.+157+31040 #==> Cre deux fichiers contenant la clef gnre. $ ls -l ... Ktsig-key.+157+31040.key Ktsig-key.+157+31040.private ...

Note : dnssec-keygen a cre dexu chiers .key and .private. Les deux sont gnrs pour un algorithme dencryption symtrique (HMAC-MD5), les clef public et prive sont quivalentes.

# Visualiser la clef $cat Ktsig-key.+157+31040.key # Clef publique tsig-key. IN KEY 512 3 157 8f+/EU8cHBJlKrYrap3Rbw== $cat Ktsig-key.+157+31040.private Private-key-format: v1.2 Algorithm: 157 (HMAC_MD5) Key: 8f+/EU8cHBJlKrYrap3Rbw== Bits: AAA= # Clef prive # Champs spcifiques dalgorithme

# Clef DNS insrer dans une Zone

389

Chapitre 12. SR005 - Administrer un serveur DNS

Conguration du serveur primaire :


# Ouvrir le fichier de configuration $ mcedit /etc/bind/named.conf.local # Puis y ajouter include "/etc/bind/tsig.key"; # Enregistrer puis fermer le fichier. # Ensuite, crer/ouvrir le nouveau fichier $ mcedit /etc/bind/tsig.key # Puis diter comme suit : key clef_tsig { # Dfinition dune clef TSIG nomme clef_tsig algorithm hmac-md5; # dans la configuration DNS secret "8f+/EU8cHBJlKrYrap3Rbw=="; }; # IP Serveur DNS Secondaire server 192.3.2.254 { keys { clef_tsig; }; };

# # # # #

Rfrence la clef TSIG utiliser par le serveur DNS primare pour signer les requtes et transfert de zone vers le serveur distant (seconda Par cette dclaration, le serveur distant (secondaire de faire de mme lorsquil contactera le serveur prim

# Enregistrer puis fermer le fichier $ named-checkconf /etc/bind/named.conf $ rndc reload # Vrifier la nouvelle configuration # Si OK, charger la nouvelle configuration

Conguration du serveur secondaire :


# Ouvrir le fichier de configuration $ mcedit /etc/bind/named.conf.local # Puis y ajouter include "/etc/bind/tsig.key"; # Enregistrer puis fermer le fichier. # Ensuite, crer/ouvrir le nouveau fichier $ mcedit /etc/bind/tsig.key # Puis diter comme suit : key clef_tsig { # Dfinition dune clef TSIG nomme clef_tsig algorithm hmac-md5; # dans la configuration DNS secret "8f+/EU8cHBJlKrYrap3Rbw=="; };

390

Chapitre 12. SR005 - Administrer un serveur DNS

# IP Serveur DNS Primaire server 192.3.2.4 { keys { clef_tsig; }; };

# # # # #

Rfrence la clef TSIG utiliser par le serveur DNS secondaire pour signer les requte et transfert de zone vers le serveur primaire Par cette dclaration, le serveur primaire est pri de faire de mme lorsquil contactera le serveur seco

# Enregistrer puis fermer le fichier $ named-checkconf /etc/bind/named.conf $ rndc reload # Vrifier la nouvelle configuration # Si OK, charger la nouvelle configuration

Avertissement
Pour fonctionner, les horloges systmes des deux serveurs doivent tre synchronises. Au besoin, on peut les synchroniser par xntp.

La condentialit des cls est lie la scurit du serveur le plus vulnrable.

Restreindre le transfert de zone uniquement celle(s) signe(s) avec une clef spcique :
# On autorise les mises jour des enregistrements, en rajoutant la directive # suivante dans la configuration des zones du DNS : Syntaxe: allow-<type> { key <nom de cl> ;}; # O lon remplacera <type> par # query, transfert et/ou update.

# Sur le DNS primaire, modifier la configuration comme suit: $ mcedit /etc/bind/named.conf.local # Pour restreindre le transfert de la zone entreprise.int # celle signe avec la clef "tsig_cleg" zone "entreprise.int" { type master; file "/etc/bind/db.entreprise.int"; allow-transfer { key tsig_clef; }; }; # Verifier la nouvelle configuration puis recharger $ named-checkconf /etc/bind/named.conf $ rndc reload

391

Chapitre 12. SR005 - Administrer un serveur DNS

Vrication du fonctionnement :
# $ # $ # $ Vrifier le log du serveur DNS primaire ou les log systme : tail -f /var/log/messages OR tail -f /var/log/syslog OR grep entreprise.int/IN /var/log/syslog

.... Jan 26 13:43:11 ... named[9170]: client 192.3.2.254#52204: transfer of entreprise.int/IN: AXFR-style IXFR started: TSIG transfer .... Jan 26 13:43:11 ... named[9170]: client 192.3.2.254#52204: transfer of theos.in/IN: AXFR-style IXFR ended .... # Vrifier les messages similaire dans les log du server DNS secondaire ... Jan 26 19:18:33 ... named[17899]: client 192.3.2.254#32806: received notify for zone theos.in: TSIG transfer Jan 26 19:18:33 ... named[17899]: zone entreprise.int/IN: Transfer started. Jan 26 19:18:33 ... named[17899]: transfer of theos.in/IN from 192.3.2.254#53: connected using 192.3.2.254#45942 Jan 26 19:18:34 ... named[17899]: zone zone entreprise.int/IN: transferred serial 2008071011: TSIG transfer Jan 26 19:18:34 ... named[17899]: transfer of zone entreprise.int/IN from 192.3.2.254#53: end of transfer

12.5.4. Signature de requte et rponses DNS avec dig

ta ### Pour signer les requte DNS et leur rponses en utlisant les transactions de signature ( -k : specifier le fichier contenant la clef TSIG -y : specifier la clef TSIG directement sur la ligne de commande hmac est le type de TSIG, HMAC-MD5 par dfaut, name est le nom de la clef TSIG, et la clef est la clef elle-mme :) La clef est une chane de caractre de base-64 dnssec-keygen : permet de gnrer la clef

### Lorsquon utilise une authentification TSIG avec dig, le serveur DNS qui est questionnthe name server a besoin de savoir la clef TSIG et lalgorithm qui est utilis.

392

Chapitre 12. SR005 - Administrer un serveur DNS


Dans BIND il faut indiquer la clef et le serveur appropri dans named.conf

12.5.5. Diffuser une zone signe avec DNSSEC (2010)


Source(s):

Web: Basculement des serveurs DNS Racine ! (System Linux EU) (http://www.system-linux.eu/index.php?post/2010/01/26/Basculement-des-serveurs-DNS-Racine-!) Votre serveur DNS peut-il faire passer des paquets de toute taille ? (http://www.bortzmeyer.org/dns-size.html) Info: Site ofciel du projet de signature & calendrier de dploiement (http://www.root-dnssec.org) Lannonce du plan de signature de la racine (http://www.ripe.net/ripe/meetings/ripe59/presentations/uploads/presentations/Tuesday/Plenary%2014:00/AbleyDNSSEC_for_the_Root_Zone.mId7.pdf) Instructions dun serveur racine (http://labs.ripe.net/content/preparing-k-root-signed-root-zone) Test: Outil produit par lOARC (DNS Operations, Analysis and Research Center) (https://www.dns-oarc.net/oarc/services/replysizetest)

"... les grants de L.root-servers.net conrment la date o le premier serveur racine va commencer diffuser une zone signe avec DNSSEC : 27/01/2010 ... En juillet 2010, tous les serveurs de noms de la racine diffuseront des rponses cinq dix fois plus grandes quaujourdhui. Dans certains cas, cela pourra entraner une coupure quasi-complte de laccs linternet... La racine du DNS sera signe avec la technologie DNSSEC ... des signatures cryptographiques, ... de taille bien plus importante que les rponses DNS classiques. Elles dpasseront lancienne limite de 512 octets du DNS et mme la limite des 1500 octets de la MTU Ethernet (la plus rpandue sur lInternet). ...un certain nombre de pare-feux ou dautres quipements rseau qui, mal conus ou bien mal congurs, refusent les rponses DNS de plus de 512 octets. Parmi ceux qui les acceptent, certains ne grent pas correctement la fragmentation des paquets IP (par exemple parce quils bloquent tous les paquets ICMP) et ne peuvent donc pas recevoir des paquets DNS de taille suprieure la MTU, en gnral 1500 octets. Les rseaux qui rejettent les paquets DNS de plus de 512 octets, ou ... ceux de plus de 1500 octets, ne pourront plus parler la racine du DNS aprs juillet 2010 ... et nauront donc quasiment plus daccs

393

Chapitre 12. SR005 - Administrer un serveur DNS Internet ... ...tester votre rseau... Le moyen le plus simple est...
$ dig +short rs.dns-oarc.net txt "203.0.113.1 DNS reply size limit is at least 4023 bytes" # voir si la rponse indique plus de 1500 octets

Avertissement
Si le test indique que les paquets de plus de 1500 octets ne peuvent pas passer, vous devez analyser lensemble de votre rseau et tous les quipements intermdiaires (notamment les pare-feux) pour sassurer quils sont congurs correctement.

Essayez aussi avec une requte DNS directe :


$ dig +dnssec @192.134.0.49 DNSKEY ripe.net # La rponse fait plus de 1500 octets.

# Ou encore $ dig +short rs.dns-oarc.net txt rst.x4001.rs.dns-oarc.net. rst.x3985.x4001.rs.dns-oarc.net. rst.x4023.x3985.x4001.rs.dns-oarc.net. "192.168.1.1 sent EDNS buffer size 4096" "192.168.1.1 DNS reply size limit is at least 4023 bytes" #==> Ici, on voit que les rponses DNS de 4023 octets peuvent arriver.

# Avec des rsolveurs DNS mal configurs ou mal connects (ici, ceux dAlice, via une AliceB $ dig +short rs.dns-oarc.net txt rst.x486.rs.dns-oarc.net. rst.x454.x486.rs.dns-oarc.net. rst.x384.x454.x486.rs.dns-oarc.net. "213.228.63.58 lacks EDNS, defaults to 512" "213.228.63.58 DNS reply size limit is at least 486 bytes" #==> 486 octets arrivent passer, ce qui est insuffisant dans de nombreux cas.

Important : Si vous arrivez la recevoir, cest que le test prcdent avait un problme. Si vous ny arrivez pas, cest quil reste bien un ltrage maladroit quelque part.

394

Chapitre 12. SR005 - Administrer un serveur DNS

12.6. valuation pour le module sr005


Source(s):

OF: SR005-ch05-controle.pdf (docs/eof/sr005-ch05-controle.pdf)

12.6.1. Questions de cours


Les questions suivantes font appel peu de rexion et sont donc parfois videntes. Malgr tout, la pertinence et la prcision de vos rponses seront prises en compte :

- Quels sont les diffrents types de requtes DNS qui sont utiliss quotidiennement ? quoi A AAAA PTR Address record : associe Address record : associe Pointer record : associe reverse = exactement un nom dhte adresse IPv4 un nom dhte adresse IPv6 une adresse IP un enregistrement de nom de domaine le contraire du A record

MX NS SOA

Mail Exchange Record qui dfinit les serveurs de courriel pour le domaine Name Server Record qui dfinit les serveurs de noms pour le domaine

Start Of Authority record qui donne les informations gnrales de la zone : serveur principal, courriel de contact, diffrentes dures dont celle dexpiration, nu record permet un administrateur dinsrer un texte quelconque dans un enregistrement DNS

TXT

Donner un exemple dutilisation pour chacun: $ dig free.fr A +short 212.27.48.10 $ dig free.fr NS +short freens2-g20.free.fr. freens1-g20.free.fr. $ dig free.fr MX +short 20 mx2.free.fr. 10 mx1.free.fr. $ dig -x 212.27.48.10 +short www.free.fr. # PTR

395

Chapitre 12. SR005 - Administrer un serveur DNS


- Quels sont les changes entre un serveur matre et un serveur esclave ? Echange de zone (echange de configuration), requte rcursive (if forward-only),...

- Comment fixer le TTL (dfinir et expliquer ce terme) dune zone ? "Time To Live" = Dure de vie dun enregistrement RR (Ressource Record) Cest le temps par dfaut durant lequel les enregistrements (records) de la zone seront cons En complment... Source: Julien Aulagnier :)

"... Par dfaut le TTL est exprim en secondes mais il est possible de lcrire de cette man

* En tte du fichier de configuration grce la directive $TTL qui spcifie la valeur d

* Le TTL spcifi dans lenregistrement SOA et correspond au "TTL negatif". Il sagit de

* Le TTL spcifi chaque RR (entre le nom du RR et le TYPE) crase la valeur de $TTL p

Le serveur ayant en cache ces enregistrements les considra obsoltes une fois le dlai corr

- Comment le choisir ? Quels sont les avantages et inconvnients dune valeur haute ou basse Si les modifications de RR sont frquents dans une zone il conviendra de positionner un TTL

Une valeur haute conserve les donnes longtemps en cache. Lavantage est que cela rend les r Une valeur faible assure que les donnes en cache soient souvent mise jour et donc limite - Quelles sont les principales menaces qui planent sur votre service DNS ? Expliquer les !

La principale menance sur un service DNS cest quun personne mal intentionner puisse effect

Une deuxieme menaces, est le deni de service, cest dire que si le server DNS est surcharg

12.6.2. Architecture dune agence


Imaginez larchitecture dns (nombre de serveurs, placement sur le rseau, fonctionnalits, limitations (acl) des requtes, etc.) au niveau dune des agences avec les besoins suivants :

- Une agence propose divers services et possde donc des serveurs accessibles dInterne - Les machines du personnel mettent des requtes (pour aller sur le Web par exemple), - Une agence est autoritaire pour la zone monagence.magrosseboite.fr et peut recevoir d qutes du monde entier, - Pour plus de scurit, les serveurs situs dans la DMZ doivent avoir un serveur DNS d quement ou logiquement, au choix) du reste des serveurs dns. Cette contrainte est opt

396

Chapitre 12. SR005 - Administrer un serveur DNS Une reprsentation graphique, en plus du texte dexplication, est vivement conseille. Pour la rponse se rfrer ce site (http://ferry.eof.eu.org/lesjournaux/ll/public_html/ch09s04.html)

12.6.3. Conguration Bind


crire la conguration (named.conf minimale et au moins une zone) pour le serveur rpondant aux requtes provenant dInternet. Pour lexemple, notre domaine aura pour nom monagence.magrosseboite.fr. :
$ORIGIN . $ttl 38400 @ IN

SOA

monagence.magrosseboite.fr. 2004110129 5400 3600 604800 38400 )

admin.monagence.magrosseboite.fr. (

$ORIGIN mail www webmail www ftp

NS ns.monagence.magrosseboite.fr. NS ns.anotherdomain.com. MX 10 mail.monagence.magrosseboite.fr. MX 20 mail.anotherdomain.com. A 123.45.67.89 monagence.magrosseboite.fr. A 123.45.67.89 123.45.67.90 CNAME mail CNAME www CNAME www

397

Chapitre 13. SR006 - Administrer un serveur de messagerie (SMTP)


Le but de ce module est de fournir les connaissances ncessaires la mise en place dun serveur de messagerie.

13.1. La messagerie lectronique


Source(s):

OF: SR006-ch01-messagerie.pdf (docs/eof/sr006-ch01-messagerie.pdf)

13.1.1. Prsentation & Terminologie


La messagerie lctronique est devenue le systme critique dune entreprise puisque cest le cur de toutes communications entre employs. Le fonctionnement de ce service impactera directement sur lactivit de votre compagnie et ds lors, vous devrez rllement penser et prparer toute manipulation sur vos serveurs. Si un service doit tre favoris (systme de sauvegarde, scurit, qualit de service, etc.), cest celui- ci. Une messagerie est dcompose en au moins deux tapes signicatives et indpendantes : lenvoi et la rception. Techniquement on parle plutt de dialogues entre serveurs ou dun change client vers serveur. Mail User Agent (MUA) (http://en.wikipedia.org/wiki/Mail_user_agent) : client de messagerie (logiciel Mozilla Thunderbird, Outlook, etc...) Mail Transfert Agent (MTA) (http://en.wikipedia.org/wiki/Message_transfer_agent) : serveur de messagerie dont le rle est de relayer les courriels ou de les accepter sils sont destins au domaine courant. Simple Mail Transfert Protocol (SMTP) (http://en.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol) : Protocole Internet standard (RFC 821 (http://tools.ietf.org/rfc/rfc821.txt) et RFC 5321 (http://tools.ietf.org/rfc/rfc5321.txt)) utilis par les MUAs et MTAs pour envoyer/recevoir (ou relayer) des messages courriels.

398

Chapitre 13. SR006 - Administrer un serveur de messagerie (SMTP)


Note : Voir aussi Extended SMTP (Wikipedia) (http://en.wikipedia.org/wiki/Extended_SMTP): denition dextension au protocole SMTP.

Internet Message Access Protocol (IMAP) (http://en.wikipedia.org/wiki/Internet_Message_Access_Protocol) ou Post Ofce Protocol (POP3) (http://en.wikipedia.org/wiki/Post_Ofce_Protocol) : Protocole par lequel lutilisateur se connecter sa bote aux lettres pour rcuprer ses courriels

13.1.2. Serveur de messagerie (Exim4, Postx, etc...)


Postx (http://www.postx.org) : dvelopp par le clbre spcialiste en scurit Wietse Venema et a tout ax sur lcriture dun remplaant performant et scuris de Sendmail. Objectif russi puisque Postx est devenu lune des rfrences grce la qualit du programme et son architecture modulaire. Enn il dipose de nombreuses fonctionnalits et galement dune syntaxe humaine ... Exim4 (http://www.exim.org) : bien que plus discret face ses concurrents, est trs prsent sur Internet, en particulier chez divers fournisseurs daccs mais aussi dans de grandes universits. La chose la plus apprciable dans Exim4 est sa modularit de conguration, il est ainsi possible de faire tout ce que lon veut ds lors que lon est prt retrousser ses manches. Mme si la scurit nest pas aussi forte que sous Posftix, son auteur Philip Hazel sest attach ne pas reproduire le pass de Sendmail. Dernier point et non des moindres, Exim est le seul mta a tre sous licence GPL, contrairement qmail Dautres existent : Sendmail (anctre remplac par Postx), Qmail (par recommend), MS Exchange (no comment !), ...

13.1.3. Choisir un serveur de messagerie, fonctionalits ncessaires


Le choix de vos serveurs doit faire intervenir la fois votre prfrence mais aussi vos besoins, certaines congurations sont plus facilement ralisables sur un mta plutt quun autre. En plus du choix du mta, vous devez galement tenir compte du serveur pop ou imap que vous allez utiliser donc ne ngligez pas votre choix : tous les composants de votre service de messagerie devront pouvoir sinterfacer entre eux.

## Exemple de besoin : - Domaines virtuels - Utilisateurs virtuels - Quotas - Authentification via fichiers plats, base de donnes, annuaire, etc. - Besoin douverture : le format de stockage des messages doit tre standard (Maildir, m - Filtrage du mail (Anti-virus, anti-spam, etc.) - Classement des mails (Sieve, Exim filters, procmail, etc

399

Chapitre 13. SR006 - Administrer un serveur de messagerie (SMTP) lheure actuelle, la solution la plus simple pour grer des domaines et utilisateurs virtuels est lutilisation de vpopmail... Important de poser tous ses besoins sur une feuille et dexaminer chaque logiciel pour voir sil est capable de les remplir...

13.1.4. Exim4 Documentation


$ man exim4 $ man update-exim4.conf ## Deamon options ## Documentation on Debian based configuration

## Documentation page http://www.exim.org/docs.html ## User Manuel - Exim4 Spcification http://www.exim.org/exim-html-current/doc/html/index.html ## README.Debian localis /usr/share/doc/exim4-base/README.Debian.gz ## Voir aussi (si existe) /usr/share/doc/exim4-base/spec.txt.gz

13.1.5. Exim4 conguration


Exim4 se congure laide dun chier texte (/etc/exim4/exim4.conf) dcompos en six parties :
dclaration de variables gnrales ## premire partie implicite begin acl ## contrle daccs begin routers ## routage begin transports ## transport begin retry ## begin rewrite begin authenticators

Si vous utilisez les paquets Debian et que vous avez activ loption (dc_use_split_cong dans /etc/exim4/update-exim4.conf.conf), vous pouvez clater votre chier de conguration en de multiples chiers de conguration et rpertoires. Cette division est fate pour bien dissocier les sections, routeurs, transports, ou ACL
Note : Le script update-exim4.conf gnre le chier de conguration principal dExim4 /var/lib/exim4/cong.autogenerated en fusionnant les donnes contenues dans le chier modle

400

Chapitre 13. SR006 - Administrer un serveur de messagerie (SMTP)


/etc/exim4/exim4.conf.template ou dans /etc/exim4/conf.d (arbre de repertoire) et dans /etc/exim4/update-exim4.conf.conf vers le chier de sortie /var/lib/exim4/cong.autogenerated. Il est possible de crer son propre chier de conguration centralis /etc/exim4/exim4.conf. Si ce chier existe, Exim va lutliser et ignor celui gnr automatiquement. Dans ce cas, il est prfrable de mettre dc_eximcong_congtype=none dans /etc/exim4/update-exim4.conf.conf pour prevenir debconf de poser trop de question sur exim4.

## Debconf configuration $ dpkg-reconfigure exim4-config

$ tree /etc/exim4 /etc/exim4 |-- conf.d | |-- acl | | |-- 00_exim4-config_header | | |-- 20_exim4-config_local_deny_exceptions | | |-- 30_exim4-config_check_mail | | |-- 30_exim4-config_check_rcpt | | -- 40_exim4-config_check_data | |-- auth | | |-- 00_exim4-config_header | | -- 30_exim4-config_examples | |-- main | | |-- 01_exim4-config_listmacrosdefs | | |-- 02_exim4-config_options | | |-- 03_exim4-config_tlsoptions | | -- 90_exim4-config_log_selector | |-- retry | | |-- 00_exim4-config_header | | -- 30_exim4-config | |-- rewrite | | |-- 00_exim4-config_header | | -- 31_exim4-config_rewriting | |-- router | | |-- 00_exim4-config_header | | |-- 100_exim4-config_domain_literal | | |-- 150_exim4-config_hubbed_hosts | | |-- 200_exim4-config_primary | | |-- 300_exim4-config_real_local | | |-- 400_exim4-config_system_aliases | | |-- 500_exim4-config_hubuser | | |-- 600_exim4-config_userforward | | |-- 700_exim4-config_procmail | | |-- 800_exim4-config_maildrop | | |-- 850_exim4-config_lowuid | | |-- 900_exim4-config_local_user | | -- mmm_mail4root | -- transport | |-- 00_exim4-config_header | |-- 10_exim4-config_transport-macros

401

Chapitre 13. SR006 - Administrer un serveur de messagerie (SMTP)


| |-- 30_exim4-config_address_file | |-- 30_exim4-config_address_pipe | |-- 30_exim4-config_address_reply | |-- 30_exim4-config_mail_spool | |-- 30_exim4-config_maildir_home | |-- 30_exim4-config_maildrop_pipe | |-- 30_exim4-config_procmail_pipe | |-- 30_exim4-config_remote_smtp | |-- 30_exim4-config_remote_smtp_smarthost | -- 35_exim4-config_address_directory |-- exim4.conf.template |-- passwd.client -- update-exim4.conf.conf

Vrier la version et le chier de conguration :

$ exim4 -bV Exim version 4.69 #1 built 30-Sep-2008 18:26:35 Copyright (c) University of Cambridge 2006 Berkeley DB: Berkeley DB 4.6.21: (September 27, 2007) Support for: crypteq iconv() IPv6 GnuTLS move_frozen_messages Lookups: lsearch wildlsearch nwildlsearch iplsearch cdb dbm dbmnz dnsdb dsearch nis nis0 pas Authenticators: cram_md5 plaintext Routers: accept dnslookup ipliteral manualroute queryprogram redirect Transports: appendfile/maildir/mailstore autoreply lmtp pipe smtp Fixed never_users: 0 Size of off_t: 8 Configuration file is /var/lib/exim4/config.autogenerated

13.2. Travaux pratiques 1


Source(s):

OF: SR006-ch02-tp1.pdf (docs/eof/sr006-ch02-tp1.pdf)

13.2.1. Gnral
### laide dun sniffer (tcpdump, ethereal) ou des RFCs, dcrivez lchange de message entre deux serveurs SMTP dans le cas le plus simple possible.
## Avec tcpdump (pour un traffic non encrypt)

402

Chapitre 13. SR006 - Administrer un serveur de messagerie (SMTP)


$ tcpdump -vvv -x -X -s 1500 -n -i eth2 port 587 or port 25 -l | tee smtp-com.txt # 587 est le port utilis par google pour le serveur SMTP ##==> Malheureusement, la connection tant encrypt automatiquement, il nest pas possible de voir lensemble de la transaction SMTP en clair.

## Depuis les RFCs Lors dun change, on distingue : - le serveur SMTP expditeur (celui qui envoi le message) - du serveur SMTP destinataire (qui le recoit). Un canal bi-directionel de communication est tablit entre les deux serveur (EHLO = HELLO prcdement) puis lexpditeur envoi des commandes SMTP auxquelles le dstinataire rponds. 1. Lexpditeur envoi la commande MAIL (indiquant laddresse courriel de lauteur du message) 2. Le destinataire rpond par un OK (sil accepte les courriels) 3. Lexpditeur envoi la command RCPT (indiquant laddresse courriel du destinataire du message) 4. Le destinataire rpond par un OK (sil accepte message pour ce destinataire) ou rejete simplemen le destinataire mais la la transaction SMTP en court... 5. Lexpditeur peut ngocier pour plusieur addresse courriel destinataire 6. Suite au OK du destinataire, lexpditeur envoi les donnes DATA du message en terminant avec une squence spcial. 7. Si le serveur destinataire traite correctement les donnes du message DATA, il rponds par un OK. +----------+ +----------+ +------+ | | | | | User |<-->| | SMTP | | +------+ | Sender- |Commands/Replies| Receiver-| +------+ | SMTP |<-------------->| SMTP | +------+ | File |<-->| | and Mail | |<-->| File | |System| | | | | |System| +------+ +----------+ +----------+ +------+ Sender-SMTP Receiver-SMTP

Model for SMTP Use

## Trace rseau via Claw mail * Connexion au serveur SMTP : smtp.gmail.com... [22:05:22] SMTP< 220 mx.google.com ESMTP q9sm20523082gve.19 [22:05:22] ESMTP> EHLO macfil.ermansion.net [22:05:23] ESMTP< 250-mx.google.com at your service, [92.40.114.158] [22:05:23] ESMTP< 250-SIZE 35651584 [22:05:23] ESMTP< 250-8BITMIME

403

Chapitre 13. SR006 - Administrer un serveur de messagerie (SMTP)


[22:05:23] ESMTP< 250-STARTTLS [22:05:23] ESMTP< 250-ENHANCEDSTATUSCODES [22:05:23] ESMTP< 250 PIPELINING ** SMTP AUTH non disponible [22:05:23] ESMTP> STARTTLS ## Scurise la communication [22:05:24] ESMTP< 220 2.0.0 Ready to start TLS [22:05:28] ESMTP> EHLO macfil.ermansion.net [22:05:29] ESMTP< 250-mx.google.com at your service, [92.40.114.158] [22:05:29] ESMTP< 250-SIZE 35651584 [22:05:29] ESMTP< 250-8BITMIME [22:05:29] ESMTP< 250-AUTH LOGIN PLAIN [22:05:29] ESMTP< 250-ENHANCEDSTATUSCODES [22:05:29] ESMTP< 250 PIPELINING [22:05:29] ESMTP> AUTH LOGIN [22:05:30] ESMTP< 334 VXNlcm5hbWU6 [22:05:30] ESMTP> [USERID] [22:05:31] ESMTP< 334 UGFzc3dvcmQ6 [22:05:31] ESMTP> [PASSWORD] [22:05:32] ESMTP< 235 2.7.0 Accepted [22:05:32] ESMTP> MAIL FROM:<filostene@gmail.com> SIZE=345 [22:05:33] SMTP< 250 2.1.0 OK q9sm20523082gve.19 [22:05:33] SMTP> RCPT TO:<filostene@gmail.com> [22:05:34] SMTP< 250 2.1.5 OK q9sm20523082gve.19 [22:05:34] SMTP> DATA [22:05:35] SMTP< 354 Go ahead q9sm20523082gve.19 [22:05:35] SMTP> . (EOM) [22:05:39] SMTP< 250 2.0.0 OK 1266962737 q9sm20523082gve.19 * Message envoy avec succs. [22:05:39] SMTP> QUIT [22:05:40] SMTP< 221 2.0.0 closing connection q9sm20523082gve.19

Note : STARTTLS (Transport layer security) est une extension au protocoles de communication en text brut. Elle offre un moyen dencrypter (TLS or SSL) une connection text brut au lieu dutiliser un autre port pour les communications encryptes. STARTTLS pour IMAP et POP3 est dnit dans la RFC 2595 (http://www.ietf.org/rfc/rfc2595.txt), pour SMTP dans la RFC 3207 (http://www.ietf.org/rfc/rfc3207.txt), et pour NNTP dans la RFC 4642 (http://www.ietf.org/rfc/rfc4642.txt).

### Quelles sont les mthodes dauthentication SMTP disponibles ? Utiliser les RFCs pour en dcouvrir dautres que PLAIN ou LOGIN. Pour chaque mthode, indiquer les avantages et inconvnients. Les mthodes dauthentication (http://en.wikipedia.org/wiki/Comparison_of_mail_servers) (SMTP-AUTH Authenticated SMTP) sont dnis dans la RFC 4954 (http://www.ietf.org/rfc/rfc4954.txt). Elles se prsentent sous forme dextension au protocole SMTP. Toutes les mthodes ne sont pas lists dans la RFC, il en existe de nombreuse dont limplmetnation varie grandement dun serveur de messagerie lautre.

404

Chapitre 13. SR006 - Administrer un serveur de messagerie (SMTP) Parmi elle on rescence :
PLAIN # 1 message - Non encrypt -"authid\0userid\0passwd" envoy en clair AVANTAGE: disponible sur tous les serveurs de messagerie INCONVENIENT: scurit quasi null # Challenge/Response mechanism Encodage BASE64 AVANTAGE: disponible sur bcp de serveurs de messagerie meilleur que PLAIN INCONVENIENT: scurit faibles

LOGIN

NTLM (or SPA) # Encodage BASE64 - (scurit faible) (MS Outlook Spcific) AVANTAGE: LOGIN equivalent INCONVENIENT: Microsoft oriented pas disponible sur tous les serveurs. CRAM-MD5

# Encodage HMAC-MD5 MAC algorithm AVANTAGE: Scurit forte Standard RFC 2195 (http://www.ietf.org/rfc/rfc2195.txt) INCONVENIENT: quoique plus difficile, ce mode dauthentification peut-tre d mot de passe soit stock en clair # Encodage HMAC-MD5 MAC algorithm AVANTAGE: Scurit plus forte Standard RFC 2831 (http://www.ietf.org/rfc/rfc2831.txt) Disponible dans de nombreux serveurs de messagerie

DIGEST-MD5

INCONVENIENT: Quoique plus difficile, ce mode dauthentification peut-tre d mot de passe stock en clair

Note : La mthode dauthentication DIGEST-MD5 est plus scurise que CRAM-MD5 parce quil prvient des dattaque de mot de passe en text brut. Pendant une authentication DIGEST-MD5 lors de lchange entre le client et le serveur, il y a des information additionnelles passes qui sont utiliser pour construire un algorithme de hash plus robuste lorsque compar la mthode CRAM-MD5, rendant plus difcile dchiffrer.

### Dcrivez le chemin quemprunte un message lorsquExim reoit une connexion SMTP depuis un serveur sur Internet destination dun domaine local. Vous pouvez vous aider dun schma. Pensez aux ACL, transports, routeurs, mthodes dauthentication, etc.

405

Chapitre 13. SR006 - Administrer un serveur de messagerie (SMTP) Figure 13-1. Exim4 : Chemin emprunt par un message SMTP reu

406

Chapitre 13. SR006 - Administrer un serveur de messagerie (SMTP)

a bounce message, or (failed) Delivery Status Notication (DSN) message, aka Non-Delivery Report/Receipt (NDR), Non-Delivery Notication (NDN), or simply a bounce is an automated electronic mail message from a mail system informing the sender of another message about a delivery problem. The original message is said to have bounced. http://en.wikipedia.org/wiki/Bounce_message

13.2.2. Expansion de variables


La syntaxe dExim est parfois droutante et est souvent la cause de svres dpressions chez les administrateurs cause de ses trop nombreuses accolades ouvrantes et fermantes. Cest le prix payer pour prendre en main ce langage qui sera en mesure de raliser toutes vos envies. La notion la plus importante est lexpansion de variable, lorsque vous attribuez des valeurs vos options dans vos routeurs ou transports, vous pouvez donner des constantes ou des chanes dynamiques, celle-ci sont values lorsquExim lit sa valeur. Vous les reprez par la notation ${monexpression}. Tout un langage de programmation (Turing complet !) a t crit cet effet : vous disposez ainsi de toutes les fonctions de manipulation de chanes de caractres, de lecture de chier, dcoute de socket rseau, calculs mathmatiques, etc. Exim permet de faire des recherches dans des chiers laide de la directive lookup (lookup et lsearch directive (http://exim.org/exim-html-4.50/doc/html/spec_9.html#IX653)). Les fonctions peuvent tre combines entre elles pour faire des manipulations plus complexes :
$ cat /etc/aliases ... root: filostene ... $ exim4 -be >${lookup{root}lsearch{/etc/aliases}} filostene >${lookup{root}lsearch{/etc/passwd}} x:0:0:root:/root:/bin/bash >${extract{5}{:}{${lookup{root}lsearch{/etc/passwd}}}} /root # Rcupration du rpertoire personnel # de lutilisateur root # partir du fichier /etc/passwd >... # option Expansion testing mode # rcuprer lutilisateur # en charge de ladresse de root

407

Chapitre 13. SR006 - Administrer un serveur de messagerie (SMTP)

13.2.3. Congurations possibles (Local, Smarthost, Satellite...)


Les paquets Debian ont popularis une certaine terminologie rprsentant les mode de conguration dun serveur SMTP :
- Local # Tout est fait en local, # il ny a pas dchange via le rseau. # Le serveur peut recevoir des mails directement, # mais tout le courrier sortant passe par un # autre serveur (centralisation). # Le serveur ne recoit pas de mail directement # et ne peut quenvoyer des mails via un serveur. # Le serveur envoie et reoit des mails directement.

- Smarthost

- Satellite

- Internet site

Questions : Quelle est lutilit du mode local ? Quels sont les programmes/services qui en dpendent ? Les programmes et services systmes pour par example informer ladminsitrateur root de dysfonctionnement, de lexecution de tache de maintenance (cron) ou de tentatives daccs non autorises (login)... Pourquoi utiliser le mode smarthost ? Quels sont les motifs les plus frquents de cet usage ? Pour pouvoir grer les e-mails appartenant un domaine local. Cest loption la plus courante pour un hte qui a une connectivit restreinte Internet, par example une connection residentiel ou un smarthost SMTP est gnralement utilis. Les FAIs bloquent toutes connection SMTP sortantes pour combattre les problmes de SPAM ce qui requiert dutiliser leur Smarthost pour lenvoi de-mail. Gnralement cest aussi une bonne ide de lutiliser lorsque la connection est bas sur une addresse IP dynamique puisque trs peu de site accepte directement la livraison de-mail via des rangs dadresse. crire la conguration dExim minimale pour servir de smarthost.
## Re-configuration minimum via Debconf

408

Chapitre 13. SR006 - Administrer un serveur de messagerie (SMTP)


$ dpkg-reconfigure exim4-config

Utilisation du serveur SMTP Goolge comme relay:


## /etc/exim4/update-exim4.conf.conf ... dc_eximconfig_configtype=satellite dc_other_hostnames= dc_local_interfaces=127.0.0.1 dc_readhost=ermansion.net dc_relay_domains= dc_minimaldns=false dc_relay_nets= dc_smarthost=smtp.gmail.com::587 CFILEMODE=644 dc_use_split_config=true dc_hide_mailname=true dc_mailname_in_oh=true dc_localdelivery=mail_spool ...

13.3. valuation pour le module sr006


Source(s):

OF: SR006-ch03-controle.pdf (docs/eof/sr006-ch03-controle.pdf)

Quelles sont les diffrences entre les protocoles IMAP et POP ? Les deux sont de protocoles standard Internet permettant de rcuprer les messages courriels de sa bote au lettre electronique. Le libre accs ces standard permet un libre choix de serveurs (et de FAI) ainsi que de client de courriels puisquils sont supports par la majorit dentre eux. Les deux protocoles sont supports par les logiciels de courriels mais pas forcment par tous le FAI dans le cas dIMAP (plus complexe congurer que POP). Dans le cas dIMAP, les logiciels clients tlcharge une copie du message lors dune requte dev lutilistateur et le conserve dans une cache local (au cas par cas). POP tlcharge systmatiquement en local avec la possibilit de conserver une copie sur le serveur (conguration gnrale du compte POP)

409

Chapitre 13. SR006 - Administrer un serveur de messagerie (SMTP) IMAP supporte en-ligne et hors-ligne operations. Les logiciels de courriels laisse gnralement les messages sur le serveur jusqua ce quil soit explicitement effac par lutilisateur. IMAP permet a de multiple client de grer la mme bote au lettre. This and other characteristics of IMAP operation allow multiple clients to manage the same mailbox. Temps de rponse plus rapide avec SMTP. IMAP version 4 permet de recuprer des partie individuel MIME (pice jointe) ou des portions individuelles dun messages. Ainsi un utilisteur peur recuprer uniquement la partie text dun message sans les pices jointes ou de dmarrer immdiatement un contenu en streaming. IMAP version 4 permet de conserver letat du message (drapeau) sur le serveur (lu, non lu, rpondu, etc...) donc si un client se connecte un autre moment ou dune autre localisation linformation peut-tre lu en temps reel. IMAP version 4 permet de crer, renomer ou effacer des botes aux lettres (dossier sur le serveur)et de dplacer des messages entre les botes aux lettres. Ceci permet notemment un meilleur partage possible de dossiers. Avec IMAP il est possible de demander au serveur de procder lui mme une recherche selon divers critres vitant ainsi au client de tlcharger tous les messages pour effectuer une telle recherche. Toutefois ceci peut augmenter lutilisation de ressources sur le serveur dans le cas de multiple recherche massives. IMAP est un protocole extensible via un mecanisme dextension. Avec IMAP4 une connection TCP/IP a besoin dtre maintenu toute instant pour tre noti de larrive de nouveaux messages. IMAP4 ne permet denvoyer et recevoir en une seule opration Quel est le protocole de rcupration de mail le plus adapt pour une personne qui ne lit ses mails que depuis sa machine personnelle ? Lun ou lautre fera bien laffaire dans un tel cas pour peu que le FAI fournisse un accs POP et/ou IMAP la bote de messagerie. Un mail chang entre deux entreprises distinctes transite par au moins combien de serveurs ? Prcisez lesquels.

410

Chapitre 13. SR006 - Administrer un serveur de messagerie (SMTP) Pour deux entreprises disctinctes appartenant au mme domaine, un serveur Si elle appartiennent deux domaines diffrents, deux serveurs: SMTP sortant de lentreprise A, SMTP entrant de lentreprise B.

411

Chapitre 14. SR007 Administrer un serveur Web (HTTP)


14.1. Serveur Web Apache
14.1.1. Introduction
Source(s):

OF: SR007-ch00-pagedegarde.pdf (docs/eof/sr007-ch00-pagedegarde.pdf) SR007-ch01-sr007-http.pdf (docs/eof/sr007-ch01-sr007-http.pdf)

14.1.2. Travaux pratiques 1: Base et Protocole


Source(s):

OF: SR007-ch02-tp1.pdf (docs/eof/sr007-ch02-tp1.pdf)

14.1.2.1. Installation de base


Crez un utilisateur et un groupe Sur Debian le compte www-data existe dj, jutilise celui-ci. Quoiquil puisse tre bien den crer un autre par souci de scurit en dsactivant le compte utilis par dfaut :) Crez la hirarchie de rpertoires pour accueillir votre site, en la justiant.
## Je verrais bien quelque chose du genre: /var/ermansion.net/www /var/ermansion.net/www/htdocs # Page Web /var/ermansion.net/www/logs # Logs daccs et derreur /var/ermansion.net/www/cgi-bin # Scripts ## Avec en plus tout autre repertoire pouvant tre vraiment utile au cas par cas... ## Mais pour un cas simple cela suffit emplement :) /var/ermansion.net/www/stats ## Statistiques du site :)

412

Chapitre 14. SR007 Administrer un serveur Web (HTTP) Quel est lintrt dune telle sparation ? Scurit et Contrle (Monitoring, Debuggage, Performance, etc...). Possibilit de dlguer ladminsitration du site (si Apache activ pour plusieurs comptes) Modiez le chier de conguration fourni dans la distribution dApache pour ladapter votre installation Crez quelques chiers et rpertoires la racine de votre site et essayez dy accder depuis votre navigateur Web. Un exercise similaire est dcrit au chapitre Serveur Web - Apache - Installation et conguration dans la partie SR009 Quelles doivent tre les permissions de vos chiers pour quApache puisse y accder ?
740 pour tous les repertoires et fichier (et ventuellement 760 pour un dossier dans lequel le serveur pourrait avoir besoin dcrire [transfert de fichier]) Lecture/Ecriture pour le propritaire Lecture pour le compte executant Apache Aucun accs pour tous les autres :)

14.1.2.2. Analyse du protocole


Pour mieux comprendre le protocole HTTP, vous allez consulter les pages de votre site laide de netcat.
## Supposons que le site Web soit sur la machine locale : $ nc localhost 80

laide de la RFC 2616 (http://tools.ietf.org/rfc/rfc2616.txt), construisons une requte HTTP valide :


## Une requte HTTP est dau moins une ligne GET http://localhost/phpldapadmin/index.php HTTP/1.1

# Methode (Commande) # + URI # + Protocole version

Quels sont les champs obligatoires avec HTTP/1.1 ?

413

Chapitre 14. SR007 Administrer un serveur Web (HTTP) Commande (Method) + Espace (SP) + URI + Espace (SP) + Protocole Version (HTTP-Version) + n de la ligne (CRLF)
Note : Lors de mon test, sans indiquer la version du protocole cela fonctionne trs bien aussi :) Sil nest pas indiqu, cest celui de la communication tablit qui est utilis (de ce que jai compris via la RFC).

14.1.2.3. Publication de pages des utilisateurs


Apache permet aux utilisateurs de possder leur propre espace Web. Ainsi, si vous accdez http: //www.testme.fr/~julien/, vous accdez la page Web cre par lutilisateur local. Mettez en place un systme identique laide de mod_userdir TO DO !!!

14.1.3. Travaux pratiques 2: SSL, Php et Virtual Host


Source(s):

OF: SR007-ch03-tp2.pdf (docs/eof/sr007-ch03-tp2.pdf)

14.1.3.1. SSL
Le cours SR016 documentera la cration de certicats SSL mais si vous tes impatient, vous pouvez utiliser les certicats installs par dfaut pour faire des tests ou bien gnrer vous-mme vos propres certicats avec le HOWTO adquat 1. Si la ligne de commande vous fait peur, vous pouvez utiliser TinyCA2 qui est une interface graphique. Maintenant, mettez en place le SSL pour votre site : TO DO...
Note : Il nest pas possible davoir deux certicats SSL diffrents sur une mme adresse IP, bien quil y ait des travaux sur la question.

414

Chapitre 14. SR007 Administrer un serveur Web (HTTP) Redirection HTTP vers HTTPS (http://www.commentcamarche.net/forum/afch-1059631-apache-redirection-http-vers-https)

14.1.3.2. PHP
Autorisez lexcution de scripts PHP et crire un script afchant le PID lorsquil est excut (utilisez la fonction posix_getpid()3. Que remarquez-vous ? Quelle aurait t la diffrence si ctait un script CGI ? Je nai pas test mais en toute vraisemblance dans le premier cas, le PID du script serait le mme que le PID dApache (processus identique), dans le second cas il serait compltement diffrent...(un processus par CGI)

14.1.3.3. Virtual Host


Mettre en place deux sites virtuels de type name based avec lun disposant des CGI. Un exercise similaire est dcrit au chapitre Serveur Web - Apache - Installation et conguration dans la partie SR009 Pour la mise en place de CGI il faudrait modier la conguration du VirtualHost :
<VirtualHost ermansion.net www.ermansion.net> ServerName ermansion.net DirectoryIndex index.html DocumentRoot /var/ermansion.net/www/htdocs ScriptAlias /cgi-bin/ /var/ermansion.net/www/cgi-bin <Directory /var/ermansion.net/www/cgi-bin> AllowOverride None Options ExecCGI Order allow,deny Allow from all </Directory> ErrorLog /var/ermansion.net/www/logs/error_log CustomLog /var/ermansion.net/www/logs/access_log combined </VirtualHost>

Avertissement
!!!Attention!!! La conguration ci-dessus na pas t test en environement rel...elle est purement throrique et peut-tre incorrect ce stade ! revoir ultrieurement...

415

Chapitre 14. SR007 Administrer un serveur Web (HTTP) Est-il possible de mettre en place du SSL pour ces sites ? Pourquoi ? Comment pourrait-ton faire ? SSL VirtualHost (http://www.hsc.fr/ressources/breves/ssl_virtualhosts.html.fr) Redirection et VirtualHost SSL (http://www.commentcamarche.net/forum/afch-1769865-apache-redirection-et-virtual-host-ssl)

14.1.4. Contrle
Source(s):

OF: SR007-ch04-controle.pdf (docs/eof/sr007-ch04-controle.pdf)

Il semble que le document de lof soit vide !!!

416

Chapitre 15. SR010 Les enjeux de la scurit


Bienvenus dans le domaine de JP ! Comme il le dit si bien : "... Durant trois semaines, nous allons tenter de vous faire rchir. Nous allons franchir le pas de ladministration systme pour rentrer dans celui de la scurisation. Nous nallons plus penser ce que les choses fonctionnent, mais ce quelles soient scurises, ce qui sous-entend forcment quelles fonctionnent... ... Fini donc les exclamations "a marche", il faudra aller un pas plus loin. Si vous fates une action et que celle-ci entrane votre perte, ce nest pas une bonne action. Comme vous le verrez, il y a deux types dadministrateurs : ceux qui se sont fait pirater et ceux qui vont se faire pirater... ... Ne vous ez pas au programme horaire afch, il parait que vous pouvez le multiplier par 12 pour les heures passer pour sr010. Cest lexprience que nous en avons, en tous cas... ...Plus vous irez loin, plus je vous accompagnerais... ... Vous allez revoir des notions dores et dj parcourues et normalement assimiles. Ce sera un trs bon moyen de sen assurer... ... Vous entrez dans le monde merveilleux de la scurit par le petit bout : il y a tout un univers dcouvrir. Nous ne sommes que votre porte dentre..."

15.1. Les enjeux (Password, Sauvegardes, etc...)


15.1.1. Introduction
Source(s):

OF: SR010-ch01-act001-sr010-enjeux_securite.pdf (docs/eof/sr010-ch01-act001-sr010-enjeux_securite.pdf) Web: ?[Link To ask en n de module]?(Recommend par JP) (docs/#) Linux Administration (Tome 3) - Scuriser un serveur Linux (informatif mais pas complet) (docs/sr010-ch01-doc-extern-secure-Linux-module3_Bouchaudy.pdf) Magazine: Haking 2010-05 Num 09 : Scurit sous Linux (http://download.hakin9.org/fr/hakin9_05_2010_FR.pdf)

417

Chapitre 15. SR010 Les enjeux de la scurit

On ne le rptera jamais assez : "...Il y a deux types dadministrateurs : ceux qui se sont fait pirater et ceux qui vont se faire pirater..." "...il ne faut faire conance personne, mme pas vous-mme. La paranoa est et restera votre meilleure amie..." "...la scurit informatique peut se mesurer la rsistance la plus forte de son maillon le plus faible..."

15.1.2. Choisir son mot de passe... mais un bon mot de passe, cest quoi ?
Source(s):

Web: Cassage et durcissement des mots de passe [En ligne] (http://www.hsc.fr/ressources/articles/mdp_misc5/index.html.fr) Cassage et durcissement des mots de passe [PDF Version] (docs/sr010-ch01-doc-extern-cassasage-et-durcissement-mot-de-passe-part2.pdf) SECCURE Elliptic Curve Crypto Utility for Reliable Encryption (http://point-at-innity.org/seccure) Construire un gnrateur de mot de passe alatoire (http://bentobako.org/david/blog/index.php?post/2009/04/09/Un-g%C3%A9n%C3%A9rateur-demots-de-passe-al%C3%A9atoires-en-ligne) Tenir compte de la scutit au quotidien [La-Linux] (http://www.lealinux.org/documentations/index.php/Fiches:Tenir_compte_de_la_s%C3%A9curit%C3%A9_au_quotidien)

Tout le monde na pas le mme niveau en arrivant dans ce module. Certaines personnes nont jamais mme rchi la notion de mot de passe et la complexit dentre trouver un valable. Pourtant, votre mot de passe est la clef de vote de votre scurit, il est extrmement important de le choisir correctement... mais aussi de le mmoriser facilement.

15.1.2.1. Quest-ce quun mauvais mot de passe ?


Pour commencer, un mauvais mot de passe est un mot de passe pour lequel vous pouvez rpondre "oui" lune des 7 questions suivantes:
- Avez vous crit sur un bout de papier votre mot de passe ? - Votre mot de passe est-il un mot commun que lon peut trouver dans le dictionnaire ? - Votre mot de passe est-il un mot commun suivi de 2 chiffres ? - Votre mot de passe est-il un nom de personne, de lieu ou danimal ?

418

Chapitre 15. SR010 Les enjeux de la scurit


- Quelquun dautre connait-il votre mot de passe ? - Utilisez vous le meme mot de passe pour plusieurs comptes et pour une longue priode ? - Utilisez vous le mot de passe par dfaut du constructeur ou de lditeur ?

15.1.2.2. Un bon mot de passe...


"...Un bon mot de passe est un mot de passe que lon ne peut pas trouver en usant dun dictionnaire, mme si ce dernier se voit dot dastuces basiques de substitution..." Un mot de passe doit tre sufsement long et complexe (different type de caractre dont ceux non-alphanumrique). Minimum 8 caractres mais attention au del de 14 caractre certains systme pourrait ne pas tre capable de le grer...
Note : Y a t il des caractres ne pas utiliser (/,\,<,>,& par example) ? Ca dpend de chaque implmentation dans chaque application au monde qui vrie une entre de mot de passe ;)Le plus simple est daller lire le code source o est implment la commande de vrication de mot de passe (passwd par example) cest dedans que lon peut sassurer des caractres autoriss.

Note : Pour ma part jaurais tendance penser quune harmonisation ce niveau au sein des applications dune mme entit peut faciliter la gestion de mot de passe pour les utilisateurs naux mais cest pas toujours vident d la diversication des sytmes de vrication existant.

En gros, partir de quel moment, quand on teste son mot de passe, on peut estimer quil est sr ? Une suite de caractre non squentielle, nayant aucun sens commun, utilisant lchelle des ~80 possibilits disponible tel que [A-Za-z0-9,?.;:/!*textmu%$^=+) _-("&{[|\^@\]}] Voir aussi: Cassage et durcissement des mots de passe [PDF Version] (docs/sr010-ch01-doc-extern-cassasage-et-durcissement-mot-de-passe-part2.pdf)

419

Chapitre 15. SR010 Les enjeux de la scurit

Avertissement
Attention, au disposition clavier (anglais, lituanien, etc), certains caractres apparatront/disparatront ;)

u Exemple de caractre disponible sur un clavier en lituanien : a ce ei u

15.1.2.3. Examples de mot de passe


Il est essentiel de choisir convenablement son mot de passe :
## Je propose #Phrase Code Up2hmlnfj2mal! > Un peu dhumour mme lourd ne fait jamais de mal au lit ! c33cq02u* > Cest en chantant quon devient une star ! ==> le deuxime n est peut-tre pas assez long... #Phrase/Name/Dates Richard2010Eleonore2011$ IsItDifficultEnough? ==> a cest BOF!!! #Combinaison au clavier QaZxCvW9182!!! Mnbvcxz546732891 #Cypher MBUfufBUPup999? > La tete a toto 1000-1 ? C3D1f1C1l32r? > cest difficile docteur ?

## Propos par Christophe # Avec loutil crypt perl -e print crypt("christophe","07")."\n" 07dkT4ubk8sqw perl -e print crypt("christophe","\$1")."\n" $10LK8S0DffXM perl -e print crypt("christophe","\$1\$06\$")."\n" $1$06$st6IX7Uo6mxkYEp2Q9Ua00 # Manuellement Voulez vous coucher avec moi, ce soir ? ---> Vvcam,cs? A lenvers ---> ?sc,macvV Un mot de passe mnmo-technique ---> tesoufouquoi? ==> devrait facilement tre trouv par un dictionnaire mon avis.

420

Chapitre 15. SR010 Les enjeux de la scurit


Le mme lenvers ---> ?iouquofuset En utilisant la disposition des touches du clavier: wcb,:qdgjl5 (une touche sur deux plus le chiffre 5 que jaime bien) ==> Sera trouv facilement par un ripper Adresse postale: 28ruejeanmarypavy35340LaBouexiere --> passphrase mais trop long.

## Propos par Alix Pour ne pas avoir retenir la chane drive partir du mnmo, on peut utiliser un algo de crypto, il ny a plus que la chane retenir. Sample, avec seccure-key : http://point-at-infinity.org/seccure/ sudo seccure-key Enter private key:Voulez vous coucher avec moi, ce soir ? The public key is: 0pRiE[YRE6oAQ$j0/@:UVH1de sudo seccure-key -c secp521r1 Enter private key:Voulez vous coucher avec moi, ce soir ? The public key is: !<k@DMuWp:O.5-!A%:KSKg2h=.<yK8.[;L$9%P@5[^m9(...)

## Propos par PYT Bien manger est le frre de bien boire B1mElF2bB! (15/20) Ne veut absolument rien dire QzX[Ty|Up (13/20), manque des chiffres 1 tien vaut mieux que 2 tu lauras 1TvMQ2tLa (15/20) Horizon pas net, reste la buvette HpN,RaLb! (13/20), manque des chiffres Il est plus dcent davoir un grand nez que deux petits. Ie+DdA1gNq2P! (18/20) Quand les mouettes ont pied, il est temps de virer QlMoP,iEt2v! (16/20) Qui trop coute la mto, passe sa vie au bistrot QtElM,pSvOb! (14/20), utiliser des chiffres Tempte pour y aller, ten chie pour revenir! TpYa,TeCpR! (15/20)

## Propos par Christelle 1er mot de passe: ArSvBMr "Agriculture Salon Rpublique Tlphonie Syndicalisme Ptisserie Vaches SFR Bavardages Rvol

421

Chapitre 15. SR010 Les enjeux de la scurit

2me mot de passe: Led8nPr6 "Le dbat nest pas rcent. En 1986..." 3me mot de passe: SueCPuen "Suc musculaire de boeuf concentr phosphoglycrate sodique sulfate de strychine" 4me mot de passe: RijG1TY4 (premires syllabes des 8 premiers paragraphes dun article en utilisant un code trs simple 5me mot de passe: cltEdFcea "Car lagriculture tue, et de faon cruelle, elle aussi..." 6me mot de passe: 94u4hOp1 "Illustration de une de lhebdomadaire lOeil de la police...,1910" (combin un autre code 7me mot de passe: uenyUrR "culard dsigne une hypertrophie musculaire de larrire-train..." 8me mot de passe: oqHOxEz "Le jour se lve a vous apprendra" (+ un code)

15.1.2.4. Commentaires...

Avertissement
Un truc cr par crypt ou une quelconque fonction de courbe elliptique ne sera jamais retenu car bien trop complexe :). Dans ce cas, utiliser un coffre-fort lectronique de type xkeepass (galement portable sur systme privatif) peut aider. Toutefois cela serait reserver des mots de passe dont lutilit nest pas journalire, sinon, "... tu peux commencer accrocher le rj45 la poutre..." (comme dirait JP)

Les mots de passe cyclique par exemple bas sur le calendrier genre on rajoute la n des mots de passe le numro de la semaine sur deux chiffres (semaine 1 --> 01, semaine 12 --> 12) sont viter aussi... Cest une mauvaise ide, car cest prdictible. 53 choix au plus. Sur un mot de passe de dix caractres, tu tombes 8, avec un choix restreint 52 caractres (alphabtique). Un peu plus si on rajoute les accents. Ca ne fait que 8^52 + 53 propositions, que lon peut rduire aux 12 dernires semaines, on passe donc de 53 12. Ca peut paratre norme quand on le dit comme cela, mais pour un calculateur, ce nest plus grand chose :) Un processeur ( acclrateur optique) 8 000 milliards doprations par seconde, soit la vitesse de la lumire ! (http://www.journaldunet.com/solutions/0310/031030_lumiere.shtml) Secouer un peu le tout pour obtenir un truc plus alatoire et moins prdictible.

422

Chapitre 15. SR010 Les enjeux de la scurit

Avertissement
Ceci est loin davoir fait le tour mais on a pas le temps de sattarder. On aurait voir la notion dala, entre autre problme gnr chez debian il y a deux ans pour le paquet SSl.

Un petit aperu (http://bentobako.org/david/blog/index.php?post/2009/04/09/Ung%C3%A9n%C3%A9rateur-de-mots-de-passe-al%C3%A9atoires-en-ligne) de la difcult de construire un gnrateur de mot de passe.

15.1.3. Priodicit (3 mois ou moins)


Un mot de passe, ne se conserve pas vie !!! Dans un environnement non sensible --> dure de vie normale = trois mois En environnement trs sensible --> quinze jours ou moins Il est trs difcile de faire comprendre lutilisateur lambda la ncessit de ce changement.

Avertissement
Attention ne pas tout mettre en zone sensible. Sil y a une politique trop restrictive, elle ne sera pas suivie par les utilisateurs. Pire, elle sera outrepasse.

Un mot de passe qui change souvent, cest aussi lassurance de ne plus sen souvenir un moment ou un autre. Il est bien entendu hors de question de linscrire sur un post-it accroch lintrieur dune armoire ou de le planquer sous le clavier. Cela reste un comportement dangereux et inacceptable. Nest-il pas plus sr, dans ce cas dallonger la dure de vie du mot de passe ? Tu prends un truc solide que tu ne changes quen cas de doute de compromisssion ou de risque. Il est aussi possible dutiliser un portefeuille de mot de passe qui chiffrera tout ce que vous lui donnez et qui vous demandera lui aussi un mot de passe avant de vous laisser accder au saint des saints. Ce portefeuille sera, of course, protg par un mot de passe. Dans ce cas, la problmatique du mot de passe est juste dplace.

423

Chapitre 15. SR010 Les enjeux de la scurit Il est plus facile de scuriser un point que den scuriser 30. Le gestionnaire de mot de passe ne fonctionnera pas avec un mot de passe, mais une passphrase, qui est plus longue et plus robuste. De plus, sil est bien fait, tu coupleras ton authentication avec une cl publique. Sans lun des deux, tu ne fais rien et l, a commence devenir chaud. Gaffe quand mme ne pas perdre lun des deux, car tous tes mots de passe seront perdus :p

Avertissement
Question importante : il est o physiquement ce portefeuille ? dans votre tte, ailleurs ? chiffr comment ? le paquet chiffr il est o ? et en combien dexemplaire ? vous avez mis quoi dedans ? la cl daccs votre frigo, votre compte bancaire, votre compte root, votre passe sur le forum ubuntu.org ?

15.1.4. Rsum (Rgle/Politique de scurit)


## Mot de passe - Taille: min 10 - max 14 caractres - Renouvellement: Tous les 3 mois ou moins - Contenu: Combinaison alatoir sans sens commun de caractre de type suivant: --> Au moins un de chaque type - Majuscules [A-Z] - Minuscules [a-z] - Chiffres [0-9] - Signes [,?.;:/!*textmu%$^=+) _-("&{][|\^@\}]

- Penser (passe)phrase plutt que de mot (de passe) - Ne pas lcrire ou le socker (sauf cas exceptionel dans un portefeuil chiffr de mot de passe) - Ne pas rutiliser les mots de passe expirs - Crer son propre systme mmotechnique/cypher...

15.1.5. Technique pour gnrer son mot de passe (Example simple)


Si vous vous trouvez dans la situation de gnrer un nouveau mot de passe, voici une technique simple mais qui a fait ses preuves:
- Choisissez un mot ou une phrase qui a un sens pour vous (mais qui reste obscur aux yeux des autres). Par exemple votre personnage prfr dans une pice, lanimal que vous aviez pendant votre enfance, etc... Notre exemple pour la suite sera "mot de passe"

424

Chapitre 15. SR010 Les enjeux de la scurit


- Enlevez les espaces et remplacer caractres non ASCII (difficile de trouver laccent sur un clavier QWERTY-us si vous tes en dplacement). Par exemple: "motdepasse" - Substituez les lettres qui sy prtent par des nombres. Par exemple: "m0tdep4ss3" - Mettez en majuscule certaines lettres. Par exemple: "m0TDep4SS3" - Ajoutez des nombres en fin du mot de passe. Par exemple: "m0TDep4SS301" - Ajoutez un ou plusieurs caractres qui ne sont ni des lettres, ni des nombres. Par exemple: "m0TDep4SS3#01"

Et voil, vous avez un beau mot de passe difcilement reconaissable mais mmorisable.

15.1.6. Tester son mot de passe


Source(s):

Web: John The Ripper (john) (http://www.openwall.com/john/) Trs bonne ressource de dictionnaire (http://www.securinfos.info/wordlists-dictionnaires.php)

Un mot de passe peut tre faillible. Comment sen assurer ? En effectuant exactement les mmes attaquesvque celles auxquelles vous pouvez tre soumises. Utilisez un logiciel tel que John the ripper (alias john). Vous pouvez insrer le dictionnaire que vous voulez ou laisser celui par dfaut.
Note : Cette mthode de test, doit tre appliqu en premier lieu. Par la suite en accord avec votre direction, il est ncessaire que les mots de passe de la globalit du SI soient vris, entre autre par attaque par dictionnaire, et ce de manire rgulire.

$ sudo apt-cache search john ... john - active password cracking tool john-data - active password cracking tool - character sets ...

425

Chapitre 15. SR010 Les enjeux de la scurit

$ sudo apt-cache show john Package: john ... Description: active password cracking tool john, mostly known as John the Ripper, is a tool designed to help systems administrators to find weak (easy to guess or crack through brute force) passwords, and even automatically mail users warning them about it, if it is desired. . It can also be used with different cyphertext formats, including Unixs DES and MD5, Kerberos AFS passwords, Windows LM hashes, BSDIs extended DES, and OpenBSDs Blowfish. Homepage: http://www.openwall.com/john/ ...

## Insatllation via le paquet disponible dans la distribution $ apt-get install john #OU ## Installation Manuelle de la dernire version stable $ wget http://www.openwall.com/john/g/john-1.7.3.4.tar.gz $ tar xzf john-1.7.3.4.tar.gz $ cd john-1.7.3.4/src $ make ... linux-x86-any Linux, x86 ... $ make clean linux-x86-any (ou $ make clean generic alternativement) ... $ cd ../run $ ./john --test

## Vrifier tous les mots de passe $ unshadow /etc/passwd /etc/shadow > passwordlist.txt $ john passwordlist.txt Loaded 8 password hashes with 8 different salts (FreeBSD MD5 [32/32]) eeeee (eeeee) ddddd (ddddd) bbbbb (bbbbb) aaaaa (aaaaa) ccccc (ccccc) toto (toto) guesses: 6 time: 0:00:00:26 48% (2) c/s: 4942 trying: Sulp Session aborted #==> 26 secondes pour trouver les mots de passe de dummy !!!

426

Chapitre 15. SR010 Les enjeux de la scurit


## Vrifier un utilisateur $ passwd aaaaa # fruit $ rm .john # supprimer lhistorique pour revrifier aaaaa $ unshadow /etc/passwd /etc/shadow > passwordlist.txt # Mise jour du fichier de mdp $ john -users:aaaaa passwordlist.txt Loaded 1 password hash (FreeBSD MD5 [32/32]) fruit (aaaaa) guesses: 1 time: 0:00:33:59 (3) c/s: 5228 trying: fruit #==> 33 minutes 59 secondes pour un simple mot du dictionnaire !!! ## pour casser le mdp de root ;-) $ john --users=0 ## Afficher la liste des mots de passe craqu $ john -show passwordlist.txt bbbbb:bbbbb:1002:1002:BBB,222,222,222,222:/home/bbbbb:/bin/bash ... toto:toto:1006:1010::/home/toto:/bin/sh 5 password hashes cracked, 3 left

Note : En ce qui concerne le temps dxecution de John The Ripper... John se base sur un dictionnaire pour effectuer les tests. Si celui-ci comporte lencyclopdie mdicale du 18 sicle, il y a de grandes chances que tu ne trouves jamais "fruit" par example. Maintenant, en changeant le dictionnaire par un comportant les types daliments comestibles, il est possible quil hack le mot de passe "fruit" instantanment.

Voir aussi : Cassage et durcissement des mots de passe [PDF Version] (docs/sr010-ch01-doc-extern-cassasage-et-durcissement-mot-de-passe-part2.pdf) Il est possible aussi dutiliser des sites sur internet qui testent la force du mot de passe en leur affectant une note. Cela donne une premire ide, par contre, ce nest pas trs scuris de faire cela !!! En effet, il pourrait commencer par tester sur les comptes quil connat de nous (il ne faut pas oublier quun tel site a notre addresse IP). De plus, la notation est utilise selon un algorithme quils dnissent eux-mme, a ne veut donc pas dire grand chose. Existe-t-il une application, autre que John The Ripper, qui permet de tester la force du mot de passe, et de lui donner une note ? Srement, mais a na pas de sens. Ce serait une note par rapport aux critres pr-programms. Si ces critres ne sont pas satisfaisant, que reste-t-il ? Par exemple, si un logiciel est crit pour donner une note qui dit : si il y a une lettre et un chiffre, jattribue 10/20. Sil y a deux lettres, 11, deux lettres et deux

427

Chapitre 15. SR010 Les enjeux de la scurit chiffres, 12. Un caractre spcial : 14. Deux ? 16. Cest la fte, mais a ne veut rien dire, surtout si cest ab12++.

15.1.7. Clef publique/prive


Finalement les systmes de clef publique/clef prive est-ce plus simple et plus sr ? Oui. Si lalgorithme est correctement implment, cest plus sr car plus difcile casser. Et se posera la question du maillon faible quest la cl prive, tout au moins lutilisateur qui dtient sa cl prive et ce quil en fait. Un bon mdp, ou un couple privKey/pubKey, mais a vous le verrez petit petit, ne fait pas tout, car son utilisation sinscrit dans des chanes assez complexes dutilisation verticales (protocoles) et horizontales (applications) et certaines astuces sont rellement trs trs fortes pour dtourner lattention dune personne an quelle donne linformation quon souhaite. Plus dinfo dans la section Le Chiffrement : Signature & Encryption (GnuPG) ci-aprs

15.1.8. Les sauvegardes


Voir section SR001 Commandes GNU/Linux > SYS01: Sauvegarde et archivage (Backup)

15.1.9. Le Chiffrement (GnuPG)


Voir la section ddie Le Chiffrement : Signature & Encryption (GnuPG) ci-aprs

15.1.10. Un espace hermtique


Voir la section ddie Un Espace Hermtique ci-aprs

15.2. Le Chiffrement : Signature Numrique & Encryption

428

Chapitre 15. SR010 Les enjeux de la scurit

(GnuPG)
Source(s):

OF: SR010-ch02-act001-a1-sr010-signature_electronique.pdf (docs/eof/sr010-ch02-act001-a1-sr010-signature_electronique.pdf) Web: Cryptographie Tutoriel (http://www.uqtr.ca/~delisle/Crypto) Une tude des messages secrets de lAntiquit nos jours (http://www.apprendre-en-ligne.net/crypto/menu/index.html) Analyse des algorithmes nalistes concourant pour le futur standard AES par JP. Gaulier [En Ligne] (http://jp.gaulier.info/rapport.pdf) Analyse des algorithmes nalistes concourant pour le futur standard AES par JP. Gaulier [Hors Ligne] (docs/eof/sr010-ch01-doc-extern-analyse-des-algorithmes-nalistesconcourant-pour-le-futur-standard-AES-rapport.pdf) GnuPG: GnuPG (encrypt & sign) (http://www.gnupg.org) Pour dmarrer... (http://www.gnupg.org/gph/fr/manual.html) HOWTOs (http://www.gnupg.org/documentation/howtos.en.html) OpenPGP Alliance (http://www.openpgp.org) OpenPGP Message Format (RFC 4880) (http://www.ietf.org/rfc/rfc4880.txt) Validating a PGP key without personal contact [Pas recommend !] (http://www.pps.jussieu.fr/~jch/software/pgp-validating.html) Using multiple subkeys in GPG (http://fortytwo.ch/gpg/subkeys) S/MIME versus PGP/MIME (http://www.imc.org/smime-pgpmime.html) PKI: Dploiement dune Infrastructure de Gestion de Cls publiques libre par M. Falzon (http://falzon.info/work/nds2005-mfalzon.pdf) [PDF Version] (docs/sr010-ch02-pki-nds2005-mfalzon.pdf)

15.2.1. Chiffrement symtrique (une clef) / asymtrique (paire de clefs)


Cryptographie n.f. Procd (signes conventionnels, modication de lordre, de la disposition dessignes, remplacement des signes...) permettant de rendre un message inintelligible, de protger des donnes. Deux grandes familles complmentaires : le symtrique (clef unique connue de tous) et lasymtrique (couple clef publique connu de tous et clef secrte connu du propritaire seulement).
- Une clef publique sert chiffrer ou vrifier une signature - Une clef prive sert dchiffrer et signer des donnes

Une cl publique consiste en la portion publique de la cl principale de signature, la portion publique des cls secondaires de chiffrement et de signature et les identiants utiliss pour associer la cl publique une personne relle. Chaque partie de la cl possde des informations sur elle mme : ses identiant dutilisateurs, sa date de cration, sa date dexpiration, etc. Pour un identiant, ces donnes incluent le nom de la personne relle quelle identie, un commentaire optionnel et une adresse email.

429

Chapitre 15. SR010 Les enjeux de la scurit Une cl prive consiste en une structure similaire, except quelle ne contient que les portions prives des cls, et quil ny a pas dinformations concernant les identiants dutilisateur.
## un exemple simple de chiffrement par rotation des lettres $ echo "je vais bien et toi ?" | tr a-z n-za-m wr invf ovra rg gbv ? $ echo "wr invf ovra rg gbv ?" | tr n-za-m a-z je vais bien et toi ?

15.2.2. Installation et conguration de GnuPG


## Installation $ apt-get install gnupg kgpg # gnupg (suite de commande GnuPG) # kgpg (interface graphique GnuPG)

## Configuration ~/.gnupg/gpg.conf (docs/sr010-ch02-gpg-conf.txt)

# Un fichier de configuration par utilisa

15.2.3. Lister les clefs de son trousseau


## Lister les clefs $ gpg --list-keys # Aucune nexiste par dfaut sur Debian :) /home/filostene/.gnupg/pubring.gpg # Par contre sur Ubuntu... ---------------------------------pub 1024D/88C7C1F7 1999-01-30 uid Steve McIntyre <steve@einval.com> uid Steve McIntyre <93sam@debian.org> uid Steve McIntyre <stevem@chiark.greenend.org.uk> uid Debian CD signing key <debian-cd@lists.debian.org> sub 1024g/9315EA5D 1999-01-30 # En tant que root ? $ gpg --list-keys gpg: rpertoire /root/.gnupg cr gpg: nouveau fichier de configuration /root/.gnupg/gpg.conf cr gpg: AVERTISSEMENT: les options de /root/.gnupg/gpg.conf ne sont pas encore actives cette gpg: le porte-cls /root/.gnupg/pubring.gpg a t cr gpg: /root/.gnupg/trustdb.gpg: base de confiance cre #==> On voit ainsi les fichiers minimum utilis par GnuPG

430

Chapitre 15. SR010 Les enjeux de la scurit

15.2.4. Gnrer un nouvelle paire de clefs


## Gnrer une nouvelle paires de clefs --gen-key $ gpg --gen-key gpg (GnuPG) 1.4.9; Copyright (C) 2008 Free Software Foundation, Inc. ... Slectionnez le type de cl dsir: (1) DSA et Elgamal (par dfaut) (2) DSA (signature seule) (5) RSA (signature seule) Votre choix ? 1 # Je choisis le type # de clef par dfaut # DSA et Elgamal La paire de cls DSA fera 1024 bits. les cls ELG-E peuvent faire entre 1024 et 4096 bits de longueur. Quelle taille de cl dsirez-vous ? (2048) La taille demande est 2048 bits # Je garde la taille # par dfaut Spcifiez combien de temps cette cl devrait tre valide. 0 = la cl nexpire pas <n> = la cl expire dans n jours <n>w = la cl expire dans n semaines <n>m = la cl expire dans n mois <n>y = la cl expire dans n annes La cl est valide pour ? (0) 0 La cl nexpire pas du tout Est-ce correct ? (o/N) o # Je choisi le temps # de validit par dfaut Vous avez besoin dun nom dutilisateur pour identifier votre cl; ... Vous avez slectionn ce nom dutilisateur: "Richard Lger (noComment) <richard.leger.AT.gmail.com>" # Mon nom dutilsateur Vous avez besoin dune phrase de passe pour protger votre cl secrte.

# Je choisis un passephrase

gpg: gpg-agent nest pas disponible dans cette session Un grand nombre doctets alatoires doit tre gnr. Vous devriez faire autre-chose (taper au clavier, dplacer la souris, utiliser les disques) pendant la gnration de nombres premiers; cela donne au gnrateur de nombres alatoires une meilleure chance davoir assez dentropie. ... Il ny a pas assez doctets alatoires disponibles. Faites autre chose pour que lOS puisse amasser plus dentropie ! (il faut 284 octets de plus) gpg: cl 78A9AF9E marque comme ayant une confiance ultime. les cls publique et secrte ont t cres et signes. gpg: vrifier la base de confiance gpg: 3 marginale(s) ncessaires, 1 complte(s) ncessaires, modle de confiance PGP

431

Chapitre 15. SR010 Les enjeux de la scurit


gpg: profondeur: 0 valide: 1 sign: confiance: 0-. 0g. 0n. 0m. 0f. 1u pub uid sub 0

1024D/78A9AF9E 2010-03-04 Empreinte de la cl = C49D 278A 3641 01AF B216 867F 8C7F 1AC9 78A9 AF9E Richard Lger (noComment) <richard.leger.AT.gmail.com> 2048g/97F7FF28 2010-03-04

Avertissement
Si lors de la gnration de la clef, le processus a besoin de plus dentropie, il suft daugmenter lactivit sur la machine (taper au clavier, ecouter de la musique, voir un video en streaming, etc...) jusqu ce que la clef soit gnre. ## Je vrifie... $ gpg --list-keys /home/filostene/.gnupg/pubring.gpg ---------------------------------... pub 1024D/78A9AF9E 2010-03-04 uid Richard Lger (NoComment) <richard.leger.AT.gmail.com> sub 2048g/97F7FF27 2010-03-04

15.2.5. Gnrer un certicat de rvocation


## Gnrer un certificat de rvocation --gen-revoke ## Syntaxe: $ gpg --output revoke.asc --gen-revoke mykey $ gpg --output revoke.asc --gen-revoke richard.leger.AT.@gmail.com $ gpg --output revoke.asc --gen-revoke 78A9AF9E # Alternative sec 1024D/78A9AF9E 2010-03-04 Richard Lger (noComment) <richard.leger.AT.gmail.com> Gnrer un certificat de rvocation pour cette cl ? (o/N) o ... Cause de rvocation: Aucune raison spcifie A utiliser en cas de clef compromise... Est-ce daccord ? (o/N) o Vous avez besoin dune phrase de passe pour dverrouiller la clef... ... Certificat de rvocation cr. # Ok # Je confirme

# Jindique une raison

# Je rentre mon passephrase

Dplacez-le dans un support que vous pouvez cacher ; si Mallory a accs ce certificat il peut lutiliser pour

432

Chapitre 15. SR010 Les enjeux de la scurit


rendre votre cl inutilisable. Une bonne ide consiste imprimer ce certificat puis le stocker ailleurs, au cas o le support devient illisible. Mais attention : le systme dimpression de votre machine pourrait stocker ces donnes et les rendre accessibles dautres personnes ! $ cat revoke.asc -----BEGIN PGP PUBLIC KEY BLOCK----Version: GnuPG v1.4.9 (GNU/Linux) Comment: A revocation certificate should follow iG8EIBECADA (...) XV+JFnkdrGT4= =k0jp

Note : Il est conseill, dimmdiatement crer un certicat de rvocation pour la cl principale. Si vous oubliez votre mot de passe, ou si votre cl prive est compromise ou perdue, ce certicat de rvocation peut tre publi pour notier aux autres que votre cl publique ne doit plus tre utilise. On peut toujours se servir dune cl publique rvoque pour vrier des signatures que vous avez faites par le pass, mais on ne peut sen servir pour chiffrer de nouveaux messages votre attention. Cela naffecte pas non plus votre capacit dchiffrer les messages qui vous ont t adresss prcdemment, si vous avez toujours accs votre cl prive.

15.2.6. Export de clefs


## Exporter une cl publique --export ## Pour envoyer un correspondant. ## Syntaxe : gpg --export mykey # Export au format binaire $ gpg --output richardbin.gpg --export richard.leger.AT.gmail.com $ gpg --output richardbin.gpg --export 78A9AF9E # Alternative $ cat richardbin.gpg 01100111000110100 (...) # # $ $ Export au format ASCII-armored (blindage ASCII) Pour envoye par email ou publie sur une page web gpg --armor --output richardascii.gpg --export richard.leger.AT.gmail.com gpg --armor --output richardascii.gpg --export 78A9AF9E # Alternative

$ cat richardascii.gpg -----BEGIN PGP PUBLIC KEY BLOCK----Version: GnuPG v1.4.9 (GNU/Linux) mQGiBEuPqfwRBACmyPhwyJKuBgXV1BtTgtoskpmSNZypTsu+tdNVSZQzvDKHXezC (...) ly4Zory5OLACpSMm9AvYcwRw2A== =P8fQ

433

Chapitre 15. SR010 Les enjeux de la scurit


-----END PGP PUBLIC KEY BLOCK-----

## Exporter la cl prive ## Syntaxe: gpg --export-secret-key keyid > seckey.pgp $ gpg --output richardbinsec.gpg --export-secret-key 78A9AF9E $ gpg --armor --output richardasciisec.gpg --export-secret-key 78A9AF9E

15.2.7. Import de clefs


## Importer une cl publique --import ## Ajoute votre trousseau de cls publiques $ gpg --import vincent.gpg # Peut tre binaire ou ascii

Voir aussi ci-aprs comment importer une clef publique depuis un serveur de clefs

15.2.8. Emprunte et signature de clef publique


Note : Lempreinte dune cl est vrie avec le propritaire de la cl. Ce peut tre fait en personne (le plus sr pour ver lidentit), au tlphone, ou par tout autre moyen, du moment que vous pouvez garantir que vous communiquez bien avec le vrai propritaire de la cl. Si lempreinte que vous obtenez est la mme que celle que le propritaire de la cl obtient, alors vous pouvez tre sr que vous avez une copie correcte de la cl.

Avertissement
Une clef publique ne doit pas tre signe tant que lon a pas rencontr physiquement son propritaire et que lon sest assur de son identit.

Avertissement
tant donn que la vrication des cls est un point faible du chiffrement cl publique, vous devez tre extrmement prudent et toujours vrier lempreinte dune cl avant de la signer.

Vous pouvez signer la cl pour la valider une fois que les conditions ci-dessus sont remplies.
## Editer la clef $ gpg --edit-key vincent@sondomaine.org

434

Chapitre 15. SR010 Les enjeux de la scurit


## Valider la clef importe ## en vrifiant son empreinte. Command> fpr

# Equivalent de --fingerprint option

## En la signant, vous certifiez que cest une cl valide. ## Aprs avoir vrifi lempreinte Command> sign ## Vrfifier Command> check

15.2.9. Chiffrer/Dchiffrer un document


## Chiffrer des documents (via cl publique) --encrypt $ gpg --output doc-encrypted.gpg --encrypt --recipient vincent@sondomaine.org --recipient alice@sondomaine.org doc-original

Note : Loption --recipient est utilise une fois pour chaque destinataire du message, et prend un argument supplmentaire spciant la cl publique pour laquelle le document doit tre chiffr.

Avertissement
Le document chiffr peut seulement tre dchiffr par quelquun possdant une cl prive qui correspond une des cls publiques des destinataires. En particulier, vous ne pouvez pas dchiffrer un document chiffr par vous, moins que vous ayez inclus votre cl publique dans la liste des destinataires. ## Dchiffrer des documents (via clef prive) --decrypt $ gpg --output doc-orgininal --decrypt doc-encrypted.gpg

Note : Vous avez besoin de la cl prive (et du passephrase correspondant) pour laquelle le message a t chiffr.

## Chiffrer des documents sans recourrir la cl publique --symmetric ## Chiffrement symtrique : cl drive du mot de passe fourni $ gpg --output doc-encrypted.gpg --symmetric doc-original Enter passphrase: $ gpg --output doc-orgininal --decrypt doc-encrypted.gpg Enter passphrase:

435

Chapitre 15. SR010 Les enjeux de la scurit

Avertissement
Le mot de passe ne doit pas tre le mme que celui que vous utilisez pour protger votre cl publique. Le chiffrement symtrique est utile quand le mot de passe na pas besoin dtre communiqu aux autres.

15.2.10. Signature Numrique (ou Electronique) dun document


## Gnrer une signature numrique --sign $ gpg --output doc-signe.sig --sign doc-original Enter passphrase: ## Documents signs en clair (pas de compression) alice% gpg --clearsign doc

Note : Le document est compress avant dtre sign, et la sortie est au format binaire Un usage commun des signatures numriques est de signer les messages email. Dans une telle situation, il est inopportun de compresser le document quand on le signe. Loption --clearsign entrane que le document est suivi par une signature ASCII-armored, mais le document nest pas modi outre mesure.

15.2.11. Vrier la signature dun document


## Vrifier la signature uniquement --verify $gpg --verify doc-signe.sig ## Vrifier la signature et rcuprer le document original --decrypt $ gpg --output doc-original --decrypt doc-signe.sig

Note : Une signature numrique certie et date un document. Si le document est modi dune quelconque manire, une vrication de la signature chouera. Un signature numrique peut servir les mmes besoins quune signature manuscrite, en outre elle ne peut pas tre contrefaite. La cration et la vrication des signatures utilisent les paires de cls prive/publique pour une opration diffrente du chiffrement et du dchiffrement. Une signature est cre en utilisant la cl prive du signataire. La signature est vrie en utilisant la cl publique correspondante.

436

Chapitre 15. SR010 Les enjeux de la scurit

15.2.12. Gestion du trousseau de clefs (publique/prive, sous-cls, etc...)


## Grer votre paire de cls (publique/prive) ## option de ligne de commandes --edit-key $ gpg --edit-key vincent@sondomaine.org Secret key is available.

# # # # # # # #

un drapeau indiquant si la cl prive est disponible suivit des informations sur chaque composant de la cl

pub sub

1024D/26B6AAE1 2048g/0CF8CB7A

created: 1999-06-15 expires: never created: 1999-06-15 expires: never

cl publique principale de si identifi par le type pub cl publique secondaire identifi par le type sub

sub 1792G/08224617 created: 1999-06-15 expires: 2002-06-14 sub 960D/B1F423E7 created: 1999-06-15 expires: 2002-06-14 (1) Vincent (Jester) <vincent@sondomaine.org> # Liste des identifiants dutil (2) Vincent (Plebian) <vincent@tel.net> Command> # Ligne de commande # Colonne deux indique la longueur de la cl en bits son type D-DSA, g-ElGamal(Chiffrement seul), G-ElGamal(Chiffrement&Signature) son identifiant.

# Colonne trois et quatre indiquens - dates de cration - dates dexpiration

## Basculer (toggle) entre la composante prive et la composante publique ## de la paire de cls (si elles sont effectivement disponibles). Command> toggle sec sbb 1024D/26B6AAE1 2048g/0CF8CB7A created: 1999-06-15 expires: never created: 1999-06-15 expires: never # # # #

cl prive principale de sign identifi par le type pub sbb identifie les cls priv secondaires

bb 1792G/08224617 created: 1999-06-15 expires: 2002-06-14 sbb 960D/B1F423E7 created: 1999-06-15 expires: 2002-06-14 (1) Chlo (Jester) <vincent@sondomaine.org> (2) Vincent (Plebian) <vincent@tel.net> ## Les informations fournies sont similaires celles affiches pour la cl publique.

## Vrification avec ma paire de clefs ! $ gpg --edit-key richard.leger@gmail.com gpg (GnuPG) 1.4.9; Copyright (C) 2008 Free Software Foundation, Inc. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.

437

Chapitre 15. SR010 Les enjeux de la scurit


La cl secrte est disponible. pub cr: 2010-03-04 expire: jamais utilisation: SC confiance: ultime validit: ultime sub 2048g/97F7FF27 cr: 2010-03-04 expire: jamais utilisation: E [ ultime ] (1). Richard Lger (fr74) <richard.leger@gmail.com> Commande> toggle sec ssb (1) 1024D/78A9AF9E cr: 2010-03-04 expire: jamais 2048g/97F7FF27 cr: 2010-03-04 expire: jamais Richard Lger (fr74) <richard.leger@gmail.com> 1024D/78A9AF9E

## Vrifier lintgrit de clefs $ gpg --edit-key mykey_tocheck Commande> check

Dautres commandes existent :


## Ajouter et supprimer des composantes une cl # Ajouter des identifiants dutilisateur Commande> adduid # nom, email, commentaire # Ajouter une sous-cl Commande> addkey # Require passphrase de la clef principale # Supprimer un identifiant dutilisateur Commande> uid 1 # selectionne/deselectionne le premier identifiant Commande> deluid # efface lidentifiant selectionn # Ajouter une sous-cl Commande> key 2 # selectionne/deselectionne la 2me sous clef Commande> delkey # efface la sous clef selectionne ## Rvoquer les composants dune cl Commande> revkey # rvoque la sous-cl slectionne ## Mettre jour la date dexpiration dune cl Commande> expire # Si aucune cl est slectionne, cest la date dexpiration # de la cl principale qui est mise jour. ## Afficher Finger print de clef Command> fpr # Equivalent de --fingerprint option ## Dfinir le niveau de confiance que ## vous avez dans le propritaire dune cl Commande> trust ## Quitter ldition de clefs

438

Chapitre 15. SR010 Les enjeux de la scurit


Commande> quit

Note : Des identiants dutilisateur supplmentaires sont utiles quand vous avez besoin de multiples identits. Par exemple, vous pouvez avoir besoin dune identit pour votre emploi et une pour votre engagement politique. Les sous-cls supplmentaires sont aussi ncessaires. Les identiants dutilisateur associs votre cl publique principale sont valids par les utilisateurs avec qui vous communiquez, et changer la cl principale ncessite de refaire les certications. Ce peut tre difcile et prendre beaucoup de temps si vous communiquez avec de nombreuses personnes. Dun autre ct, il est recommand de changer priodiquement les cls de chiffrement. Si la cl est casse, toutes les donnes qui sont chiffres avec elle sont vulnrables. Par contre, en changeant les cls, seules les donnes chiffres avec celle qui est casse seront rvles.

Infos complmentaires sur la notion de sous-clefs: GnuPG Handbook - Ajouter et supprimer des composantes une cl (http://www.gnupg.org/gph/fr/manual.html#AEN288) Dnition des dates dexpiration et utilisation des cls secondaires (http://www.gnupg.org/gph/fr/manual.html#AEN534) Using multiple subkeys in GPG (http://fortytwo.ch/gpg/subkeys) Using various subkeys (http://lists.gnupg.org/pipermail/gnupg-users/2002-August/014721.html) Using subkey signatures (http://lists.gnupg.org/pipermail/gnupg-devel/2002-September/007700.html) HOW TO MIGRATE A (SUB)KEY INTO A NEW KEY (http://atom.smasher.org/gpg/gpg-migrate.txt) HOW TO CREATE A GPG KEY WITH MORE THAN ONE PASS-PHRASE (http://atom.smasher.org/gpg/gpg-passwords.txt)

15.2.13. Distribution de cls (Serveur de cls)


Voir aussi Import/Export de clefs ci-avant...
## Distribution de cls ## Serveur de clef utilis par dfaut

439

Chapitre 15. SR010 Les enjeux de la scurit


$ cat ~/.gnupg/gpg.conf ... keyserver hkp://keys.gnupg.net #keyserver mailto:pgp-public-keys@keys.nl.pgp.net #keyserver ldap://keyserver.pgp.com ... ## Rcuprez la clef publique 0xFFAD5F7C de JP $ gpg --keyserver keys.gnupg.net --recv-key 0xFFAD5F7C $ gpg --keyserver keys.gnupg.net --recv-key jp@free.fr # Alternative si je # connais lidentit utilisateur $ gpg --recv-key 0xFFAD5F7C # Autre alternative quivalente # puisque le serveur est utilis # par dfaut (indiqu dans la configuration) gpg: gpg: gpg: gpg: gpg: gpg: requte de la cl FFAD5F7C du serveur hkp keys.gnupg.net cl FFAD5F7C: cl publique Jean-Philippe Gaulier <jp.AT.free.fr> importe 3 marginale(s) ncessaires, 1 complte(s) ncessaires, modle de confiance PGP profondeur: 0 valide: 1 sign: 0 confiance: 0-. 0g. 0n. 0m. 0f. 1u Quantit totale traite: 1 importe: 1

## Export de ma paire de clef $ gpg --keyserver keys.gnupg.net --send-key richard.leger.AT.cyb.org $ gpg --keyserver keys.gnupg.net --send-key 0x78A9AF9E # Alternative $ gpg --send-key 0x78A9AF9E # Autre alternative quivalente # puisque le serveur est utilis # par dfaut (indiqu dans la configuration) --keyserver : serveur de cls (du)auquel les cls sont envoyes/reues --send-keys : une ou plusieurs cls envoyes un serveur de cls --recv-keys : rcuprer les cls depuis un serveur de cls requiert lutilisation dun ID de cl pour spcifier la cl

Avertissement
--keyserver doit apparatre avant --send-key ou --recv-key (Cest d un bug apparement...)

Pour mettre jour votre cl, il vaut mieux rvoquer les composants plutt que de les effacer .Si vous envoyez votre cl un serveur de cls, la fusion a lieu quoi quil arrive, et toute personne qui tlchargera la cl depuis le serveur ne verra pas la cl avec les composants effacs.

De manire idale, vous devez distribuer vos cls en les donnant personnellement vos correspondants. En pratique, les cls sont souvent distribues par email, diffusion sur page Web, etc...

440

Chapitre 15. SR010 Les enjeux de la scurit Il existe aussi des serveurs de cls publiques qui sont utiliss pour collecter et distribuer les cls publiques. Une cl publique reue par le serveur est soit ajoute la base de donnes du serveur soit fusionne avec la cl existante si elle est dj prsente. Quand une requte de cl arrive au serveur, ce dernier consulte sa base de donnes et renvoie la cl publique sil la trouve. Lutilisation dun serveur de cls est aussi intressante quand de nombreuses personnes signent frquemment les cls dautres personnes. Lutilisation dun serveur de cls rend le procd plus facile. De nombreux serveurs de cls populaires sont en service travers le monde. Les serveurs de cls les plus importants se synchronisent entre eux ; il est donc sufsant de slectionner un serveur de cls proche de vous sur lInternet et de lutiliser rgulirement pour envoyer et recevoir des cls.
## Vrification de limport de clef $ gpg --list-keys ~/.gnupg/pubring.gpg ... pub 1024D/FFAD5F7C 2003-02-14 uid Jean-Philippe Gaulier <jp.AT.free.fr> uid Jean-Philippe Gaulier ... ... sub 4096g/08C5502C 2003-02-14

15.2.14. Chiffrement de messages courriels


## Envoyez JP un message sign $ gpg --output msgsigned.pgp --sign msg.txt #==> Puis envoi par courriel du fichier msgcruypted.pgp ## Envoyer JP un message chiffr $ gpg --output msgcrypted.pgp --encrypt --reciptient FFAD5F7C msg.txt #==> Puis envoi par courriel du fichier msgcruypted.pgp

Cette mthode quoi que fonctionnelle na pas le mrite dtre efcace car elle oblige deux actions: crer le chier, puis lenvoyer... Heureusement un certains nombre de logiciels peuvent travailler directement avec GnuPG notemment les logiciels courrier tel que Evolution, Thunderbird (requiert add-on Enigmail), Claws Mail(requiert module PGPCore PGPMIME), etc... nativement (module pr-charg) ou via des extensions installer pour permettre une signature ou le chiffrement de message la vol :) Info sur Thunderbird+Enigmail peuvent tre trouv : Welcome to the Enigmail Quick Start Guide (http://enigmail.mozdev.org/documentation/quickstart.php)
## Evolution - Configuration du chiffrement GPG

441

Chapitre 15. SR010 Les enjeux de la scurit


1.Choisissez dition > Prfrences, puis slectionnez Comptes de messagerie. 2.Slectionnez le compte pour lequel vous voulez ajouter la scurit, puis cliquez sur dition. 3.Cliquez sur longlet Scurit. 4.Indiquez votre identifiant de cl dans le champ ID de la cl PGP/GPG . 5.Cliquez sur Crer . 6.Cliquez sur Fermer. ## Evolution - Chiffrement des messages Pour chiffrer un message unique : 1.Ouvrez la fentre ddition dun message. 2.Choisissez Scurit > Chiffrer avec PGP. 3.crivez votre message. Cliquez sur Envoyer.

Avertissement
Le sujet du message ne sera pas chiffr et ne devrait pas contenir dinformation sensible.

## Configurer Evolution pour quil signe tous vos courriels : 1.Choisissez dition > Prfrences, puis slectionnez Comptes de messagerie. 2.Slectionnez le compte pour lequel vous voulez ajouter la scurit, puis cliquez sur diti 3.Cliquez sur longlet Scurit. 4.Cochez loption Toujours signer les messages sortants lors de lutilisation de ce compte. 5.Cliquez sur Crer . 6.Cliquez sur Fermer. ## Evolution - Dchiffrement dun message reu 1.Si vous recevez un message chiffr, vous devez le dchiffrer avant de pouvoir le lire. 2.Rappelez-vous que lexpditeur doit disposer de votre cl publique avant de pouvoir vous envoyer un message chiffr. 3.Lorsque vous affichez le message, Evolution vous demande votre mot de passe PGP. Saisissez-le et le message dchiffr apparatra.

## Claws Mail - Configuration 1.Choisissez Configuration > Modules 2.Cliquez sur Charger 3.Dans /usr/lib/claws-mail/plugins selectionner (press CTRL pour multi-selection) : pgpcore.so pgpinline.so pgpmime.so 4.Valider 5.Fermer 6.Choisissez Configuration > Configuration du compte courant

442

Chapitre 15. SR010 Les enjeux de la scurit


7.Selectionner section GPG 8.Selectionner "Spcifier la cl manuellement" puis rentrer le numro de cl (Ex: GTAD5F7C) 9.Valider Claws Mail - Chiffrement des messages Pour chiffrer un message unique : 1.Ouvrez la fentre ddition dun message. 2.Choisissez Options > Systme de confidentialit > PGP MIME 3.Choisissez Options > Signer (et/ou Chiffrer) 4.crivez votre message. Cliquez sur Envoyer.

15.2.15. PGP/inline, PGP/MIME, S/MIME (PKI)


Note : PGP/MIME et PGP/inline sont des mthodes qui dcrivent comment PGP and GnuPG sont utiliss lintrieur dun client e-mail. PGP/MIME a t developper pour pallier aux problme que peut causer PGP/inline. PGP/MIME est dnit dans les RFC 2015 (1996) et RFC 3156 (2001)
Avantage de PGP/MIME sur PGP/inline : - Pice jointe sont chiffres et sign (ex: text, spreadsheet, PDF documents, etc...) - "umlauts" et carctres non-ASCII peuvent tre utilis - la signature PGP est spar du corps de lemail (en pice jointes) rendant lemail plus lisible

Liste des clients e-mails qui supporte PGP/MIME (http://www.bretschneidernet.de/tips/secmua.html) S/MIME versus PGP/MIME (http://www.imc.org/smime-pgpmime.html) : Ce sont deux solutions de signature/chiffrement antinomiques. Avec S/MIME il nexiste pas de notion de chaine de conance mais on vient la notion dautorit de certication et la conance quon lui accorde. Le chiffrement S/MIME utilise galement une approche base sur les cls, pour certains semble prsenter certains avantages en terme de confort et de scurit. S/MIME utilise des certicats numrique qui sont comparables aux cls. La partie publique de chaque certicat est conserve par lexpditeur dun message et par lune des autorits de certication qui sont payes pour garantir lidentit dun expditeur et la scurit des messages. Evolution reconnat dj un grand nombre dautorits de certication. Ainsi, lorsque vous recevez un message dot dun certicat S/MIME, votre systme reoit automatiquement la partie publique du certicat et dchiffre ou vrie le message. S/MIME est intressant pour de nombreux changes (le plus souvent, S/MIME est utilis dans un environnement professionnel entre deux socits, lintrieur dune socit...), on fait conance tous

443

Chapitre 15. SR010 Les enjeux de la scurit message sign par lautorit X. Dans ce cas, les administrateurs fournissent des certicats quils ont acquis auprs dautorits de certication. Dans certains cas, une organisation peut jouer le rle dautorit de certication, avec ou sans la garantie dune autorit reconnue comme VeriSign ou Thawte. Dans tous les cas, cest ladministrateur systme qui vous fournit un chier de certicat. Il est possible de signer/chiffrer ses donnes avec une paire de cls gnres par OpenSSL, enn, une certaine implmentation/usage (sinon, a ne sappellerait pas S/MIME, mais ssl-mail :p) Au sein dune socit, il peut tre plus facile avec des gens qui ne comprennent rien, de mettre en place une solution S/MIME gre par le service IT que dimposer GPG tout le monde mais cest discutable selon certains... :) Inconvenient de S/MIME:
- Il faut avoir confiance dans lAutorit de Certification (AC), grer les rvocations, la perte de mots de passe, etc... - Cest une solution centralise...

Note : Une PKI (Public Key Infrastructure ou "Infrastructure de Gestion de Cls Publiques") est un systme semi autonome permettant de gnrer puis de contrler le cycle de vie de certicats numriques.

Note : Certicat numrique : Un certicat permet dassocier une cl publique une entit (organisation, machine, individu); il est en quelque sorte la carte didentit de la cl publique, dlivr par un organisme appel autorit de certication (souvent note CA pour Certication Authority ), que lon retrouve dans une PKI. Techniquement, il sagit dun bloc dinformations organises selon une structure particulire (Standard X.509 de lITU) qui impose que le certicat donne les informations suivantes :
le nom de lautorit de certification, le nom du propritaire du certificat, la date de validit du certificat, lalgorithme de chiffrement utilis, la cl publique du propritaire, la signature numrique des donnes ci-dessus par une personne ou entit prenant en charge la cration de ce certificat et ayant autorit de certification.

Lensemble de ces informations (informations + cl publique du demandeur) est sign par lautorit de certication; cela signie quune fonction de hachage cre une empreinte de ces informations, puis ce condens est chiffr laide de la cl prive de lautorit de certication, la cl publique ayant t pralablement largement diffuse an de permettre aux utilisateurs de vrier la signature avec la cl publique de lautorit de certication.

444

Chapitre 15. SR010 Les enjeux de la scurit

15.2.16. Gestionaires Graphique de clefs (publique/prive)


Il existe des gestionnaires graphiques de clefs compatible GnuPG tel que KGpg Les modules de client courrier (Enigmail, GPG/Core, etc...) permettant la signature/chiffrement de messages, fournissent aussi souvent de fonction de gestion de clefs (interface graphique GnuPG): Cration de clef, certicat de rvocation, recherche de clef publique sur serveurs de clef, etc...

15.3. Un espace hermtique


15.3.1. DMZ (Zone dmilitarise)
Source(s):

Web: DMZ (Wikipdia) (http://fr.wikipedia.org/wiki/Zone_d%C3%A9militaris%C3%A9e) DMZ (Comment a Marche) (http://www.commentcamarche.net/contents/protect/dmz-cloisonnement.php3) Strengthening network defenses by using a DMZ (http://articles.techrepublic.com.com/5100-22_11-5756029.html)

Une DMZ est une espce de zone blanche qui se trouve entre le rseau interne et lextrieur. Cette zone contiendra lensemble des serveurs devant tre accessibles par les deux bords (Internet et LAN).

En informatique, une zone dmilitarise (ou DMZ , de langlais "demilitarized zone") est un sous-rseau isol par un pare-feu. Ce sous-rseau contient des machines se situant entre un rseau interne (LAN - postes clients) et un rseau externe (typiquement, Internet). Le nom provient lorigine de la zone corenne dmilitarise.

Elle se dnit aussi comme une zone, un sous-rseau voire une plage dadresses IP (ou une seule adresse IP) sur un rseau ntant pas soumise aux rgles dun pare-feu. La DMZ permet ses machines daccder Internet et/ou de publier des services sur Internet sous le contrle du pare-feu externe. En cas de compromission dune machine de la DMZ, laccs vers le rseau local est encore contrl par le pare-feu interne. http://fr.wikipedia.org/wiki/Zone_dmilitarise (http://fr.wikipedia.org/wiki/Zone_d%C3%A9militaris%C3%A9e)

445

Chapitre 15. SR010 Les enjeux de la scurit Figure 15-1. Architecture DMZ avec deux pare-feu

446

Chapitre 15. SR010 Les enjeux de la scurit Figure 15-2. Architecture DMZ avec un seul pare-feu

15.3.2. Protger son rseau - Contrler les accs


Pour protger un rseau, il est important de contrler les accs (bas sur lutilisation et besoin des systmes/utilisateurs) :
- extrieurs et nautoriser que des flux vers votre zone dmilitarise (DMZ), En schmatisant, cest la face visible de liceberg que peut tre un systme, mais parfois peut se greffer aussi la notion dextranet. - ne laisser entrer personne sur votre rseau sans motif lgitime (employ mobile ayant besoin daccder au SI :vpn, ppp...) - de tout ce qui sort de votre rseau (p2p, messagerie instantane, protocoles non srs, ...

447

Chapitre 15. SR010 Les enjeux de la scurit


mais aussi virus, machines craques et qui sont devenus zombies, etc...)

15.3.3. Dnir les usages: Qui (Client/Serveur), Quoi (Service), Pourquoi, Comment (Interface, Ports)
Pour cela il est important de dnir les usages ou services utilis :
Serveur Web (WWW) et accs Web (HTTP, HTTPS) Serveur de Messagerie (SMTP, POP, IMAP) Un service Noms (DNS) Un serveur ftp (FTP, FTPS) Un serveur ssh (SSH) Backup/Synchronisation (RSYNC) Serveur de temps (NNTP) Connection VPN (?)

448

Chapitre 15. SR010 Les enjeux de la scurit

Avertissement
Il nest pas sufsant de dterminer seulement les services, la vrai question est qui accde quoi et comment ?

Examples :
- Un serveur ftp (FTP, FTPS) ? Pourquoi un service FTP et comment le justifier ? Une entreprise a-t-elle besoin de a ? pour qui ? pourquoi ? Faut-il le mettre sur la DMZ ? - Backup/Synchronisation (RSYNC) Do, vers o ? Rsync peut tre tunnel dans ssh, donc la question nest pas l...

Il faut penser client/serveur. Qui se connecte sur quoi ?


- est-ce le site distant qui se connecte sur ton serveur ? - est-ce ton serveur qui se connecte sur le site distant ?

Le service serveur nest pas localis au mme endroit.

Et on peut compltement reverser tout a en mettant des proxy.

Note : Bien garder lesprit quon a bien deux process :


- un serveur - un client

- Les bases de donnes ? O sont-elles ? Sur quels interfaces (et ports) coutent elles ?

Si un serveur coute sur localhost, il y a moins de risque que sil coute sur les interfaces physiques : l il y a possibilit de connexion extrieures (bd rparties par exemple) et cela devient donc plus critique.

449

Chapitre 15. SR010 Les enjeux de la scurit Cest un sujet de rexion avoir pour savoir quel service on ouvre (raisonner en terme de port et dinterface), pourquoi et comment ?

15.3.4. Dnir les ux client/serveur autoriss


Pour protger la DMZ et le rseau interne (LAN) via un pare-feu (trihomed rewall) les communications autoriss sont mis en place en valuant le trafc en fonction de son origine et de sa destination, il faut bien distinguer tous les ux. Sachant que par origine et destination, il faudrait distinguer aussi ce qui est ltr :
- couche - couche - couche si on ne 3 @IP/rseau 4 protocole de transport 5 application se restreint qu la pile IP.

Distinguons deux choses :


- les requtes client - les rponses serveur

En ralit on se concentre que sur les requtes clientes, car pour le reste ce sont des rponses une session si mode TCP utilis, donc nous nen tenons pas compte. Le ux client vers ux serveur. a permet de dduire les services serveurs qui peuvent tre en coute dans un sens et o :
## Traffic entrant de lInternet vers la DMZ # OK pour: dns http https smtp ssh vpn (oui pour un accs des services pour les salaris mais cest un tunnel) # A justifier: (en terme de besoin) ftp ftps

450

Chapitre 15. SR010 Les enjeux de la scurit


rsync nntp

## Traffic entrant de la DMZ vers le rseau interne (LAN) # NON pour: dns http https smtp imap pop ftp ftps ssh rsync nntp vpn (?)

Note : Ici on raisonne services serveurs. "Trafc entrant de la DMZ vers le rseau interne (LAN)" ce traduis par "il y a des process clients qui vont du LAN vers la DMZ, donc des services serveurs sur la DMZ qui rpondent des process clients du LAN" et non linverse ! On peut du LAN accder la DMZ :
- on aura donc par exemple sur la DMZ un DNS serveur pour les clients du LAN - par contre on N aura PAS sur le LAN un DNS serveur pour les clients de la DMZ

## Traffic entrant de lInternet vers le rseau interne (LAN) # OK pour : vpn (oui pour un accs des services pour les salaris mais cest un tunnel) # NON pour : http https ftp ftps

Note : Ici on nautorise rien parce que en fait tout va passer par la DMZ et donc aucun lien direct entre Internet et le rseau... Pour le VPN des utilisateurs (salaris dune entreprise par exemple) authentis peuvent avoir besoin daccder leurs dossiers partir de lextrieur. L nous sommes dans un cas particulier et il

451

Chapitre 15. SR010 Les enjeux de la scurit


est possible de mettre en place une solution PPP chiffre, L2TP... ou autre qui donne accs directement au LAN. Mais quest-ce quon a comme dialogue :
- client nomade --> serveur PPP (demande de cnx) - serveur PPP --> client nomade (demande auth) - ouverture de session et du rseau si ok

Dans ce cas, le serveur dauthentication est gnralement sur la DMZ car accessible de lextrieur. Les serveurs de data, sur le LAN ne le sont pas par dfaut.

## Traffic sortant du rseau interne (LAN) vers la DMZ # OK pour: http https smtp (ok, si smtp local) imap pop ssh # A justifier: (en terme de besoin) rsync nntp # NON pour: dns (prfrer un cache qui va faire la rsolution de nom en .local et celle du net) ftp (mettre en local) ftps (mettre en local)

Note : Ici le serveur de cache DNS est:


- client pour le DNS de la DMZ, pas serveur. - serveur pour le .local et pour les requtes des postes clients du LAN.

## Traffic sortant du rseau interne (LAN) vers lInternet # OK pour: http https # A Justifier pour: (en terme de besoin)

452

Chapitre 15. SR010 Les enjeux de la scurit


ftp ftps

## Traffic sortant de la DMZ vers lInternet # OK pour: dns smtp # NON http https ftp ftps ssh rsync nntp vpn pour: (ou alors expliquer, cas trs particuliers)

(ou alors expliquer) (l faut expliquer, car pas banal) ( la limite tunnel ?)

Note : Ici cela veut dire :


- que des process client DNS peuvent sortir de la DMZ vers dautres serveur DNS pour poser des questions - quil na pas de client http(s) dans la DMZ

Dans ce cas, comment les utilistaeurs Internet accde au site web de lentreprise localis en DMZ ? Est-ce parce que par dfaut la rponse une requte accept en entre est accept en sortie... et donc il nai pas ncessaire dautoriser un ux http, ou https sortant. Cest une question qui sera aborde concernant le traitement des transaction tcp (et dans notre cas) le fonctionnement de la pile netlter. Ce nest pas trivial mais raisonnons tcp :
- un client passe une requte un serveur (port x vers port 80 par ex) - il y a tablissement de la session - le serveur rpond En fait le firewall va : - 1 laisser passer la requte vers le port 80 - laisser passer les requtes des sessions tablies (donc le retour)

453

Chapitre 15. SR010 Les enjeux de la scurit

En fait on the cherche bloquer que lintialisation dune requete cliente vers un serveur... par dfaut toute rponse une requte cliente autoris est par dfaut autoris... si congur ainsi :
- On ne laisse entrer que les requtes clientes (initialisation de requte) vers les ports (services serveurs) quon autorise - Le FW est configur pour suivre et traiter toutes les requtes en cours dinitialisation ou initialises. Il laisse passer les requtes des sessions tablies (donc le retour) Tout le reste est rejet.

Avertissement
Ce comportement nest pas automatique (par dfaut) il doit tre congur manuellement (spci donc). Par dfaut, il ny a rien, tout doit tre congur.

15.3.5. IDS - Systme de dtection dintrusion


Un systme de dtection dintrusion (ou IDS : Intrusion Detection System) est un mcanisme destin reprer des activits anormales ou suspectes sur la cible analyse (un rseau ou un hte). Il permet ainsi davoir une connaissance sur les tentatives russies comme choues des intrusions. Un IDS, cest une sonde de dtection dintrusion (fonction particulire).

15.3.6. Sparer/Re-grouper les services Rseau/Scurit


Dans lespace hermtique a peut sembler plus cohrent de faire glisser et de runir des services qui ont un mme usage sur un mme serveur :
- Installer le service anti-spam sur le relai SMTP. - Installer le service antivirus HTTP sur le mandataire (Proxy).

454

Chapitre 15. SR010 Les enjeux de la scurit Toutefois, sparer les quipements rseaux et de scurit (ainsi quutiliser differente type et marque de matriel) peut sembler une solution tout aussi sduisante. Cela peut donner un peu plus de mal lattaquant, sil doit changer de matriel et de technologie. Cela peut tre une alternative possible...

15.3.7. Pare-feu
Voir section ddie SR011

15.3.8. Serveur Proxy (Serveur Mandataire)


Voir section ddie SR011

15.4. Principes gnraux pour scuriser un systme


Source(s):

OF: SR010-ch03-act002-sr010-secure_system.pdf (docs/eof/sr010-ch03-act002-sr010-secure_system.pdf) Tenir compte de la scutit au quotidien [La-Linux] (http://www.lealinux.org/documentations/index.php/Fiches:Tenir_compte_de_la_s%C3%A9curit%C3%A9_au_quotidien)

15.4.1. Quelques rgles simple garder en mmoire


La scurit nest pas un produit, cest un processus (Security is not a product, its a process) Bruce Schneier

Lide que vous pourriez scuriser votre machine une bonne fois pour toute lors de linstallation et ne plus y toucher ensuite nest tout simplement pas envisageable. Maintenir une dfense contre les agressions des pirates est une veille constante de ltat de votre machine. La paranoa est notre amie :) Accorder une attention la scurit de votre machine qui est proportionnelle la valeur que vous accordez ce quelle protge.

455

Chapitre 15. SR010 Les enjeux de la scurit Quelque rgles qui permettent de scuriser votre ordinateur et se prmunir contre des attaques (du simples et faciles mettre en uvre aux plus complexes) : 1. Attention vos mots de passe (choisissez les bien et ne les conez pas des inconnu(e)s) 2. Prfrez les protocoles chiffrs (prfrez ssh telnet, scp ftp, pop+ssl pop, ...) 3. Nexecutez et/ou installez pas nimporte quoi (attention aux chevaux de Troie, packages non signs) 4. Passez root le moins souvent possible (root a beaucoup de droits et cela peut se retourner contre vous) 5. 6. Appliquez le principe du privilge minimum (Ne donnez un droit que sil est ncessaire) 7. Minimisez vos services (Si cest inutile alors cest dangereux) 8. Mettez votre distribution jour (Appliquez les correctifs de scurit aussi souvent que possible) 9. Filtrez et surveillez votre trac rseau (Activez le rewall et ventuellement un IDS) 10. Gardez un il sur vos donnes (Sauvegardez-les et utilisez des logiciels comme tripwire) 11. Renforcez votre noyau (Ajoutez des modules de scurit optionnels: SELinux, ASLR, ...)

15.4.2. Principe du privilge minimum


Chaque programme et chaque utilisateur du systme devrait oprer en utilisant le plus petit nombre de privilges possible pour accomplir sa tche. Le principe du privilge minimum (http://www.lealinux.org/documentations/index.php/Fiches:Tenir_compte_de_la_s%C3%A9curit%C3%A9_au_quotidien)(apparu au milieu des annes 70)

Sous Linux, le modle des privilges de base identie des objets (les chiers), des actions (read, write, execute) et des acteurs (les utilisateurs et les groupes). Le type de contrle que lon peut exercer sur les privilges est donn par le modle du Discretionary Access Control (DAC) qui veut quune fois un utilisateur authenti il ait tous les droits sur tous les objets quil possde.
Note : Dautres modles de contrle existent, notamment de le Mandatory Access Control (MAC) implment par SELinux et dautres (Role-Based Access Control, RBAC).

Pour appliquer le principe du privilge minimum, il faut vous demander si chaque objet qui vous appartient a vraiment besoin dtre ouvert en lecture, criture ou encore excution. Si ce nest pas le cas, supprimez ce droit. Par exemple, pourquoi laisser les autres utilisateurs avoir accs votre compte en lecture ? Cest certes plus pratiques de temps en temps, mais si vous ny prtez pas attention, un attaquant pourrait sinltrer dans votre compte et voler des informations que vous ne voudriez pas voir partir. Le mieux est donc de mettre votre umask 700 et de restreindre ainsi laccs votre compte.

456

Chapitre 15. SR010 Les enjeux de la scurit

15.4.3. BIOS - Protger par mot de passe


Protger lentre dadministration du BIOS par un mot de passe Affecter le disque dur principal comme priphrique de dmarrage par dfaut aprs installation du systme. Bloquer les autres priphriques de dmarrage (USB, oppy, CD-Rom) Dsactivez toute notion dallumage distance (si vous nen avec pas la ncessit) Insrer un mot de passe pour la lecture du disque dur (bios modernes coupls aux disques durs adquats)

15.4.4. Chargeur de dmarrage (Grub, Lilo) - Protger par mot de passe


Source(s):

Web: GRUB commands (http://<8203>grub.enbug.<8203>org/<8203>CommandList) Grub Docs (http://www.lea-linux.org/documentations/index.php/Grub) LILO Docs (http://www.lea-linux.org/documentations/index.php/Admin-admin_boot-LILO) GRUB 2 chier de menu (grub.cfg) (http://grub.enbug.org/grub.cfg.fr) GRUB 2 Authentication (http://grub.enbug.org/Authentication) Magasine: Exploring the GRUB 2 boot manager (Ubuntu User Magazine Num 5) (http://www.ubuntu-user.com/content/download/1336/9242/le/036-038_grub2.pdf) Fixing GRUB: The Revenge of GRUB 2 (Ubuntu User Magazine Num 5) (http://www.ubuntu-user.com/content/download/1344/9314/le/056-059_answers.pdf)

Note : A propos de GRUB2 (source: Ubuntu User Magazine) : GRUB2 offre :


automatisation, design modulaire esttique au dmarrage (interface graphique et thme) :) support pour jeux de caractre internationaux (incluant les caractres non Latin) configuration facile le schma de numrotation des partitions commence 1 (et plus zro comme avant)

Diffrents chiers de conguration...


/boot/grub/grub.cfg /etc/default/grub /etc/grub.d # Fichier de configuration central (cr automatiquement) Liste les entres du menu. Ne peut pas tre modifier manuellement. # Options gnrales (mais pas les entres du menu) # Rpertoire des scripts GRUB2 pour la detection des partitions

457

Chapitre 15. SR010 Les enjeux de la scurit


et systme dexploitation. Pour rajouter une entre au menu, ajouter son script dans ce repertoire.

Note : /boot/grub/grub.cfg agit comme un container de la conguration "statique" cr dynamiquement via la commande sudo update-grub partir des options gnrales et de scripts.

Pour ajouter manuellement une entre dans le menu (systme non detect automatiquement, dmarrage avec options personnelles, etc...), il faut crire son propre script. Quand GRUB 2 dmarre, il execute tous les scripts localiss dans /etc/grub.d qui sont executables (sudo chmod u+x script_name). Par dfaut les scripts systme ont les bonnes permissions.
# Exemple de script de dmarrage GRUB2 # Crer une entre personalise # script_name echo "Entre personalise pour dmarrer Rescue CD depuis une image iso" >&2 cat <<EOF menuentry "Dmarrer System Resuce CD from disk"{ set root=(hd0,10) linux /sysrcd/rescuecd subdir=sysrcd setkmap=fr initrd /sysrcd/initram.igz } EOF

Dans cet exemple, linux et initrd met en place les chemins vers le noyau et le "ramdisk" initial en passant deux paramtres au noyau.

Note : Amliorer leffet visuel de GRUB 2 en ajoutant une image de fond personalise ! (source: Ubuntu User Magazine) GRUB 2 peut utiliser des images PNG, TGA ou JPG comme image de fond. Les sauvegarder en resolution 640x400 pixels dans le repertoire /usr/share/images/grub (si ce repertoire nexiste pas, il doit tre cr manuellement avec la commande mkdir). Puis installer le paquet gestionnaire dimage :
$ sudo apt-get install grub2-splashimages

Puis crer un scipt de dmarrage GRUB 2 pour indiquer au systme quelle image utiliser :
#!/bin/bash -e # exemple de script # /etc/grub.d/05_debian_theme # Image : airplane.jpg

458

Chapitre 15. SR010 Les enjeux de la scurit

source /usr/lib/grub/grub-mkconfig_lib set_mono_theme() { cat <<EOF set menu_color_normal=white/black set menu_color_highlight=black/white EOF } # Vrifier lutilisation dun fond dcran use_bg=false if [ "$GRUB_TERMINAL_OUTPUT" = "gfxterm" ] ; then for i in {/boot/grub/, /usr/share/images/grub}/airplane.{png,jpg,tga}; do if is_path_readable_by_grub $i; then bg=$i fi done

Enn, ne pas oublier dappliquer les changements de conguration GRUB 2 :


sudo update-grub

Note : Migrer vers GRUB 2 sur Ubuntu 9.04 ou 9.10 (aprs mise jour depuis 9.04, sinon install par dfaut) :
$ sudo apt-get # puis $ sudo apt-get -- GRUB Legacy -- ajouter une install grub2 install grub-pc dj install : presser OK entre pour un dmarrage chan de GRUB 2 depuis GRUB Legacy : presser Oui

# Aprs re-dmarrage vrifier que # - GRUB 2 est accessible depuis GRUB 1 (les deux co-existent en paralllle) # - toutes les entres GRUB 2 fonctionnent # Si cest le cas, dmarrer 9.10 puis depuis un terminal taper : $ sudo upgrade-from-grub-legacy # Le systme demande alors depuis quelle partition le systme et disque vous souhaiter # redmarrer la machine. # Choisir la bonne partition en appuyant sur la barre despace ("Space") # Si ce nest pas le cas, le systme va dmarrer avec une erreur Error 15: Start device not found # Dans ce cas, dmarrer depuis une version live dUbuntu puis : $ sudo mount /dev/sda1 /mnt # monter la partition root (sans chargeur de dmarrage) # adapt le chemin en fonction de votre systme

459

Chapitre 15. SR010 Les enjeux de la scurit


$ sudo mound --bind /dev /mnt/dev $ sudo chroot /mnt # Reconfigurer GRUB2 $ dpkg-reconfigure grub-pc # Et appuyer sur "Espace" cette fois :) # Pour terminer CTRL+D $ sudo umount /mnt $ sudo reboot # monter le repertoire de priphriques # change root du priphrique mont

# Quitter lenvironement chroot # Dmonter le systme de fichier # Re-dmarrer

Note : Comment rparer GRUB 2 ? Pour rparer GRUB 2, il est ncessaire de dmarrer depuis un Ubuntu Live CD" (http://www.<8203>ubuntu.com/<8203>getubuntu/<8203>download), puis choisir "Essayer Ubuntu sans linstaller", une fois charg, ouvrir un terminal puis taper :
$ sudo fdisk -l # Afficher les informations sur les disques et partitions

# Identifier la partition root (/), par example "... /dev/sda3 Linux" $ sudo mount /dev/sda3 /mnt # monter la partition root # adapt le chemin en fonction de votre systme $ sudo mound --bind /dev /mnt/dev # monter le repertoire de priphriques $ sudo mound --bind /proc /mnt/proc # monter le repertoire de processus $ sudo chroot /mnt $ nano -w /etc/default/grub $ grub-install /dev/sda $ grub-install --recheck /dev/sda # Pour terminer CTRL+D $ sudo umount /mnt $ sudo reboot # change root du priphrique mont # # # # editer le fichier de configuration gnrale pour sassurer quil est correct Rparer GRUB 2 Vrifier

# Quitter lenvironement chroot # Dmonter le systme de fichier # Re-dmarrer

Laisser libre le systme dexploitation par dfaut, et seulement lui. Tous les autres (anciennes versions, modes privilgis, autres systmes exotiques) sont protger par un mot de passe. Commandes qui permettent dinstaller un mot de passe sur votre chargeur de dmarrage sur le ou les systmes et modes dsirs...

460

Chapitre 15. SR010 Les enjeux de la scurit GRUB Legacy :


##Lancer le shell GRUB (su to root) : $ grub grub> md5crypt Password: ****** Encrypted: $1$M9MJT/$bre1E8e4UHEFMyTts4QJ23

## Copiez le mot de passe chiffr dans ## /boot/grub/menu.lst (fichier de configuration) password --md5 $1$M9MJT/$bre1E8e4UHEFMyTts4QJ23 ... ## Largument password peut tre utilis pour restreindre ## certaines entres; dans ce cas il est insr juste ## sous la ligne "title" dmarrer. title Linux Ubuntu 9.10 password --md5 $1$M9MJT/$bre1E8e4UHEFMyTts4QJ23 ...

GRUB 2 : Au chargement de GRUB 2, le chier grub.cfg est lu (chier de menu de GRUB 2). Celui-ci contient toutes les informations pour que GRUB 2 agisse tel que lutilisateur le souhaite et construise un menu de chargement. GRUB 2 utilise un nouveau langage de script, semblable Bash, an de gnrer ce chier de menu. diter manuellement ce chier est inutile et non recommand : il est entirement reconstruit laide de plusieurs scripts chaque excution de update-grub2 ou de grub-mkcong. Pour modier grub.cfg, modiez les scripts de gnration situs dans le dossier /etc/grub.d ou les options de GRUB 2 dans /etc/default/grub. Utilisez les commandes update-grub2 ou grub-mkcong pour regnrez le menu de GRUB 2 aprs chaque modication des chiers de conguration.
## Example grub.cfg pour lauthentification: set superusers="user1" password user1 password1 # # # # # # Le superutilisateur doit tre dfinit (set) pour activer le support dauthentification Chaque superutilisateur peut aller la ligne de commande, diter les entre du menue et executer toutes les entres du menu

461

Chapitre 15. SR010 Les enjeux de la scurit


password user2 password2 menuentry "GNU/Linux" { set root=(hd0,1) linux /vmlinuz } # Utilisateur normal # Executable par tous les utilisateurs

menuentry "Windows" --users user2 { set root=(hd0,2) chainloader +1 }

# Executable uniquement par # user2 et user1(superutilisateur)

Avertissement
Pour le moment la commande :

-password ne supporte pas les mots de passe non chiffr (plain text).

-grub-mkcong ne permet pas encore de congurer lauthentication donc il faut crer/modier manuellement les scripts /etc/grub.d/ partir desquels le menu est gnr.

LILO :
## /etc/lilo.conf ... label=linux password=mon_mot_de_passe # en clair root=/dev/hda2 image=/boot/vmlinuz-2.6.30 ...

Avertissement
Comme le mot de passe est en clair dans le chier de conguration de LILO il faut que /etc/lilo.conf ne soit lisible que par ladministrateur ce qui nest pas le cas par dfaut (taper: $ chown root:root /etc/lilo.conf; chmod 600 /etc/lilo.conf)

462

Chapitre 15. SR010 Les enjeux de la scurit

15.4.5. Comptes utilisateurs


En tant quadministrateur systme, il faut soit procder la suppression des comptes inutiles, soit : - diter vous-mme le chier /etc/shadow et placer un ! ou une * dans le champ correspondant au mot de passe, ce qui aura pour effet dannuler la possibilit de se logguer par mot de passe. - changer dans le chier /etc/passwd le dernier champ correspondant au shell de connexion, en gnral /bin/sh par /bin/nosh (/bin/false ou autre...), si ce dernier est correctement dclar dans le chier /etc/shells.
Note : Le shell peut tre /bin/nosh, /bin/false... ou encore /bin/toto ! Du moment quil est dclar dans /etc/shells comme pointant vers /dev/null... lutilisation de lun ou lautre nest donc plus quune question de tradition !

## Utilisateur non systme autre que moi :) $ awk -F: { if ($3>1001 && $3<65325) print $1 } /etc/passwd bbbbb ccccc ddddd eeeee toto ## Groupes non systme autre que moi :) $ awk -F: { if ($3>1001 && $3<65325) print $1 } /etc/group bbbbb ccccc ddddd eeeee group1 group2 group3 commun toto ## Comptes ayant un mot de passe $ awk -F: { if ($2 !="*" && $2 !="!") print $1 } /etc/shadow root filostene aaaaa bbbbb ccccc ddddd eeeee toto ## Delete users deluser aaaaa --remove-all-files

463

Chapitre 15. SR010 Les enjeux de la scurit


Puis rpter pour bbbbb, ccccc, ddddd, eeeee, toto ## Delete groups $ delgroup --remove-all-files group1 Puis rpter pour group2, group3 et commun

Note : Dans le cas o Samba serait installs, vrier que les comptes utilisateurs ne soit pas lis Samba. Les supprimers via Samba si le service est congurer pour grer les comptes Unix directement. De mme si un annuaire LDAP est en place, vrier les comptes Unix dnit dans lannuaire... Par ailleurs, si le sudo est install et actif, penser vrier et dactiver les sudoers si ncessaire :
$ chmod 740 /etc/sudoers # Changement de permission pour # le rendre accessible en # criture pour root.

$ vi /etc/sudoers (...) # Members of the admin group may gain root privileges #%admin ALL=(ALL) ALL #ligne commente # chmod 440 /etc/sudoers # Rtablir les droits en lecture # seule aprs modification

Avertissement
Attention, si la dcomission de sudoers nest pas dconseill, bien au contraire, sudo reste une commande importante quil est bien demploye la place de su (voir section prcdente sur la question).

Maintenant que les comptes utilisateur normaux superux sont supprims assurons nous que les comptes systmes correspondent des services utiles et effectivement utilis ou non. Si ce nest pas le cas, supprimons le service. Comment savoir quel service correspond un compte systme ? Pour certains cest deductible a partir du moment ou le nom correspond au process ou service mais comment de lutilisateur www-data... je peux remonter vers Apache ? En cherchant les chiers gr par lutlisateur et donc leur location, qui peuvent donner un indice, il y a moyen simple de remonter du compte vers le service ?

464

Chapitre 15. SR010 Les enjeux de la scurit Les services sont lists dans /etc/service ... Il y a aussi la description des comptes dans le cheir /etc/passwd ainsi que le home directory...
Ok pour les fichiers appartenant un utilisateur jai : $ find / -user mysql -print

## Pour les services en cours dexecution je peux faire : $ ps aux # Indique sous quel utilisateur le service sexecute...

Ceci malheureusement ne fonctionne par pour tous les utilisateurs (backup, games, etc...) dont le service nest pas actif... Pour lutilisateur "games" je vois que le home path est /usr/games :
Naturellement je cherche les paquets lis ce repertoire $ dpkg-query --search /usr/games gnome-games, base-files, bsdmainutils, gnuchess: /usr/games

Tout ceci me donne des rponses mais ny a t il pas un moyen universel plus simple ? Par example de www-data jessaye de remonter vers le service Apache... ou lutilisateur "sync" vers (???) ? Ok je peux chercher sur Internet... mais linteret cest de pouvoir trouver simplement via le systme lui mme ;-) A revoir plus tard ...

15.4.6. Systme de gestion des chiers - SGF (ou FHS en anglais)


Source(s):

Web: Version 2.3, non traduit (http://www.pathname.com/fhs) version 2.0, fr (http://www.linux-france.org/article/sys/fhs/fhs-toc.html)

"...Le SGF ou dans sa version anglaise le FHS est lensemble de rpertoires et de chiers qui constituent larborescence de votre systme..." / : la racine, point de dpart du SGF.

465

Chapitre 15. SR010 Les enjeux de la scurit /bin : commandes binaires essentielles (Utilises par admin, utilistateurs et scripts). Requise en mode utilisateur simple. /boot : lment utilis au processus de dmarrage (chiers statiques du chargeur de dmarrage, noyaux, etc...). /dev : chiers spciaux ou priphriques. /etc : conguration systme spcique lhte et scripts de commande (start, restart, stop). Aucun binaire dans ce rpertoire. /home : rpertoires personnels des utilisateurs. Sur les grands systmes (rpertoires partags avec de nombreux htes via NFS) il est trs utile de sous-diviser les rpertoires personnels (/home/staff, /home/guests, /home/students, etc.) /lib : bibliothques partages essentielles et modules du noyau. Les bibliothques prsentes ici sont ncessaires au dmarrage du systme et aux commandes essentielles prsentes dans /bin et /sbin). /mnt : point de montage pour les systmes de chier monts temporairement. /opt : paquets de composants supplmentaires pour les logiciels applicatifs (installation dadd-on). /proc : information du noyau et des processus sur SGF virtuels. /root : rpertoire personnel de lutilisateur root. /sbin : binaires systme essentiels ncessaires au dmarrage, la restauration, la rcupration et/ou la rparation du systme... /tmp : chiers temporaires. Contenu peut tre effac chaque dmarrage systme. /usr : hirarchie secondaire. /usr est partageable, les donnes sy trouvent en lecture seule. /usr/sbin : programmes excuts aprs le montage de /usr (ce qui signie quil ny a plus de problme) /usr/local/sbin : programmes installs par ladministrateur /usr/src : code source (noyau linux entre autre)

466

Chapitre 15. SR010 Les enjeux de la scurit /var : donnes variables (impression, mail, logs, connexion occasionnelles ou temporaires...)

15.4.7. Droits daccs UNIX


Pour un chier donn, on distingue :
## Des catgories dusager. - owner : lutilisateur possdant le fichier (u), - group : autres utilisateurs du mme groupe que le fichier (g) ou des utilisateurs nappartenant pas au groupe du fichier (o) - other : tous les autres utilisateurs (a) () Options chmod

## Pour chaque catgorie dusager ## diffrent type de droit daccs - la lecture (r), de reprsentation octale 4, - lcriture (w), de reprsentation octale 2, - lexcution (x), de reprsentation octale 1. ## Voir aussi - lexcution (X) - suid/sgid (s) - sticky bit (t/T)

# Alternativement nomm Restricted deletion flag

## Droits sur un fichier $ ls -l /etc/X11/ ... #(o)(g)(a) (owner)(group) drwxr-xr-x 2 root root 4096 nov 13 02:13 -rw-r--r-- 1 root root 13 nov 13 02:13 lrwxrwxrwx 1 root root 13 nov 13 02:16 ... d: fichier de type repertoire l: fichier de type lien symbolique

(fichier) app-defaults default-display-manager X -> /usr/bin/Xorg

drwxr-xr-x 2 ... app-defaults Le propritaire tous les droits Le groupe peut lire et excuter Les autres peuvent lire et excuter -rw-r--r-- ... default-display-manager Le propritaire peut lire et crire

467

Chapitre 15. SR010 Les enjeux de la scurit


Le groupe peut lire Les autres peuvent lire

2^9 combinaisons de droits possibles $ p=$(seq 0 7);for u in $p; do (for g in $p; do (for o in $p ;do echo "chmod $u$g$o mon_fichier"; done); done);done chmod 000 mon_fichier # Aucun droit pour tous chmod 001 mon_fichier chmod 002 mon_fichier chmod 003 mon_fichier chmod 004 mon_fichier chmod 005 mon_fichier chmod 006 mon_fichier ... # Toutes les variantes possible :) chmod 771 mon_fichier chmod 772 mon_fichier chmod 773 mon_fichier chmod 774 mon_fichier chmod 775 mon_fichier chmod 776 mon_fichier chmod 777 mon_fichier # Tous les droits pour tous

15.4.7.1. Droits spciaux: setuid, setgid, sticky bit


Source(s):

Web: Chmod (Wikipedia) (http://en.wikipedia.org/wiki/Chmod) SETUID (Wikipedia) (http://en.wikipedia.org/wiki/Setuid) Droits Spciaux (Linux France) (http://www.linux-france.org/article/sys/chiers/chiers-3.html)

Lutilisation des options SUID, SGID peut tre dangereuse, donc soyez vigilants. Pour modier ces valeurs, il faut associer :
4000 bit SUID 2000 bit SGID 1000 sticky bit

Quand on crit les permissions en octal, setuid, setgid et sticky bit sont reprsents par une nouvelle srie de 3 bits, qui se place avant les 3 autres sries (setuid=4, setgid=2, sticky=1)
# Rendre un programme SUID et SGID qui est dj en 755

468

Chapitre 15. SR010 Les enjeux de la scurit


$ chmod 6755 mon_fichier ## Rendre un rpertoire identique /tmp ## (Sticky bit / Restricted deletion flag) $ chmod 1777 mon_repertoire # Serveur de mail /usr/sbin/sendmail a # les droits rwsr-sr-x (rwxr-xr-x, setuid, setgid); $ chmod 6775 /usr/sbin/sendmail

setuid : Cela signie quun chier executable est excut, il lest avec les droits de son propritaire, et non avec ceux de lutilisateur qui le lance. Par exemple, le programme passwd, qui permet un utilisateur de modier son mot de passe, est setuid root (cest dire quil est setuid et quil appartient lutilisateur root): il doit pouvoir crire dans le chier /etc/passwd (ou /etc/shadow), dans lequel seul root peut crire.
ls -l /etc | grep passwd -rw-r--r-- ... root root ... passwd ls -l /usr/bin/passwd -rwsr-xr-x ... root root ... /usr/bin/passwd

Note : Le bit setuid permet dexcuter un binaire avec les droits, non pas de celui qui lance le programme, mais de celui qui le possde. videmment, les bit setuid sont trs pratiques mais provoquent souvent des failles importantes dans le systme. Lexemple le plus agrant tant celui dune commande comme halt qui nest habituellement utilisable que par root mais qui est bien pratique pour lutilisateur de la machine. Mettre le bit setuid sur la commande halt permettra nimporte quel utilisateur de stopper la machine... Si un attaquant arrive sur votre machine via un compte cre la va vite, il peut provoquer larrt inconditionnel de votre machine mme si vous tes en train de travailler dessus. En alternative, utliser plutt la commande sudo (excution ou accs sur la base de lutilisateur et non des groupes) pour simplement donner utilisateur le droit de faire cela (sans avoir passer root) et non pas TOUS les utilisateurs la fois.

setgid : de la mme faon, un excutable setgid sexcuter avec les droits du groupe auquel il appartient. Quand un rpertoire est setgid, tous les chiers crs dans ce rpertoire appartiennent au mme groupe que le rpertoire. Cest utilis par exemple quand plusieurs personnes travaillent sur un projet commun: ils ont alors un groupe ddi ce projet, et un rpertoire setgid appartenant ce groupe, et ils crent leurs chiers dans ce rpertoire avec les permissions 664: tout le groupe peut alors crire nimporte quel chier, vu que tous les chiers appartiennent au groupe. sticky bit : utilis par exemple sur /tmp. Tout le monde a tous les droits sur ce rpertoire, mais chaque processus utilisateur ou systme garde ses droits sur le chier cr. Quelquun dautre ne pourra pas supprimer le chier cr. Un utilisateur ne peut effacer que les chier qui lui appartiennent.

469

Chapitre 15. SR010 Les enjeux de la scurit Testons :


root# cat > /bin/rltest <<EOF > #!/bin/bash > echo "$USER:$HOME" > /root/rltest.log > ps aux | grep rltest > EOF root# ls -l /bin ... -rw-r--r-- 1 root root 30 2010-03-08 14:05 rltest (644) ... root# chmod +x /bin/rltest root# ls -l /bin ... -rwxr-xr-x 1 root root 30 2010-03-08 14:05 rltest (755) ... root# chmod 4755 /bin/rltest root# ls -l /bin | grep rltest -rwsr-xr-x 1 root root 30 2010-03-08 14:05 rltest filostene$ rltest /bin/rltest: line 2: /root/rltest.log: Permission non accorde 1000 21508 0.0 0.0 10620 1496 pts/0 S+ 15:34 0:00 /bin/bash /bin/rltest 1000 21510 0.0 0.0 7352 880 pts/0 R+ 15:34 0:00 grep rltest ## Filostene reste lutilisateur qui execute le process :(( ## Aucune lvation des droits...

# Ecrire le nom et homdir # de lutilisateur # Afficher le nom de lutilisateur # executant le processus

Ce test a chou. En effet aprs une petite recherche, il savre que la plupart des systme dexploitation ignore les attribut setuid/setgid sur les script shell executable. Il me faut donc crer un binaire pour pouvoir tester:
root# nano rltest.c #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> int main(void) { printf (

470

Chapitre 15. SR010 Les enjeux de la scurit


"Real "Effective "Real "Effective getuid (), geteuid(), getgid (), getegid() ); return EXIT_SUCCESS; } root# gcc -Wall ./rltest.c -o rltest2 root# cp ./rltest2 /bin/rltest2 root# rltest2 Real UID = 0 # Utilisateur root Effective UID = 0 # Utilisateur root Real GID = 0 Effective GID = 0 root# exit exit filostene$ rltest2 Real UID = 1000 Effective UID = 1000 Real GID = 1000 Effective GID = 1000 $ su Mot de passe : root# ls -l /bin/rl* -rwxr-xr-x 1 root root 10061 2010-03-08 15:00 /bin/rltest2 root# chmod 4755 /bin/rltest2 root# ls -l /bin/rl* -rwsr-xr-x 1 root root 10061 2010-03-08 15:00 /bin/rltest2 root# exit exit filostene$ rltest2 Real UID = 1000 # Utilisateur filostene Effective UID = 0 # Utilisateur root Real GID = 1000 # Groupe filostene Effective GID = 1000 # Groupe filostene filostene$ su Mot de passe : root# chmod g+s /bin/rltest2 root# ls -l /bin/rl* -rwsr-sr-x 1 root root 10061 2010-03-08 15:00 /bin/rltest2 root# exit exit filostene$ rltest2 UID UID GID GID = = = = %d\n" %d\n" %d\n" %d\n",

# # # #

Utilisateur filostene Utilisateur filostene Groupe filostene Groupe filostene

471

Chapitre 15. SR010 Les enjeux de la scurit


Real Effective Real Effective UID UID GID GID = = = = 1000 0 1000 0 # # # # Utilisateur filostene Utilisateur root Groupe filostene Groupe root

15.4.8. Chiffrement du systme de chiers


Source(s):

OF: Chiffrer un systme de chiers (La Linux) (http://www.lea-linux.org/documentations/index.php/Leapro-pro_sys-cryptofs) En bref: A Glance on the Techniques used for Encryption and why it is a necessity (http://en.wikipedia.org/wiki/Linux_Unied_Key_Setup) HOWTO Encryption : Disk Encryption Approaches (http://encryptionhowto.sourceforge.net/Encryption-HOWTO-4.html#disk:other) LUKS: LUKS a standard for Linux hard disk encryption (cryptsetup) (http://code.google.com/p/cryptsetup) Linux Unied Key Setup (LUKS) disk encryption specication (http://en.wikipedia.org/wiki/Linux_Unied_Key_Setup) Web: Full disk encryption (http://en.wikipedia.org/wiki/Disk_encryption) Filesystem-level encryption (http://en.wikipedia.org/wiki/Filesystem-level_encryption) Cryptographic Filesystems, Part One: Design and Implementation (http://www.securityfocus.com/infocus/1673) Comparaison of Disk Encryption software (http://en.wikipedia.org/wiki/Comparison_of_disk_encryption_software ) List of cryptographic le systems (http://en.wikipedia.org/wiki/List_of_cryptographic_le_systems)

15.4.8.1. Chiffrement de chier individuel


GnuGPG (voir ci-avant) est une solution permettant le chiffrement (et signature) de chier individuel. Mais pour le chiffrement dune arborescence importante de chier cela nest pas adquate en terme dergonomie.

15.4.8.2. Chiffrement de systme virtuel de chier (fuse, loop device) : chier/repertoire, partition, container, etc...
Source(s):

Kernel based (espace noyau) :

472

Chapitre 15. SR010 Les enjeux de la scurit Crypto API (http://en.wikipedia.org/wiki/Crypto_API_(Linux)) dm-crypt (device mapper - transparent encryption of block devices) (http://www.saout.de/misc/dm-crypt) eCryptfs (cryptographic lesystem) (https://launchpad.net/ecryptfs) eCryptfs Tutorial (http://bodhizazen.net/Tutorials/Ecryptfs) Cryptfs: A Stackable Vnode Level Encryption File System (http://www.fsl.cs.sunysb.edu/docs/cryptfs/cryptfs.html) eCryptfs : encryption in Ubuntu par Dustin Kirkland (https://slo-tech.com/clanki/10008en) LoopAES (cacert.org) (http://wiki.cacert.org/LoopAES) LoopAES (http://loop-aes.sourceforge.net)

FUSE based (espace utilisateur) : CryptoFS/ (http://reboot78.re.funpic.de/cryptofs/) EncFS (http://en.wikipedia.org/wiki/EncFS) HOWTO EncFS (http://www.movingtofreedom.org/2007/02/21/howto-encfs-encrypted-le-systemin-ubuntu-and-fedora-gnu-linux) TrueCrypt (Container) (http://www.truecrypt.org)

Web : Rsync backup with encryption (http://xpd259.blogspot.com/2007/11/rsync-backup-with-encryption.html) cryptsetup (LUKS) commande line interface for encryption via dm-crypt (http://code.google.com/p/cryptsetup) Setup and Manage Disk Encryption with dm-crypt and LUKS (http://sunoano.name/ws/public_xhtml/dm-crypt_luks.html) System Encryption with LUKS for dm-crypt (et LVM encryption) (http://wiki.archlinux.org/index.php/System_Encryption_with_LUKS_for_dmcrypt#Encrypting_a_loopback_lesystem) Securing laptops with ecryptfs, cryptsetup and tmpfs (http://www.tolaris.com/2009/11/14/securing-laptops-with-ecryptfs-cryptsetup-and-tmpfs/ ) LUKS encrypted LVM partition (http://learninginlinux.wordpress.com/2008/04/23/installing-ubuntu-804-with-full-disk-encryption) Encrypt lesystems with EncFS and Loop-AES (http://www.linux.com/archive/feed/52820) rsync over Samba : An automatically expanding encrypted lesystem image (http://users.softlab.ece.ntua.gr/~ttsiod/backup.html)

Il y a plusieurs mthode standard de chiffrement sous Linux. cryptoloop : cette vielle mthode nest plus utilis car considr comme non-scuris et pas able. Le "loop device" permet de simuler un priphrique en mode bloc partir dun chier. Cest grce ce driver que lon peut notement monter les images de CD-ROM au format ISO9660 :
$ mount -t iso9660 -o loop monimage.iso /cdrom

473

Chapitre 15. SR010 Les enjeux de la scurit

La cryptoloop (et son succsseur dm_crypt (http://en.wikipedia.org/wiki/Dm-crypt)) insre les fonctions de chiffrement dans les fonctions de lecture et dcriture du "loop device". Le "loop device" est donc utilis pour convertir un chier chiffr en priphirque de mode bloc que lon peut ensuite monter comme un disque normal. dm-crypt : mappeur de priphriques pour le chiffrement (successeur de cryptoloop), utilis par cryptsetup (LUKS), uilise la CryptoAPI du noyau. Simule un priphrique en mode bloc partir dun chier. Tout ce qui est crit sur ce systme de chier est chiffr, autant les donnes que les mta-donnes (arborescence, noms de chiers, droits daccs, ...). Laccs aux chiers est entirement transparent, part un temps daccs plus important que laccs direct. Loutil utilise lAPI de chiffrement du noyau an davoir accs aux diffrents algorithmes de chiffrement (cypher) enregistrs. Parmi les cyphers disponibles dans la scatterlist cryptoapi, on citera : AES(Rijndael), Blowsh, Twosh, Serpent et lantique DES. loop-AES (loop-aes-utils: losetup,...) bien meilleur version apparement mais na jamais obtenu la faveur des developpers du noyau semble-t-il. Il est dit que cette mthode est bien plus scuris que cryptoloop ou le chiffrement direct par mappeur de priphrique (et probalbement plus rapide aussi), mais il nest pas trs ergonomique. Il requiert aussi le support dun noyau non stantard apparement. LUKS rend essentiellement la gestion du chiffrement de partition plus facile. Sans rentrer dans les dtails, il stoque toutes linformation de conguration ncessaire sur le disque lui mme. Ensuit, tout ce dont on a besoin cest dun mot de passe qui peut tre dans differents chier si souhait. Limplmentation dans GNU/Linux utilise dm-crypt et il peut avoir jusqu 8 mots de passe diffrent qui peuvent tre chang ou revoqu facilement.
Note : Chiffrement LVM : La meilleur mthode, et la plus facile, suivre pour les portables, est de congurer LVM en surcouche dune partition chiffre au lieu de linverse. Voir ce lien pour plus dinfo : Arch Linux: LVM on top of an encrypted partition (http://www.pindarsign.de/webblog/?p=767). Pour lutilisation du chiffrement en tant que surcouche LVM, les volumes LVM doivent dabord tre congur et ensuite utiliss comme base pour le chiffrement de partitions. Cela signie que LVM doit tre mis en place en premier. Ensuite suivre ce guide : Arch Linux: Encrypting a LVM setup (http://wiki.archlinux.org/index.php/System_Encryption_with_LUKS_for_dmcrypt#Encrypting_a_LVM_setup).

474

Chapitre 15. SR010 Les enjeux de la scurit

15.4.8.3. Chiffrement de systme de chier (fonctionalit native)


Note : Certains systme de chier tel que ZFS, NTFS (avec EFS - "Encrypting File System"), Cryptographic File System (CFS), Transparent Cryptographic File System (TCFS sur Linux et BSD), BTRFS (?) permettent un chiffrement transparent la vole... ce qui est une autre manire de chiffrer le systme de chier et donc les donnes.

Une des implmentation du chiffrement de systme de chier est lutilisation dun systme de chier ddi au sain du noyau. CryptFS utilise ce model dimplmentation, le systme de chier peut tre soit mont directement dans nimporte quel repertoire soit en surcouche dun autre sytme de chier tel que UFS ou NFS. Voir aussi eCryptfs ("cryptographic lesystem in the Linux kernel using stacking technology") link1 (http://doc.ubuntu-fr.org/ecryptfs) link2 () link3 (http://blog.dustinkirkland.com/2009/09/encrypted-home-now-offerred-at.html)) pour crer un dossier priv et donc crypt dans son repertoire home. This is CryptFS tendu :).
Note : A propos de eCryptfs : Il diffre des autres options de chiffrement de systme de chier sous GNU/Linux tel que encfs ou sshfs qui sont utiliss via FUSE en espace utilisateur. eCryptfs est un systme de chier superpos, chiffrant chaque chier indivduellement plutt que de chiffrer le priphrique en mode bloc en entier avec quelque chose comme dmcrypt ou le chiffrement LVM. Il fournit une bonne solution pour le chiffrement des repertoires Home. Acune passephrase nest requise au dmarrage de la machine. Lencryption se faisant au sain du noyau, les performance sont meilleurs que les solutions en espace utilisateur. Les algorithmes de chiffrement sont les mme fonctions testes, prouves et utilises par le reste du noyau. Les sauvegardes incrmental deviennent possible avec des outils tel que rsync puisque uniquement les chiers qui changent ont besoin dtre sauvegarder sur le support de stockage distant (il nest pas vraiment possible de faire cela avec un priphrique en mode bloc). Et il ny a pas besoin de pr-allouer un space pour les donnes chiffres -- les chiers chiffrs sont simplement crit dans le systme de chier sous-jacent.

15.4.8.4. Chiffrement de disque/volume (solution logiciel/matriel)


PGPDisk, Secure File System (SFS), Linux CryptoAPI, ScramDisk... Prvient des accs non autoris au disque. Le chiffrement du disque peut inclure la partition de boot, la mmoire SWAP et le MBR ou non. Cette solution peut tre associe ou non au chiffrement de chier/rpertoire (et donc partition) en plus. Ce nest pas un solution de remplacement car en gnral ne permet de grer les accs par partition (multiple clef daccs).

475

Chapitre 15. SR010 Les enjeux de la scurit

15.4.9. Les services (Fermer linutile / Scuriser lutile)


Sur les distributions Linux, lors de linstallation du systme, par dfaut plusieurs services rseaux sont installs, activs (ports ouvert) et dmarrs automatiquement pour faciliter la vie des utilisateurs. Mais par dfaut ces services ne sont pas vraiment congurs de manire scuriss et certains de ces services peuvent donner accs des informations personelles au reste du monde tout en tant une porte dentre pour des attaques potentielles. Scuriser ces services revient donc :
- dterminer lesquels sont vraiment utiles, - supprimer les services inutiles - scuriser les services utiles (filtrer : tcpwrapper, parefeu) garder actif

15.4.9.1. Les services peuvent tre lancs de plusieurs faons


- Par des scripts dinit SysVinit (la plupart des distribution sauf la slackware) : Scripts dinit (dans /etc/init.d) + lien de dmarrage associ SXXservice (dans /etc/rcX.d) avec X allant de 0 9 :
## Exemple /etc/rc2.d S20samba -> /etc/init.d/samba dmarre samba au niveau dinit 2 /etc/rc3.d S20samba -> /etc/init.d/samba ----- 3

## Pour dsactiver le service : - supprimer ce lien et le service ne sera plus dmarrer au prochain boot.

- Par des scripts rc (distribution bas sur Slackware) : Principe identique mais chiers /etc/rc.d, et nomms rc.service. Service activ au boot par le simple fait que le chier soit executable (bit +x) :
## Pour dsactiver un service : $ chmod -x /etc/rc.d/rc.service

# Rendre le script non-excutable

- Par le "super serveur" inetd : permet de lancer nimporte quel autre programme ds quune requte rseau est effectu sur le port sur lequel le service est congur :
## Ficher de configuration /etc/inetd.conf

476

Chapitre 15. SR010 Les enjeux de la scurit

## Syntaxe : <service_name> <sock_type> <proto> <flags> <user> <server_path> <args> ## Chaques lignes non commentes (ne commenant pas par un #) active le service <service_nam

## Pour dsactiver le service (au prochain redmarrage) : - commenter la ligne correspondant au service en ajoutant un # au debut ligne.

- Par le "super serveur" xinetd (succsseur de inetd) : Mme principe mais conguration lgrement diffrente :
## chaque service son propre fichier de configuration dans /etc/xinetd.d

## Pour dsactiver le service (au prochain redmarrage) : - diter fichier de configuration du service et mettre ... disable = no ...

15.4.9.2. netstat : Information sur les connexions rseau


La commande netstat, pour network statistics , est une commande en ligne afchant des informations sur les connexions rseau, les tables de routage et un certain nombre de statistiques.
netstat Options : --tcp : --udp : Affiche le nom du programme impliqu dans la cration de chaque connexion et le PID associ -a : Affiche toutes les connexions TCP actives et les ports TCP et UDP sur lesquels lordinateur coute. -n : Affiche les connexions TCP actives, adresses et les ports sont affichs au format numrique, sans tentative de rsolution de nom -w : --raw $ netstat Connexions Internet actives (sans serveurs) Proto Recv-Q Send-Q Adresse locale Adresse distante tcp 0 0 localhost:ldap localhost:48385 tcp 0 0 localhost:48385 localhost:ldap Sockets du domaine UNIX actives(sans serveurs) Proto RefCnt Flags Type State I-Node Chemin unix 7 [ ] DGRAM 9023 /dev/log ## -t -u -p

Etat ESTABLISHED ESTABLISHED

477

Chapitre 15. SR010 Les enjeux de la scurit


unix unix unix unix unix ... 2 2 3 3 3 [ [ [ [ [ ] ] ] ] ] DGRAM DGRAM STREAM STREAM STREAM 2417 7452 11531 11530 11526 @/org/kernel/udev/udevd @/org/freedesktop/hal/udev...

CONNECTE CONNECTE CONNECTE

/tmp/orbit-filostene/linc-...

$ netstat -t Connexions Internet Proto Recv-Q Send-Q tcp 0 0 tcp 0 0

actives (sans serveurs) Adresse locale Adresse distante localhost:ldap localhost:48385 localhost:48385 localhost:ldap

Etat ESTABLISHED ESTABLISHED

$ netstat -u Connexions Internet actives (sans serveurs) Proto Recv-Q Send-Q Adresse locale Adresse distante $ netstat -ta Connexions Internet Proto Recv-Q Send-Q tcp 0 0 tcp 0 0 tcp 0 0 tcp 0 0 ... $ netstat -tap Connexions Internet Proto Recv-Q Send-Q tcp 0 0 tcp 0 0 tcp 0 0 tcp 0 0 ... $ netstat -tapn Connexions Internet Proto Recv-Q Send-Q tcp 0 0 tcp 0 0 tcp 0 0 tcp 0 0 ....

Etat

actives (serveurs et tablies) Adresse locale Adresse distante *:ldap *:* localhost:mysql *:* *:sunrpc *:* *:51892 *:*

Etat LISTEN LISTEN LISTEN LISTEN

actives (serveurs Adresse locale *:ldap localhost:mysql *:sunrpc *:51892

et tablies) Adresse distante *:* *:* *:* *:*

Etat LISTEN LISTEN LISTEN LISTEN

PID/Program name 1896/slapd 1823/mysqld 1368/portmap 1379/rpc.statd

actives (serveurs Adresse locale 0.0.0.0:389 127.0.0.1:3306 0.0.0.0:111 0.0.0.0:51892

et tablies) Adresse distante 0.0.0.0:* 0.0.0.0:* 0.0.0.0:* 0.0.0.0:*

Etat LISTEN LISTEN LISTEN LISTEN

PID/Program name 1896/slapd 1823/mysqld 1368/portmap 1379/rpc.statd

15.4.9.3. netstat -tupanw : Visualiser les services actifs (ceux lcoute sur le systme)
$ netstat -tupanw Connexions Internet actives (serveurs et tablies) Proto Adresse locale Adresse distante Etat

PID/Program name

478

Chapitre 15. SR010 Les enjeux de la scurit


tcp tcp tcp tcp 0.0.0.0:389 127.0.0.1:3306 0.0.0.0:111 0.0.0.0:51892 0.0.0.0:* 0.0.0.0:* 0.0.0.0:* 0.0.0.0:* LISTEN LISTEN LISTEN LISTEN 1896/slapd 1823/mysqld 1368/portmap 1379/rpc.statd # # # # #

tcp tcp tcp tcp tcp tcp tcp tcp tcp6 tcp6 tcp6 tcp6 tcp6 tcp6 tcp6 tcp6 udp udp udp udp udp udp

10.0.2.15:53 127.0.0.1:53 127.0.0.1:631 0.0.0.0:23 127.0.0.1:25 127.0.0.1:953 127.0.0.1:389 127.0.0.1:48385 :::389 :::139 :::80 :::21 :::53 ::1:631 ::1:953 :::445 10.0.2.15:137 0.0.0.0:137 10.0.2.15:138 0.0.0.0:138 0.0.0.0:55071 0.0.0.0:40483

0.0.0.0:* 0.0.0.0:* 0.0.0.0:* 0.0.0.0:* 0.0.0.0:* 0.0.0.0:* 127.0.0.1:48385 127.0.0.1:389 :::* :::* :::* :::* :::* :::* :::* :::* 0.0.0.0:* 0.0.0.0:* 0.0.0.0:* 0.0.0.0:* 0.0.0.0:* 0.0.0.0:*

LISTEN LISTEN LISTEN LISTEN LISTEN LISTEN ESTABLISHED ESTABLISHED LISTEN LISTEN LISTEN LISTEN LISTEN LISTEN LISTEN LISTEN

1739/named 1739/named 1935/cupsd 2495/inetd

Annuaire BD pour le appels NSM (Network S Utilis par NF vrou de fichi # DNS serveur

udp udp udp udp udp udp udp udp6 udp6 udp6

10.0.2.15:53 127.0.0.1:53 0.0.0.0:707 0.0.0.0:68 0.0.0.0:5353 0.0.0.0:111 0.0.0.0:631 :::53 :::48229 :::5353

0.0.0.0:* 0.0.0.0:* 0.0.0.0:* 0.0.0.0:* 0.0.0.0:* 0.0.0.0:* 0.0.0.0:* :::* :::* :::*

2398/exim4 1739/named 1896/slapd 2511/smbd # Serveur SMB (S 1896/slapd 2511/smbd 2698/apache2 # Serveur HTTP 2639/proftpd: # Serveur FTP 1739/named 1935/cupsd 1739/named 2511/smbd 2509/nmbd # Serveur Nebios 2509/nmbd 2509/nmbd 2509/nmbd 1379/rpc.statd 1721/avahi-daemon # free Zeroconf # publier et de # htes rseau # sans configur 1739/named 1739/named 1379/rpc.statd 2632/dhclient # Client DHCP 1721/avahi-daemon: 1368/portmap 1935/cupsd 1739/named 1721/avahi-daemon: 1721/avahi-daemon:

# Serveur dimpr # Serveur de ges aux services r # Serveur SMTP

15.4.9.4. Dsactiver/Supprimer les services inutiles


## Service Utiles : named, inetd, dhclient, ## Service Inutiles dsactiver : slapd, mysqld, cupsd, samba (smbd et nmbd),

479

Chapitre 15. SR010 Les enjeux de la scurit


apache2, avahi-daeamon ## Service Inutiles enlever : proftpd, exim4(?), portmap(?), rpc.statd(?)

Note : Suivant le mode de dmarrage de la distribution, des outils associs existent pour facilement accder aux services et les activer/dactiver au dmarrage : sysv-rc-conf (http://ubunblox.servhome.org/gestion-des-services-au-demarrage-sous-debianubuntu.html), rcconf, chkcong, service-admin (Application > Services sous Gnome), etc...
$ rcconf

Figure 15-3. Rcconf : Gestion des services

480

Chapitre 15. SR010 Les enjeux de la scurit

Daprs Christelle, linconvnient de rcconf est quil ne liste pas tous les services, sysv-rc-conf et chkcong lui semble plus complets... revoir plus tard...

Note : exim4, portmap, rpc.statd ont t installs par dfaut mais ne sont pas indispensables au systme donc il peuvent tre supprims. Si tant est que lon ne souhaite pas utiliser de tel service ou des services qui en dpendent :) Si le service SMTP est requis, Postx est une alternative possible.

Avertissement
Avant de dsactiver ou supprimer un service, il est bon de vrier ses dpendances... ## Dactiver les services inutiles $ apt-get install rcconf # Outils pour activer/dsactiver # les services au dmarrage :) # Services inutiles dselectionner dans linterface graphique (Barre Espace) # puis OK

## Supprimer le service FTP $ apt-get remove proftpd --purge ... Les paquets suivants ont t installs automatiquement et ne sont plus ncessaires : libcap1 proftpd-basic proftpd-mod-pgsql proftpd-mod-mysql proftpd-mod-ldap Veuillez utiliser apt-get autoremove pour les supprimer. ... $ apt-get autoremove ... Suppression de proftpd-mod-pgsql ... Suppression de proftpd-mod-mysql ... Suppression de proftpd-mod-ldap ... Suppression de proftpd-basic ... Stopping ftp server: proftpd. Suppression de libcap1 ... ...

481

Chapitre 15. SR010 Les enjeux de la scurit

15.4.9.5. Scuriser les services utiles


Quand un service est ncessaire il faut essayez de limiter son accs aux personnes qui en ont rellement besoin :
- un service public (site web) laisser laccs du service tout le monde - un serveur samba limit certain utilisateur

La plupart du temps les services permettent de congurer une liste dadresse IP qui ils doivent rpondre. Il faut bien les congurer. Pour les services lancs par les "super serveurs" (inetd ou xinetd) les autorisations daccs se congurent comme suit :
## La rgle ## (toujours la mme) On autorise PERSONNE sauf ceux qui sont exlicitements autoriss

## Refuse $ nano /etc/hosts.deny ALL:ALL # tout le monde avec le fichier ## Autorise $ nano /etc/hosts.allow ALL:LOCAL # tout les services au rseau local (LAN) ALL:127.0.0.1 # tous les services la machine elle mme imap:88.88.88.88 # le service imap (mail) qu la machine 88.88.88.88 proftpd:ALL # le service proftpd (FTP) tout le monde

15.4.10. Pare-feu
Voir section ddie SR011

482

Chapitre 15. SR010 Les enjeux de la scurit

15.4.11. Le serveur graphique


"...veillez ce que les touches de fermeture du serveur X (ctrl+alt+backspace) ne soit disponible quaprs avoir entr un mot de passe. Dans le cas contraire, nimporte qui pourra fermer votre session X et proter de votre session shell pour sinstaller son aise..." Dclencher automatiquement lcran de veilleau bout de quelques minutes dinactivit et protger le retour par un mot de passe.
Note : Par une simple commande, activer lcran de veille ds quon sabsente

15.5. HOWTO: Securiser Dbian


Source(s):

Web: Manuel de scurisation de Debian [PDF en Ligne] (http://www.debian.org/doc/manuals/securing-debian-howto/securing-debian-howto.fr.pdf)[PDF hors ligne] (docs/sr010-ch01-securing-debian-howto.fr.pdf) Modles de contrle daccs un systme dinformation : Role-Based Access Control (RBAC) Project (http://hissa.nist.gov/project/rbac.html) RABC Group (http://csrc.nist.gov/groups/SNS/rbac/) RBAC (Wikipdia) (http://fr.wikipedia.org/wiki/Contr%C3%B4le_dacc%C3%A8s_%C3%A0_base_de_r%C3%B4les) Draft RBAC Implementation Standard [PDF En Ligne] (http://csrc.nist.gov/rbac/draft-rbac-implementation-std-v01.pdf) [PDF Hors Ligne] (docs/sr010-ch06-draft-rbac-implementation-std-v01.pdf) Comments on a Critique of the ANSI Standard on RBAC [PDF En Ligne] (http://csrc.nist.gov/groups/SNS/rbac/documents/ferraiolo-kuhn-sandhu-07.pdf) [PDF Hors Ligne] (docs/sr010-ch06-comments-ferraiolo-kuhn-sandhu-07.pdf) Mandatory Access Control (MAC) (http://www.freebsd.org/doc/handbook/mac.html) MAC (Wikipedia) (http://fr.wikipedia.org/wiki/Mandatory_Access_Control) Discretionary Access Control (DAC) (http://fr.wikipedia.org/wiki/Discretionary_access_control) Rule Set Based Access Control (RSBAC) (http://fr.wikipedia.org/wiki/Contr%C3%B4le_dacc%C3%A8s_%C3%A0_base_de_r%C3%A8gles) Access Control List (ACL) (http://fr.wikipedia.org/wiki/Access_Control_List)

483

Chapitre 15. SR010 Les enjeux de la scurit

15.6. Scuriser les processus et surveiller le systme


Source(s):

OF: SR010-ch06-act005-sr010-surveillance.pdf (docs/eof/sr010-ch06-act005-sr010-surveillance.pdf)

15.6.1. Grsecurity (GrSec) [patche pour scuriser le noyau]


Source(s):

OF: SR010-ch06-act005-sr010-surveillance.pdf (http://www.grsecurity.org) Introduction Grsecurity (http://www.zataz.net/docs/8024/introduction-grsecurity.html) Example : SECCOMP as a Sandboxing solution ? (http://justanothergeek.chdir.org/2010/03/seccomp-as-sandboxing-solution.html)

Le noyau Linux nest la base pas orient scurit, il soccupe davantage de lintgration des drivers et de la gestion du systme de chiers que de savoir sil y a des faiblesses en matire darchitecture au niveau utilisateur. De ce fait, Brad Spengler a crit une suite complte de patches (ou rustines) quil a complt de deux projets, RBAC et PaX, an de les intgrer au noyau. GrSec couvre six pans dactivits qui sont :

- la gestion des droits par rle (RBAC - Role Base Access Control), - les restrictions chroot, - la protection contre la modification de lespace dadressage (PaX), pour prvenir des exploits bas sur le dbordement de mmoire - un systme de complment de logs sur lactivit utilisateur/systme, - un gnrateur alatoire - une consolidation des droits dexcution et de consultation sur une partie du systme de fichiers.

Les fonctionalits GrSec sinstalle lors de la compilation du noyau.

484

Chapitre 15. SR010 Les enjeux de la scurit


Note : Role Base Access Control (RBAC) : le contrle daccs base de rles est un modle de contrle daccs un systme dinformation dans lequel chaque dcision daccs est base sur le rle auquel lutilisateur est attach. Ce modle est galement rfrenc sous le nom de nondiscretionary access control et constitue une nouvelle alternative, entre les systmes Mandatory Access Control (MAC) et Discretionary Access Control (DAC). Avec RBAC, la scurit est grer un niveau qui est trs proche de la structure de lorganisation. Un rle dcoule gnralement de cette structure. Chaque utilisateur est assign par un ou plusieurs rles, chaque rle est assign un ou plusieurs privilges qui sont permis aux utilisateurs dans ce rle. Les rles peuvent tre hierarchiss et les utilisateurs exerant des fonctions similaires peuvent tre regroups sous le mme rle. Par exemple, des rles pouvant exister dans un hpital : fournisseur de soins, inrmiers et docteur. Le rle Docteur peut inclure les privilges disponible au rle inrmier qui lui mme peut inclure tous les privilges disponibles au rle fournisseur de soins. Un rle, dtermin par une autorit centrale, associe un sujet des autorisations daccs sur un ensemble objets. La modication des contrles daccs nest pas ncessaire chaque fois quune personne rejoint ou quitte une organisation. Par cette caractristique, RBAC est considr comme un systme idal pour les entreprises dont la frquence de changement du personnel est leve.

GrSec apporte tout dabord la restriction ncessaire lutilisation de chroot, transformant ce dernier en vritable espace clos (prison), permettant ainsi dviter tout chappement. Ensuite, il autorise une historisation accrue sur les process utiliss selon cette liste :
surveillance dun groupe prcis, excution de tous les processus avec leurs arguments, accs aux ressources interdites, changements de rpertoires, appels aux commandes mount et umount, crations et suppressions dIPC, signaux, tentatives de fork choues, changement de temps.

Il intgre galement un large pool dentropie, permettant une meilleure gestion alatoire des Pid, des ports source TCP et des ISN. Pour nir, GrSec apporte son lot de restrictions au systme :
- restriction de la lecture de /proc aux processus de lutilisateur, - restrictions des liens symboliques pour viter les race conditions - restrictions sur le FIFO

485

Chapitre 15. SR010 Les enjeux de la scurit


restrictions sur Dmesg amliorations du chemin dexcution scuris restrictions des sockets par rapport aux groupes possibilit de logger les adresses ip distantes dun attaquant dtection du bruteforcing

15.6.2. chroot
Source(s):

Web: chroot (http://fr.wikipedia.org/wiki/Chroot) GNU core utilities (Coreutils) (http://www.grsecurity.org) Tutorial: Utiliser chroot (http://lea-linux.org/documentations/index.php/Admin-admin_env-chroot) How to break out of a chroot jail (http://www.bpfh.net/simes/computing/chroot-break.html)

15.6.2.1. Introduction
chroot (change root) est une commande des systmes dexploitation UNIX permettant de changer le rpertoire racine dun processus de la machine hte. Cest un outil GNU faisant partie de coreutils (ou shellutils). Cette commande permet disoler lexcution dun programme et dviter ainsi certaines malveillances, comme lexploitation dun dpassement de tampon, pour ensuite accder au rpertoire racine de la machine hte.
Note : Cette commande nintroduit nullement une notion de scurit, puisquelle ne fait que dplacer la racine pour un utilisateur lambda. On sen sert couramment lors dautopsie de systme ou quand un problme de boot se prsente. Cependant, coupl un outil comme grsec, cela peut devenir une vritable espace clos (prison) pour lutilisateur .

Avertissement
Lutilisation de chroot sans complment de grsec ne vous sert rien en terme de scurit. Voir http://www.bpfh.net/simes/computing/chroot-break.html.

Il permet galement de faire tourner plusieurs instances dun mme ensemble de services ou dmons sur la mme machine hte. Par exemple, il est possible avec chroot dexcuter des applications 32 bits sur un systme 64 bits : il suft pour cela davoir un sous-systme qui intgre toutes les bibliothques

486

Chapitre 15. SR010 Les enjeux de la scurit logicielles ncessaires ; chroot permet de se loguer lintrieur de ce sous-systme, et dy excuter les applications installes.

15.6.2.2. Installation
## Chroot est normalement install par dfaut ## se trouve dans le paquet coreutils $ whereis chroot chroot: /usr/sbin/chroot /usr/share/man/man8/chroot.8.gz

# # # #

appartient aux outils de ladmin systme. donc pas indispensable au dmarrage du systme.

$ /usr/sbin/chroot --version chroot (GNU coreutils) 6.10 Copyright 2008 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later ... $ ls -l /usr/sbin/chroot -rwxr-xr-x 1 root root ...

# propritaire : root # groupe : root # lire&executer: tous

##==> la seule chose que nous pourrons obtenir est le changement de racine pour un utilisateur, de par son propre chef.

15.6.2.3. Emprisonner un utilisateur dans un espace restreint


## suid chroot temporairement $ chmod u+s /usr/sbin/chroot $ ls -l /usr/sbin/chroot -rwsr-xr-x 1 root root ... # Le systme est maintenant en mesure # dutiliser correctement le programme. ## Cration de lutilisateur $ useradd -u 1001 -g 1001 \ -d /home/chroot/titi \ -s /bin/chroot \ -c exemple titi

# # # # #

UID 1001 & GID 1001 Home directory shell = script qui autorise lemprisonnement de lutilisateur son arrive

## Cration du script de connection /bin/chroot #!/bin/bash exec -c /usr/sbin/chroot /home/chroot/$USER /bin/bash

487

Chapitre 15. SR010 Les enjeux de la scurit


## Copie des commandes ncessaire $ cd /home/chroot/titi $ mkdir bin $ cp /bin/bash bin/bash ## Trouver les dpendances dune commande $ ldd /bin/bash libncurses.so.5 => /lib/libncurses.so.5 (0x4001e000) libdl.so.2 => /lib/libdl.so.2 (0x4005a000) libc.so.6 => /lib/libc.so.6 (0x4005d000) ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000) ## Copies des librairies indispensables au fonctionnement : $ mkdir lib $ cd lib $ cp /lib/libncurses.so.5 . $ cp /lib/libdl.so.2 . $ cp /lib/libc.so.6 . $ cp /lib/ld-linux.so.2 . $ su titi Mot de passe : bash-3.2$ pwd /

Note : Plus large et complexe un programme est, plus le nombreux le nombre de dpendance sera. Par example , perl requiert un grand nombre de chiers et de repertoires pour fonctionner dans un environement chroot ( peu prs 2600 chiers et 200 repertoires pour une installation raisonable...).

15.6.2.4. HIDS (Intrusion Detection Systems)


Source(s):

Web: Tripwire Logiciel (http://fr.wikipedia.org/wiki/Tripwire_(logiciel)) Tripwire Logiciel (Open Source) (http://sourceforge.net/projects/tripwire) Tripwire Logiciel, Inc (http://www.tripwire.com/) Installer et Utiliser Tripwire (http://www.linux-pour-lesnuls.com/tripwire.php) Comparaison: File Integrity (compare tripwire, aide, yac) and Anti-DDoS Utilities (http://onlamp.com/pub/a/bsd/2003/04/03/FreeBSD_Basics.html)

Plusieurs types dIntrusion Detection System : tripwire, aide, yac ... Ceux qui sappliquent aux htes, pour vrier lintgrit des binaires prsents sur le systme, en cas de compromission, votre hids doit tre en mesure dafrmer ou dinrmer si votre binaire a chang ou non.

488

Chapitre 15. SR010 Les enjeux de la scurit Ces outils ralisent, lors de leur installation, une empreinte qui sert de base de signature au logiciel pour vrier les changements qui pourraient tre oprs lavenir sur ces binaires. Par la suite, de manire rgulire, une vrication des rpertoires cibles est effectue en comparant la signature du binaire lempreinte initiale. Si une modication est survenue, elle sera alors remonte par le bulletin de surveillance. Tous les utilitaires veriant lintgrit de systme de chier suivent la mme routine :
- Initialization de la base de donnes (1er instantane du systme) - Verification de la base de donne - Mise jour pour rsoudre les changements voulu - Rpter sur une base rgulire

EXERCICE: laide dun script, ralisez votre propre HIDS sur les chiers binaires essentiels : sr010-ch06-hids-sh.txt (docs/sr010-ch06-hids-sh.txt)
Note : Il sufrait de mettre jour la base de donne aprs chaque mise jour du systme en lanant les commandes printsumdirs suivi de backupdb manuellement.

489

Chapitre 15. SR010 Les enjeux de la scurit

Avertissement
Commentaire sur le script :

* Il ny pas de licence, dauteur, de date ni de version !!! * Il ny pas daide ni dinstruction/dexplication pour lutilisateur Comment le script sutilise ? * Les paramtres se verraient bien externalis dans un fichier de configuratio * Le debuggeur sur bash nest pas idal en production (-x) il faut enlever cet * Pas de cration de rpertoire nimporte o ! On sassure de lendroit o lon se trouve et de prfrence, dans un endroit o on na pas les droits, on ne pourra jamais lancer le script : Genre... pour la configuration /var/hids/data /var/hids/bckp /var/hids/log

et aussi... pour les commandes (penser les externaliser dans des variables /usr/bin/rsync etc...

* Lorsquon corrige des choses, ne pas laisser les anciennes en commentaire une fois que je maitriserais le(s) systme de version cela ne devrait plus s * On documente en gnral la fonction au-dessus et pas lintrieur du corps. Remarque quen python, on commente dans le corps... Mais ici, a amliorera ta lisibilit. * Il ny pas de test dexistance de la commande rsync. Par dfaut, elle nest pas installe sur le systme. Je verrais bien crer plus de test et les regrouper tous les tests (existance des commandes, variables, etc...) dans une function scriptinit{} qui pourrait rediriger vers laide scripthelp{} (accessible aussi via --help)...

Autre exemple de script HIDS :


Source: http://www.linux-pour-lesnuls.com/tripwire.php#methode # en tant que root $ find /etc /usr/bin -type f -exec md5sum {} \; >/tmp/md5 # Extrait de /tmp/md5 73582ee0dd0a9b4204f9cdff46394932 /etc/profile.d/10lang.csh 277f5a3d07f226c59abe7e6728d6136c /etc/profile.d/10inputrc.sh ... # Vrifier la somme de contrle # (aprs avoir modifi quelques fichiers) $ md5sum -c /tmp/md5 2> /dev/null | grep -v "OK$" Ce qui donne :

490

Chapitre 15. SR010 Les enjeux de la scurit


/etc/fstab: CHEC

# Avec la date $ find /etc /usr/bin /bin -type f -exec md5sum {} \; >/tmp/md5_etc_date +%Y-%m-%d_%H-%M-%S

# Rsultat dans votre boite email $ md5sum -c /tmp/md5_etc_date +%Y-%m-%d_%H-%M-%S 2> /dev/null | grep -v "OK$" | mail deny@ # En automatisant ceci # toutes les heures $ crontab -e 00 * * * * /usr/bin/md5sum -c /tmp/md5_etc_date +%Y-%m-%d_%H-%M-%S 2> /dev/null | grep -v "OK$" | mail deny@monaco.net

Tripwire est un logiciel permettant de sassurer que les chiers sensibles sur un ordinateur ne sont pas modis sans que cela ne dclenche une alerte. Le logiciel tablit une base de donnes de votre systme original et ensuite compare toutes modications ultrieures avec cette base. Il est donc primordial de lancer Tripwire sur un systme sain, ce logiciel ne faisant pas ofce de rootkit ou danti-virus.
# Installation $ apt-get install tripwire

491

Chapitre 15. SR010 Les enjeux de la scurit Figure 15-4. Tripwire : Installation 1/9

492

Chapitre 15. SR010 Les enjeux de la scurit Figure 15-5. Tripwire : Installation 2/9

493

Chapitre 15. SR010 Les enjeux de la scurit Figure 15-6. Tripwire : Installation 3/9

494

Chapitre 15. SR010 Les enjeux de la scurit Figure 15-7. Tripwire : Installation 4/9

495

Chapitre 15. SR010 Les enjeux de la scurit Figure 15-8. Tripwire : Installation 5/9

496

Chapitre 15. SR010 Les enjeux de la scurit Figure 15-9. Tripwire : Installation 6/9

497

Chapitre 15. SR010 Les enjeux de la scurit Figure 15-10. Tripwire : Installation 7/9

498

Chapitre 15. SR010 Les enjeux de la scurit Figure 15-11. Tripwire : Installation 8/9

499

Chapitre 15. SR010 Les enjeux de la scurit Figure 15-12. Tripwire : Installation 9/9

# $ $ $

Documentation man twintro # Introduction man twconfig # Configuration man tripwire # Controle dintgrit

# Fichiers de configuration

500

Chapitre 15. SR010 Les enjeux de la scurit


/etc/tw.cfg (docs/sr010-ch04-tripwire-tw-cfg.txt) /etc/twcfg.txt (docs/sr010-ch04-tripwire-twcfg.txt)

# Fichier conf sign linstallatio # Copie en texte brut

# Rien changer, moins que votre programme # de mail soit plac ailleurs que dans /usr/sbin/sendmail

/etc/twpol.txt (docs/sr010-ch04-tripwire-twpol.txt) # Contient les rgles pour les diffr # fichiers et rpertoires sensibles du systme # ceux dont lintgrit doit tre vrifi # Commenter les rgles ou chemin que vous ne souhaitez # pas voir applique lors du contrle dintgrit # Appliquer les modifications apportes au fichier de rgle (ou politique) $ /usr/sbin/twadmin --create-polfile -S site.key /etc/tripwire/twpol.txt # Supprimer la base de donnes initiales avec la commande... $ rm /var/lib/tripwire/hostname.twd # ... et recrez votre base de donnes : /usr/sbin/tripwire --init ... Wrote database file: /var/lib/tripwire/debstafil4.twd The database was successfully generated. # Noubliez pas ensuite de signer le fichier twcfg.txt # afin que le changement de configuration soit pris en compte avec la commande # Syntaxe: twadmin --create-cfgfile # Pour dsigner un fichier texte # contenant la configuration appliquer # Le fichier va ainsi tre sign $ /usr/sbin/twadmin --create-cfgfile -S /etc/tripwire/site.key /etc/tripwire/twcfg.txt

# # $ #

Parcourir le systme la recherche de fichiers ajoutes, supprims ou modifis$ /usr/sbin/tripwire --check /usr/sbin/tripwire --check | tee > /tmp/tripcheck.log tripcheck.log contient les erreurs

# Lancer tripwire priodiquement Tripwire est automatiquement configur pour se lancer quotidiennement, vrifier dans /etc/cron.daily # Recevoir le rsultat par mail (selon twcfg.txt) # Test denvoi $ /usr/sbin/tripwire --test --email deny@monaco.net # Configuration possible (twpol.txt) ... ( rulename = "File System and Disk Administraton Programs", severity = $(SIG_HI), # Noubliez pas la virgule la fin emailto = deny@monaco.net )

501

Chapitre 15. SR010 Les enjeux de la scurit


... # $ $ $ $ Regnaration du fichier twpol.txt ncessaire en cas de changement: /usr/sbin/twadmin --create-polfile -S site.key /etc/tripwire/twpol.txt rm /var/lib/tripwire/hostname.twd /usr/sbin/tripwire --init /usr/sbin/twadmin --create-cfgfile -S /etc/tripwire/site.key /etc/tripwire/twcfg.txt

# Gnrer un rapport .twr (par /usr/sbin/tripwire --check) $ /usr/sbin/twprint -m r --twrfile /var/lib/tripwire/report/hostname.twr | less

# Mise jour de la base de donnes (en cas de changement de permission, mise jour, etc... $ /usr/sbin/tripwire --update --twrfile /var/lib/tripwire/report/report/hostname.twr

Note :
- Requiert une installation sur chaque hte tester - Requiert une mise jour aprs tout changement (mme un simple changement de permission) - Fichier de configuration par defaut assez complet mais provoque bcp dalert par dfaut puisque certains des fichiers nexistent pas sur le systme - La suite de ligne de commande est "complexe" (quatres commande pour chacun des mode dutilisation)

15.6.2.5. Simple Network Management Protocol (SNMP)


Source(s):

Web: Installation dun serveur SNMP sous GNU/Linux (http://blog.nicolargo.com/2008/02/installation-dun-serveur-snmp-sous-linux.html) Principe du protocole SNMP (http://christian.caleca.free.fr/snmp/principe.htm)

Ce protocole a t cr pour simplier la vie des administrateurs rseaux, an de pouvoir interroger leurs systmes distance, voire dy interagir. Pour ce faire, des mibs ont t associes aux matriels. Elles dnissent les options daction et de surveillance possibles. Un agent sur chaque quipement (hte, routeur, switch, etc...) : Chaque quipement que lon voudra "manager" distance devra disposer dun agent SNMP. Cet agent est un serveur, cest dire quil reste lcoute dun port particulier : le port UDP 161. Il reoit et rpond aux requtes, il peut agir (si autoris)

502

Chapitre 15. SR010 Les enjeux de la scurit sur lenvironnement local pour modier un paramtre si ladministrateur le souhaite. Enn il peut mettre des alertes de sa propre initiative (si congur ainsi). Un "manager" sur la station dadministration : Ladministrateur, sur sa machine dadministration, dispose dun outil dit "manager". Cest avant tout un client, dans la mesure o cest lui qui envoie les requtes aux divers agents SNMP du rseau. Il devra aussi disposer dune fonction serveur, car il doit rester lcoute des alertes que les divers quipements sont susceptibles dmettre tout moment.

Avertissement
SNMP peut se rvler tre plutt du genre indiscret. Est-il ncessaire dindiquer que, dans linstallation par dfaut de lagent SNMP, celui-ci peut raconter votre vie nimporte qui ? Ninstallez pas SNMP sans savoir ce que vous faites et sans vrier sa conguration par dfaut...

La MIB (http://christian.caleca.free.fr/snmp/la_mib.htm) : Cest une base de donnes normalise dinformations de gestion :


des informations consulter, des paramtres modifier, des alarmes mettre...

SNMP permettant de retrouver les information et dagir sur les paramtres de faon indpendante du matriel, comme du logiciel, la MIB permet de lire et dcrire sur les quipements distants, de faon galement normalise. Cest lagent lui-mme de faire la traduction entre les informations transmises par SNMP et la plate-forme. Organise hirarchiquement, de la mme faon que larborescence des domaines Internet, la MIB contient une partie commune tous les agents SNMP en gnral, une partie commune tous les agents SNMP dun mme type de matriel et une partie spcique chaque constructeur.
# apt-get install NET-SNMP ... Les NOUVEAUX paquets suivants seront installs : snmpd 0 mis jour, 1 nouvellement installs, 0 enlever et 17 non mis jour. ... Starting network management services: snmpd. # nano /etc/snmp/snmpd.conf com2sec localnetwork 10.0.2.0/24 public

# Autoriser seulement les requtes # venant du rseau 10.0.2.0/24

Ensuite il est possible dassocier ce "nom scuris" un groupe:

503

Chapitre 15. SR010 Les enjeux de la scurit

group rogroup v1 localnetwork

On vient de demander la cration du groupe rogroup (pour Read Only Group), qui contient loca

Il est galement possible de crer des vus (cest dire de prciser ceux que les groupes pe view all included .1 80 Finalement, on associe le groupe et la vue: access rogroup "" any noauth exact all none none

Utiliser la commande snmpwalk pour procder des requte SNMP :


# Installation NET-SNMP UTILS # snmpwalk fait partie tu paquet snmp $ apt-get install snmp

$ man snmpwalk $ man snmpcmd

# Documentation

# La version 3 fournit des options de scurits OPTIONS: -h, --help display this help message -H display configuration file directives understood -v 1|2c|3 specifies SNMP version to use -V, --version display package version number SNMP Version 1 or 2c specific -c COMMUNITY set the community string SNMP Version 3 specific -a PROTOCOL set authentication protocol (MD5|SHA) -A PASSPHRASE set authentication protocol pass phrase -e ENGINE-ID set security engine ID (e.g. 800000020109840301) -E ENGINE-ID set context engine ID (e.g. 800000020109840301) -l LEVEL set security level (noAuthNoPriv|authNoPriv|authPriv) -n CONTEXT set context name (e.g. bridge1) -u USER-NAME set security name (e.g. bert) -x PROTOCOL set privacy protocol (DES|AES) -X PASSPHRASE set privacy protocol pass phrase -Z BOOTS,TIME set destination engine boots/time [...]

# Editer /etc/default/snmpd $ nano /etc/default/snmpd # Modifier comme suit sur Debian/Ubuntu pour pouvoir

504

Chapitre 15. SR010 Les enjeux de la scurit


# interroger la machine locale via son IP ... SNMPDOPTS=-Lsd -Lf /dev/null -u snmp -I -smux -p /var/run/snmpd.pid ... # Re-dmarrer le service $ /etc/init.d/snmpd restart # Interroger la machine $ snmpwalk -v 1 -c public localhost $ snmpwalk -v 1 -c public 10.0.2.15 # IP de la machine locale ... SNMPv2-MIB::sysDescr.0 = STRING: Linux debstafil4 2.6.26-2-686 ... SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.10 DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (129531) 0:21:35.31 ... SNMPv2-MIB::sysORUpTime.8 = Timeticks: (1) 0:00:00.01 End of MIB # Interroger un machine distante $ snmpwalk -v1 -c public 10.0.2.16 Timeout : No Response from 10.0.2.16

# IP de la machine distante

15.6.2.6. Outils de surveillance: Nagios, OpenNms


Source(s):

Web: Nagios (http://www.nagios.org) OpenNMS (http://www.opennms.org/wiki/Main_Page) OSE, OpenNMS Sans Effort est disponible en version 2.0 (http://linuxfr.org/2010/01/12/26342.html) OSE (OpenNMS Sans Effort) (http://www.ose-distrib.org)

Nagios (http://www.nagios.org) : (anciennement appel Netsaint) est un logiciel libre sous licence GPL permettant la surveillance systme et rseau (htes, services spcis), alertant lorsque les systmes vont mal et quand ils vont mieux. Cest un programme modulaire qui semble se dcomposer en trois parties :
- Le moteur de lapplication : ordonnance les tches de supervision) - Linterface web : vue densemble du systme dinformation et des possibles anomalies - Les plugins : une centaine de mini programmes que lon peut complter en fonction des besoins de chacun pour superviser chaque service ou ressource disponible sur lensemble des ordinateurs ou lments rseaux du SI.

505

Chapitre 15. SR010 Les enjeux de la scurit

OpenNMS (http://www.opennms.org) : solution de supervision rseau crite en Java dont les principales fonctions sont les suivantes :
- Dcouverte dquipements et de services - Suivi de disponibilit de ces quipements et services - Collecte de donnes (SNMP, HTTP, JMX) et prsentation graphique de ces donnes (RRD, jrb) - Traitement dvnements (traps SNMP, syslog) et des alarmes - Corrlation dvnements (drools) et enfin rapport - Dcodage des MIBs SNMP grce loutil mib2opennms.

Il semble avoir t conu spciquement pour rpondre lvolutivit et lexigences dintgration dentreprise de grands oprateurs de tlcommunications lesprit.
Note : OpenNMS semble tre le seul outil de supervision Open Source pouvant fournir la fonctionnalit principale dun hyperviseur savoir :
-La traduction et laffichage des traps SNMP reues sous forme dvnements (sans corrlation) et sous forme dalarmes avec deux fonctions de corrlation de base : + La dduplication : un compteur sincrmente lorsque plusieurs alarmes du mme type sont reues ; + La corrlation dbut-fin : lalarme de fin acquitte lalarme de dbut.

La meilleure faon est encore de lessayer avec la distribution OSE (OpenNMS Sans Effort).

15.7. Diffrents types dattaques


Source(s):

OF: SR010-ch04-act003-sr010-types_attaques.pdf (docs/eof/sr010-ch04-act003-sr010-types_attaques.pdf)

506

Chapitre 15. SR010 Les enjeux de la scurit

15.7.1. Attaques Locales


Des un logiciel dfectueux (failles connues ou non du public) ou une mauvaise conguration de votre systme...

15.7.1.1. Maintenance minimale


ssh eof.eu.org -l jop sudo apt-get update sudo apt-get dist-upgrade -u sudo ps faux sudo netstat -tupanw sudo last sudo w # # # # # # # # # # connexion lhte dsir rcupration de la liste des mises jour en fonction du systme visualisation et installation des paquets mettre jour surveillance des processus un instant T, ordonns en arbre surveillance des connexions tcp et udp visualisation des dernires connexions liste des connects au systme un instant T

cette liste non exhaustive sajoute bien sr la : # consultation des journaux # vrification du bon fonctionnement des systmes serveurs etc...

Note : Pour la diffrence entre update, upgrade, dist-upgrade voir la section APT ou man apt-get

15.7.1.2. sudo au lieu de root!


Utiliser sudo au lieu de se connecter en tant que root (via su par exemple) ! EXERCICE : Installez et congurez sudo pour quil ne vous autorise qu utiliser la commande iptables : sr010-ch04-sudoers.txt (docs/sr010-ch04-sudoers.txt) sr010-ch04-sudo-log.txt (docs/sr010-ch04-sudo-log.txt)

Avertissement
Il est important, voire essentiel de ne jamais excuter un processus inconnu en tant que root . Cest pour cela que la variable PATH de root ne contient pas le rpertoire o vous vous trouvez comme chemin dexcu- tion.

507

Chapitre 15. SR010 Les enjeux de la scurit

15.7.1.3. rssh au lieu de ssh ?


EXERCICE RSSH: expliquez dans un texte dune dizaine de lignes lintrt de rssh ainsi que ses contraintes : Voir section ddie in SR004

15.7.1.4. Mot de passe : Cycle de changement, Vrication, Sanction


Lobtention dun mot de passe est une entre directe sur votre serveur. Nhsitez pas avoir un cycle de changement court et une politique de vrication stricte. Si vous savez de manire sre quun utilisateur loue/donne/vend son mot de passe, pensez des sanctions svres son encontre.

15.7.1.5. HIDS contre les rootkits


Les rootkits, ou botes outils du parfait petit pirate, permettent son possesseur de prendre le contrle du systme et de cacher son activit ladministrateur, la plupart du temps en remplaant les binaires communs, tels que ls, netstat, w, last, ps, top. Il peut de ce fait agir en toute impunit, sans ce soucier dune ventuelle intervention du propritaire. Un systme HIDS (surveillance des binaires essentiel) est le moyen le plus efcace pour se rendre compte de cette infraction. EXERCICE : installez et congurez tripwire de manire sommaire. Remontez par mail linconvnient de ce genre de systme ainsi que ses avantages. Voir section SR010 > HIDS

15.7.2. Attaques Distantes


Si les attaques locales sont plus nombreuses elle nen sont pas moins les plus dangereuses, elles restent dans un champ de personnes connues. Les attaques distantes, quant elles, permettent toute personne potentiellement raccorde votre rseau de tenter sa chance, ce qui, dans le cas dInternet peut devenir un rel problme.

508

Chapitre 15. SR010 Les enjeux de la scurit

15.7.2.1. Le problme de lARP


Source(s):

Web: arp-sk : A swiss knife tool for ARP (http://sid.rstack.org/arp-sk) Jouer avec le protocole ARP (http://sid.rstack.org/arp-sk/doc/article/arp.html)

# Manipulations des tables ARP / Rediriger le trafic sur un LAN coute de rseau (sniffing) via tcpdump, wireshark Usurpation dadresse MAC (MAC spoofing) Usurpation didentit ARP (ARP spoofing) Corruption de cache ARP (ARP cache poisoning) [root@joker]# arp-sk -w -d batman -S robin -D batman # # # # Cration dentre IP (robin) avec MAC (jocker) sur batman

[root@joker]# arp-sk -r -d batman -S robin -D batman # Mise jour

# Les diffrentes attaques possibles - coute - Interception (proxying) et vol de connexion (hijacking) [root@joker]# iptables -t nat -A PREROUTING -p tcp -s robin -d batman --dport 80 -j REDIRECT --to-ports 80 # Ainsi, joker renvoie sur son port 80 local les paquets TCP mis # par robin destination du port 80 (HTTP) de batman. ... - Passage de pare-feu par usurpation (spoofing) [root@joker]# arp-sk -r -d batcave-gw -S robin -D batcave-gw [root@joker]# iptables -t nat -A POSTROUTING -j SNAT --to 192.168.1.2 [root@joker]# echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects - Homme du milieu (Man in the Middle - MiM) - Dni de service (DoS) # Refuser les paquets dtourns, pour robin, batman est mort... [root@joker]# iptables -A FORWARD -p tcp -s robin -d batman -j DROP

# Les parades - Les systmes de dtection dintrusion (IDS) * Construire un table dassociation IP/MAC detecter les changements ARPWatch, WinARPWatch * Vrifier la cohrence du message ARP et des enttes Ethernet NIDS Prelude (via plugin), Snort - Cache ARP statique

509

Chapitre 15. SR010 Les enjeux de la scurit

$ arp -s nom_d_hte hw_addr # Linux $ arp -f nom_de_fichier - Filtrage au niveau ARP [root@alfred]# iptables -A INPUT -m mac --mac-source 52:54:05:F4:62:30 -s batman -j ACCEPT # De cette manire, on force lassociation de ladresse IP de batman son adresse MAC. # Utiliser aussi une table arp qui permet de filtrer les requtes ARP - Utilisation de lauthentification forte

Ma premire impression est un tonnement sur la "facilit" falsier une information aussi importante que la table ARP et dtourner/ltrer une communication entre deux machines si les parades ncessaires ne sont pas mise en place. Jimagine que la rapidit de dveloppement dInternet et la "lenteur" dans la dnition de standard adquate (par cela jentends sufsement scuris) na pas aid rsoudre ces issues. Lors de la dnition des standards, la priorit semble avoir t donne au fonctionnement et linterconnexion des systmes et non pas la scurit. La scurit implique aussi un changement dorganisation et le dveloppement de ressource/trafc lgrement plus importante (pour grer lauthentication par exemple). Larrive de standard tel que DNSSEC et autre, prouve que lInternet tends devenir plus scuris... mais cela sufra-t-il ?

15.7.2.2. Man In The Middle (MITM)


Lhomme au milieu est une attaque courante : Le pirate cherche sintroduire entre vous et lhte que vous souhaitez contacter. Que cela soit sur une connexion scurise ou non, lattaque reste possible. Absolument :
- sassurer de votre interlocuteur (liaison ssl) - vrifiez toujours les certificats qui vous sont prsents - au moindre signe de modification intempestive, contactez ladministrateur distant pour vous assurer que celle-ci est normale

510

Chapitre 15. SR010 Les enjeux de la scurit

15.7.2.3. Dni de service (DOS) et DOS Distribu (DDOS)

Avertissement
Ne prenez donc pas ce problme la lgre et pensez le plus tt possible des solutions adquates.

Le dni de service (part dun seul et unique hte) et son petit frre le dni de service distribu (part de plusieurs milliers dhtes) sont des moyens attrayant pour couper un utilisateur du reste du monde. Ainsi isol, la victime est aveugle et sourde et reste la merci du pirate. Pourquoi faire un dni de service ? Demande de ranon, usurper la place de lhte, attirer lattention... Que peut on faire dans ce cas ? Ne pas paniquer, tudier lattaque et tenter de cibler un point commun chacune, prendre des mesures (rewall, routeur, etc...), contacter votre fournisseur daccs....

15.7.2.4. XSS & CSRF


Source(s):

Web: PHP : se protger contre les attaques XSS et CSRF (http://www.journaldunet.com/developpeur/tutoriel/php/031030php_nexen-xss2.shtml) Javascript Field Validations -- Client Side Scripting (http://www.shiningstar.net/articles/articles/javascript/javascriptvalidations.asp?ID=aw)

Le Cross Scripting Site (XSS) est un procd trs rpandu sur Internet qui consiste utiliser des faiblesses de programmation des sites pour excuter des commandes locales ou distantes en injectant des donnes arbitraires dans les scripts. Les attaques CSRF consistent faire excuter des commandes involontaires aux utilisateurs accrdits dun site, elles ne sont pas traites ici. Quelle est la solution adopter ?
- sassurer que tous les champs dupload ou de saisie sont vrifis. - Ne pas se baser sur les cookies comme unique moyen dauthentification - Avoir une configuration close du langage utilis - Ladministrateur systme doit travailler avec les quipes de dveloppement des sites

511

Chapitre 15. SR010 Les enjeux de la scurit

EXERCICE : Crez une page web en php qui laisse en champ de saisie sans vrication et qui renvoie sur la mme page le rsultat. Insrez la chane suivante dans le champ de saisie et envoyez au traitement :
<script>alert(problme);</script>

Script PHP (problme): docs/sr010-ch04-xss-php.txt Figure 15-13. SR010 Surveillance : Attaque XSS (PHP)

512

Chapitre 15. SR010 Les enjeux de la scurit

Analyse de rsultat : Le script javascript insr dans le champs du formulaire sxecute lors de lafchage de la page web, une popup apparat. Se Protger Contre XSS :
1. Filtrer toutes les donnes trangres 2. Utiliser des fonctions existantes : htmlentities(), strip_tags(), utf8_decode(), etc... revue et teste par plus de gens elle contiennent moins derreurs pouvant conduire des vulnrabilits. 3. Seulement autoriser un contenu valid crire une logique de filtrage, autorisez seulement le contenu que vous considrez sr plutt que linverse. 4. Utiliser une convention de nommage stricte Il y a de nombreuses conventions de dnomination que les dveloppeurs utilisent pour savoir si une variable particulire contient des donnes filtres (propre/clean) ou non filtres (sale/dirty) 5. Soyez cratifs et ne pas faire de suppositions Arm dune bonne comprhension du web ainsi que de votre propre application, vous tes la personne la plus qualifie pour assurer la scurit et protger votre application et ses utilisateurs, des attaques. Ne faites confiance aucune donne tant que votre filtrage des donnes ne la pas approuv.

Script PHP (solution) : xss2.php (docs/sr010-ch04-xss2-php.txt)

Avertissement
Pour le test le ltrage a t effectu en javascript mais dans lidal il devrait aussi tre accompagn dun ltrage similaire directement dans le code PHP pour viter tout contournement...

513

Chapitre 15. SR010 Les enjeux de la scurit Figure 15-14. SR010 Surveillance : Protection contre attaque XSS (PHP)

15.7.2.5. Lingnierie sociale


... une personne mal intentionne pourra se faire passer pour un fournisseur an de rcuprer telle ou telle information... dautres encore diront faire partie de la tlmaintenance pour obtenir directement un mot de passe... Comment lutter contre cela ?
- ne jamais donner son mot de passe !

514

Chapitre 15. SR010 Les enjeux de la scurit


- Vrifiez, autant que possible, la ralit de vos interlocuteurs (organigramme sur site web, newsgroups, pages personnelles, etc...) - faire des recherches sur vos correspondants pendant quils sont en ligne.

15.7.3. Sensibilisation
Cest le dbut du plan de scurisation du SI... la scurit totale de votre SI rside sur la rsistance la plus forte de votre maillon le plus faible, qui en gnral se trouve tre lhumain.
- Organisez des sances de sensibilisation (jeux, films, etc...) - Chacun de vos collaborateurs soit inform des risques quil fait encourir lentreprise et au-del au SI sil savre tre le maillon faible. - Toujours en accord avec votre direction - Rappels rguliers sur les mots de passe en les accompagnant dune liste de comptes dfectueux - Restez toujours cordial ;-) mais ferme quant votre politique, - commencer par vous-mme - Appliquez dabord vos rgles et montrez-le, vous nen serez que davantage pris au srieux.

15.7.4. La charte de lutilisation du SI


La charte dnit les usages et limites lintrieur du SI, cest le point dentre du droit dans votre SI. Toute personne nayant pas accept la charte doit se voir interdire lusage du SI. Toute infraction celle-ci doit dabord se voir doter dun rappel, puis si linfraction continue, dune interdiction dusage partiel ou total. Cette charte doit tre mrement rchie et modiable chaque anne, en fonction des nouvelles technologies. Si quelque chose nest pas cit dans la charte, prfrez que les utilisateurs viennent vous demander lautorisation

515

Chapitre 15. SR010 Les enjeux de la scurit Crer un climat de conance autour de ces rgles de bonne conduite vous permettra de constituer une scurit plus rsistante.

15.7.5. Historique dutilisation : Centraliser & protger


Centraliser (serveur ddi par exemple) historique dutilisation produit par les systmes et de les rendre non accessibles lextrieur de votre entreprise, ceci an quen cas de compromission, le pirate ne puisse effacer ses traces. Prfrez des remontes dalertes cibles. En terme de cartographie du rseau :
- soit ne pas fournir dadresse IP au serveur de log... - soit utiliser le pare-feu afin quaucun trafic ne puisse sortir de votre machine et que seul les flux dhistorique soient autoriss en entre.

Voir congurer le systme de journalisation ci-aprs

15.8. Congurer le systme de journalisation


Source(s):

OF: SR010-ch05-act004-sr010-journalisation.pdf (docs/eof/sr010-ch05-act004-sr010-journalisation.pdf)

15.8.1. Rappel
Le systme de journalisation (les logs), est un composant important du SI, il permet de :
- vrifier quil ny a aucune erreur de configuration sur les services - vrifier quil ny a pas de comportements anormaux de la part de vos utilisateurs - fournir la matire premire pour une autopsie en cas de compromission ou de crash systme.

516

Chapitre 15. SR010 Les enjeux de la scurit

Note : Il peut tre exploit par tout type de programme ou script pour reporter des dysfonctionnement. Il est conseill dutiliser un tel systme pour ses propre script, dtection derreur, de crash ou de compromission...

15.8.2. Tester sa conguration


EXERCICE : crivez un script qui teste toutes les rubriques dcrites ci-dessus avec chacun des niveaux dalerte qui existent. sr010-ch05-act004-sr010-checklogger-sh.txt (docs/sr010-ch05-act004-sr010-checklogger-sh.txt)

15.8.3. Congurer les rotations (logrotate)


Source(s):

Web: Rotation des logs avec logrotate (http://www.croc-informatique.fr/2009/06/rotation-des-logs-avec-logrotate)

Logrotate permet de faire la rotation des chiers logs automatiquement. Celui contient de nombreuses options permettant choisir le fonctionement de la rotation.
## Prenons le fichier messages en exemple $ mv /var/log/messages /var/log/messages.1 $ touch /var/log/messages # Documentation $ man logrotate # Script de lancement automatique $ cat /etc/cron.daily/logrotate #!/bin/sh test -x /usr/sbin/logrotate || exit 0 /usr/sbin/logrotate /etc/logrotate.conf ## Configuration gnrale $ nano /etc/logrotate.conf ## Configurez son logrotate (parmi dautres) ## dans /etc/logrotate.d qui sera inclu automatiquement

517

Chapitre 15. SR010 Les enjeux de la scurit


$ nano /etc/logrotate.d/messages ... /var/log/apt/term.log { rotate 52 weekly compress mail www@my.org postrotate # conserve 52 fichiers par an :) # change les logs chaque semaine # de manire compresse # quil vous envoie un mail en cas de problme # que le changement de fichier de logs ne perturbe pas # lapplication dont ces derniers sont issus. /usr/bin/killall -HUP syslogd endscript } # Dautres options disponibles tel que la taille des fichiers, etc... ## Pour dbugger $ logrotate -d /etc/logrotate.conf ## Appliquer les changements $ logrotate -f /etc/logrotate.conf

15.8.4. Surveiller les logs (swatch, syslog-ng)


Source(s):

Web: Swatch et Syslog (http://www.karlesnine.com/post/2004/05/12/Swatch-et-Syslog) swatch: Automated Log Monitoring for the Vigilant but Lazy (http://www.linuxjournal.com/article/4776)

Il est fastidieux de surveiller tous les logs. Initialiser une logique de remonte de logs qui permette dobtenir les lments les plus importants directement dans sa bote mail (votre lieu de rsidence principal). Comment surveiller plus facilement mon systeme grce une utilisation plus ne des log ? Swatch rpond facilement et rapidement a cette question. Swatch agie comme grep pour faire des recherche dans les logs. Il en extraie le contenue selectionn avec une prsentation plus travaille que la simple ligne de texte et lance des actions selon vos instruction. swatch vous permet de congurer loisir les remontes que vous souhaitez et autorise lemploi des expressions rgulires, appeles regex.

518

Chapitre 15. SR010 Les enjeux de la scurit EXERCICE : installez swatch et congurez-le de manire ce quil surveille vos services apache et ssh et quil ne vous remonte que ce qui est ncessaire pour une surveillance avise. Exemple de chier de conguration Swatch : ~/.swatchrc (docs/sr010-ch05-swatch-conf.txt)
## CONFIGURATION ## Fichier de configuraiton $ nano ~/.swatchrc ## Syntaxe watchfor /pattern regex/ action ignore /pattern regex/ ## Actions possibles - echo [mode] : affiche la ligne de logs contenant le motif. Plusieurs modes daffichage : en couleurs, invers, en gras... - bell [N] : affiche la ligne et fait retentir N fois une cloche - exec command: permet dexcuter une commande. les variable suivante sont disponible : $N pour le nombre de champs dans le ligne. $0 or $* pour la ligne en question. - mail [addresses=address:address :...][,subject=your_text_here] : permet denvoyer la ligne et un commentaire une o plusieurs personnes. - throttle hours:minutes:seconds,[use=message|regex] : permet de limiter le nombre de fois que laction sera effectue ("partition pleine") - continue : permet de continuer la recherche de motifs sur la mme ligne. - write [user:user :...] : permet denvoyer une message a un utilisateur prsent connecter sur la machine. - quit : Explicite, fin et sortie de swatch. ## Options daction - when=day_of_week:hour_of_day

# spcifier un intervalle valide # pour lexecution de cette action. # courriel ladmin # lun->sam # entre 8H->17H # limite laction dapres # le nombre de fois ou une parterne # est trouver durant une priode prcise.

# Exemple mail=admin@rsr.fr,when=1-6:8-17

- threshold events:seconds,[repeat=no|yes]

# Exemple :

519

Chapitre 15. SR010 Les enjeux de la scurit


threshold 4:60" # si la chane de caractre trouve 4 fois # dans les 60 dernire secondes. # (attaques en "brute force" ou les "flood")

- PERLCODE

# insertion de code Perl, # les fameuses expression rgulire.

# Exemple PERLCODE=$syslog=^[A-Z][a-z]{2} [0-9]+([0-9]+:){2}[0-9]+; watchfor /${syslog} hostname pppd/ # supstitution de variable nom des machines ce connectant # en ppp sur le serveur

## EXEMPLES ... watchfor /File name too long/ # cherche sur lexpression mail addresses=mick\@visi.com, # envoi alert par email subject=BufferOverflow_attempt # sujet de lalert ... watchfor /file system full/ echo bold bell 3 throttle 01:00 ... watchfor /friends/ echo exec "play /home/agemis/Mail/.mail.wav" ... watchfor /authentication failure/ echo bold, yellow, threshold 10:120 write root:admin, threshold 10:120 mail addresses=admin,subject=--- 10 wrong in last 2 minutes [user] ---, threshold 10:120 bell 5, threshold 10:120

## UTILISATION ## Inspecter en continue la queue dun fichier de log ## --tail-file=nom-de-fichier ou -t nom-de-fichier ## afin de ragir au dernire ligne cres. ## garder un xterm ouvert avec swatch de lancer, ## affichant fur et mesure les alertes. Le ligne de commande est donc : $ swatch -c /etc/swatch.conf -t /var/log/syslog ## Pour vrifier ou re-vrifier lintgralit du fichier log ## --examine=nom-de-fichier ou -f nom-de-fichier ## pour avoir un historique des vnements. ## reprendre le fil des vnements suite a un crash ou simplement ## aprs une nuit de sommeil. $ swatch -c /etc/swatch.conf -f /var/log/syslog ## Pour rcuprer la sortie (STDOUT) dun autre programme ## --read-pipe=nom-de-fichier ou -p nom-de-fichier

520

Chapitre 15. SR010 Les enjeux de la scurit


$ swatch -c /etc/swatch.conf -p tail -f /var/log/syslog

15.9. Outils daudit de scurit


Source(s):

OF: SR010-ch07-act006-sr010-outils.pdf (docs/eof/sr010-ch07-act006-sr010-outils.pdf)

15.9.1. Construire un forteresse


Les outis daudit de scurit permettent de sassurer que votre rseau ressemble une forteresse, plutt qu une passoire. Trois outils simples et trs complets (en term doptions) pour approcher laudit de scurit : nmap : scanner de port, dtection de services et de systmes dexploitation,... nikto : vrier la conguration des serveurs web. Nessus : un scanner rseau qui vrie la prsence de vulnrabilits sur votre ordinateur ou votre parc.

15.9.2. nmap
Trs populaire dans le milieu de la scurit informatique par sa simplicit dutilisation et sa richesse. Il possde galement une interface graphique.

15.9.3. nikto
...

15.9.4. nessus
...

521

Chapitre 15. SR010 Les enjeux de la scurit

15.10. Examen
Source(s):

OF: SR010-ch08-sract007-sr010-examen.pdf (docs/eof/sr010-ch08-sract007-sr010-examen.pdf)

Aprs ma participation ce module sur la scurit je nai pu constater que mes lacunes en terme de connaissance et dapplication de rgles importantes de scurit. Jusqu prsent je navais jamais t rellement form ou sufsament sensibilis en profondeur sur lensemble des aspects de la scurt dun SI. Cela a t aussi loccasion de dcouvrir de nombreuses mthodes ainsi que de nombreux outils utiliser pour renforcer la scurit de mon ordinateur, de mon rseau mais aussi applicable lensemlbe dun SI au sein dune entreprise. Cela passe par une connaissance profonde des protocoles et systme de communication rseau, des moyens de scuriser de tel communications, les systmes et services, les machines, et les donnes. Cela passe aussi par la dnition dune politique scurit enforcer soi mme et faire respecter aux autres autant que faire ce peut en les sensibilisants gentiment mais fortement :) Cela passe par une maintenance des systmes (mise jour de scurit) et une surveillance rgulires via les logs pour dtecter au plus tt et au mieux toute dfaillance ou attaque. Responsabilit et paranoia sont les matre mots dune bonne politique de scurit... Maintenant il va falloir digrer tout cela, reprendre les points difciles voir trs difciles... et implmenter lensemble des bonnes pratique aussi bien personnellement ( la maison par example) que professionnellement.

15.11. Scurit avance


Source(s):

OF: SR010-ch09-sec02-securite-avancee (docs/eof/sr010-ch09-sec02-securite-avancee.pdf)

Tout ce qui a t vu prcdement, nest que la partie scurit qui concerne ladministration.

522

Chapitre 15. SR010 Les enjeux de la scurit Nous navons pas vu comment crire des exploits, comment faire de la scurit en tant que professionnel, consultant, etc... Encore plein de choses dcouvrir... des infos (blog, evenement, journeaux, outils, etc...) sont disponibles dans ce document (docs/eof/sr010-ch09-sec02-securite-avancee.pdf).

523

Chapitre 16. SR011 Dployer un routeur, un pare-feu et un serveur mandataire


16.1. Pare-feu (Firewall) - Filtre paquets
Source(s):

Web: 7 of the best Linux rewalls (http://www.techradar.com/news/software/applications/7-of-the-best-linux-rewalls-697177)

16.1.1. Introduction
Un pare-feu (rewall en anglais) est un logiciel (et/ou un matriel), qui a pour fonction de faire respecter la politique de scurit du rseau, celle-ci dnissant quels sont les types de communication autoriss ou interdits. Le ltrage des paquets au niveau IP, transport ou adresse est utilis pour des raisons de scurit. Par exemple autoriser ou interdire laccs un service, un rseau ou une machine. Techniquement, un pare-feu est un ltre paquets c.a.d un programme qui regarde len-tte des paquets rseau qui passent, et dcide du sort du paquet entier. Il peut dcider de DROPer le paquet (p.e., faire comme si il navait jamais t reu), ACCEPT le paquet (p.e. le laisser passer), ou quelque chose de plus compliqu. Les rgles de ltrage sont analyses de manire squentielle, ds quune rgle dnie correspond au paquet analys, elle est applique. Chaque paquet est analys au travers des chanes. Si un ltre correspond, la rgle associe est applique au paquet ( ACCEPT, DROP, MASQ ...). Sinon le ltre suivant est test. la n de chaque chane un traitement "par dfaut" est appliqu en dernier ressort (ACCEPT/DROP)

16.1.2. Conseils retenir


Source(s):

Web: Mise en Garde sur le Filtre de Paquets (http://www.netlter.org/documentation/HOWTO/fr/packet-ltering-HOWTO-11.html)

524

Chapitre 16. SR011 Dployer un routeur, un pare-feu et un serveur mandataire Toujours tre minimaliste : La faon gnralle de procder dans la scurit informatique est de tout bloquer puis douvrir des trous quand cest ncessaire. Cest habituellement paraphras par tout ce qui nest pas spciquement autoris est dfendu. Je recommendes cette approche si la scurit est un primeur. Ne fais pas tourner de service dont tu nas pas besoin, mme si tu penses avoir bloqu laccs vers ceux-ci. Si tu cres un rewall ddi, commences par ne rien faire tourner et tout bloquer et ajoutes les services et laisses passer les paquets quand cest ncessaire. Un FW protge plus des ux sortants que les autres. Une machine intra transforme en robot est plus dangeureuse si on ne sen me pas quun craker extrieur.

16.1.3. Conguration Minimum


Se protger efcacement contre un intrus ventuel. Si donc vous ne comptez pas installer un serveur ouvert tout vent sur votre poste de travail, vous pouvez les rgles suivantes comme une approche spcique de la protection :
# interdit tout flux dentre par dfaut iptables -P INPUT DROP # autorise que ceux ayant dj t autoriss par une connexion sortante iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Si vous avez besoin de travailler sur des serveurs, privilgiez un fonctionnement en localhost et parlez-en votre rewall.

16.1.4. netlter & iptables


Source(s):

OF: Les commandes Iptables (docs/eof/sr011-ch01-commandes_iptables.pdf) Tutorial: Tutorial Iptables Netlter (http://dominiqueinformatique.over-blog.com/article-588796.html) iptables (Linux Guruz) (http://www.linuxguruz.org/iptables) Schma:Netlter packet ow (http://upload.wikimedia.org/wikipedia/commons/3/37/Netlter-packet-ow.svg)

525

Chapitre 16. SR011 Dployer un routeur, un pare-feu et un serveur mandataire

Web: Netlter & Iptables (Wikipedia) (http://fr.wikipedia.org/wiki/Netlter) Netlter (http://www.netlter.org) iptables (http://www.netlter.org/projects/iptables/index.html) Packet Filtering HOWTO (http://www.netlter.org/documentation/HOWTO/fr/packet-ltering-HOWTO.html) Rappel: Networking-concepts HOWTO (http://www.netlter.org/documentation/HOWTO/fr/networking-concepts-HOWTO.html) NAT HOWTO (http://www.netlter.org/documentation/HOWTO/fr/NAT-HOWTO-6.html) Masquerading and Firewalls (http://www-uxsup.csx.cam.ac.uk/pub/doc/suse/sles9/adminguide-sles9/ch26s03.html)

16.1.4.1. Introduction
netlter : framework implmentant un pare-feu au sein du noyau Linux partir de la version 2.4 de ce dernier. Il prvoit des accroches (hooks) dans le noyau pour linterception et la manipulation des paquets rseau lors des appels des routines de rception ou dmission des paquets des interfaces rseau. ip_tables, ip6_tables, arp_tables et ebtables : modules du noyau, systmes des accroches (hooks) de Netlter. Ils fournissent un systme bas sur des tableaux pour dnir des rgles de pare-feu qui ltrent les paquets ou les transforment. iptables, ip6tables, arptables et ebtables : outils utilisateur (commandes) permettant dadministrer les tableaux dcrits ci-avant iptables est utilis pour maintenir et inspecter les tableaux (tables) de rgle de ltrage (rule) de paquet IPv4 au sein du noyau Linux. Plusieurs tableaux (talbes) peuvent tre dnis. Chacun deux contenant un certain nombre de chanes (chain) prdnies par dfaut et optionellement dnies par lutilisateur. Chaque chane (chain) contient une liste de rgles (rule) qui peuvent correspondre un ensemble de paquets. Chaque rgle dnie quoi faire avec les paquets correspondant. Ceci est appel cible (target).

16.1.4.2. Fichier de conguration


La conguration du pare-feu (rewall) est activ au sein du noyau lors du dmarrage partir dun chier contenant lensemble des chanes et des rgles de ltrage ncessaire.

526

Chapitre 16. SR011 Dployer un routeur, un pare-feu et un serveur mandataire

Avertissement
Toujours faire une copie du chier avant toute modications :
## Sauvegarder $ iptables-save > iptables_dump.txt ## Restaurer $ iptables-restore < iptables_dump.txt ## Des options pratique sont disponible ## Se rferrer au manuel des commandes

# Remus

# Romulus

Avertissement
Placez script dinitialisation de rgles lendroit adquat. Assurez-vous de faire quelque chose de rchi, au cas o il y aurait un problme alatoire lors de lexcution de votre script (balancer un exec /sbin/sulogin par exemple).

16.1.4.3. Tableaux (TABLES)


Chaque tableau est en fait sa propre accroche, et chaque tableau a t cr pour servir un but prcis. En ce qui concerne Netlter, gnralement lexcution de ces tableaux dans un ordre prcis par rapport aux autres tableaux. Toutefois, tous les tableaux vont excuter la mme fonction de traitement de tableau pour parcourir, et excuter des rgles. Diffrentes tables disponibles en fonction de la conguration du noyau, de la prsence de module correspondant dans le noyau :
## Options -t, --table table ## Spcifier la table sur laquelle la commande doit oprer ## Si -t est omise, cest la table filter qui est utilis par dfaut

lter (module iptable_lter) : utilis pour le ltrage gnral (rewall). Cest le tableau utilis par dfaut.
## Contient les chane prdfinies : INPUT (paquets destin aux "prise" (sockets) locales) FORWARD (paquets transmis [routage]) OUTPUT (paquets gnrs localement)

527

Chapitre 16. SR011 Dployer un routeur, un pare-feu et un serveur mandataire

nat (module iptable_nat) : Cette table est consulte lorsqu n packet crant une nouvelle connection est rencontr. Mis la disposition de iptables, cest une simple une base de donnes de conguration pour les mappages NAT, et nest destin aucun ltrage daucune sorte.
## Contient les chane prdfinies : PREROUTING (altrer les paquets leur arrive) OUTPUT (altrer les paquets gnrs localement avant routage) POSTROUTING (altrer les paquets lenvoi) ## le module enregistre deux accroches, ## les transformations de DNAT sont appliques avant laccroche de filtrage SNAT sont appliques ensuite.

mangle (module iptable_mangle) : consult aprs Connection Tracking (mais toujours avant les autres tableaux), pour apporter des modications au paquet (altreration), qui peuvent inuencer dautres rgles, telles que le NAT ou le ltrage.
## Contient les chane prdfinies : ## it had two built-in chains: PREROUTING (altrer les paquets leur arrive avant routage) OUTPUT (altrer les paquets gnrs localement avant routage) ## et en plus depuis INPUT (paquets FORWARD (altrer POSTROUTING (altrer kernel 2.4.18 destin aux "prise" (sockets) locales) les paquets transmis [routage]) les paquets lenvoi)

raw (module iptable_raw) : utiliser pour ltrer des paquets avant quils natteignent les oprations ncessitant plus de mmoire, comme Connection Tracking.
## Contient les chane prdfinies : PREROUTING (paquets arrivant via une interface rseau) OUTPUT (paquets gnrs par un processus local) ## enregistrer une accroche qui est appele ## avant toutes les autres accroches.

528

Chapitre 16. SR011 Dployer un routeur, un pare-feu et un serveur mandataire

16.1.4.4. Chanes (CHAIN)


Les chanes correspondent lendroit o la pile de Netlter a t invoque, comme la rception de paquets (PREROUTING), rendu sur place (INPUT), transmise (FORWARD), gnr localement (OUTPUT) et envoyer/envoyant des paquets (POSTROUTING). Les modules de Netlter qui ne prvoient pas de tableaux peuvent galement vrier lorigine des paquets pour choisir leur mode de fonctionnement. Une chane est constitue dun ensemble de rgles de ltrage. Au commencement, vous possdez en tout et pour tout trois chanes vierges :
## Chanes vierges prdfinies ## table filter $ iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination

Note : Chacune de ces chanes possde galement une politique globale de traitement , ce qui veut dire que si rien nest indiqu, cest cette politique globale qui sappliquera par dfaut lensemble des rgles inscrites dans cette chane.

Commandes de base :
## Ajouter un chane -N (new) $ iptables -N nom_de_chane ## Supprimer une chane -X $ iptables -X $ iptables -X nom_de_chane

# Supprime toutes les chanes # utilisateur # Supprime la chane spcifie

## Vider compltement une chane -F (flush - chasse deau) ## Supprime les rgles sans supprimer la chane $ iptables -F # Vider toutes les chanes $ iptables -F nom_de_chane # Vider la chane spcifie

529

Chapitre 16. SR011 Dployer un routeur, un pare-feu et un serveur mandataire

Note : Les trois chanes cres par dfaut (INPUT, OUTPUT et FORWARD) ne peuvent pas tre supprimes

## Plusieurs commandes qui permettent de lister ## avec plus ou moins de renseignements ## les chanes et rgles mises en place. ## Lister les chanes & contenu -L (list) $ iptables -L # Afficher toutes les chanes $ iptables -L nom_de_chane # Affiche la chane spcifie # Affichage Chain : Nom de la chane (policy ACCEPT) : Si aucune rgle ne correspond au paquet, il sera accept. target : Ce que lon fait du paquet (accept, drop ou reject) prot : Protocole vis opt : options source : Endroit dou proviennent les paquets destination : Endroit o vont les paquets

## Augmenter la verbosit -v (verbosit) $ iptables -L -v # info supplmentaires # - interface concerne # (eth0, eth1, ppp0, etc...) # - nombre de paquets transfrs # - nombre de bits transfrs ## Addresse Numrique -n (numeric) $ iptables -L -v -n ## Mise zro des compteurs -Z (zero) $ iptables -L -v -Z

## politiques globales des chanes -P (policy) ## (polices de scurit) ## Syntaxe: iptable -P chain target $ iptables -P INPUT DROP # Cible (target) DROP # sur chane INPUT ## Cibles possible: ACCEPT DROP une chane cre par lutilisateur

530

Chapitre 16. SR011 Dployer un routeur, un pare-feu et un serveur mandataire

Avertissement
Une politique de scurit stricte instaure la mise de DROP sur les chanes principales, ce qui oblige ainsi tous les paquets a tre traits par des rgles ou tre refuss.

Cependant, ne faites cela que si vous comprenez ce que vous faites, dans le cas inverse, vous naurez plus accs au rseau...

16.1.4.5. Rgles (RULE) : Critres (Options PARAMETER | Correspondance MATCH) & Cibles (TARGET)
Chaque rgle dnie une cible (target) c.a.d quoi faire avec les paquets correspondant certains critres (parameter|match) Critres :
## PARAMETER (Options de iptables) ## Extension charge par dfaut ## Adresses -s, --source, --src -d, --destination, --dst

# Dfinit la provenance du paquet # Dfinit la destination du paquet

> nom complet : macfil.ermansion.net, localhost > IP : 127.0.0.1, 192.168.21.5 > tout un rseau (via le masque) 192.168.21.0/24 ou 192.168.21.0/255.255.255.0 > toutes les addresses IP : /32, /255.255.255.255 > couvrir lensemble des adresses IP existantes : 0/0 > les noms dhte (eof.eu.org, localhost), cela reste dconseill ## Interfaces -i, --in-interface -o, --out-interface

# interfaces sur laquelle les paquets arrivent. # interfaces sur laquelle les paquets partent.

## Protocoles (/etc/protocols) -p, --protocol # Dfinit le(s) protocole(s) choisi(s) > all (tous, par dfaut), tcp, udp, icmp, etc.... ## Ports (/etc/services) --sport, --source-port --dport, --destination-port debut:fin

# Port source (www, ftp, 80, 21, etc...) # Port destination (www, ftp, 80, 21, etc...) # Plage de port de DEBUT FIN

531

Chapitre 16. SR011 Dployer un routeur, un pare-feu et un serveur mandataire


## Option UDP (idem Ports ci-dessus) ## Options TCP (Flags) --tcp-flags # filtre sur des drapeaux tcp spcifiques # La premire liste de drapeau = masque de ceux examiner # La deuxime = ceux qui doivent voir leurs bits mis un (tre prsent). --syn # raccourci pour --tcp-flags SYN,RST,ACK SYN > NONE (aucun), ALL (tous, par dfaut) SYN, ACK, FIN, RST, URG, PSH, etc....

# Liste des options TCP (http://www.linux-france.org/~platu/prj/inetdoc/guides/iptables-tuto ## Options pour ICMP --icmp-type type/code

# filtrage des paquets icmp selon leurs types (nomm ou numrique) # Liste des types ICMP par code : site1 (http://www.netfilter.org/doc # Liste des type ICMP par nom $> iptables -p icmp --help

## Fragment -f, --fragment

Note : Prcision de JP propos de --sport : "...Par dfaut, il ny a pas dusage de --sport. Cependant, tu peux imaginer forcer une application dune manire trs prcise pour quelle puisse mettre uniquement depuis ce port. De manire gnrale, les applications clientes utilisent des ports alatoires compris entre 1024 et 65535. Cest dailleurs une bonne ide de nautoriser que ces plages clientes, les autres tant suspectes... Et penser lier cela aux tats (new, related, established), parce que sinon, sans cet usage, si vous utilisez le port 80, nimporte qui indiquera quil utilise le port 80 en source et nimporte quel port en destination et sera autoris rentrer chez vous (si vous nautorisez que le 80, sans tats, sentend)..."

Note : Explication des Drapeaux TCP : Il est parfois utile dautoriser les connections TCP dans un sens mais pas dans lautre. Par exemple, tu pourrais vouloir autoriser les connections vers un serveur WWW externe, mais pas les connections partir de ce serveur. Lapproche naive serait de bloquer les paquets TCP venant du serveur. Malheureusement, les connections TCP on besion davoir des paquets qui vont dans les deux sens pour fonctionner. La solution est de bloquer seulement les paquets qui sont utiliss pour demander une connection. Ces paquets sont appels des paquets SYN (ok, techniquement ce sont des paquets avec le drapeux SYN et pas de drapeaux FIN et ACK, mais nous les appelons paquets SYN pour faire plus court). En dniant seulement ces paquets, nous pouvons stopper les tentatives de connections.

## MATCH (Module de Correspondance - Extensions de iptables) ## Extension NON charges par dfaut -m,--match nom_extension [options_extension] ## MAC Adresse -m mac --mac-source XX:XX:XX:XX:XX:XX

# Adresse MAC de la source

532

Chapitre 16. SR011 Dployer un routeur, un pare-feu et un serveur mandataire


## Limite -m limit --limit mylimit[/second|/minute|/hour|/day]

# limite le nombre # de messages dhistorique # 3H par dfaut

Cibles :
## TARGET (Option Cible) -j, --jump target # spcifie ce que vous dsirez faire du paquet # La cible peut tre une sous-chane # que vous aurez vous-mme cre # ou une valeur spciale ACCEPT, DROP, QUEUE ou RETURN

Les rgles sont regrouper pour former un ou plusieurs ensemble (chanes) Mtaphore : "...on pourrait considrer que les chanes sont les ocans et que les rgles sont des euves. Chaque euve reliant un ocan..." Avant toute chose, vous devez savoir dans quelle chane vous allez placer votre rgle. Celle-ci concerne telle une entre (INPUT), une sortie (OUTPUT) ou transmission (FORWARD) dun paquet. Commande de base :
## ## ## ## Ajouter une rgle une chane existante Syntaxe : iptables -A chane arguments arguments = match [target]

## Refuse tout ce qui provient de lhte local en entre $ iptables -A INPUT -s 127.0.0.1 -j DROP # Chane: INPUT # Source: localhost # Cible : Rejeter # tout argument peut avoir son contraire $ iptables -A INPUT -s ! 127.0.0.1 # filtrage sur le protocole et la source $ iptables -A INPUT -s 127.0.0.1 -p icmp -j DROP # filtrage sur les drapeaux TCP $ iptables -A INPUT -p tcp --tcp-flags ALL SYN,ACK -j DROP # filtrage tcp $ iptables -A INPUT -j ACCEPT -s 127.0.0.1 -p tcp --sport 20:2000

533

Chapitre 16. SR011 Dployer un routeur, un pare-feu et un serveur mandataire


$ iptables -A INPUT -j ACCEPT -s 127.0.0.1 -p tcp --sport 20: # filstrage icmp $ iptables -A INPUT -p icmp --icmp-type 3/3 $ iptables -A INPUT -p icmp --icmp-type parameter-problem # filtrage de ports $ iptables -A FORWARD -s 0/0 -i eth0 \ -d 192.168.1.58 -o eth1 -p TCP \ --sport 1024:65535 --dport 80 -j ACCEPT # Utilise port de fin # par dfaut (65535)

# par type/code # par nom

# Accepte tous les ports # clients vers une machine # destination du port 80

# filtrage MAC Adresse $ iptables -A INPUT -m mac --mac-source 00:00:00:00:00:01 # $ $ $ filtrage iptables iptables iptables par interface -A INPUT -i eth0 -A INPUT -i lo -A INPUT -i eth+

$ iptables -L -vn

# Spfifier des interfaces de mme type (eth0,eth1,eth2) # Listing dtaill pour voir les interfaces

# Filtrer le fragment $ iptables -A OUTPUT -f -d 192.168.1.1 -j DROP

# laisser tomber tout # les fragments qui vont # vers 192.168.1.1

$ iptables -A INPUT -f -j DROP

# # # # # # #

Pas de piti pour les fragments :) En gnral (lire toujours) on a : -P {INPUT,OUTPUT,FORWARD} DROP donc, dans tous les cas si une rgle nest pas applicable de toute faon cest gr ;-) cf ~ UI algo de tcpd (TCPWrapper) (Atelier sur telnet)

Note : Pour les fragments, on ne les traite que si ils sont lgitimes. Sils ne le sont pas, on les vire

## Rappel ## Accepter que ce qui est lgitime : $ iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

## Supprimer une rgle -D (delete) ## Syntaxe : iptables -D la_chane la_rgle_concerne iptables -D la_chane le_numro_de_la_rgle ## Obtenir le numro de rgle --line-number $ iptables -L --line-number

534

Chapitre 16. SR011 Dployer un routeur, un pare-feu et un serveur mandataire

16.1.4.6. Cibles (TARGET)


Une rgle de pare-feu spcie les critres pour un paquet et une cible. Si le packet ne correspond pas, la rgle suivante est examine. Sil correspond dans ce cas la rgle suivante est dtermin par la valeur de cible :
# Dfinies par lutilisateur Nom de chane dfinit par lutilisateur # Prdfinies ACCEPT : autorise le paquet continuer son chemin, le laisser passer DROP : nautorise pas le paquet continuer son chemin, le laisser "tomber" QUEUE : Passer le paquet une application en espace utilisateur (queue handler) Si aucune application nattend aprs le paquet, il est rejet. RETURN : se comporte diffremment selon son emplacement : - Sil est dans une chane que vous avez construite, arrte de traverser la chane et reprend la rgle suivante dans la chane appelle prcdement (paquet renvoy la chane forge do il vient). - Sil se trouve dja dans une chane forge, cest la police (politique globale) de cette mme chane qui dcide du sort du paquet.

Note : Si la n dune chane prdnie est atteinte ou si une correspondance est trouv avec une rgle contenu dans une chane prdnie ayant pour cible RETURN, la cible spci par la politique globale de la chane determine le sort du paquet :)

16.1.4.7. Connection Tracking


Source(s):

Web: Mise en Garde sur le Filtre de Paquets (http://www.netlter.org/documentation/HOWTO/fr/packet-ltering-HOWTO-11.html)

535

Chapitre 16. SR011 Dployer un routeur, un pare-feu et un serveur mandataire Une fonctionalit importante construite au dessus de netlter est le traqueur de connection (connection tracking). Il permet au noyau de garder une trace de toutes les connection rseau logiques ou sessions et donc relate tous les paquets que constitue la connection. Les connections Netlter peuvent tre manipul avec la command conntrack. NAT utilise cette information pour altrer les paquets. iptables peut utiliser cette information pour ltrer les paquets. Etats disponibles :
NEW : paquet qui engendre une nouvelle connection ESTABLISHED: paquet qui appartient une connection dj existante RELATED : paquet qui est relat a, mais pas partie de, une connection existante, comme une erreur ICMP, ou un paquet qui etablit une connection de donnes ftp. INVALID : le paquet est invalid (par exemple, il nadre pas au diagramme dtat TCP) UNTRACKED : est un status spcial qui peut tre assign par ladministrateur pour outrepasser le trackeur de connection pour un paquet particulier.

$ iptables -A INPUT -m conntrack --state NEW, ESTABLISHED

Par exemple, le premier paquet vu par conntrack va voir sera classi comme NEW, la rponse sera "ESTABLISHED" et une erreur ICMP serait RELATED. Un paquet ICMP qui ne correspondrais aucune connection serait marqu comme INVALID.

Avertissement
Le suivi de connections sur les systmes scuriss est fortement recommend : il introduit un peu plus de charge, comme toutes les connections sont suivies, mais est trs utile pour controller laccs tes rseaux.Exemple de mise en place (http://www.netlter.org/documentation/HOWTO/fr/packet-ltering-HOWTO11.html).

16.1.4.8. NAT & Masquarading


Les paquets sur un rseau voyagent de leur source (par exemple ton ordinateur de bureau) leur destination (par exemple www.gnumonks.org) travers diffrents noeuds (routeur, etc...). Aucun de ces noeuds naltrent vraiment le paquet, ils le renvoient(forward) juste plus loin.

536

Chapitre 16. SR011 Dployer un routeur, un pare-feu et un serveur mandataire Si un de ces noeud effectue du NAT, alors il altrerait la source ou la destination du paquet pendant quil passe. Gnrallement le noeud qui effectue du NAT va se rappeler comment il a modi le paquet, et quand une rponse passera dans lautre sens, il effectuera la modication inverse sur ce paquet de rponse, pour que tout fonctionne bien. Deux types de NAT : Le NAT Source (SNAT/MASQUERADE) : altre ladresse source du premier paquet. Tu changes lendroit dont la connection provient. Le NAT Source est toujours ralis aprs le routage, juste avant que le paquet ne sorte sur la ligne.
Note : Le Masquerading est une forme spcialise de SNAT. La cible MASQUERADE ne doit tre utilise que pour des addresse IP assigne dynamiquement (connection dialup), pour les adresses IP statique la cible SNAT doit tre utilise.

Le NAT Destination (DNAT) : altre ladresse de destination du premier paquet. Tu changes lendroit o la connection va aboutir. Le NAT Destination est toujours effectu avant le routage, quand un paquet arrive en premier sur la ligne.
Note : Le port forwarding , load-sharing et le proxy transparent sont tous des formes de DNAT.

Lextension de cible SNAT modie ladresse IP source du paquet IP par celle fourni (address-IP). Cette cible permet de camouer un rseau derrire une adresse IP. Si vous connectez votre rseau priv Internet, assurez vous davoir une adresse IP xe pour utiliser la cible SNAT :
## Syntaxe -j SNAT --to-source adresse-IP ## Exemple $ iptables -t nat -A POSTROUTING -o ppp0 -j SNAT --to-source 162.230.10.25

Lextension de cible MASQUERADE est utilis pour connecter un rseau priv Internet. A utiliser dans le cadre o votre adresse IP vous est fourni dynamiquement par votre FAI :
## Syntaxe -j MASQUERADE

## Exemple $ iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

537

Chapitre 16. SR011 Dployer un routeur, un pare-feu et un serveur mandataire

Note : Comme prcis par Alix, lIP MASQUERADE est un quivalent bidouille qui assure la compatibilit syntaxique avec les solutions antrieures netlter, mais en fait ce nest que du SNAT (nat source) maquill ;-) On substitue une adresse, gnralement prive, une adresse publique mais le principe consiste substituer une adresse par une autre :
- Quand on utilise une plage dadresses de substitution on utilise du SNAT - Quand les adresses de substitution sont connues on utilise du SNAT. - Quand on utilise une adresse de subtitution non prvisible (dhcp publique) on utilise de lipmasquerade.

# Exemples $ iptables -t nat -A POSTROUTING -s 10.10.10.0/8 \ -j SNAT --to-source 15.20.12.1-15.20.12.50

# Plusieurs adresse IP # publique

$ iptables -t nat -A POSTROUTING -s 10.10.10.0/8 -j MASQUERADE # Une seule adresse IP # publique (via DHCP)

Mais dans le cas de lIP MASQUERADE on utilise quune seule adresse plublique, il sagit plus de PAT (Port Adress Translation) que de NAT.

Lextension de cible DNAT modie ladresse de destination:port du paquet IP par celle fourni. Cette cible permet de rendre accessible depuis Internet, un serveur dans un rseau priv :
## Syntaxe -j DNAT --to-destination adresse-IP:port ## ## ## ## ## Exemple Redirige les paquets - destination du port 80 (http) - entrant sur linterface ppp0 (modem connect a internet), - vers le serveur web ladresse 192.168.0.1

$ iptables -t nat -A PREROUTING -i ppp0 -p tcp \ --dport 80 -j DNAT --to-destination 192.168.0.1:80

538

Chapitre 16. SR011 Dployer un routeur, un pare-feu et un serveur mandataire

16.1.4.9. Chemin parcouru par un paquet (schema)


Les schema ci-dessous illustre le chemin parcouru par un paquet lorsquil voyage sur le rseau dun systme donn. Pour simplier, les schema listent les tables comme faisant partie des chanes mais dans la ralit les chanes sont maintenues dans les tables elle mme. Au plus simple des cas, un paquet destin au system arrive sur linterface eth0 du systme. En premier lieu, le paquet est envoy la chane PREROUTING de la table mangle ensuite la chane PREROUTING de la table nat. Ltape suivante, pour ce qui conerne le routage du paquet, determine que la cible du paquet est un procesus du systme lui mme. Aprs avoir pass la chane INPUT de la table mangle et de la table lter, le paquet nalement atteint sa cible pour autant que les rgles de la table lter correspondent.

Avertissement
Attention, cette 1re gure nest pas jour !!! Mais donne une ide rsum du principe de fonctionnement...

539

Chapitre 16. SR011 Dployer un routeur, un pare-feu et un serveur mandataire Figure 16-1. iptables: Chemin simple parcouru par un paquet

540

Chapitre 16. SR011 Dployer un routeur, un pare-feu et un serveur mandataire

Source SUSE Admin Guide : Masquerading and Firewalls (http://www-uxsup.csx.cam.ac.uk/pub/doc/suse/sles9/adminguide-sles9/ch26s03.html) Pour plus de dtail voir un bon schma dtaill des chanes diptables sur : Figure 16-2. iptables: Chemin dtaill parcouru par un paquet

541

Chapitre 16. SR011 Dployer un routeur, un pare-feu et un serveur mandataire

Source wikipedia : [En Ligne] (http://upload.wikimedia.org/wikipedia/commons/3/37/Netlter-packet-ow.svg)[Hors Ligne] (images/sr011-ch01-netlter-packet-ow.svg)

16.1.5. fwbuilder (GUI)


Source(s):

Web: fwbuilder (http://www.fwbuilder.org)

Firewall Builder consiste en un GUI orient objet et en un ensemble de compilateurs de "polices" (ou politiques de scurit) pour diverses plateformes de rewall (pare-feu).

Dans Firewall Builder, une "police" de rewall est un est un ensemble de rgles; chacune consitue dobjet abstraits qui reprsentent les lments du rseau rel ainsi que les services (htes, routeurs, rewalls, rseaux, protocoles).

Firewall Builder aide ladministrateur maintenir une base de donnes dobjets et permet ldition de "polices" par simple "drag-and-drop".

Lensemble des objets et des prfrences sont stockes au format XML. Ce logiciel supporte des compilateurs de "police" pour les rewall libre: iptables, iplter et OpenBSD PF. http://linuxfr.org/2002/08/14/9262.html Note : Wallre (wallre.org) est autre projet similaire mais qui semblait vouloir tre plus ambitieux, puisquil sagit non pas dun simple generateur de scripts de conguration, mais dun framework de conguration complet pour des rewalls heterogenes. Toutefois il semble que le projet ne soit plus actif...

16.1.6. Pour aller plus loin sur la gestion dun pare-feu


Lire le chapitre sur le rewall dans ce mmoire : http://jp.gaulier.info/cnam/inge/memoire.pdf

542

Chapitre 16. SR011 Dployer un routeur, un pare-feu et un serveur mandataire

16.1.7. TP : routage et ltrage


Source(s):

OF: Application sur le routage et le ltrage (docs/eof/sr011-ch02-index_fw_tp.pdf)

16.1.7.1. 1.3 TD
Interdire tous les paquets de A.0 vers B.0 :
$ iptables -A INPUT -s 195.0.0.0/24 d- 172.16.0.0/16 -j DROP

Interdire tous les paquets de A.0 vers B.1 :


$ iptables -A INPUT -s 195.0.0.0/24 d- 172.16.0.1/32 -j DROP

Interdire tous les paquets NetBIOS destination de A.254 :


$ iptables -A INPUT -s 195.0.0.254 --dport 135:139 -j DROP ## Attention ici cest bien --dport (destination) et pas --sport quil faut utiliser...!

Note :
Port Port Port Port 135 137 138 139 RPC endpoint mapper NetBIOS service de nom NetBIOS server pour change de donne (diffusion) NetBIOS service de session

NetBIOS Session (TCP), Partage de Fichier et dImprimante Windows Port le plus dangereux sur Internet. 1er port auquel les pirates veulent se connecter et que les pare-feux bloquent. Tous les partage de fichier et dimprimante sous Windows utilisent ce port. 10% des utilisateurs sur Internet laisse leur disque dur exposed via ce port. leave their hard disks exposed on this port. Source: http://www.iss.net/security_center/advice/Exploits/Ports/139/default.htm Port 445 SMB Ports 1025 and 1026 Active Directory logon and directory replication Ports 1433 and 1434 SQL Server

543

Chapitre 16. SR011 Dployer un routeur, un pare-feu et un serveur mandataire

Masquer toutes les adresses de A.0 pour tous les protocoles :


## En supposant que sur le routeur ## A est connect via linterface eth0 ## B est connect via linterface eth1 $ iptables -t nat -A POSTROUTING -o eth1 -j SNAT 172.16.255.254 $ iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE # Alternative pour # adresse dynamique

Masquer toutes les adresses de A.0 pour tous les protocoles uniquement pour les services SMTP et POP3 :
## En supposant que sur le routeur ## A est connect via linterface eth0 ## B est connect via linterface eth1

$ iptables -t nat -A POSTROUTING --dports smtp,pop3 -o eth1 -j SNAT 172.16.255.254 $ iptables -t nat -A POSTROUTING -dports smtp, pop3 -o eth1 -j MASQUERADE # Alternative po # adresse dynami

Nautoriser que les paquets de A.1 vers B.1, interdire tout le reste :
# interdit tout flux dentre par dfaut $ iptables -P INPUT DROP # autorise que ceux de A.1 vers B.1 $ iptables -A INPUT -s 195.0.0.1 -d 172.16.0.1 -j ACCEPT

Interdire les paquets de A.1 vers B.1, autoriser tout le reste :

# Autorise tout flux dentre par dfaut $ iptables -P INPUT ACCEPT

544

Chapitre 16. SR011 Dployer un routeur, un pare-feu et un serveur mandataire

# interdit ceux de A.1 vers B.1 $ iptables -A INPUT -s 195.0.0.1 -d 172.16.0.1 -j DROP

Nautoriser que les paquets telnet de A.1 vers B.1, interdire tout le reste :
# interdit tout flux dentre par dfaut $ iptables -P INPUT DROP # autorise que ceux de A.1 vers B.1 $ iptables -A INPUT --dports telnet -s 195.0.0.1 -d 172.16.0.1 -j ACCEPT ## Attention ici cest bien --dport (destination) et pas --sport quil faut utiliser...!

Nautoriser que les paquets TCP de A.0 vers B.0, interdire tout le reste :
# interdit tout flux dentre par dfaut $ iptables -P INPUT DROP # autorise TCP de A.0 vers B.0 $ iptables -A INPUT --protocol tcp -s 195.0.0.0/24 d- 172.16.0.0/16 -j ACCEPT

16.1.7.2. TP
Source(s):

Lab Netkit: sr011-ch02-tp-pare-feu-rlr-netkit-lab04.tar.bz2 (docs/sr011-ch02-tp-pare-feu-rlr-netkit-lab04.tar.bz2)

545

Chapitre 16. SR011 Dployer un routeur, un pare-feu et un serveur mandataire Figure 16-3. TP Pare-Feu : Architecture rseau

## Trois machines sur rouge.org ## S(Serveur) eth0 10.0.0.2

# Rseau Classe A 10.0.0.0/255.0.0.0 # Publique

## R(Routeur/Pare-feu) eth0 10.0.0.254 # eth1 171.16.0.254 # eth2 192.168.90.70 # # ## C(Client) eth0 172.16.0.30

Rseau A Publique Rseau B Prive Rseau Classe C 192.168.90.0/255.255.255.0 Accs Internet 192.168.90.1 (Tap Address)

# Rseau Classe B 172.16.0.0/255.255.0.0 # Prive

546

Chapitre 16. SR011 Dployer un routeur, un pare-feu et un serveur mandataire 16.1.7.2.1. 1.4.1. Premire partie : installation et conguration du routage 1. Installez les interfaces rseau sur le routeur et dmarrer la machine.
## Fichier de configuration - Lab.conf ... R[0]=A R[1]=B R[2]=tap,192.168.90.1,192.168.90.70 ... ## Fichier de configuration - R.startup # eth0 network A - Public ifconfig eth0 10.0.0.254 netmask 255.0.0.0 broadcast 10.0.0.255 up # eth1 network B - Private ifconfig eth1 171.16.0.254 netmask 255.255.0.0 broadcast 172.16.0.255 up

2. Crez les chiers de conguration des interfaces eth0, eth1 et eth2.


## Si les R. startup navait pas t cr ## on aurais dans /etc/network/interfaces auto eth0 eth1 eth2 iface eth0 inet static # Rseau A address 10.0.0.254 network 10.0.0.0 netmask 255.0.0.0 iface eth1 inet static # Rseau B address 171.16.0.254 network 172.16.0.0 netmask 255.255.0.0 iface eth2 inet static # Rseau C address 192.168.90.70 network 192.168.90.0 netmask 255.255.255.0

3. Installez le module de la carte dans le chier " /etc/module.conf " si ncessaire :


Semble pas ncessaire dans netkit...

4. Lancez le service rseau sur R " /etc/rc.d/init.d/network restart ", relevez les routes :

547

Chapitre 16. SR011 Dployer un routeur, un pare-feu et un serveur mandataire


## R - Route $ route Kernel IP routing table Destination Gateway 192.168.90.0 * 172.16.0.0 * 10.0.0.0 * default 192.168.90.1

Genmask 255.255.255.0 255.255.0.0 255.0.0.0 0.0.0.0

Flags U U U UG

Metric 0 0 0 0

Ref 0 0 0 0

Use 0 0 0 0

Iface eth2 eth1 eth0 eth2

5. Vriez laide de la commande " ifcong " que les interfaces sont bien actives :
## R - Interfaces rseaux $ ifconfig eth0 Link encap:Ethernet HWaddr 86:08:64:8b:8d:91 inet addr:10.0.0.254 Bcast:10.0.0.255 Mask:255.0.0.0 inet6 addr: fe80::8408:64ff:fe8b:8d91/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:6 errors:0 dropped:0 overruns:0 frame:0 TX packets:6 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:384 (384.0 B) TX bytes:468 (468.0 B) Interrupt:5 eth1 Link encap:Ethernet HWaddr aa:3a:57:43:f6:de inet addr:171.16.0.254 Bcast:172.16.0.255 Mask:255.255.0.0 inet6 addr: fe80::a83a:57ff:fe43:f6de/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:11 errors:0 dropped:0 overruns:0 frame:0 TX packets:11 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:692 (692.0 B) TX bytes:846 (846.0 B) Interrupt:5 Link encap:Ethernet HWaddr 46:ed:ca:3a:76:f3 inet addr:192.168.90.70 Bcast:192.168.0.255 Mask:255.255.255.0 inet6 addr: fe80::44ed:caff:fe3a:76f3/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:4 errors:0 dropped:0 overruns:0 frame:0 TX packets:6 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:244 (244.0 B) TX bytes:468 (468.0 B) Interrupt:5 Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:22 errors:0 dropped:0 overruns:0 frame:0 TX packets:22 errors:0 dropped:0 overruns:0 carrier:0

eth2

lo

548

Chapitre 16. SR011 Dployer un routeur, un pare-feu et un serveur mandataire


collisions:0 txqueuelen:0 RX bytes:1796 (1.7 KiB) TX bytes:1796 (1.7 KiB)

Tout semble ok... Congurez et installez C sur votre rseau priv :


## Lab.conf ... C[0]=B ... ## C.startup # eth0 network B - Private ifconfig eth0 172.16.0.30 netmask 255.255.0.0 broadcast 172.16.0.255 up ## C - Route $ route Kernel IP routing table Destination Gateway 172.16.0.0 *

Genmask 255.255.0.0

Flags Metric Ref U 0 0

Use Iface 0 eth0

## C - Interfaces $ ifconfig eth0 Link encap:Ethernet HWaddr 76:09:14:e3:9d:31 inet addr:172.16.0.30 Bcast:172.16.0.255 Mask:255.255.0.0 inet6 addr: fe80::7409:14ff:fee3:9d31/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:5 errors:0 dropped:0 overruns:0 frame:0 TX packets:11 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:308 (308.0 B) TX bytes:846 (846.0 B) Interrupt:5 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:2 errors:0 dropped:0 overruns:0 frame:0 TX packets:2 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:100 (100.0 B) TX bytes:100 (100.0 B)

6. Testez laccs de C vers les deux interfaces de R :


$ ping 171.16.0.254 # R-eth1 OK PING 171.16.0.254 (171.16.0.254) 56(84) bytes of data. 64 bytes from 171.16.0.254: icmp_seq=1 ttl=64 time=0.231 ms

549

Chapitre 16. SR011 Dployer un routeur, un pare-feu et un serveur mandataire


... $ ping 10.0.0.254 connect: Network is unreachable $ ping 192.168.90.70 connect: Network is unreachable

# R-eth0 KO

# R-eth2 KO

Pourquoi laccs vers le rseau public ne fonctionne pas ? Simplement parce que C na pas de route par dfaut pour un rseau autre que sur celui sur lequel il est connect...
## C - Route par dfaut $ route add default gw 171.16.0.254 $ route Kernel IP routing table Destination Gateway 172.16.0.0 * default 171.16.0.254

Genmask 255.255.0.0 0.0.0.0

Flags Metric Ref U 0 0 UG 0 0

Use Iface 0 eth0 0 eth0

7. Activez le routage (ip forward) entre les interfaces rseau :


Note : Une autre raison (si C avait une route par dfaut correcte) pourrat tre que lIP Forwarding nest pas activ sur le routeur R... de ce fait le routeur R ne transferait pas les paquet reu de C sur son interface eth1 vers une autre interface... le paquet ne lui tant pas directement destin, il les "laisse tomber" (DROP).

## Pour activer lIP Forwarding (ou vrifier quil est activ) : NETWORKING=yes dans /etc/sysconfig/network pour Mandrake ## ou ip_forward=yes dans /etc/network/options pour Debian ## Vous pouvez galement utiliser la commande : $ echo 1 > /proc/sys/net/ipv4/ip_forward ## Ou encore ## Changer les entres /proc entries avec sysctl ## Source: http://www.ifokr.org/bri/presentations/lfnw-2003/mgp00093.txt ## Utiliser sysctl et /etc/sysctl.conf ## Pour configurer le noyau en cours dexecution ## Afficher la configuration

550

Chapitre 16. SR011 Dployer un routeur, un pare-feu et un serveur mandataire


$ sysctl net.ipv4.ip_forward 1 # ou $ cat /proc/net/ipv4/ip_forward 1 # ou $ sysctl -A | grep net.ipv4.ip_forward net.ipv4.ip_forward=1

# alternative

# autre alternative

# ou $ cat /etc/sysctl.conf # autre alternative net.ipv4.ip_forward = 0 net.ipv4.conf.eth0.accept_redirects = 0 ## Changer la configuration $ sysctl -w net.ipv4.ip_forward=0 # ou $ echo 0 > /proc/net/ipv4/ip_forward $ sysctl -p /etc/sysctl.conf

# alternative # Appliquer tous les changement # dans sysctl.conf

Note : Par dfaut dans netkit mon routeur a lIP forwarding activ...

Note : Si je le dasctive, le client C peut toujours faire un ping sur 10.0.0.254 (R-eth0), puisque cette interface appartient au routeur, mais nest plus en mesure datteindre 10.0.0.2 (S-eth0) le serveur sur le rseau A. La requte de ping ntant plus transfr par le routeur de son interface eth1 vers eth0.

Relancez le service rseau, /etc/init.d/networking restart Relevez les routes de R laide de la commande $ route Kernel IP routing table Destination Gateway Genmask 192.168.90.0 255.255.255.0 * 172.16.0.0 255.255.0.0 * 10.0.0.0 255.0.0.0 * default 192.168.90.1 0.0.0.0 " route ".

Flags U U U UG

Metric 0 0 0 0

Ref 0 0 0 0

Use 0 0 0 0

Iface eth2 eth1 eth0 eth2

8. Vriez avec une commande " ping " que les deux interfaces de R sont bien visibles partir de C :

551

Chapitre 16. SR011 Dployer un routeur, un pare-feu et un serveur mandataire


## Ping partir de C $ ping 10.0.0.254 PING 10.0.0.254 (10.0.0.254) 56(84) bytes of data. 64 bytes from 10.0.0.254: icmp_seq=1 ttl=64 time=1.51 ms 64 bytes from 10.0.0.254: icmp_seq=2 ttl=64 time=0.173 ms ...

# R-eth0 OK

$ ping 192.168.90.70 PING 192.168.90.70 (192.168.90.70) 56(84) bytes of data. 64 bytes from 192.168.90.70: icmp_seq=1 ttl=64 time=1.30 ms # R-eth2 OK 64 bytes from 192.168.90.70: icmp_seq=2 ttl=64 time=0.244 ms ... $ ping 10.0.0.2 PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data. 64 bytes from 10.0.0.2: icmp_seq=1 ttl=63 time=1.81 ms 64 bytes from 10.0.0.2: icmp_seq=2 ttl=63 time=0.348 ms

# S-eth0 OK

9. Vriez linstallation du programme iptraf sur R :


Il semble que iptraf ne puisse pas tre install dans netkit :(( En effet la commande /bin/make est absent dans les VM netkit ne permettant pas linstallation... tcpdump est par contre disponible par dfaut.

16.1.7.2.2. 1.4.2. Rgles de ltrage simples


## R - Filtrage configuration par dfaut ## Filter $ iptables -L Chain INPUT (policy ACCEPT) target prot opt source Chain FORWARD (policy ACCEPT) target prot opt source Chain OUTPUT (policy ACCEPT) target prot opt source ## NAT $ iptables -t NAT -L Chain PREROUTING (policy ACCEPT) target prot opt source

destination

destination

destination

destination

552

Chapitre 16. SR011 Dployer un routeur, un pare-feu et un serveur mandataire

Chain POSTROUTING (policy ACCEPT) target prot opt source Chain OUTPUT (policy ACCEPT) target prot opt source ## Mangle $ iptables -t mangle -L Chain PREROUTING (policy ACCEPT) target prot opt source Chain INPUT (policy ACCEPT) target prot opt source Chain FORWARD (policy ACCEPT) target prot opt source Chain OUTPUT (policy ACCEPT) target prot opt source Chain POSTROUTING (policy ACCEPT) target prot opt source ##==> Tous est autoris par dfaut !!!

destination

destination

destination

destination

destination

destination

destination

1. Interdisez toutes les requtes de C vers S (extrieur) (tester) :


## Test AVANT ## C Dmarrage de ping symtrique entre C et S ## R $ tcpdump 11:21:58.333116 11:21:58.333427 11:21:58.412873 11:21:58.413130

IP IP IP IP

10.0.0.2 > 172.16.0.30: 172.16.0.30 > 10.0.0.2: 172.16.0.30 > 10.0.0.2: 10.0.0.2 > 172.16.0.30:

ICMP ICMP ICMP ICMP

echo echo echo echo

request, ... reply , ... request, ... reply, ...

## 1re solution $ iptable -A FORWARD -s 172.16.0.0/16 -d 10.0.0.0/8 -j DROP

# Interdit tous # de rseau B vers A # incluant C vers S

## 2me solution $ iptable -A FORWARD -i eth1 -o eth0 -j DROP ## 3me solution $ iptable -A FORWARD -s 172.16.0.30 -d 10.0.0.2 -j DROP

# Alternative via interface

# Interdit uniquement

553

Chapitre 16. SR011 Dployer un routeur, un pare-feu et un serveur mandataire


# de C vers S

## Test APRS ## C Ping continue... ## R $ tcpdump 11:26:08.793148 11:26:09.792965 11:26:10.792924 11:26:11.793020

IP IP IP IP

10.0.0.2 10.0.0.2 10.0.0.2 10.0.0.2

> > > >

172.16.0.30: 172.16.0.30: 172.16.0.30: 172.16.0.30:

ICMP ICMP ICMP ICMP

echo echo echo echo

request, request, request, request,

... ... ... ...

##==> On ne voit que le traffic de S vers C

2. Autorisez toutes les requtes du client C vers S (tester) :


## Interdit $ iptables -A FORWARD -s 172.16.0.0/16 -d 10.0.0.0/8 -j DROP

# Interdit tous # de rseau B vers A # incluant C vers S # Autorise uniquement # de C vers S

## Autorise $ iptables -A FORWARD -s 172.16.0.30 -d 10.0.0.2 -j ACCEPT

## ## ## ##

Bien entendu pour que cela fonctionne, il faut placer la deuxime rgle ci-dessus... AVANT la premire... dans la table Sinon les paquets sont "DROPper" avant dtre ACCEPTs !

Les ping des C vers S fonctionne dsormais correctement nouveau :) 3. Interdisez tout passage sur la chane FORWARD en laissant loption " ACCEPT " sur les chanes INPUT et OUTPUT (tester) :
##AVANT ## S $ ping 172.16.0.30 PING 172.16.0.30 (172.16.0.30) 56(84) bytes of data. 64 bytes from 172.16.0.30: icmp_seq=1 ttl=63 time=8.52 ms 64 bytes from 172.16.0.30: icmp_seq=2 ttl=63 time=0.910 ms ... --- 172.16.0.30 ping statistics --4 packets transmitted, 4 received, 0% packet loss, time 3033ms rtt min/avg/max/mdev = 0.833/2.920/8.526/3.244 ms

554

Chapitre 16. SR011 Dployer un routeur, un pare-feu et un serveur mandataire

## C $ tcpdump 12:54:40.492028 12:54:40.492082 12:54:41.502309 12:54:41.502376

IP IP IP IP

10.0.0.2 > 172.16.0.30: 172.16.0.30 > 10.0.0.2: 10.0.0.2 > 172.16.0.30: 172.16.0.30 > 10.0.0.2:

ICMP ICMP ICMP ICMP

echo echo echo echo

request, ... reply, ... request, ... reply, ...

## R $ tcpdump -i eth0 13:09:27.733383 IP 13:09:27.740239 IP 13:09:28.733056 IP 13:09:28.733513 IP

# Rseau A 10.0.0.2 > 172.16.0.30: 172.16.0.30 > 10.0.0.2: 10.0.0.2 > 172.16.0.30: 172.16.0.30 > 10.0.0.2:

ICMP ICMP ICMP ICMP

echo echo echo echo

request, ... reply, ... request, ... reply, ...

$ tcpdump -i eth1 # Rseau B 13:09:46.743462 arp who-has 172.16.0.30 tell 171.16.0.254 13:09:46.750210 arp reply 172.16.0.30 is-at 76:09:14:e3:9d:31 (oui Unknown) 13:09:46.752970 IP 10.0.0.2 > 172.16.0.30: ICMP echo request, ... 13:09:46.753171 IP 172.16.0.30 > 10.0.0.2: ICMP echo reply, ... ##==> Les paquets sont bien transfrs de eth0 vers eth1 ## C $ ping 10.0.0.2 PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data. 64 bytes from 10.0.0.2: icmp_seq=1 ttl=63 time=0.752 ms 64 bytes from 10.0.0.2: icmp_seq=2 ttl=63 time=0.695 ms ... --- 10.0.0.2 ping statistics --4 packets transmitted, 4 received, 0% packet loss, time 3013ms rtt min/avg/max/mdev = 0.673/0.737/0.831/0.069 ms ## S $ tcpdump 13:18:22.032107 13:18:22.039593 13:18:23.031860 13:18:23.031917

IP IP IP IP

172.16.0.30 > 10.0.0.2: 10.0.0.2 > 172.16.0.30: 172.16.0.30 > 10.0.0.2: 10.0.0.2 > 172.16.0.30:

ICMP ICMP ICMP ICMP

echo echo echo echo

request, ... reply, ... request, ... reply, ...

## R $ tcpdump -i eth1 # Rseau B 13:23:34.805317 IP 172.16.0.30 > 10.0.0.2: ICMP echo request, ... 13:23:34.820537 arp who-has 172.16.0.30 tell 171.16.0.254 13:23:34.820835 arp reply 172.16.0.30 is-at 76:09:14:e3:9d:31 (oui Unknown) 13:23:34.820847 IP 10.0.0.2 > 172.16.0.30: ICMP echo reply, ... $ tcpdump -i eth0 # Rseau A 13:23:58.853023 IP 172.16.0.30 > 10.0.0.2: ICMP echo request, ... 13:23:58.860375 IP 10.0.0.2 > 172.16.0.30: ICMP echo reply, ... 13:23:59.862911 IP 172.16.0.30 > 10.0.0.2: ICMP echo request, ... 13:23:59.863360 IP 10.0.0.2 > 172.16.0.30: ICMP echo reply, ...

555

Chapitre 16. SR011 Dployer un routeur, un pare-feu et un serveur mandataire


## R $ iptables -P FORWARD DROP $ iptables -L FORWARD Chain FORWARD (policy DROP) ...

##APRS ## S $ ping 172.16.0.30 PING 172.16.0.30 (172.16.0.30) 56(84) bytes of data. (vide) --- 172.16.0.30 ping statistics --4 packets transmitted, 0 received, 100% packet loss, time 3036ms ## C $ tcpdump (vide) ## R $ tcpdump -i eth0 13:10:29.793091 IP 13:10:30.792999 IP 13:10:31.792974 IP 13:10:32.792997 IP $ tcpdump -i eth1 (vide)

# Rseau 10.0.0.2 10.0.0.2 10.0.0.2 10.0.0.2

A > > > >

172.16.0.30: 172.16.0.30: 172.16.0.30: 172.16.0.30:

ICMP ICMP ICMP ICMP

echo echo echo echo

request, request, request, request,

... ... ... ...

# Rseau B

##==> Les paquets ne sont plus transfrs de eth0 vers eth1 sur R Ceci explique labsence de traffic sur C lorsque S ping ci-dessus (la requte est stoppe) ainsi que labsence de rponse au ping de C vers S ci-dessous (la rponse est stopp). ## C $ ping 10.0.0.2 PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data. --- 10.0.0.2 ping statistics --4 packets transmitted, 0 received, 100% packet loss, time 3010ms ## S $ tcpdump 13:20:36.142087 13:20:36.148980 13:20:37.141890 13:20:37.141945

IP IP IP IP

172.16.0.30 > 10.0.0.2: 10.0.0.2 > 172.16.0.30: 172.16.0.30 > 10.0.0.2: 10.0.0.2 > 172.16.0.30:

ICMP ICMP ICMP ICMP

echo echo echo echo

request, ... reply, ... request, ... reply, ...

## R $ tcpdump -i eth1 # Rseau B 13:26:36.012997 IP 172.16.0.30 > 10.0.0.2: ICMP echo request, ... 13:26:37.012828 IP 172.16.0.30 > 10.0.0.2: ICMP echo request, ...

556

Chapitre 16. SR011 Dployer un routeur, un pare-feu et un serveur mandataire


13:26:38.012823 IP 13:26:39.012794 IP $ tcpdump -i eth0 13:26:53.012950 IP 13:26:53.019908 IP 13:26:54.012845 IP 13:26:54.013215 IP 172.16.0.30 > 10.0.0.2: 172.16.0.30 > 10.0.0.2: # Rseau A 172.16.0.30 > 10.0.0.2: 10.0.0.2 > 172.16.0.30: 172.16.0.30 > 10.0.0.2: 10.0.0.2 > 172.16.0.30: ICMP echo request, ... ICMP echo request, ... ICMP ICMP ICMP ICMP echo echo echo echo request, ... reply, ... request, ... reply, ...

##==> Les paquets sont toujours transfrs de eth1 vers eth0 sur R Cest normal puisquon a une rgle qui autorise ce transfert de C vers S via R

4. Activez le masquage dadresse pour toutes les machines du rseau auquel appartient C vers tous les autres rseaux (tester) :
$ iptables -t nat -A POSTROUTING -s 172.16.0.0/255.255.0.0 -j MASQUARADE

## C $ ping 10.0.0.2 PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data. --- 10.0.0.2 ping statistics --4 packets transmitted, 0 received, 100% packet loss, time 3013ms ## S $ tcpdump 13:35:06.481981 13:35:06.489114 13:35:07.481825 13:35:07.481881

IP IP IP IP

10.0.0.254 10.0.0.2 > 10.0.0.254 10.0.0.2 >

> 10.0.0.2: 10.0.0.254: > 10.0.0.2: 10.0.0.254:

ICMP ICMP ICMP ICMP

echo echo echo echo

request, ... reply, ... request, ... reply, ...

## R $ tcpdump -i eth1 13:39:40.763033 IP 13:39:41.762903 IP 13:39:42.782846 IP 13:39:43.782720 IP $ tcpdump -i eth0 13:40:02.823053 IP 13:40:02.830612 IP 13:40:03.822931 IP 13:40:03.823309 IP

# Rseau B 172.16.0.30 172.16.0.30 172.16.0.30 172.16.0.30 # Rseau A 10.0.0.254 10.0.0.2 > 10.0.0.254 10.0.0.2 >

> > > >

10.0.0.2: 10.0.0.2: 10.0.0.2: 10.0.0.2:

ICMP ICMP ICMP ICMP

echo echo echo echo

request, request, request, request,

... ... ... ...

> 10.0.0.2: 10.0.0.254: > 10.0.0.2: 10.0.0.254:

ICMP ICMP ICMP ICMP

echo echo echo echo

request, ... reply, ... request, ... reply, ...

## C $ ping 192.168.90.1

# Pour ce test la politique de FORWARD # a t remis temporairement ACCEPT

## R

557

Chapitre 16. SR011 Dployer un routeur, un pare-feu et un serveur mandataire


$ tcpdump -i eth1 17:06:46.373098 IP 17:06:47.372896 IP 17:06:48.372853 IP 17:06:49.377555 IP $ tcpdump -i eth2 17:06:58.393129 IP 17:06:59.392942 IP 17:07:00.392945 IP 17:07:01.392935 IP # Rseau B 172.16.0.30 172.16.0.30 172.16.0.30 172.16.0.30

> > > >

192.168.90.1: 192.168.90.1: 192.168.90.1: 192.168.90.1:

ICMP ICMP ICMP ICMP

echo echo echo echo

request, request, request, request,

... ... ... ...

# Rseau C 192.168.90.70 192.168.90.70 192.168.90.70 192.168.90.70

> > > >

192.168.90.1: 192.168.90.1: 192.168.90.1: 192.168.90.1:

ICMP ICMP ICMP ICMP

echo echo echo echo

request, request, request, request,

... ... ... ...

##==> Compar au rsultat prcdent on observe bien le changement daddresse source lors du transfert de paquet de eth1 vers eth0 ou eth2 via R

5. Activez le masquage dadresse pour toutes les machines du rseau auquel appartient C vers un seul des autres rseaux.
## Par dfaut les paquets ne sont pas transfrs $ iptables -L FORWARD Chain FORWARD (policy DROP) ...

## Autoriser le transfert des paquets vers le rseau bleu.org depuis rouge.org $ iptables -A FORWARD -s 10.0.0.0/255.0.0.0 -d 12.0.0.0/255.0.0.0 -j ACCEPT $ iptables -A FORWARD -s 10.0.0.0/255.0.0.0 -d 172.18.0.0/255.255.0.0 -j ACCEPT $ iptables -A FORWARD -s 172.16.0.0/255.255.0.0 -d 12.0.0.0/255.0.0.0 -j ACCEPT $ iptables -A FORWARD -s 172.16.0.0/255.255.0.0 -d 172.18.0.0/255.255.0.0 -j ACCEPT ## Alternativement $ iptables -A FORWARD -s rouge.org -d bleu.org -j ACCEPT

# C $ ping 12.0.0.1 # R $ tcpdump -i eth2 12:15:30.190152 IP 12:15:31.204205 IP 12:15:32.204230 IP 12:15:33.204297 IP # C $ ping 172.18.0.1 # R $ tcpdump -i eth2 12:15:52.047608 IP 172.16.0.30 > 172.18.0.1: ICMP echo request, ...

172.16.0.30 172.16.0.30 172.16.0.30 172.16.0.30

> > > >

12.0.0.1: 12.0.0.1: 12.0.0.1: 12.0.0.1:

ICMP ICMP ICMP ICMP

echo echo echo echo

request, request, request, request,

... ... ... ...

558

Chapitre 16. SR011 Dployer un routeur, un pare-feu et un serveur mandataire


12:15:53.064224 IP 172.16.0.30 > 172.18.0.1: ICMP echo request, ... 12:15:54.064216 IP 172.16.0.30 > 172.18.0.1: ICMP echo request, ... 12:15:55.064242 IP 172.16.0.30 > 172.18.0.1: ICMP echo request, ... ## Les paquets ne devront pas passer vers noir.org ou vert.org. (tester) ## Les paquets vers noir.org ou vert.org ne peuvent passer par dfaut... # C $ ping 172.17.0.1 # R $ tcpdump -i eth2 (vide) # C $ ping 13.0.0.1 # R $ tcpdump -i eth2 (vide)

## Depuis rouge.org, $ iptables -t nat -A $ iptables -t nat -A $ iptables -t nat -A $ iptables -t nat -A

activer le masquage vers bleu.org POSTROUTING -s 10.0.0.0/255.0.0.0 -d 172.18.0.0/255.255.0.0 -j MASQUERA POSTROUTING -s 10.0.0.0/255.0.0.0 -d 12.0.0.0/255.0.0.0 -j MASQUERADE POSTROUTING -s 172.16.0.0/255.255.0.0 -d 172.18.0.0/255.255.0.0 -j MASQ POSTROUTING -s 172.16.0.0/255.255.0.0 -d 12.0.0.0/255.0.0.0 -j MASQUERA

## Alternativement $ iptables -t nat -A POSTROUTING -s rouge.org -d bleu.org -j MASQUERADE

# C $ ping 12.0.0.1 # R $ tcpdump -i eth2 12:26:44.930226 IP 12:26:45.944213 IP 12:26:46.944218 IP 12:26:47.944291 IP # C $ ping 172.18.0.1 # R $ tcpdump -i eth2 12:27:05.610507 IP 12:27:06.624212 IP 12:27:07.624233 IP 12:27:08.624287 IP

192.168.90.70 192.168.90.70 192.168.90.70 192.168.90.70

> > > >

12.0.0.1: 12.0.0.1: 12.0.0.1: 12.0.0.1:

ICMP ICMP ICMP ICMP

echo echo echo echo

request, request, request, request,

... ... ... ...

192.168.90.70 192.168.90.70 192.168.90.70 192.168.90.70

> > > >

172.18.0.1: 172.18.0.1: 172.18.0.1: 172.18.0.1:

ICMP ICMP ICMP ICMP

echo echo echo echo

request, request, request, request,

... ... ... ...

559

Chapitre 16. SR011 Dployer un routeur, un pare-feu et un serveur mandataire

6. Restaurez ltat ralis au point 4 (aprs masquage). Activez " iptraf " sur linterface publique. Vriez que seule, ladresse ip de linterface du rseau priv apparat et que toutes les autres sont " masques " :
# C $ ping 12.0.0.1 # R $ tcpdump -i eth2 14:57:04.911707 IP 14:57:04.912741 IP 14:57:05.926981 IP 14:57:05.927133 IP # C $ ping 172.18.0.1 # R $ tcpdump -i eth2 14:57:34.238940 IP 14:57:34.239470 IP 14:57:35.256962 IP 14:57:35.257114 IP # C $ ping 10.0.0.2 # R $ tcpdump -i eth0 15:01:55.520841 IP 15:01:55.523381 IP 15:01:56.537003 IP 15:01:56.537159 IP

192.168.90.70 > 12.0.0.1: ICMP echo request, ... 192.168.90.1 > 192.168.90.70: ICMP net 12.0.0.1 unreachable, ... 192.168.90.70 > 12.0.0.1: ICMP echo request, ... 192.168.90.1 > 192.168.90.70: ICMP net 12.0.0.1 unreachable, ...

192.168.90.70 > 172.18.0.1: ICMP echo request, ... 192.168.90.1 > 192.168.90.70: ICMP net 172.18.0.1 unreachable, ... 192.168.90.70 > 172.18.0.1: ICMP echo request, ... 192.168.90.1 > 192.168.90.70: ICMP net 172.18.0.1 unreachable, ...

10.0.0.254 10.0.0.2 > 10.0.0.254 10.0.0.2 >

> 10.0.0.2: 10.0.0.254: > 10.0.0.2: 10.0.0.254:

ICMP ICMP ICMP ICMP

echo echo echo echo

request, ... reply, ... request, ... reply, ...

Notez la traduction de port et identiez les sessions :


## C - 1re test... $ ssh root@10.0.0.2

# SESSION 1

## R $ tcpdump -i eth1 # de C 16:00:09.514742 IP 172.16.0.30.49130 > 10.0.0.2.ssh: S 2739748721:2739748721(0) win 5840 <mss 1460,sackOK,timestamp 545551 0,nop,wscale 1> 16:00:12.496929 IP 172.16.0.30.49130 > 10.0.0.2.ssh: S 2739748721:2739748721(0) win 5840 <mss 1460,sackOK,timestamp 545851 0,nop,wscale 1> 16:00:18.496933 IP 172.16.0.30.49130 > 10.0.0.2.ssh: S 2739748721:2739748721(0) win 5840 <mss 1460,sackOK,timestamp 546451 0,nop,wscale 1> 16:00:23.496914 arp who-has 172.16.0.254 tell 172.16.0.30 16:00:23.496929 arp reply 172.16.0.254 is-at aa:3a:57:43:f6:de (oui Unknown)

560

Chapitre 16. SR011 Dployer un routeur, un pare-feu et un serveur mandataire


##==> C lance la requte vers S, mais ne reoit aucune rponse... $ tcpdump -i eth0 # vers S 16:00:35.480003 arp who-has 10.0.0.254 tell 10.0.0.2 16:00:35.482444 arp reply 10.0.0.254 is-at 86:08:64:8b:8d:91 (oui Unknown) 16:00:54.496965 IP 10.0.0.254.49130 > 10.0.0.2.ssh: S 2739748721:2739748721(0) win 5840 <mss 1460,sackOK,timestamp 550051 0,nop,wscale 1> 16:00:54.497389 IP 10.0.0.2.ssh > 10.0.0.254.49130: R 0:0(0) ack 2739748722 win 0 16:00:59.491293 arp who-has 10.0.0.2 tell 10.0.0.254 ##==> Laddresse source des paquets est modifie lors du transfert via R de la requte mais ni les ports ni le numros de squence ne le sont... Pour S la requtre vient de R, donc S rponds R

## La connection ssh ne stablit pas entre C et S. Le traffic ne passe pas dans les deux se ## Il faut donc ajouter ce qui suit pour autoriser le transfert des communication ## de S vers C initi par C $ iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT ## C - 2me test... $ ssh root@10.0.0.2

# SESSION 2

## R $ tcpdump -i eth1 # vers C 16:20:46.842306 IP 172.16.0.30.56093 > 10.0.0.2.ssh: S 657298102:657298102(0) win 5840 <mss 1460,sackOK,timestamp 669284 0,nop,wscale 1> 16:20:46.871281 arp who-has 172.16.0.30 tell 172.16.0.254 16:20:46.871761 arp reply 172.16.0.30 is-at 76:09:14:e3:9d:31 (oui Unknown) 16:20:46.871768 IP 10.0.0.2.ssh > 172.16.0.30.56093: R 0:0(0) ack 657298103 win 0 ##==> Ici C reoit bien une rponse en provenance direct de S ## C - 3me test... $ ssh root@10.0.0.2

# SESSION 3

$ tcpdump -i eth0 # de S 16:23:29.003807 IP 10.0.0.254.56094 > 10.0.0.2.ssh: S 3190574153:3190574153(0) win 5840 <mss 1460,sackOK,timestamp 685499 0,nop,wscale 1> 16:23:29.006434 IP 10.0.0.2.ssh > 10.0.0.254.56094: R 0:0(0) ack 3190574154 win 0 ##==> S rponds bien au routeur mais pas directement C ## ## ## ## C R S R

initie donc la session via le port source 49130 vers S avec le port destination ssh (22 transfert le paquet de 10.0.0.254 via le port source 49130 vers S avec le port destinat repond via le protocole ssh vers R et le port de destination 56094 transmet la rponse vers C sans changer ladresse source

561

Chapitre 16. SR011 Dployer un routeur, un pare-feu et un serveur mandataire 16.1.7.2.3. 1.4.3. Rgles de ltrage par adresse, port et protocoles 1. Relevez dans le chier " /etc/protocol " et " /etc/services " les ports et noms des protocoles utiliss par les services ftp et http :
www ftp 80/tcp 21/tcp http # WorldWideWeb HTTP

## Dautres existent : https 443/tcp https 443/udp http-alt 8080/tcp http-alt 8080/udp ftp-data tftp sftp ftps-data ftps venus-se codasrv-se frox zope-ftp 20/tcp 69/udp 115/tcp 989/tcp 990/tcp 2431/udp 2433/udp 2121/tcp 8021/tcp

# http protocol over TLS/SSL webcache # WWW caching service # WWW caching service

# FTP over SSL (data) # # # # udp sftp side effect udp sftp side effect frox: caching ftp proxy zope management by ftp

Refusez tout trac de C vers lextrieur destination de ces ports :

$ iptables -I FORWARD 1 -s 172.16.0.0/255.255.0.0 -p tcp -m multiport --dports www,ftp -j DR # Alternative $ iptables -I FORWARD 1 -s 172.16.0.0/255.255.0.0 -p tcp --dport 80 -j DROP $ iptables -I FORWARD 1 -s 172.16.0.0/255.255.0.0 -p tcp --dport 21 -j DROP

Vrier que telnet est accept (tester puis restaurer) :


# $ $ $ $ C lynx ftp://10.0.0.2:20 lynx ftp://10.0.0.2 lynx http://10.0.0.2 telnet 10.0.0.2

# R $ tcpdump -i eth0 -n (traffic ftp sur port 20) 17:46:59.056413 IP 10.0.0.254.42777 > 10.0.0.2.20: S 166026782:166026782(0) win 5840 <mss 1460,sackOK,timestamp 1186507 0,nop,wscale 1>

562

Chapitre 16. SR011 Dployer un routeur, un pare-feu et un serveur mandataire


17:46:59.056993 IP 10.0.0.2.20 > 10.0.0.254.42777: R 0:0(0) ack 166026783 win 0 ... (pas de traffic ftp sur port 21) (pas de traffic http sur port 80) ... (traffic telnet) 17:47:34.907693 IP 10.0.0.254.45744 > 10.0.0.2.23: S 722491506:722491506(0) win 5840 <mss 1460,sackOK,timestamp 1190091 0,nop,wscale 1> 17:47:34.908057 IP 10.0.0.2.23 > 10.0.0.254.45744: R 0:0(0) ack 722491507 win 0 ##==> Telnet est bien accept...

2. Nautorisez C laccs qu une seule machine (par exemple le client C de vert.org si vous tes sur rouge.org), refusez tout le reste. (tester puis restaurer)
$ iptables -I FORWARD 1 -s 172.18.0.30 -d 172.17.0.30 -j ACCEPT $ iptables -I FORWARD 2 -s 172.18.0.30 -j DROP

3. Refusez tout accs la machine (192.168.x.1) de votre rseau (192.168.x.0) vers le rseau (192.168.y.0)(tester) :
$ iptables -I FORWARD 1 -s 192.168.x.1 -d 192.168.y.0/255.255.255.0 -j DROP

Tester aussi en modiant ladresse ip de votre client que celui-ci passe


## Pour le faire avec netkit, il faudrait monter deux domaines...

Note : Si on ltres sur des adresses, cest de la couche 3, tcp ou udp la couche 4, port -> 5,6,7 (vs OSI) ou application au choix. Un domaine de diffusion est dni par le masque quon lui attribue. De fait, moins dutiliser un pare-feu de niveau 2, jamais rien ne sera arrt avec un pare-feu normal de niveau trois sur des machines qui partagent un mme domaine de diffusion. Mais comment descendre en par exemple en couche 2. Et bien l encore les solutions OSS sont magiques...

4. Relevez les ports et protocoles utiliss par les services de rsolution de noms
nameserver 42/tcp name whois 43/tcp nicname # IEN 116 (avant DNS)

563

Chapitre 16. SR011 Dployer un routeur, un pare-feu et un serveur mandataire


domain 53/tcp # name-domain server (DNS)

hostnames 101/tcp hostname # usually from sri-nic csnet-ns 105/tcp cso-ns # also used by CSO name server netbios-ns 137/tcp netbios-ns 137/udp netbios-dgm 138/tcp netbios-dgm 138/udp netbios-ssn 139/tcp netbios-ssn 139/udp at-nbp 202/tcp # NETBIOS Name Service # NETBIOS Datagram Service # NETBIOS session service

# AppleTalk name binding # Lightweight Directory Access Protocol # LDAP over SSL

ldap 389/tcp ldap 389/udp ldaps 636/tcp ldaps 636/udp

Construisez les rgles an quelles rpondent au problme suivant. On dsire que : toutes les machines du rseau priv puissent avoir accs tous les autres services de nimporte quel rseau, la machine C de votre rseau priv ne peut pas envoyer de requte UDP/DOMAIN vers la machine S.
$ iptable -A FORWARD -s 172.16.0.30 -d 10.0.0.2 -p udp --dport 53 -j DROP $ iptable -A FORWARD -s 172.16.0.0/255.255.0.0 -j ACCEPT

Tester pour les requtes sur le serveur de noms puis pour des requtes sur le serveur ftp en utilisant ladresse IP

# $ $ $

C lynx ftp://10.0.0.2 dig @10.0.0.2 google.fr dig @10.0.0.3 google.fr

# [Requte 1] # [Requte 2] # [Requte 3]

# R $ tcpdump -n -i eth0 [traffic Requte 1] 20:25:41.931723 IP 10.0.0.254.36274 > 10.0.0.2.21: S 3462305496:3462305496(0) win 5840 <mss 1460,sackOK,timestamp 2138794 0,nop,wscale 1> 20:25:41.932266 IP 10.0.0.2.21 > 10.0.0.254.36274: R 0:0(0) ack 3462305497 win 0 20:25:44.937486 IP 10.0.0.254.36275 > 10.0.0.2.21: S 3515350037:3515350037(0) win 5840 <mss 1460,sackOK,timestamp 2139095 0,nop,wscale 1> 20:25:44.937652 IP 10.0.0.2.21 > 10.0.0.254.36275: R 0:0(0) ack 3515350038 win 0 20:25:46.929920 arp who-has 10.0.0.254 tell 10.0.0.2

564

Chapitre 16. SR011 Dployer un routeur, un pare-feu et un serveur mandataire


20:25:46.929930 arp reply 10.0.0.254 is-at 86:08:64:8b:8d:91 ... [traffic Requte 2] (vide car bloqu) ... [traffic Requte 3] 20:26:02.745811 arp who-has 10.0.0.3 tell 10.0.0.254 20:26:03.751285 arp who-has 10.0.0.3 tell 10.0.0.254 ...

5. Pour les deux traitements qui suivent, vous utiliserez deux critures, dont loprateur " ! " (not) qui permet dobtenir des complments : Autorisez toutes les requtes qui sortent vers lextrieur, sauf celles qui vont sur un port ftp
$ iptables -A FORWARD -p tcp ! --dport ftp -j ACCEPT

Nautorisez aucune requte hormis celles qui sont destination du port 80 :


$ iptables -A FORWARD -p tcp ! --dport http -j DROP

16.1.8. Port(s) Internet ouvrir/fermer


Source(s):

Web: Port(s) Internet ouvrir/fermer (http://www.ybet.be/internet20/ports_internet.htm)

16.1.9. Port Knocking


Source(s):

Web: Port Knocking (http://www.portknocking.org) Port Knocking [Wikipedia] (http://en.wikipedia.org/wiki/Port_knocking)

565

Chapitre 16. SR011 Dployer un routeur, un pare-feu et un serveur mandataire

Pour laccs out/in... voir pour le fun...

16.2. Serveur Proxy (Serveur Mandataire)


16.2.1. Introduction
Un serveur proxy (traduction franaise de proxy server, appel aussi serveur mandataire) est lorigine une machine faisant fonction dintermdiaire entre les ordinateurs dun rseau local (utilisant parfois des protocoles autres que le protocole TCP/IP) et internet. La plupart du temps le serveur proxy est utilis pour le web, il sagit alors dun proxy HTTP. Toutefois il peut exister des serveurs proxy pour chaque protocole applicatif (FTP, ...). Il a pour fonction de relayer des requtes entre un poste client et un serveur en assurant les fonctions suivantes :
mmoire cache la journalisation des requtes ( logging ) la scurit du rseau local (et identifier chaque utilisateur en cas de problme) le filtrage et lanonymat (filtrer les sites inutiles : pornographie, jeux, messagerie instantanes,...)

16.2.2. SQUID
Source(s):

OF: Cours SQUID (Proxy) (docs/eof/sr011-ch03-index_proxy_cours.pdf)

16.2.3. TP : Proxy HTTP


Source(s):

OF: Application sur le proxy HTTP SQUID (docs/eof/sr011-ch04-index_proxy_tp)

566

Chapitre 16. SR011 Dployer un routeur, un pare-feu et un serveur mandataire

16.2.4. Autre Proxy


Source(s):

OF: Aniscartujo.com Security & Developing Services (https://aniscartujo.com) Aniscartujo Secure Encrypted Web Proxy (https://aniscartujo.com/webproxy)

A tester pour savoir quen penser...

567

Chapitre 17. SAMBA & OpenLDAP


17.1. Planning SAMBA & LDAP
Les modules Samba et OpenLDAP sont programms sur 4 semaines, en parallle. La formation Samba commence Week X et la formation OpenLDAP commence Week X + 1. Chacun des modules est divis en trois parties, estimes 2 ou 3h de travail chacune. Au total, nous avons 6h pour Samba et 8h pour LDAP. Voici lorganisation prconis : * Semaine 1 (du 28/01 au 03/02) : - Samba, chapitres 1 10 (2h) : 01_pageDeGarde.pdf, 02_presentation.pdf, 03_part1-premierspas.pdf * Semaine 2 (du 04/02 au 10/02) : - Samba, chapitre 11 (2h) : 04_part2-autonome.pdf - LDAP, chapitres 1 7 (2h) : 01_pageDeGarde.pdf, 02_presentation.pdf, 03_part1-concepts.pdf * Semaine 3 (du 11/02 au 17/02) : - Samba, chapitres 12 et 13 (2h) : 05_part3-controlededomaine.pdf - LDAP, chapitre 8 (3h) : 04_part2-openldap.pdf * Semaine 4 (du 18/02 au 24/02) : - LDAP, chapitre 9 (3h) : 05_part3-samba.pdf Il est important que chacun respecte cet ordre car il en rsultera une meilleure organisation gnrale et une meilleure comprhension ! Pour les plus rapides, le chapitre 9 du cours LDAP sera abord en dernier car il fait appel des notions lies Samba... Lorganisation de chaque cours et les pr-requis en termes de connaissances etde matriel y sont rappels. Pour rsumer, pour Samba, vous aurez besoin de ce matriel : - une machine avec une distribution base sur Debian (jai choisi Ubuntu) - une machine sous XP Pro ou 2000 Pro (Vista et 7 non tests) (physique ou virtuelle, cf. qemu / virtualbox / vmware...) Et pour LDAP : - une machine avec une distribution base sur Debian (la mme que pour Samba sufra) Dautres distributions GNU/Linux ou systmes dexploitations peuvent aussi convenir, mais les cours y seront peut-tre un peu moins adapts. Vous remarquerez que chacun des deux cours est trs didactique : le mieux est de lire le cours devant son ordinateur et de pratiquer en parallle. Il ny a pas de TP en tant que tel : chaque partie du cours pourrait former un exercice part entire. Ceci est re-prcis dans les documents des cours.

17.2. SAMBA : Prsentation


Source(s):

OF: SR012-ch00-planetude.txt (docs/eof/sr012-ch00-planetude.txt) SR012-ch01_pagedegarde.pdf (docs/eof/sr012-ch01_pagedegarde.pdf) SR012-ch02_presentation.pdf (docs/eof/sr012-ch02_presentation.pdf)

17.3. SAMBA : Premier Pas


Source(s):

OF: SR012-ch03_part1-premierspas.pdf [Hors-Ligne] (docs/eof/sr012-ch03_part1-premierspas.pdf) SR012-ch03_part1-premierspas.pdf & Contributions [En Ligne] (http://contribs.martymac.com)

568

Chapitre 17. SAMBA & OpenLDAP

Web: SAMBA (http://www.samba.org) Howto Collection (http://www.samba.org/samba/docs/man/Samba-HOWTO-Collection) Howto Install & Test Samba (http://www.samba.org/samba/docs/man/Samba-HOWTO-Collection/install.html) Samba Checklist (http://www.samba.org/samba/docs/man/Samba-HOWTO-Collection/diagnosis.html) "Analyzing and Solving Samba Problems" (http://www.samba.org/samba/docs/man/Samba-HOWTO-Collection/problems.html) SMB (Wikipedia) (http://fr.wikipedia.org/wiki/Server_Message_Block) What is SMB ? (http://www.samba.org/cifs/docs/what-is-smb.html) Well Known SIDs (http://msdn.microsoft.com/library/en-us/secauthz/security/well_known_sids.asp ) Well-Known User Default RIDs (http://www.samba.org/samba/docs/man/Samba-HOWTOCollection/groupmapping.html#WKURIDS) NewSID Retirement and the Machine SID Duplication Myth (http://blogs.technet.com/markrussinovich/archive/2009/11/03/3291024.aspx) Le mythe du SID sur Windows (http://oliviernguyen.blogspot.com/2009/12/le-mythe-du-sid-sur-windows.html) Sysprep, Machine SIDs and Other Myths (http://blogs.technet.com/deploymentguys/archive/2009/12/03/sysprep-machine-sids-and-othermyths.aspx)

17.3.1. Documentation
17.3.1.1. Pages de Manuel
Les pages de man :
$ man samba $ man smb.conf ... $ man smbd ... $ man smbpasswd $ man net (or net -h) ... # Description de la suite Samba (binaires, etc...) # Desctiption du fichier de configuration # Description du demon samba # Description dune commande Samba... # Description de la commande net

17.3.1.2. Ressources Web en ligne


Voir liens lists ci-avant

17.3.1.3. Les sources


Le rpertoire docs/ des sources (et les sources elle-mme)

569

Chapitre 17. SAMBA & OpenLDAP

17.3.1.4. Listes de diffusion, une source prcieuse dinformations


Ofcielles (en) :
samba@lists.samba.org samba-technical@lists.samba.org -> http://lists.samba.org/mailman - Franaise : samba-fr@ujf-grenoble.fr -> http://listes.ujf-grenoble.fr/wws/info/samba-fr

17.3.2. Fonctionalit
Samba est une suite doutils trs complte qui permet linterconnexion de systmes "htrognes" en implmentant des protocoles rseaux issus du monde propritaire tels que NETBIOS et SMB/CIFS (machine Unix <=> Windows, Controller de Domaine, etc...). Samba offre les fonctionnalits suivantes :
le le le la de partage de fichiers partage dimprimantes support de Netbios gestion de domaines nombreux outils en ligne de commande

On a tendance dire quactuellement, en terme de fonctionnalits, un serveur Samba quivaut un serveur NT4 (largement) amlior. Un domaine NT4 est un regroupement logique de diffrents acteurs et ressources :
## Les acteurs sont les suivants : - des utilisateurs - des machines - des groupes ## Les ressources sont des partages : - de fichiers - dimprimantes

570

Chapitre 17. SAMBA & OpenLDAP Un domaine permet dunier la gestion des droits sur ces ressources pour y autoriser ou non laccs par ces acteurs. Par exemple, nous dirons que nous aurons la possibilit dautoriser ou non M.Dupont accder limprimante du groupe comptabilit. Sur le domaine, chaque acteurs (utilisateurs, machines et groupes) est reprsente par un compte :
- un utilisateur possde un compte - un groupe possde un compte - une machine possde galement un compte, celui-ci se termine par un $ (le $ est non visible sous NT), le compte de machine autorise une machine faire partie du domaine.

Deux types de compte :


## Comptes globaux Ce sont les comptes disponibles sur le domaine (stocks sur le contrleur de domaine) ## Comptes locaux Ce sont des comptes disponibles uniquement sur une machine donne.

17.3.3. Terminologie & Protocole


SID (Security Identier) : Un SID est un identiant unique attribu chaque acteur dun domaine Windows. Il est compos dune partie nomme SID local, qui identie le domaine, et dune seconde que lon appelle RID (Relative Identier), qui identie lacteur (utilisateur/groupe/machine) au sein du domaine. un exemple de SID pourrait-tre : S-1-5-21-3493456274-4211610059-1786859526-512 qui identie le groupe dAdministrateurs du domaine (512) au sein du domaine S-1-5-21-3493456274-4211610059. UID (User Identier) : Identiant numrique reprsentant un utilisateur sous Unix. NetBios : "Network Basic Input/Output System" : nest pas un protocole. Mthode de communication sur un protocole existant ; est en fait une couche intermdiaire entre SMB et un protocole sous-jacent tel que TCP (cf. NBT) ou IPX. Il fonctionne la couche 5 (session) du modle OSI. Fournit une mthode de rsolution de noms et de services aux couches suprieures. Utilise un modle de noms de machines de 15 caractres + 1 caractre de contrle spciant les services offerts par la machines. NetBios a t dvelopp en 1983 par Sytec Inc. pour IBM.

571

Chapitre 17. SAMBA & OpenLDAP Le protocole SMB (Server Message Block) est un protocole permettant le partage de ressources (chiers et imprimantes) sur des rseaux locaux avec des PC sous Windows. Dans Windows NT 4, il est appel CIFS (Common Internet File System). Dans Vista et 7, il est appel SMB 2. Cr en 1985 par IBM, ce protocole sest dabord appel LAN Manager sous OS/2, puis il a t popularis par Microsoft Windows qui lintgra comme systme par dfaut de partage de chiers sous Windows. Microsoft renomme SMB en CIFS (Common Internet File System) et ajoute plusieurs fonctions comme le support des raccourcis et de chiers de plus grande taille. Avec larrive de Windows Vista et de 7, Microsoft a mis au point une version 2 du protocole plus rapide. Le protocole est de nouveau nomm SMB (SMB 2). CIFS peut, ou non, utiliser NetBios (ports 137,138,139). Ceci est souvent le cas mais est en train dvoluer vers la mthode "Direct-hosted" et limplmentation de CIFS directement sur TCP/IP (port 445).
...En pratique, ce protocole, bien que trs rpandu, mais semble toutefois avoir le dfaut de ne pas tre trs able. Dues aux diffrentes implmentations de protocole et aux diffrentes incompatibilits entre les diffrentes versions de windows, ainsi que lhtrognit des topologies de rseaux (workgroupe vs domain), et aux congurations de chaque machine, il nest pas rare que les utilisateurs voient leur transfert de chier interrompu, sans quaucune raison ne puisse tre trouve. http://fr.wikipedia.org/wiki/Server_Message_Block

17.3.4. Installation
Source(s):

Web: Howto Install & Test Samba (http://www.samba.org/samba/docs/man/Samba-HOWTO-Collection/install.html)

Installation de Samba sur mon MacBook Pro avec Ubuntu 9.10 64bits
$ sudo apt-get install samba samba-doc samba-common smbfs smbclient Lecture des listes de paquets... Fait Construction de larbre des dpendances Lecture des informations dtat... Fait Les paquets suivants ont t installs automatiquement et ne sont plus ncessaires : linux-backports-modules-alsa-2.6.31-15-generic Veuillez utiliser apt-get autoremove pour les supprimer. Les paquets supplmentaires suivants seront installs : samba-common-bin Paquets suggrs :

572

Chapitre 17. SAMBA & OpenLDAP

openbsd-inetd inet-superserver smbldap-tools ldb-tools samba-doc-pdf keyutils Les NOUVEAUX paquets suivants seront installs : samba samba-common samba-common-bin samba-doc smbclient smbfs 0 mis jour, 6 nouvellement installs, 0 enlever et 29 non mis jour. Il est ncessaire de prendre 5 212ko/34,9Mo dans les archives. Aprs cette opration, 91,4Mo despace disque supplmentaires seront utiliss. Souhaitez-vous continuer [O/n] ? O Rception de : 1 http://ubuntuarchive.eweka.nl karmic-updates/main samba-common-bin 2:3.4.05 212ko rceptionns en 46s (113ko/s) Prconfiguration des paquets... Slection du paquet samba-common prcdemment dslectionn. (Lecture de la base de donnes... 217167 fichiers et rpertoires dj installs.) Dpaquetage de samba-common ( partir de .../samba-common_2%3a3.4.0-3ubuntu5.4_all.deb) ... Slection du paquet samba prcdemment dslectionn. Dpaquetage de samba ( partir de .../samba_2%3a3.4.0-3ubuntu5.4_amd64.deb) ... Slection du paquet samba-common-bin prcdemment dslectionn. Dpaquetage de samba-common-bin ( partir de .../samba-common-bin_2%3a3.4.0-3ubuntu5.4_amd64 Slection du paquet samba-doc prcdemment dslectionn. Dpaquetage de samba-doc ( partir de .../samba-doc_2%3a3.4.0-3ubuntu5.4_all.deb) ... Slection du paquet smbclient prcdemment dslectionn. Dpaquetage de smbclient ( partir de .../smbclient_2%3a3.4.0-3ubuntu5.4_amd64.deb) ... Slection du paquet smbfs prcdemment dslectionn. Dpaquetage de smbfs ( partir de .../smbfs_2%3a3.4.0-3ubuntu5.4_amd64.deb) ... Traitement des actions diffres ( triggers ) pour man-db ... Traitement des actions diffres ( triggers ) pour ufw ... Traitement des actions diffres ( triggers ) pour ureadahead ... ureadahead will be reprofiled on next reboot Traitement des actions diffres ( triggers ) pour doc-base ... Processing 4 added doc-base file(s)... Registering documents with scrollkeeper... Paramtrage de samba-common (2:3.4.0-3ubuntu5.4) ...

Paramtrage de samba (2:3.4.0-3ubuntu5.4) ... update-alternatives: utilisation de /usr/bin/smbstatus.samba3 pour fournir /usr/bin/sm [ OK ] * Starting Samba daemons

Paramtrage de samba-common-bin (2:3.4.0-3ubuntu5.4) ... update-alternatives: utilisation de /usr/bin/nmblookup.samba3 pour fournir /usr/bin/nm update-alternatives: utilisation de /usr/bin/net.samba3 pour fournir /usr/bin/net (n update-alternatives: utilisation de /usr/bin/testparm.samba3 pour fournir /usr/bin/tes Paramtrage de samba-doc (2:3.4.0-3ubuntu5.4) ... Paramtrage de smbclient (2:3.4.0-3ubuntu5.4) ... Paramtrage de smbfs (2:3.4.0-3ubuntu5.4) ...

Paquets :

573

Chapitre 17. SAMBA & OpenLDAP

samba : modules ncessaire pour utiliser Samba comme server de chier/impression indpendant. Pour utiliser comme Domaine NT4 ou Active Directory, le paquet winbind est requis. samba-doc : contient toute la documentation Samba au format non-PDF. Voir aussi samba-doc-pdf . samba-common : chiers communs utiliss par Samba 3 et 4. smbfs : utilitaires pour monter/dmonter les systems de chiers CIFS. Les autres utilitaires tels que smbclient, smbtar et smbspool sont dans le paquet smbclient. smbclient : utilitaires pour accder les serveurs Samba et Windows. Inclut smbclient, smbtar, et smbspool. Utilitaires pour monter les partages localement sont contenu dans le paquet smbfs.

17.3.5. Version, Status


Versions :

Version 2 : il sagit de lancienne version de Samba, remplace progressivement par la version 3. Cette version ne proposait quun support limit de LDAP pour la gestion des comptes utilisateurs et son code devenait difcile maintenir. Elle est trs rarement mise jour ; des patches de scurit lui sont parfois appliqus. Version 3 : il sagit de la version actuellement conseille pour la mise en production de Samba. Elle est trs rgulirement mise jour et corrige. Elle apporte de nombreuses fonctionnalits par rapport la version 2 :
- une meilleure gestion des comptes via un systme de backends modulaires - une gestion amliore des groupes via un mcanisme de mapping - de nouvelles commandes (commande "net") - amlioration du support de limpression - outils de migration depuis un serveurs NT4 vers un serveur Samba - support initial dActive Directory ...

Samba 3 nest pas capable de contrler un domaine active directory. Il peut uniquement en tre membre (security = ads). Les futures versions de Samba devraient tre capable doffrir cette fonctionnalit.

Version 4 : nouvelle version de Samba est en train de voir le jour, encore en cours de dveloppement et nest pas conseille en production. Elle devrait notamment apporter le support complet dActive Directory. Trs prometteuse elle offrira un code totalement r-crit ainsi quune architecture plus souple maintenir pour les dveloppeurs. Ceci implique une meilleur qualit/stabilit du code et une ractivit plus importante pour lajout de nouvelles fonctionnalits. La version 4 est dores et dj compilable et utilisable, mais non conseille en environnement de produc- tion !

574

Chapitre 17. SAMBA & OpenLDAP Plus dinformation sur : http://devel.samba.org.

Note : A partir de la version 3.2, volution naturelle de la version 3, Samba est diffus sous licence GPL v3.

Note : La dernire version ofcielle stable de Samba est la 3.4.5, sortie le 19 janvier 2010 (cf. samba.org) ; attention ne pas confondre mise jour dun package (pour une distribution quelconque) et mise jour "ofcielle" du logiciel avant packaging... Lorsquun logiciel est mis jour upstream ( la source, par les dveloppeurs eux-mmes), cela prend du temps pour que chaque distribution (ou plus gnralement systme dexploitation qui package le logiciel) le mette jour... Le temps ncessaire est variable selon le nombre dadaptations effectuer pour quil fonctionne correctement sur le systme en question, le degr de ractivit des packagers, le nombre de tests effectuer, ...

## Afficher la version de Samba installe $ smbd -V Version 3.4.0 ## or $ smbstatus Samba version 3.4.0 PID Username Group Machine ------------------------------------------------------------------Service pid machine Connected at ------------------------------------------------------No locked files

17.3.6. Les binaires "Serveur"


## 3 dmons : - smbd : gre les connexions SMB/CIFS (partage de fichiers, impression, ...) - nmbd : gre la couche NetBios (ici rsolution de noms) - winbindd : permet un serveur Unix dutiliser un serveur NT pour bnficier de ses comptes localements (Se connecter sur une machine Unix avec un compte issu dune machine NT.)

575

Chapitre 17. SAMBA & OpenLDAP

17.3.7. Les binaires "Client"


- nmblookup : rsoud un nom NetBios vers son adresse IP depuis une machine Unix - pdbedit : gestion de la base de donnes SAM (BD utilisateurs de Samba) - smbclient : linstar de ftp, permet de se connecter un partage de fichiers Windows. Permet aussi dimprimer sur une imprimante rattach un serveur SMB. - smbpasswd : permet de changer les hashs de mot de passe LanMan et Windows NT sur les serveur Samba et Windows NT. - smbstatus : affiche les connexions (smbd) actuelles. - smbmount : monte un rpertoire partag par Windows ou Samba sur la machine. - net : commande " tout faire". Englobe de nombreuses fonctionnalits. similaire la commande net.exe sous DOS/Windows. - findsmb : permet de lister toutes les machines Windows du rseau. Trouver les serveurs SMB sur le rseau. - rpcclient : client RPC. Envoie une commande RPC une machine distance. - testparm : permet de vrifier la syntaxe du fichier de configuration smb.conf - testprns : permet de tester les noms dimprimante definit dans le fichier printcap utilis par Samba. - smbcacls : Management des ACLs sur serveur CIFS distant - smbcontrol : permet de changer le comportement du demon samba lors de lexecution. - swat : Interface Web permettant de configurer smb.conf.

17.3.8. Fichier de conguration smb.conf


Example(s):

Conguration par dfaut (Ubuntu) (docs/sr012-ch02-smb-conf-v00-default.txt) Conguration minimum (docs/sr012-ch02-smb-conf-v01-minimal.txt) Conguration tendue (docs/sr012-ch02-smb-conf-v02-etendu.txt) Conguration partage tous (docs/sr012-ch02-smb-conf-v03-share-to-all.txt) Conguration partage avec authentication (docs/sr012-ch02-smb-conf-v04-share-w-authentication.txt) Conguration minimum de partage dimprimante (docs/sr012-ch02-smb-conf-v05-share-printers-minimum.txt) Conguration de partage dimprimante avec authentication (docs/sr012-ch02-smb-conf-v06-share-printers-w-authentication.txt) Conguration Contrleur de Domaine (docs/sr012-ch02-smb-conf-v07-domain-controller.txt)

La plupart des outils Samba (les serveurs et parfois les outils clients) se rfrent au chier de conguration principal de Samba qui est le chier /etc/samba/smb.conf Ce chier est divis en sections (noms entre crochets) et paramtres :

576

Chapitre 17. SAMBA & OpenLDAP


[masection] name1 = value name2 = value ... # Section # Paramtres

# This is a comment ; This is another comment :)

Les premires sections ci-dessous sont spciales :

[global] # contient les paramtres gnraux et les paramtres par dfaut des diffrents partages [homes] # spcifique au partage du rpertoire personnel dun utilisateur # (son rpertoire $HOME) # Cette section cre dynamiquement un partage du nom de # lutilisateur connect. # il apparatra dans la liste des partages avec le nom dutilisateur # du client (sil est identifi) ... [printers] # section de dclaration dimprimantes. # Cette section cre un partage pour chaque imprimante # prsente dans le fichier /etc/printcap. ... [print$] # partage les drivers des imprimantes ... [IPC$] [ADMIN$] # partage utilis pour les commandes RPC ... [profiles] # partage les profils itinrants des utilisateurs ... [netlogon] # partage les scripts de connexion des utilisateur et les stratgies (NTConfig.POL) ... [le_nom_dun_partage] # pour chaque partage

577

Chapitre 17. SAMBA & OpenLDAP

Chaque section (excepte la section [global]) dcrit une ressource partage ("share"). Le nom de la section est le nom de la ressources partage et les paramtres lintrieur de la section dnisse les proprits du partage. Les sections sont soit des services de chier partags(utilis par les clients comme extension de leur systme de chier natif) ou des services dimpression (utilis par les clients pour accder aux services dimpression du serveur hte en execution). Une ressources partage consite en un repertoire auquel on donne accs ainsi quune description des droits daccs qui sont accords lutilisateur du service. Les sections peuvent dsigner des services invits, dans lequel cas aucun mot de passe nest requit pour y avoir accs. Les autres sections un mot de passe est requis pour y accder. Le client doit alors fournir nom dutilisateur et mot de passe pour pouvoir accder au service. Le serveur Samba ne peut accorder plus de droit (sur la ressource partage) que le ceux paramtr sur le serveur hte (droit Unix sur le chiers).
# Partage de fichier [foo] # Nom du partage : foo path = /home/bar # Partage les fichiers de /home/bar read only = no # Accorde droit dcriture # Partage dimprimante [aprinter] path = /usr/spool/public read only = yes printable = yes guest ok = yes

# Peut lire uniquement # Accorde droit dimpression # Accessible par lutilisateur invit par dfaut

17.3.9. Les chiers de statut "tdb"


Samba maintient un ensemble dinformations concernant les connexions en cours. Ces chiers sont des chiers au format "tdb", une sorte de base de donnes plat propre Samba. Vous ntes pas senss manipuler ces chiers, mais il est bon de savoir que dans certains cas extrmes, ces chiers peuvent tre interrogs ou modis.

578

Chapitre 17. SAMBA & OpenLDAP

17.3.10. Les chiers de log


Samba (principalement ses dmons) crivent des informations diverses durant leur activit (erreurs, informations, ...). Il est bon de consulter ces logs rgulirement, ainsi quen cas de problme. Le niveau de dtail des logs ainsi que leur emplacement est paramtrable dans le chier smb.conf. Par dfaut, ces logs se trouvent dans le rpertoire /var/log.

17.3.11. Premiers Tests


Aprs avoir charg la conguration minimale de Samba, vrions quelle soit correcte et testons l :
## Configuration $ cat /etc/samba/smb.conf [ global ] # Nom du workgroup ou du domaine workgroup = Homeuk # Nom netbios de la machine netbios name = ubuntu # Niveau assez bas os level = 40 # Nous ne sommes pas contrleur du domaine domain logons = no # Ni collecteur de liste de machines pour le domaine domain master = no # Ni collecteur de liste de machines pour le rseau local master = no ## Test nouvelle configuration $ testparm Load smb config files from /etc/samba/smb.conf Loaded services file OK. Server role: ROLE_STANDALONE Press enter to see a dump of your service definitions [global] netbios name = UBUNTU os level = 40 local master = No domain master = No ## Redmarrer Samba $ /etc/init.d/samba restart (ou $ /etc/init.d/samba start) ## Resolution Netbios (Samba)

579

Chapitre 17. SAMBA & OpenLDAP


$ nmblookup ubuntu # Machine Linux querying ubuntu on 192.168.1.255 192.168.1.100 ubuntu ## Adresse IP hte Linux $ ifconfig eth2 eth2 Link encap:Ethernet HWaddr 00:26:bb:13:31:96 inet adr:192.168.1.100 Bcast:192.168.1.255 Masque:255.255.255.0 ## Hte Linux $ hostname macfil $ nmblookup filostene # Machine Windows querying filostene on 192.168.1.255 192.168.1.101 filostene 192.168.56.1 filostene ## Lister les partages de la machine Linux $ smbclient -L ubuntu Enter roots password: session setup failed: NT_STATUS_LOGON_FAILURE ## Lister les utilisateurs Samba $ pdbedit -L nobody:65534:nobody filostene:1000:Filostene,

## Erreur de mot de passe ?

## Deux utilisateurs existent

## Re-Listons les partages de la machine Linux $ smbclient -L ubuntu ## Avec mot de passe vide $ smbclient -U nobdy -L ubuntu ## Acces avec compte anonyme ... Anonymous login successful Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.4.0] Sharename --------IPC$ ... Server --------UBUNTU Workgroup --------WORKGROUP Type ---IPC Comment ------IPC Service (Samba 3.4.0) ## Aucun partage, normal ! Comment ------Samba 3.4.0 Master -------

## Lister les partages de la machine Windows ## owner : nom de ladminstrateur de la machine Windows ## filostene : nom de la machine Windows $ smbclient -U owner -L filostene Enter owners password: Domain=[FILOSTENE] OS=[Windows 5.1] Server=[Windows 2000 LAN Manager]

580

Chapitre 17. SAMBA & OpenLDAP

Sharename --------IPC$ D$ owner ADMIN$ C$ Server --------Workgroup ---------

Type ---IPC Disk Disk Disk Disk

Comment ------Remote IPC Default share Remote Admin Default share Comment ------Master -------

## Se connecter sur un partage de fichiers (D$) avec smbclient $ smbclient -U owner //192.168.1.101/D$ Enter owners password: Domain=[FILOSTENE] OS=[Windows 5.1] Server=[Windows 2000 LAN Manager] smb: \> ls Video Miro D 0 Tue Jul 15 09:37:20 2008 System Volume Information DHS 0 Sat Dec 4 15:46:30 2004 Tlchargements D 0 Thu Sep 4 09:13:12 2008 Computer Next D 0 Sun Mar 22 02:42:24 2009 ... ## Monter le partage $ mkdir -p /mnt/samba $ smbmount //192.168.1.101/D$ /mnt/samba -o username=owner Password: $ ls /mnt/samba/ AccesInternetFournisseurHebergeur Achat en ligne ... ## Lister les imprimantes dune machine ## 1er essai $ net rpc printer LIST -U owner -S filostene Enter owners password: listing printers ## Aucun resultat car aucune ## imprimante partage sur la ## machine windows ## 2nd essai $ net rpc printer LIST -U owner -S filostene Enter owners password: listing printers printer 1: PDF995, shared as: PDF995 ## Une fois partage, limprimante apparat :) ... ## Imprimer un fichier avec smbspool ## Syntaxe : smbspool URI num de job utilisateur titre copies options [fichier] $ smbspool smb://owner:motdepasse@filostene/PDF995 \

581

Chapitre 17. SAMBA & OpenLDAP


1 owner impression_test 1 "" /etc/crontab ...

Figure 17-1. Samba : Rsultat dimpression distant

Avertissement
Attention aux mot de passe avec des caractres spciaux tel que &. Ces caractres peuvent avoir plusieurs signications, & par example est un caractre spcial dans un shell... Il faut lchapper si on veux lutiliser : \& ou alors, sans chappement, linclure entre deux "" (guillemets) ou (simple quote).

17.3.12. Comment diagnostiquer un problme ?


Consulter la liste de vrication Samba (Samba Checklist (http://www.samba.org/samba/docs/man/Samba-HOWTO-Collection/diagnosis.html)) Si a marche toujours pas, se rfrer "Analyzing and Solving Samba Problems" (http://www.samba.org/samba/docs/man/Samba-HOWTO-Collection/problems.html).

582

Chapitre 17. SAMBA & OpenLDAP

17.4. SAMBA en tant que serveur autonome


Source(s):

OF: SR012-ch04_part2-autonome.pdf (docs/eof/sr012-ch04_part2-autonome.pdf)

17.4.1. Conguration Etendue


Mettons en place une conguration plus tendu du serveur Samba, puis on teste :
$ testparm Load smb config files from /etc/samba/smb.conf Loaded services file OK. Server role: ROLE_STANDALONE Press enter to see a dump of your service definitions [global] workgroup = HOMEUK netbios name = UBUNTU passdb backend = tdbsam:/var/lib/samba/mypassdb.tdb log level = 2 log file = /var/log/samba/%m.log time server = Yes os level = 40 local master = No domain master = No veto files = /lost+found/.recycle/

17.4.2. Cration dun partage (tmp) accessible tous (compte invit)


Le chier de conguration est complt pour le partage tous :
[global] # [...] # Dans quel cas mapper une connexion vers un compte anonyme ? map to guest = Bad User # Un partage tmp accessible a tous [tmp] path = /tmp guest ok = yes

583

Chapitre 17. SAMBA & OpenLDAP


writeable = yes browseable = yes

Testes :
## Teste configuration $ testparm Load smb config files from /etc/samba/smb.conf Processing section "[tmp]" Loaded services file OK. Server role: ROLE_STANDALONE Press enter to see a dump of your service definitions [global] workgroup = HOMEUK netbios name = UBUNTU map to guest = Bad User passdb backend = tdbsam:/var/lib/samba/mypassdb.tdb log level = 2 log file = /var/log/samba/%m.log time server = Yes os level = 40 local master = No domain master = No veto files = /lost+found/.recycle/ [tmp] path = /tmp read only = No guest ok = Yes ## Redmarrer le serveur Samba $ /etc/init.d/samba restart [ OK ] * Stopping Samba daemons [ OK ] * Starting Samba daemons

Le partage est maintenant accessible depuis toute machine Windows (ou Samba) par le chemin UNC : \\ubuntu\\tmp.
## Tentative de connection au partage depuis machine Linux ## Utilisateur toto est inconnu $ smbclient -U toto //ubuntu/tmp/ Enter totos password: Domain=[HOMEUK] OS=[Unix] Server=[Samba 3.4.0] smb: \> ls . D 0 Sat Feb 6 17:41:12 2010 .. D 0 Sat Feb 6 10:38:42 2010 .vbox-filostene-ipc DH 0 Sat Feb 6 15:57:05 2010

584

Chapitre 17. SAMBA & OpenLDAP


.esd-112 ... .exchange-filostene tmp94W2W_ .X0-lock pulse-ndcZwXzHkHjZ DH DH HR D 0 0 2311 11 0 Sat Feb Sat Sat Sat Sat Feb Feb Feb Feb 6 10:45:10 2010 6 6 6 6 10:45:29 10:59:19 10:43:32 10:44:52 2010 2010 2010 2010

36049 blocks of size 2097152. 15991 blocks available smb: \> mkdir tototest ## Test en ecriture ## cration dun repertoire tototest smb: \> ls . D 0 Sat Feb 6 17:42:46 2010 .. D 0 Sat Feb 6 10:38:42 2010 .vbox-filostene-ipc DH 0 Sat Feb 6 15:57:05 2010 .esd-112 DH 0 Sat Feb 6 10:45:10 2010 ... tototest D 0 Sat Feb 6 17:42:46 2010 .exchange-filostene DH 0 Sat Feb 6 10:45:29 2010 tmp94W2W_ 2311 Sat Feb 6 10:59:19 2010 .X0-lock HR 11 Sat Feb 6 10:43:32 2010 pulse-ndcZwXzHkHjZ D 0 Sat Feb 6 10:44:52 2010 36049 blocks of size 2097152. 15991 blocks available smb: \> rmdir tototest smb: \> ls . D 0 Sat Feb .. D 0 Sat Feb .vbox-filostene-ipc DH 0 Sat Feb .esd-112 DH 0 Sat Feb ... ## Repertoire tototest nexite plus... .exchange-filostene DH 0 Sat Feb tmp94W2W_ 2311 Sat Feb .X0-lock HR 11 Sat Feb pulse-ndcZwXzHkHjZ D 0 Sat Feb 36049 blocks of size 2097152. 15991 blocks available smb: \>

6 6 6 6

17:42:54 10:38:42 15:57:05 10:45:10

2010 2010 2010 2010

6 6 6 6

10:45:29 10:59:19 10:43:32 10:44:52

2010 2010 2010 2010

## Tentative de connection au partage depuis machine Windows

585

Chapitre 17. SAMBA & OpenLDAP Figure 17-2. Samba : Partage TMP accessible tous depuis Windows

## Depuis le prompt DOS sur la machine Windows ## Connecter le partage comme lecteur rseau... > net use Y: \\Ubuntu\tmp ## or > net use * \\Ubuntu\tmp /USER:titi Drive Y: is now connected to \\Ubuntu\tmp The command completed successfully ## Accder au partage > dir Y: ## OK a marche :)

Des tests de lecture, criture, effacement sur le partage ont t effectu avec succs

586

Chapitre 17. SAMBA & OpenLDAP

17.4.3. Partage avec authentication


Le chier de conguration est complt pour le partage avec authentication :
# Partage accessible uniquement au groupe sambausers [donnees] path = /data/samba/donnees comment = Partage Donnees writeable = yes browseable = yes guest ok = no valid users = @sambausers

Testes :
## Teste configuration $ testparm ... ## Redmarrer le serveur Samba $ /etc/init.d/samba restart ... ## Lister les partages $ smbclient -L ubuntu Enter roots password: Domain=[HOMEUK] OS=[Unix] Server=[Samba 3.4.0] Sharename --------donnees IPC$ ... Type ---Disk IPC Comment ------Partage Donnees IPC Service (Samba 3.4.0)

## Cration du rpertoire partag $ mkdir -p /data/samba/donnees

Il est dsormais possible de se connecter au partage [donnees] avec les utilisateurs appartenant au group sambausers.

17.4.4. Gestion des comptes (Liste, Cration, Suppression)


## Cration du groupe Unix # Group sambausers, gid 513 $ groupadd -g 513 sambausers ## Cration des utilisateurs Unix ## Utilisateur martymac et fred

587

Chapitre 17. SAMBA & OpenLDAP


$ useradd -g sambausers martymac $ useradd fred # martymac devient aussi membre du group sambusers

## Cration des utilisateurs Samba (ajouter au fichier smbpasswd) # smbpasswd -a martymac # -a cre le compte si pas existant # smbpasswd -a fred

Avertissement
Le mot de passe des utilisateurs est demand par smbpasswd ; ce mot de passe sera celui taper depuis le client Windows. Le mot de passe Unix nest pas utilis par Samba. ## Vrification liste des utilisateurs Samba $ pdbedit -L martymac:1001: fred:1002: ## Obtenir des dtails sur les comptes $ pdbedit -vL # Tous les comptes $ pdbedit -v martymac # Compte martymac seulement --------------Unix username: martymac NT username: Account Flags: [U ] User SID: S-1-5-21-3300186961-2405416252-210811175-1000 Primary Group SID: S-1-5-21-3300186961-2405416252-210811175-513 Full Name: Home Directory: \\ubuntu\martymac HomeDir Drive: Logon Script: Profile Path: \\ubuntu\martymac\profile Domain: UBUNTU Account desc: Workstations: Munged dial: Logon time: 0 Logoff time: 9223372036854775807 seconds since the Epoch Kickoff time: 9223372036854775807 seconds since the Epoch Password last set: dim., 07 fvr. 2010 15:30:38 GMT Password can change: dim., 07 fvr. 2010 15:30:38 GMT Password must change: never Last bad password : 0 Bad password count : 0 Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF --------------... ## Test connexion avec Fred $ smbclient //ubuntu/donnees/ -U fred Enter freds password:

588

Chapitre 17. SAMBA & OpenLDAP


Domain=[HOMEUK] OS=[Unix] Server=[Samba 3.4.0] tree connect failed: NT_STATUS_ACCESS_DENIED ## Test connexion avec Martymac ## 1er ssai - KO $ smbclient //ubuntu/donnees/ -U martymac Enter martymacs password: Domain=[HOMEUK] OS=[Unix] Server=[Samba 3.4.0] tree connect failed: NT_STATUS_BAD_NETWORK_NAME

## Vrification des logs pour identifier la raison de lerreur $ cat /var/log/samba/ubuntu.log [2010/02/08 16:41:32, 2] auth/auth.c:310(check_ntlm_password) check_ntlm_password: authentication for user [martymac] -> [martymac] -> [martymac] succe [2010/02/08 16:41:32, 0] smbd/service.c:1009(make_connection_snum) /data/samba/donnees does not exist or permission denied when connecting to [donnees] Err ## Oups jai effectivement oubli de crer le repertoire partag ## dans le systme de fichier ! Une fois fait... ## 2me ssai - OK $ smbclient //ubuntu/donnees/ -U martymac Enter martymacs password: Domain=[HOMEUK] OS=[Unix] Server=[Samba 3.4.0] smb: \> ls . D 0 .. D 0

Mon Feb Mon Feb

8 16:51:16 2010 8 16:51:16 2010

36049 blocks of size 2097152. 15969 blocks available smb: \>

Dans cet example uniquement martymac peut se connecter au partage donnees. Lutilisateur fred, quant lui, ne pourra pas se connecter car il ne dispose pas des droits ncessaires (il nappartient pas au groupe sambausers)
## Suppression dun utilisateur $ smbpasswd -x fred ## Supprime compte Samba de fred $ userdel fred ## Supprime compte Unix de fred

17.4.5. Vrication des logs

$ tail /var/log/samba/ubuntu.log [2010/02/08 16:55:06, 2] smbd/service.c:595(create_connection_server_info) user fred (from session setup) not permitted to access this share (donnees) [2010/02/08 16:55:06, 1] smbd/service.c:676(make_connection_snum) create_connection_server_info failed: NT_STATUS_ACCESS_DENIED [2010/02/08 16:56:32, 2] auth/auth.c:310(check_ntlm_password) check_ntlm_password: authentication for user [martymac] -> [martymac] -> [martymac] succe [2010/02/08 16:56:32, 1] smbd/service.c:1047(make_connection_snum) ubuntu (::ffff:10.0.1.3) connect to service donnees initially as user martymac (uid=1001,

589

Chapitre 17. SAMBA & OpenLDAP


[2010/02/08 16:57:46, 1] smbd/service.c:1226(close_cnum) ubuntu (::ffff:10.0.1.3) closed connection to service donnees

17.4.6. Gestion des droits (li au partage, li au systme de chier)


Garder lesprit quil existe deux types de droits sous Samba : Les droits lis au partage, cest dire les droits lis la connexion sur celui-ci : "qui peut se connecter quoi ?" ont dj t accord via la directive writeable = yes, Les droits sur le systme de chiers (droits Unix) : "qui peut faire quoi une fois connect ?" qui doivent tre accord en plus.
## Droits Unix existant par dfaut $ ls -l /data/samba/ total 4 drwxr-xr-x 2 root root 4096 2010-02-08 16:51 donnees

Note : On voit bien que martymac ne possde aucun droit dcriture sur le rpertoire partag ! Il a donc pu se connecter, Samba lui autorise dcrire ("writeable = yes") au niveau du partage dclar, mais le systme de chiers refuse car lutilisateur martymac Unix ne possde pas les bons droits.

## Donner les droits en criture lutilisateur martymac, ## ou, mieux, au groupe sambausers $ chgrp sambausers /data/samba/donnees $ chmod 775 /data/samba/donnees $ ls -l /data/samba/ total 4 drwxrwxr-x 2 root sambausers 4096 2010-02-08 16:51 donnees

Des tests de lecture, criture, effacement sur le partage ont t effectu avec succs

17.4.7. Options de conguration pour gestion des droits


Samba fournit de nombreuses options pour grer les droits au niveau du partage comme au niveau du systme de chiers lui-mme. Il sera capable de positionner les droits du systme de chiers pour simuler un hritage par exemple.

590

Chapitre 17. SAMBA & OpenLDAP Toutes les directives ci-dessous peuvent tre places au niveau global comme au niveau dun partage. Elles per- mettent de mettre en place une politique de droits relativement ne.

17.4.7.1. Droits au niveau de la connexion (purement "virtuels")

- read only : lecture seule sur un partage (inverse de writeable) ex : read only = yes - valid users : dclare les utilisateurs et groupes autoriss se connecter (inverse de inv ex : valid users = martymac, fred, @sambausers, @autregroupe - force user, force group : force la connexion en tant que lutilisateur ou groupe spcifi ex : force user = martymac - read list, write list : dclare les utilisateurs ou groupes autoriss lire ou crire ex : read list = fred ex : write list = @sambausers - guest ok : autorise la connexion avec un compte invit ex : guest ok = yes - guest only : interdit la connexion avec un compte autre quinvit ex : guest only = yes - guest account : spcifie le compte Unix utiliser lors dune connexion en invit (par df ex : guest account = martymac - map to guest : spcifie quand considrer quun utilisateur est invit ex : map to guest = bad user

17.4.7.2. Droits au niveau du systme de chiers


- create mode : droits placs sur un fichier lors de sa cration ex : create mode = 770 - directory mode : droits placs sur un rpertoire lors de sa cration ex : directory mode = 2770 - security mode : pour un fichier, bits sur lesquels peut agir lutilisateur ex : security mode = 700 - directory security mode : pour un rpertoire, bits sur lesquels peut agir lutilisateur ex : directory security mode = 0700

17.4.8. ACLs (pour gestion de droits plus complexe)


Les administrateurs systmes Unix savent combien il est difcile de grer les droits sur ce type de systme, surtout sil faut mettre en place un ensemble de droits calquant ceux dun serveur Windows (lors dune migration par exemple). En effet, sur un chier, Unix ne gre les droits (rwx) que pour un utilisateur donn, un groupe donn ou "tous les autres utilisateurs et groupes" (ugo).

591

Chapitre 17. SAMBA & OpenLDAP Les ACLs permettent daller plus loin en proposant les mmes droits (rwx) mais pour une liste dutilisateurs ou de groupes donne. Le systme de chiers doit tre compatible et le support des ACLs au niveau de Samba activ.

17.4.9. Limpression et le partage dimprimantes


17.4.9.1. CUPS (Common Unix Printing System)
Source(s):

Web: CUPS (http://www.cups.org) Printing under Linux (http://tldp.org/HOWTO/Printing-Usage-HOWTO-2.html)

Le systme commun dimpression sous Unix (ou CUPS : Common UNIX Printing System(tm)) un service dimpression "nouvelle gnration" destin remplacer les anciens systmes tels LPD. Il prend en charge le protocole dimpression internet (IPP, Internet Printing Protocol) et possde son propre modle de pilotes pour grer divers types de documents.
## Installer CUPS $ apt-get install cupsys cupsys-client foomatic-db

Lecture des listes de paquets... Fait Construction de larbre des dpendances Lecture des informations dtat... Fait foomatic-db est dj la plus rcente version disponible. Les paquets suivants ont t installs automatiquement et ne sont plus ncessaires : linux-backports-modules-alsa-2.6.31-15-generic calendar-timezones Veuillez utiliser apt-get autoremove pour les supprimer. Les NOUVEAUX paquets suivants seront installs : cupsys cupsys-client 0 mis jour, 2 nouvellement installs, 0 enlever et 0 non mis jour. Il est ncessaire de prendre 138ko dans les archives. Aprs cette opration, 221ko despace disque supplmentaires seront utiliss. Rception de : 1 http://archive.ubuntu.com karmic-updates/universe cupsys 1.4.1-5ubuntu2.1 [ Rception de : 2 http://archive.ubuntu.com karmic-updates/universe cupsys-client 1.4.1-5ubun 138ko rceptionns en 0s (227ko/s) Slection du paquet cupsys prcdemment dslectionn. (Lecture de la base de donnes... 239567 fichiers et rpertoires dj installs.) Dpaquetage de cupsys ( partir de .../cupsys_1.4.1-5ubuntu2.1_all.deb) ... Slection du paquet cupsys-client prcdemment dslectionn. Dpaquetage de cupsys-client ( partir de .../cupsys-client_1.4.1-5ubuntu2.1_all.deb) ... Paramtrage de cupsys (1.4.1-5ubuntu2.1) ... Paramtrage de cupsys-client (1.4.1-5ubuntu2.1) ...

Paquets :

592

Chapitre 17. SAMBA & OpenLDAP


cupsys : Ce paquet fournit lordonnanceur / dmon CUPS et les chiers associs. cupsys-client : Ce paquet offre les programmes dimpression clients de type System V. foomatic-db : Ce paquet contient une base de donnes dimprimantes distribue par OpenPrinting pour les pilotes les plus courants.

Les imprimantes sont ensuite dclares en mode RAW via linterface ddie http://localhost:631.
Note : Le mode RAW est important car Samba et CUPS ne vont servir que de relais dimpression. Le driver utilis sera du ct de la machine cliente, si bien que les informations transmises seront dj correctement formates pour limprimante.

17.4.9.2. Conguration et test dimpression


Nayant pas dimprimante physiquement, il mest difcile de tester. Toutefois, sur ma machine windows jai une imprimante virtuelle PDF (PDF995) que jai partage, je vais tenter de my connecter depuis ma machine Unix et de communiquer avec via Samba et CUPS. Dans un premier temps je me contente dune conguration minimum pour le partage dimprimante:

## Ajouter /etc/samba/smb.conf ... [printers] path = /usr/spool/public guest ok = yes printable = yes browseable = yes

$ testparm $ /etc/init.d/samba restart

Ensuite jajoute mon imprimante dans CUPS via un lien Samba smb:// :
## Se Connecter CUPS ## Mot de passe adminsitrateur requis http://localhost:631 1. Onglet Administration 2. Bouton Add Printer 3. Set

593

Chapitre 17. SAMBA & OpenLDAP


Other Network Printers > Windows Printer via Samba 4. Set Connection > smb://192.168.1.100/PDF995 # smb://[workgroup/]server[:port]/printer # 192.168.1.100 : Adresse IP de ma machine Windows # PDF995 : Nom de partage de limprimante sur la machine Windows 5. Name: winPDF Description: winPDF Description Location: Office Connection: smb://192.168.1.100/PDF995 Sharing: (check) Share This Printer 6. Set Make > Raw 8. Set Model > Raw Queue (en) 9. Bouton Set Default Options

Figure 17-3. CUPS : Conguration dimprimante partag depuis Windows

594

Chapitre 17. SAMBA & OpenLDAP Figure 17-4. Samba : Imprimante partag depuis Windows accessibe depuis machine Unix

Figure 17-5. Samba : Rsultat dimpression distant

Cela fonctionne en tant quinvit, essayons maintenant de restreindre laccs tout en prcisant Samba dutiliser CUPS comme systme dimpression.

595

Chapitre 17. SAMBA & OpenLDAP Le chier de conguration est complt pour le partage dimprimante avec authentication :
[ global ] # [...] # Impression printing = cups printcap name = cups load printers = yes # Partage dimprimantes (configures en "raw" sous CUPS) [printers] comment = Partage dimprimantes path = /data/spool printable = yes browseable = yes guest ok = no validusers = @sambausers $ smbclient //ubuntu/winPDF Enter roots password: Domain=[HOMEUK] OS=[Unix] Server=[Samba 3.4.0] tree connect failed: NT_STATUS_ACCESS_DENIED $ smbclient //ubuntu/winPDF -U martymac Enter martymacs password: Domain=[HOMEUK] OS=[Unix] Server=[Samba 3.4.0] smb: \> smb: \> print /var/log/samba/ubuntu.log NT_STATUS_ACCESS_DENIED opening remote file ubuntu.log-11714 smb: \> print /tmp/test.txt NT_STATUS_ACCESS_DENIED opening remote file test.txt-11714 smb: \> print /data/samba/donnees/winPDF queue.png NT_STATUS_ACCESS_DENIED opening remote file winPDF-14435 smb: \> print //ubuntu/donnees/winPDF queue.png NT_STATUS_ACCESS_DENIED opening remote file winPDF-14435 smb: \> print /ubuntu/donnees/winPDF queue.png NT_STATUS_ACCESS_DENIED opening remote file winPDF-14435 smb: \>

Il faudrait procder de la mme manire pour partager une imprimante connect la machine Linux avec les utilisateurs du PC Windows. Nayant pas dimprimante physique, il ne mest pas possible de tester mais le cours est clair sur ce point :)
Note : Il semble quun autre tudiant ait eu des problmes pour physiquement imprimer un document tandis que celui-ci apparat correctement dans la queue dimpression. Il semblerait que cela soit d une imcompatibilit entre limprimante et CUPS ou un problme de pilote de priphrique. Dans ce cas, il faut sassurer de la compatibilit de CUPS avec limprimante, une veille imprimante poscript compatible (tel que HP) est rarement sujet ce type de problme. Il faudrait donc sassurer dune telle compatibilit dans un cas rel. Mais cest hors du sujet de ce cours.

596

Chapitre 17. SAMBA & OpenLDAP

17.4.10. net commande


Source(s):

Web: Shutdown Windows PC from Unix command line (http://prefetch.net/blog/index.php/2009/05/31/shutdown-a-windows-machine-from-the-unixcommand-line/)

## teindre un machine Windows depuis la commande Unix ## username doit tre administrateur de la machine Windows ## Paquet samba-common requis $ net rpc shutdown -I ipAddressOfWindowsPC -U username%password # Redmarrer la machine Windows $ net rpc shutdown -r ... # Abandonner larrt de la machine Windows $ net rpc abortshutdown ...

## Documentation $ man net ## mais aussi... $ net help Usage: net rpc net rap net ads net file net share net session net server net domain net printq net user net group net groupmap net sam net validate net groupmember net admin net service net password net changetrustpw net changesecretpw

Run functions using RPC transport Run functions using RAP transport Run functions using ADS transport Functions on remote opened files Functions on shares Manage sessions List servers in workgroup List domains/workgroups on network Modify printer queue Manage users Manage groups Manage group mappings Functions on the SAM database Validate username and password Modify group memberships Execute remote command on a remote OS/2 server List/modify running services Change user password on target server Change the trust password Change the secret password

597

Chapitre 17. SAMBA & OpenLDAP


net time Show/set time net lookup Look up host names/IP addresses net join Join a domain/AD net dom Join/unjoin (remote) machines to/from a domain/AD net cache Operate on the cache tdb file net getlocalsid Get the SID for the local domain net setlocalsid Set the SID for the local domain net setdomainsid Set domain SID on member servers net getdomainsid Get domain SID on member servers net maxrid Display the maximul RID currently used net idmap IDmap functions net status Display server status net usershare Manage user-modifiable shares net usersidlist Display list of all users with SID net conf Manage Samba registry based configuration net registry Manage the Samba registry net eventlog Process Win32 *.evt eventlog files net help Print usage information Valid targets: choose one (none defaults to localhost) -S or --server=<server> server name -I or --ipaddress=<ipaddr> address of target server -w or --workgroup=<wg> target workgroup or domain Valid miscellaneous options are: -p or --port=<port> connection port on target -W or --myworkgroup=<wg> client workgroup -d or --debuglevel=<level> debug level (0-10) -n or --myname=<name> client name -U or --user=<name> user name -s or --configfile=<path> pathname of smb.conf file -l or --long Display full information -V or --version Print samba version information -P or --machine-pass Authenticate as machine account -e or --encrypt Encrypt SMB transport (UNIX extended servers only) -k or --kerberos Use kerberos (active directory) authentication $ net help rpc Usage: net rpc audit Modify global audit settings net rpc info Show basic info about a domain net rpc join Join a domain net rpc oldjoin Join a domain created in server manager net rpc testjoin Test that a join is valid net rpc user List/modify users net rpc password Change a user password Alias for net rpc user password

598

Chapitre 17. SAMBA & OpenLDAP


net rpc group List/modify groups net rpc share List/modify shares net rpc file List open files net rpc printer List/modify printers net rpc changetrustpw Change trust account password net rpc trustdom Modify domain trusts net rpc abortshutdown Abort a remote shutdown net rpc shutdown Shutdown a remote server net rpc samdump Dump SAM data of remote NT PDC net rpc vampire Sync a remote NT PDCs data into local passdb net rpc getsid Fetch the domain sid into local secrets.tdb net rpc rights Manage privileges assigned to SID net rpc service Start/stop/query remote services net rpc registry Manage registry hives net rpc shell Open interactive shell on remote server $ net help rpc printer Usage: net rpc printer List printers net rpc printer list List all printers on print server net rpc printer migrate Migrate printer to local server net rpc printer driver List printer drivers net rpc printer publish Publish printer in AD

599

Chapitre 17. SAMBA & OpenLDAP

17.5. LDAP : Prsentation


Source(s):

OF: SR013-ch00-planetude.txt (docs/eof/sr012-ch00-planetude.txt) SR013-ch01_pagedegarde.pdf (docs/eof/sr013-ch01_pagedegarde.pdf) SR013-ch02_presentation.pdf (docs/eof/sr013-ch02_presentation.pdf)

17.6. LDAP : Concepts


Source(s):

OF: SR013-ch03_part1-concepts.pdf (docs/eof/sr013-ch03_part1-concepts.pdf) Web: Le protocole LDAP (CCM) (http://www.commentcamarche.net/contents/internet/ldap.php3) LDAP (Inria) (http://www-sop.inria.fr/members/Laurent.Mirtain/ldap-livre.html) Lightweight Directory Access Protocol (Wikipdia) (http://fr.wikipedia.org/wiki/Lightweight_Directory_Access_Protocol) Liste de Serveur et Client LDAP (http://fr.wikipedia.org/wiki/Lightweight_Directory_Access_Protocol#Serveurs_LDAP)

17.6.1. Liste des principaux annuaires LDAP existant sur le march


- OpenLDAP : http://www.openldap.org - Apache Directory Server : http://directory.apache.org - Sun (One/Java) Directory Server : http://www.sun.com - Active Directory : http://www.microsoft.com ...

17.6.2. Caractristiques communes aux annuaires

- Un annuaire prsente un ensemble dfini de donnes (annuaire : nom, prnom, numro de tl adresse) - Il organise ces donnes (annuaire : classes par dpartement, villes, nom) - Il offre un service de consultation (annuaire : diffusion au format papier) - Il peut protger les donnes (annuaire : liste rouge) - Il est plus consult que mis jour - Il est disponible de manire permanente

600

Chapitre 17. SAMBA & OpenLDAP Sur un annuaire, les critures sont plus rares que les lectures, ce qui nest pas forcment le cas pour un SGBD. Un annuaire nest pas fait pour stocker des informations constamment en mouvement. Un annuaire fournit une mthode de consultation standardise, ce qui nest pas le cas dun SGBD. Un annuaire LDAP organisent les donnes de manire arborescente, tandis que les bases de donnes le font au sein de tableaux deux dimensions. Un annuaire fournit des modles de donnes standardiss. Alors que le modle conceptuel de donnes (que stocker, o et comment ?) dun SGBD peut varier dune base lautre. Les caractristiques et fonctionnalits de lannuaire LDAP sont regroupes sous la forme de quatre modles :
Le Le Le Le modle modle modle modle

de nommage : dfinit comment linformation est stocke et organise fonctionnel : dfinit les services fournis par lannuaire (recherche, ajout. . . dinformation : dfinit le type dinformations stockes de scurit : dfinit les droits daccs aux ressources

17.6.3. Protocole LDAP et versions


"Lightweight Directory Access Protocol" (LDAP) est un protocole qui sert prsenter des informations. Un serveur LDAP agit en tant quintermdiaire entre une source de donnes et un client. LDAP dnit la mthode daccs aux donnes sur le serveur au niveau du client, et non la manire de laquelle les informations sont stockes. LDAP fonctionne sur le port TCP 389 (par dfaut). Le protocole LDAP en est actuellement la version 3 et a t normalis par lInternet Engineering Task Force (IETF) (http://www.ietf.org/). RFC 1777 (http://www.ietf.org/rfc/rfc1777.txt) (Standard LDAP v.2) et RFC 2251 (http://www.ietf.org/rfc/rfc2251.txt) (Standard LDAP v.3) constituent les documents de rfrence. LDAP fournit lutilisateur des mthodes (fonctions, procdures) lui permettant deffectuer des requtes sur les donnes an de rechercher, modier, effacer des entres dans les rpertoires. Le protocole LDAP (version 3) propose en plus des mcanismes de chiffrement (SSL, ...) et dauthentication (SASL) permettant de scuriser laccs aux informations stockes dans la base.

601

Chapitre 17. SAMBA & OpenLDAP

17.6.4. Organisation des donnes (modle de nommage)


17.6.4.1. Arborescence dinformations hirarchique (DIT) & Terminologie (DSE, root DN, rootDSE)
Figure 17-6. LDAP : Arborescence dinformations hirarchique (DIT)

Les donnes LDAP sont structures dans une arborescence dinformation hirarchique, appel Directory Information Tree (DIT), quon peut comparer au systme de chier Unix. Chaque noeud (et feuille) de larbre correspond une entre de lannuaire ou directory service entry (DSE) et au sommet de cette arbre, se trouve la racine (root ou root DN) ou sufxe. Les entres (noeuds ou feuilles) correspondent des objets abstraits ou issus du monde rel, comme une personne, une machine, une imprimante, ou des paramtres de conguration. Chaque entre est constitue dun ensemble de paires cls/valeurs appeles attributs. Chaque serveur possde une entre spciale, appele root directory specic entry (rootDSE) qui contient la description de larbre et de son contenu.

602

Chapitre 17. SAMBA & OpenLDAP

17.6.5. Donnes contenues dans lannuaire (modle dinformation)


17.6.5.1. Attributs des entres & Terminologie (DN, RDN, OU...)
Chaque entre (noeuds ou feuilles) est constitue dun ensemble dattributs (paires cl/valeur) permettant de caractriser lobjet que lentre dnit. Il existe deux types dattributs :
* Les attributs normaux : Attributs habituels (nom, prnom, ...) caractrisant lobjet * Les attributs oprationnels: Attributs auxquels seul le serveur peut accder afin de manipuler les donnes de lannuaire (dates de modification, ...)

Les attributs sont caractriss par :


* Un nom qui lidentifie * Un Object Identifier (OID) qui lidentifie galement * Sil est mono ou multi-valu * Une syntaxe et des rgles de comparaison : indique le type de donnes associes lattribut et la manire dont lannuaire doit comparer les valeurs lors dune recherche * Un indicateur dusage * Un format ou une limite de taille de valeur qui lui est associe

Une entre est indexe par un nom complet, ou nom distinct, Distinguished Name (DN), permettant didentier de manire unique un lment de larborescence. Un DN se construit en prenant le nom de llment, appel Relative Distinguished Name (RDN), cest--dire le chemin de lentre par rapport un de ses parents, et en lui ajoutant lensemble des nom des entres parentes. Il sagit dutiliser une srie de paires cl/valeur permettant de reprer une entre de manire unique.
Note : Le RDN est dni par un ou plusieurs attributs de lentre. Il est conseill, pour une entre de type posixAccount, dutiliser les attributs uid ou cn (cf. RFC 2307 (http://www.ietf.org/rfc/rfc2307.txt)).

603

Chapitre 17. SAMBA & OpenLDAP

Les DN de chaque entres sont composs au moins dun attribut de llment (par exemple "cn" ou "uid") et de sa valeur. Un attribut est lune des caractristiques de cet lment. Voici une srie de cls gnralement utilises :
* * * * * * * * uid (userid) : cn (common name) : givenname : sn (surname) : o (organization) : u (organizational unit) : mail : ... identifiant unique obligatoire nom de la personne prnom de la personne surnom de la personne entreprise de la personne service de lentreprise dans laquelle la personne travaille adresse de courriel de la personne

Lattribut OU constitue une Organisational Unit, cest dire une unit organisationnelle : en quelque sorte un regroupement (Par example: "users" pour accueillir des utilisateurs, "groups" pour des groupes, "direction X", "divisionX", etc...)
## Examples - DN : "uid=jeapil,cn=pillou,givenname=jean-francois" "cn=ventes,ou=groups,dc=martymac,dc=com" - RDN : "uid=jeapil" "uid=martymac" "cn=ventes" ## Compos du nom de domaine ## o est hberg notre serveur LDAP

- root DN : "dc=martymac,dc=com"

- OU

: "ou=groups"

## Entre LDAP (format LDIF -> attribut: valeur) dn: uid=martymac,ou=users,dc=martymac,dc=com ## nom unique de lentre dans larbre objectClass: account objectClass: posixAccount cn: martymac uid: martymac uidNumber: 10001 gidNumber: 10001 homeDirectory: /home/martymac userPassword:: e0NSWVBUfWJjT29IUk5SbG1HbC4= loginShell: /bin/sh gecos: martymac description: martymac

604

Chapitre 17. SAMBA & OpenLDAP


Note : Sur un annuaire LDAP la racine est toujours compose des attributs "dc" (Domain Component) associs chacune des parties du nom de domaine o est hberg le serveur ("dc=martymac,dc=com" pour le domaine martymac.com). Ceci est une convention. X500 prconisait les attributs "o", "l" et "c", mais LDAP a simpli le procd (cf. RFCs 2247 (http://www.ietf.org/rfc/rfc2247.txt), 4519 (http://www.ietf.org/rfc/rfc4519.txt), 4524 (http://www.ietf.org/rfc/rfc4524.txt)).

17.6.5.2. Rgles de nommage


La RFC 2253 (http://www.ietf.org/rfc/rfc2253.txt) (rendue obsolte par la RFC 4514 (http://www.ietf.org/rfc/rfc2253.txt)) normalise lcriture des DN et conseille de ne pas ajouter despaces autour du signe "=", ni la n du DN .

Avertissement
Attention, mme si la syntaxe de lattribut autorise les espaces (ex: uid=richard leger), il est fortement dconseill de le faire pour lattribut uid. Lors dune connexion dun systme UNIX lannuaire, il nest pas sr que les espaces soient bien vus. Cela peut tre tester ceci dit, mais a risque, tout du moins, dtre source derreurs.

17.6.5.3. Schmas
Les schmas sont lensemble des dnitions dobjets et dattributs quun serveur LDAP peut grer. Chaque schma dcrit les classes dobjets, leurs types dattributs et leur syntaxe. Cela permet par exemple de dnir si un attribut peut possder une ou plusieurs valeurs. Dautre part, un attribut nomm objectclass permet de dnir les attributs tant obligatoires ou facultatifs... Un annuaire LDAP a la capacit de charger en mmoire plusieurs schmas. travers ces schmas, il est possible de dnir de nouveaux attributs et de nouveaux objectClass. Cette souplesse permet de dnir trs nement ce qui sera stock dans notre annuaire. Concrtement, un schma est un chier qui dcrit un un les attributs disponibles (leur nom, leur type, etc...), ainsi que les objectClass qui y font appel. Au dmarrage du serveur LDAP, le ou les chiers de schma spcis dans sa conguration seront chargs. Par exemple, lobjectClass posixAccount est dni dans le chier nis.schema. Ce chier, livr avec OpenLDAP et situ dans /etc/ldap/schema :
# [...]

605

Chapitre 17. SAMBA & OpenLDAP


## Dfinition dun attribut utilis par le posixAccount attributetype ( 1.3.6.1.1.1.1.0 NAME uidNumber DESC An integer uniquely identifying a user in a domain EQUALITY integerMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) # [...] ## Dfinition de lobjectclass posixAccount objectclass ( 1.3.6.1.1.1.2.0 NAME posixAccount SUP top AUXILIARY DESC Abstraction of an account with POSIX attributes MUST ( cn $ uid $ uidNumber $ gidNumber $ homeDirectory ) MAY ( userPassword $ login Shell $ gecos $ description )) # [...]

chaque dnition correspond un Object IDentier (OID), qui permet de rendre unique lattribut spci. Ces OIDs sont dposs auprs de lIANA (http://www.iana.org) et sont donc ofciels. Un attribut dnit un type dgalit mettre en oeuvre lors dune recherche (ici, intergerMatch) ainsi que le type de donnes quil contient (lOID spci aprs SYNTAX). Un objectClass dnit les attributs que lobjet doit prsenter (MUST) et ceux quil peut possder (MAY).
Note : Les schmas constituent une source dinformation trs importante. En cas de doute concernant le type ou le nom des attributs spcier dans une entre, nhsitez pas vous y reporter !

Note : Il est possible de crer ses propres schmas, cependant, penser rutiliser les schmas existants.

17.6.5.4. Les classes dobjets


LobjectClass dune entre est un attribut qui permet de cataloguer cette entre. Un objectClass dnit un regroupement dattributs obligatoires ou autoriss pour une entre. Une entre peut possder un ou plusieurs objectClass. Ce sont ces objectClass qui dnissent la prsence de tous les autres attributs.

606

Chapitre 17. SAMBA & OpenLDAP Par example, lobjectClass "posixAccount" rend obligatoires (MUST) les attributs cn, uid, uidNumber, gidNumber et homeDirectory. Il rend possible (MAY) lutilisation des 4 autres attributs userPassword, loginShell, gecos et description. Pour savoir quels sont les objectClass disponibles et quels attributs ils contiennent, cest trs simple, il suft de consulter les schemas. La syntaxe et la liste des attributs connus de lannuaire y sont crits dedans.

17.6.6. Accder lannuaire (modle fonctionnel)


17.6.6.1. Liste des principales oprations que LDAP peut effectuer
#Opration #Description * start TLS : utilisation de la couche Transport Layer Security (TLS) pour scuriser la connexion bind : se connecter (dmarrer session LDAP) * ubind : se dconnecter (terminer session LDAP) * : rechercher des informations * search : comparer des informations selon des critres * compare : insrer/ajouter des entres * add : modifier des entres * rename : supprimer des entres * delete : abandonne lopration prcdemment envoyes au serveur * abandon * extended : effectue des oprations tendues

17.6.6.2. La base (noeud dpart de recherche)


La base est le DN partir duquel nous allons agir. Pour une recherche, il sagir du nud partir duquel est effectue la recherche. Il peut sagir de la racine de larbre pour une recherche sur la totalit de larbre, par exemple "dc=martymac,dc=com".

17.6.6.3. La porte (scope - profondeur)


La porte (scope) est le nombre de niveaux sur lesquels laction va tre effectue. Il existe 3 niveaux diffrents :
- SUB - ONE : laction est effectue rcursivement partir de la base spcifie sur la totalit de larborescence. : laction est effectue sur un seul niveau infrieur par rapport la base spcifie (les fils directs). Si lon effectuait une recherche avec la porte

607

Chapitre 17. SAMBA & OpenLDAP


ONE partir de "dc=martymac,dc=com", nous pourrions trouver "ou=users,dc=martymac,dc=com" et "ou=groups,dc=martymac,dc=com". - BASE : laction est effectue uniquement sur la base spcifie. Une recherche sur "dc=martymac,dc=com" avec la porte BASE renverrait cette entre uniquement.

17.6.6.4. Les ltres (Critre de recherche)


Le troisime outil notre disposition est le ltre. Un ltre va permettre deffectuer des tests de correspondance lors dune recherche. Il sagit en quelques sortes du critre de la recherche. Il existe 4 tests basiques, qui peuvent ensuite tre combins :
X=Y X<=Y X>=Y X=Y : : : : galit infriorit supriorit approximation

Les autres oprateurs (<, >) ou des tests plus complexes peuvent tre mis en place par combinaison Il faut alors utiliser les parenthses ( ) et lun des oprateurs suivants :
- & (ET ) : intersection - | (OU ) : union - ! (NON ) : ngation ## Examples (&(X<=Y)(!(X=Y))) ## test dinfriot stricte (&(X=Y)(Y=Z)(A=B)(B=C)(!(C=D))) ## combine plus de deux lments

Ces ltres seront appliqus sur des attributs choisis pour slectionner nement les donnes que nous voulons extraire de notre annuaire.

17.6.6.5. URI (ldap://)


Il existe un format dURI LDAP (ou URL), mais tous les clients ne le prennent pas en charge. Les serveurs lutilisent pour indiquer aux clients les rfrences vers dautres serveurs.

608

Chapitre 17. SAMBA & OpenLDAP Rcemment apparue, cest une mthode concise et simplie pour interroger un annuaire LDAP. En une seule ligne, il est possible de spcier tous les lments de notre requte. Le format de cette URI est dnit dans la RFC 2255 (http://www.ietf.org/rfc/rfc2255.txt), rendue obsolte par la RFC 4516 (http://www.ietf.org/rfc/rfc4516.txt) La syntaxe est la suivante :

ldap[s]://serveur[:port][/[base[?[attributs afficher][?[porte][?[filtre][?extensions]]]]] ## En plus court :) ldap://hte:port/DN?attributs?profondeur?filtre?extension * * * * * DN (Base) attributs profondeur filtre extension : : : : : le DN partir duquel effectuer la recherche ; liste contenant les attributs renvoyer, spars par des virgules ; base (par dfaut), one ou sub pour la profondeur de la recherche ; le filtre de recherche ; extensions ventuelles du format dURL LDAP.

Avertissement
Comme dans tous les URI, les caractres spciaux doivent tre chapps en suivant lalgorithme prvu par la RFC 3986 (http://www.ietf.org/rfc/rfc3986.txt). ## Examples ldap://ldap.example.com/cn=John%20Doe,dc=example,dc=com #=> retourne tous les attributs de lentre John Doe ldap:///dc=example,dc=com??sub?(givenName=John) #=> recherche lentre ayant comme prnom John partir de la racine.

17.6.6.6. Le format dchange de donnes LDIF


LDAP fournit un format dchange Lightweight Data Interchange Format (LDIF) (RFC 2849 (http://www.ietf.org/rfc/rfc2849.txt)) permettant dimporter et dexporter les donnes dun annuaire avec un simple chier texte. La majorit des serveurs LDAP supportent ce format, ce qui permet une grande interoprabilit entre eux. Toute intraction avec un annuaire se fait par le biais de ce format : lajout, la modication, la suppression dentres, linterrogation de lannuaire y compris.

609

Chapitre 17. SAMBA & OpenLDAP Dans ce format, chaque entre constitue un paragraphe, et, au sein de chaque paragraphe, chaque ligne constitue un attribut :
## Syntaxe du format [<id>] dn: <distinguished name> <attribut> : <valeur> <attribut> : <valeur> ... * id est facultatif, identificateur de lentre dans la base de donnes. * chaque entre doit tre spare de la prcdente laide dun saut de ligne (ligne vide) * Dfinir un attribut sur plusieurs lignes en commenant les lignes suivantes par un espace ou un tabulation * Dfinir plusieurs valeurs pour un attribut en rptant la chane nom:valeur sur des lignes spares * lorsque la valeur contient un caractre spcial (non imprimable, un espace ou :), lattribut doit tre suivi de :: puis de la valeur encode en base64

## Example dn: cn=utilisateurs,ou=groups,dc=martymac,dc=com objectClass: posixGroup cn: utilisateurs gidNumber: 10001 dn: uid=martymac,ou=users,dc=martymac,dc=com objectClass: account objectClass: posixAccount cn: martymac uid: martymac uidNumber: 10001 gidNumber: 10001 homeDirectory: /home/martymac userPassword:: e0NSWVBUfWJjT29IUk5SbG1HbC4= loginShell: /bin/sh gecos: martymac description: martymac

## Description du groupe

## Nom unique de lentre dans larbre

17.6.7. La scurit (modle de scurit)


Lorsquon mets en place un annuaire dentreprise, il convient de rchir au modle de scurit que lon souhaite appliquer. LDAP fournit plusieurs mcanismes :
1. Lauthentification simple (binding) 2. Les Access Control Lists (ACLs) : interviennent aprs la notion de binding. Donner des droits de lecture, dcriture (ou dautres droits divers)

610

Chapitre 17. SAMBA & OpenLDAP


sur des branches particulires de lannuaire au compte connect. 3. Le chiffrement des communications (via SSL/TLS) 4. Simple Authentication and Security Layer (SASL) : mcanisme permettant dajouter des mthodes dauthentification des protocoles orients connexion tels que LDAP ou IMAP.

17.6.8. Concepts avancs (Rplication, distribution, etc...)


Rplication, distribution (les referrals), etc... pour plus dinfo, se rfrer au document de lcole Ouverte Francophone (OF).

17.7. SAMBA en tant que contrleur de domaine


Source(s):

OF: SR012-ch05_part3-controlededomaine.pdf (docs/eof/sr012-ch05_part3-controlededomaine.pdf) Web: Samba Controleur de Domaine (http://www.adella.org/spip/Samba-en-Controleur-de-Domaine)

17.7.1. Les tapes en bref :)


1. Editer le chier de conguration de Samba : - Paramtres globaux - Partages (Home, Prole, Netlogon, Printers, etc...) 2. Cration des utilisateurs et groupes Unix 3. Cration des rpertoires nouvellement partags dans le systme de chier Unix 4. Affectation des droits sur les repertoires et chiers Unix 5. Corrler les groupes Unix avec les groupes NT en ajoutant des entres la table groupmap 6. Ajouter des utilisateurs Unix dans le domaine (compte Samba) 7. Ajouter les stations de travail

611

Chapitre 17. SAMBA & OpenLDAP

17.7.2. A propos des SIDs


Dans le cadre de linstallation de Samba en tant que contrleur de domaine, je suis tomb sur ces articles dactualit propos des SID de machine Windows. Comme on en parle dans cet partie du cours, jai pens que a pourrait intresser quelquun dautre loccasion... :) NewSID Retirement and the Machine SID Duplication Myth (http://blogs.technet.com/markrussinovich/archive/2009/11/03/3291024.aspx) : Le premier donne quelques explications technique sur les SIDs et leur utilisations ainsi que des utilitaires pour les afcher dans une machine Windows :) Les commentaires sont intressants quand au mythe expos par lauteur que je laisserais les plus curieux dcouvrir sil le souhaite :) Sysprep, Machine SIDs and Other Myths (http://blogs.technet.com/deploymentguys/archive/2009/12/03/sysprep-machine-sids-and-othermyths.aspx) : Le deuxime est une explication sur Sysprep comme outils prfrer (il est expliqu pourquoi) pour le clonage de machine Windows, utile pour cloner des machines virtuelles ou des installation sur un grand nombre de machines. Loin de moi lide de promouvoir Windows ou ses systmes complexes mais simplement intressant dun point de vu de connaissance gnral...et peut-tre utile pour tester ou installer des environnements mixtes. Maintenant il serait intressant de voir comment cela se passe sous Linux pour comparer. A voir plus tard peut-tre mais jimagine quune simple installation silencieuse via le rseau ferait bien laffaire avec un systme de script post-conguration :) Si quelquun a un bon article sur cette question ou une exprience en la matire (clonage de machine Linux), je suis preneur de quelques infos... Le mythe du SID sur Windows (http://oliviernguyen.blogspot.com/2009/12/le-mythe-du-sid-sur-windows.html) : Le troisime, est un bref rsum en Franais des deux articles (pour ceux qui lirait pas bien langlais) mais il ne donne pas de dtail technique sur les SIDs comme le premier... Voil cetait simplement pour lchange et faire partager ma dcouverte...

17.7.3. Conguration de Samba en tant que PDC


Le chier de conguration est modi pour que Samba deviennne le contrleur du domaine :
[global] #----6:Contrleur de domaine # Nom du workgroup ou du domaine

612

Chapitre 17. SAMBA & OpenLDAP


workgroup = domaineuk # Nom netbios de la machine netbios name = ubuntu # Contrleur du domaine activ os level = 65 domain logons = yes # Collecteur de liste de machines pour le domaine domain master = yes # Collecteur de liste de machines pour le rseau local master = yes # Matre preferred master = yes # Active support Wins wins support = yes #-----2:Autonome # Base de donnee de comptes passdb backend = tdbsam:/var/lib/samba/mypassdb.tdb # [...] La suite du fichier reste identique

## Vrifier la syntaxe de configuration $ testparm Load smb config files from /etc/samba/smb.conf Processing section "[donnees]" Processing section "[printers]" Loaded services file OK. Server role: ROLE_DOMAIN_PDC Press enter to see a dump of your service definitions [global] workgroup = DOMAINEUK netbios name = UBUNTU map to guest = Bad User passdb backend = tdbsam:/var/lib/samba/mypassdb.tdb log level = 2 log file = /var/log/samba/%m.log time server = Yes printcap name = cups domain logons = Yes os level = 65 preferred master = Yes domain master = Yes wins support = Yes

613

Chapitre 17. SAMBA & OpenLDAP


veto files = /lost+found/.recycle/ [donnees] comment = Partage Donnees path = /data/samba/donnees valid users = @sambausers read only = No [printers] comment = Partage dimprimantes path = /data/spool valid users = @sambausers printable = Yes browseable = No

17.7.4. Les partages spciques (homes, netlogon, proles)


Un contrleur de domaine se doit de disposer de certains partages de base : [homes] contenant les rpertoires personnel (home) des utilisateurs. [netlogon] contenant les scripts de connexion (netlogon) excuts par les machines clientes la connexion des utilisateurs sur le domaine. [proles] contenant les prols itinrants des utilisa- teurs pour stocker leur paramtre de conguration (bureau, fond dcran, les prfrences internet, etc...). Les partages suivants notre chier de conguration contrleur du domaine :
# Partages Homes [homes] path = /data/samba/home/%u comment = Repertoires Homes valid users = %S

# %u Nom dutilisateur (Unix) du service # # # # # # # # # # # # # %S Le nom du service courant par exemple le nom du partage accs au partage uniquement aux personnes ayant un login correspondant au nom du partage pas daccs au compte invit modifiable par lutilisateur autoris Masque de droits lorsquun fichier est cr Accs accord lutilisateur propritaire uniquement Masque de droits lorsquun dossier est cr Accs accord lutilisateur propritaire uniquement partage cach

guest ok = no writeable = yes create mode = 0700

directory mode = 2700

browseable = no

614

Chapitre 17. SAMBA & OpenLDAP

# Partage Netlogon - lectureseule [netlogon] path = /data/samba/netlogon # comment = Partage Netlogon guest ok = no # read only = yes # browseable = no # valid users = @sambausers #

Repertoire des scrips de dmarrage pas daccs au compte invit lecture seule pour tous les autres partage cach accs accorder aux membres du groupe

# Partage Profiles [profiles] path = /data/samba/profiles comment = Repertoires Profiles guest ok = no writeable = yes create mode = 0700

# Repertoires des profiles # # # # # # # pas daccs au compte invit modifiable par lutilisateur autoris Masque de droits lorsquun fichier est cr Accs accord lutilisateur propritaire uniquement partage cach accs accorder aux membres du groupe

browsable = no validusers = @sambausers

On teste :
$ testparm Load smb config files from /etc/samba/smb.conf Processing section "[donnees]" Processing section "[printers]" Processing section "[homes]" Processing section "[netlogon]" Processing section "[profiles]" Loaded services file OK. Server role: ROLE_DOMAIN_PDC Press enter to see a dump of your service definitions [global] workgroup = DOMAINEUK netbios name = UBUNTU map to guest = Bad User passdb backend = tdbsam:/var/lib/samba/mypassdb.tdb log level = 2 log file = /var/log/samba/%m.log time server = Yes printcap name = cups domain logons = Yes os level = 65 preferred master = Yes domain master = Yes

615

Chapitre 17. SAMBA & OpenLDAP


wins support = Yes veto files = /lost+found/.recycle/ [donnees] comment = Partage Donnees path = /data/samba/donnees valid users = @sambausers read only = No [printers] comment = Partage dimprimantes path = /data/spool valid users = @sambausers printable = Yes browseable = No browsable = No [homes] comment = Repertoires Homes path = /data/samba/home/%u valid users = %S read only = No create mask = 0700 directory mask = 02700 browseable = No browsable = No [netlogon] comment = Partage Netlogon path = /data/samba/netlogon valid users = @sambausers browseable = No browsable = No [profiles] comment = Repertoires Profiles path = /data/samba/profiles valid users = @sambausers read only = No create mask = 0700 browseable = No browsable = No

Cration des rpertoires nouvellement partags :


$ mkdir -p /data/samba/home $ mkdir -p /data/samba/netlogon $ mkdir -p /data/samba/profiles

616

Chapitre 17. SAMBA & OpenLDAP Et de leur attribuer le(s) bon(s) groupe(s) et droits daccs Unix :
$ chgrp sambausers /data/samba/home $ chgrp sambausers /data/samba/netlogon $ chgrp sambausers /data/samba/profiles $ chmod 775 /data/samba/home $ chmod 775 /data/samba/profiles $ chmod 555 /data/samba/netlogon # Lecture/Ecriture # Lecture/Ecriture # Lecture seule

Cration du rpertoire home de lutilisateur martymac :


$ mkdir -p /data/samba/home/martymac $ chown martymac:sambausers /data/samba/home/martymac $ chmod 700 /data/samba/home/martymac # Lecture/Ecriture pour martymac seulement

Cration dun script de dmarrage pour notre utilisateur martymac :


$ cat > /data/samba/netlogon/martymac.cmd << EOF > @echo off > @NET USE J: \\ubuntu\donnees # qui connectera automatiquement son lecteur J: # au partage "donnes" lors de son logon # sur le domaine > @echo on > EOF

617

Chapitre 17. SAMBA & OpenLDAP

Avertissement
Attention au dtail un peu gnant... Si le script de login est crit avec vim et est ensuite interprt par Windows, ce dernier ne gre pas les ns de ligne, retour la ligne... de la mme manire quUnix.

Bref lexcution du script choue alors quune connexion manuelle du lecteur russie (sur le partage [donnees], le HomeDir est ok).

Il est possible de grer ce phnomne de plusieurs manires :


## Depuis VIM set fileformat=dos

## Via une commande Perl ## pratique si on a plein de fichier traiter. ## Source : http://home.arcor.de/36bit/samba.html#4.7 (http://home.arcor.de/36 cat fichier_unix | perl -e while (<>) {$_ =~s/$/\015/; print $_} > fichier_d # Explication de la commande : #-dite le fichier avec cat, redirige le flux vers linterprteur Perl #-"while (<>)" lit le flux (ligne ligne), tant quil y a une ligne lire #-Remplace dans la ligne actuelle les fins de ligne ($) par "\015" #-crit la ligne sur la sortie standard (print $_) vers le fichier_dos. ## Sous Unix, aprs dition du fichier unix2dos <fichier> # La commande doit tre installe, elle est contenu # dans un mta package tel que tofrodos... ## Pour vrifier : cat -e <fichier> # ou $ hd fichier # hexdump, a te permettra de voir le ou # les caractres de fin de ligne utiliss.

Attribution des bons droits :


# chown martymac:sambausers /data/samba/netlogon/martymac.cmd # chmod 444 /data/samba/netlogon/martymac.cmd # Lecture seule

Redmarrage de Samba :
$ /etc/init.d/samba restart * Stopping Samba daemons * Starting Samba daemons

[ OK ] [ OK ]

618

Chapitre 17. SAMBA & OpenLDAP

Questions/Rponses 1. Est-il possible dutiliser un script de login commun pour tous les utilisateurs ? OUI, il suft de remplacer %U.cmd par monscript.cmd dans la conguration de Samba... en veillant ce que tous les utilisateurs aient bien accs en lecture au script en question. 2. Est-il possible dans le script de logon dutiliser les variables denvironement Windows (%USERNAME%) ou Samba(%u) ou les deux ? Uniquement Windows. Comme on peut le deviner, un tel script est tlcharg, puis excut ct client... 3. Est-il possible dutiliser du VB script pour crire le script.cmd puisquil est interpret uniquement par les clients windows... Non test, mais a devrait marcher.

17.7.5. Gestion des comptes utilisateurs


La commande pdbedit permet de lister les informations dtailles de chacun des comptes du domaine.
$ pdbedit Utilisation: [OPTION...] -L, --list -v, --verbose -w, --smbpasswd-style -u, --user=USER -N, --account-desc=CHAINE -f, --fullname=CHAINE -h, --homedir=CHAINE -D, --drive=CHAINE -S, --script=CHAINE -p, --profile=CHAINE -I, --domain=CHAINE -U, --user SID=CHAINE -M, --machine SID=CHAINE -a, --create -r, --modify -m, --machine -x, --delete -b, --backend=CHAINE -i, -e, -g, -y, --import=CHAINE --export=CHAINE --group --policies

--policies-reset -P, --account-policy=CHAINE

list all users be verbose give output in smbpasswd style use username set account description set full name set home directory set home drive set logon script set profile path set a users domain set user SID or RID set machine SID or RID create user modify user account is a machine account delete user use different passdb backend as default backend import user accounts from this backend export user accounts to this backend use -i and -e for groups use -i and -e to move account policies between backends restore default policies value of an account policy (like

619

Chapitre 17. SAMBA & OpenLDAP


maximum password age) set the account policy to this value Values of account control Force initialization of corrupt password strings in a passdb backend reset bad password count reset logon hours The time format for time parameters get password from standard in

-C, --value=LONG -c, --account-control=CHAINE --force-initialized-passwords -z, --bad-password-count-reset -Z, --logon-hours-reset --time-format=CHAINE -t, --password-from-stdin Help options: -?, --help --usage Common samba options: -d, --debuglevel=DEBUGLEVEL -s, --configfile=CONFIGFILE -l, --log-basename=LOGFILEBASE -V, --version

Show this help message Display brief usage message

Set debug level Use alternate configuration file Base name for log files Print version

Lister les utilisateurs :


$ pdbedit -L martymac:1001:

Lister les informations pour notre utilisateur martymac :


$ pdbedit -v martymac Unix username: NT username: Account Flags: User SID: Primary Group SID: Full Name: Home Directory: HomeDir Drive: Logon Script: profile Path: Domain: Account desc: Workstations: Munged dial: Logon time: Logoff time: Kickoff time: Password last set: Password can change: Password must change: Last bad password : Bad password count :

martymac [U ] S-1-5-21-3300186961-2405416252-210811175-1000 S-1-5-21-3300186961-2405416252-210811175-513 \\ubuntu\martymac

\\ubuntu\martymac\profile UBUNTU

0 9223372036854775807 9223372036854775807 dim., 07 fvr. 2010 dim., 07 fvr. 2010 never 0 0

seconds since the Epoch seconds since the Epoch 15:30:38 GMT 15:30:38 GMT

620

Chapitre 17. SAMBA & OpenLDAP


Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

La commande net user INFO permet aussi dobtenir des informations sur les utilisateurs du domaine :
$ net user INFO martymac Enter roots password: None # Aucune information disponible # pour le moment ;-)

17.7.6. Le mapping de groupes et le rle des RIDs


NT prdnit certains comptes et groupes par dfaut, en leur attribuant des RID particuliers, synonymes dun rle particulier sur le domaine, les Well Known RIDs (http://www.samba.org/samba/docs/man/Samba-HOWTO-Collection/groupmapping.html#WKURIDS). Il est ncessaire pour un contrleur Samba de r-utiliser ces RIDs pour les comptes du domaine. Ces RIDs particuliers sont notamment importants au niveau des groupes des utilisateurs. Ainsi, pour que les utilisateurs du groupe sambausers soient des "utilisateurs du domaine" (RID=513) au sens Windows du terme, il va falloir explicitement lindiquer Samba. De mme, nous aurons besoin, pour les comptes de machines, dun groupe sambamachines, correspondant au groupe "machines du domaine" (RID=515). La commande net groupmap permet de grer les corrlations de groupe :
## Commandes disponibles $ net help groupmap Usage: net groupmap add Create a new group mapping net groupmap modify Modify an existing group mapping net groupmap delete Remove a group mapping net groupmap set Set a group mapping net groupmap cleanup Remove foreign group mapping entries net groupmap addmem Add a foreign alias member net groupmap delmem Delete foreign alias member

621

Chapitre 17. SAMBA & OpenLDAP


net groupmap listmem List foreign alias members net groupmap memberships List foreign group memberships net groupmap list List current group map

## Aide sur la syntaxe dune commande $ net help groupmap add Usage net groupmap add {rid=<int>|sid=<string>} unixgroup=<string> [type=<domain|local|builtin>] [ ## Pour plus dinformation... $ man net

Cration du groupe Unix de machines (le groupe sambausers existe dj) :


$ groupadd -g 515 sambamachines

Avertissement
Ici 515 est le lidentiant de groupe (GID) Unix nomm sambamachines. Ce GID de groupe Unix est par convention gal au RID prdnit du groupe Windows vers lequel on souhaite mapp le groupe Unix. Mais en realit ce GID de groupe Unix pourrait etre nimporte quel numro disponible.

Le GID Unix est donc totalement libre, par contre le RID Windows doit tre 515 si lon veut tre reconnu en tant qumachines du domaine, 513 en tant quutilisateurs du domaine, etc... (voir ci-aprs pour dautre RIDs possible en fonction du groupe corrler)

Attribuons ensuite les bons RIDs aux deux groupes :


$ net groupmap add rid=515 unixgroup=sambamachines ntgroup="Domain Computers" $ net groupmap set "Domain Users" sambausers # # # # # # RID ici nest pas lidentifiant du groupe primaire (GID) des comptes Unix (utilisateurs/machines) mais il sagit bien dun RID propre Windows. Il est prdfini et on na pas le choix 513 = utilisateurs du domaine ...

## De mme on aurait pu avoir aussi net groupmap add rid=512 unixgroup=admin ntgroup="Domain Administrators"

622

Chapitre 17. SAMBA & OpenLDAP


net groupmap add rid=514 unixgroup=nogroup ntgroup="Domain Guests"

Note : net groupmap add ajoute un mapping, et net groupmap set en modie un. Nous utilisons net groupmap set pour les utilisateurs du domaine car Samba propose dj un mapping non initialis.

Note : Le paramtre ntgroup est un nom compltement arbitraire. Un simple nom dafchage (Display Name) de correspondance avec le SID sur le serveur Samba. Il sert uniquement identier via de facon plus humaine un SID mapp vers un groupe POSIX... ordinateurs, Ordinateurs du Domaine, dom Ordinateurs, machines, Ordis, mairie, toto, etc... auraient tout autant t des ntgroup convenable... par convention ou habitude il est mieux de les faire correspondre directement aux noms des groupes existant par dfaut sous Windows pour en faciliter la gestion.

Vrier les "mappings" crs listant les mappings existants et les SIDs du groupe (Security IDentier) :
$ net groupmap list Domain Computers (S-1-5-21-3300186961-2405416252-210811175-515) -> sambamachines Domain Users (S-1-5-21-3300186961-2405416252-210811175-1002) -> sambausers ####ntgroup : Domain Computers unixgroup : sambamachines ID de domaine : S-1-5-21-3300186961-2405416252-210811175 RID (identifiant relatif Windows) : 515 (ordinateurs du domaine)

Le groupe sambamachines est bien "mapp" vers son quivalent NT mais ce nest pas le cas pour sambausers. Le RID devrait tre 513 et pas 1002. trange. Je en comprends pas bien pourquoi mais corrigeons :
## Effacer le "mapping" incorrect $ net groupmap delete ntgroup="Domain Users" # ou alternativement via une autre syntaxe possible $ net groupmap delete sid=S-1-5-21-3300186961-2405416252-210811175-1002 ## puis $ net groupmap add rid=513 unixgroup=sambausers ntgroup="Domain Users" Successfully added group Domain Users to the mapping db as a domain group $ net groupmap list

623

Chapitre 17. SAMBA & OpenLDAP


Domain Users (S-1-5-21-3300186961-2405416252-210811175-513) -> sambausers Domain Computers (S-1-5-21-3300186961-2405416252-210811175-515) -> sambamachines ##=> Cette fois cest correct

Avertissement
Lors de la cration dun mapping faisant intervenir le groupe primaire Unix dun utilisateur, Samba ne modie pas, pour cet utilisateur, la valeur de son "primary group sid" correspondant au nouveau mapping. Ceci provoque une dcorrlation entre ces deux IDs (la valeur mappe et la valeur effective apparaissant au niveau du compte Samba).

La solution est de crer les mappings AVANT de crer les comptes utilisateurs.

Suppression et re-cration de lutilisateur martymac :


$ smbpasswd -x $ smbpasswd -a martymac

Cette fois, si nous tudions le SID de groupe primaire de lutilisateur martymac, nous voyons quil se termine bien par 513 (en fait ctait dj le cas dans mon cas !) :
$ pdbedit -v martymac | grep -i "primary group sid" Primary Group SID: S-1-5-21-3300186961-2405416252-210811175-513

Autres information disponible sur lutilisateur :


## Compte Unix $ id martymac uid=1001(martymac) gid=513(sambausers) groupes=513(sambausers) ## Compte Samba $ net user info martymac Enter roots password: Domain Users $ smbpasswd -a martymac New SMB password: Retype new SMB password: Added user martymac.

# Nest plus None comme auparavant

624

Chapitre 17. SAMBA & OpenLDAP


root@macfil:/home/filostene# pdbedit -v martymac Unix username: martymac NT username: Account Flags: [U ] User SID: S-1-5-21-3300186961-2405416252-210811175-1003 Primary Group SID: S-1-5-21-3300186961-2405416252-210811175-513 Full Name: Home Directory: \\ubuntu\martymac HomeDir Drive: Logon Script: Profile Path: \\ubuntu\martymac\profile Domain: DOMAINEUK Account desc: Workstations: Munged dial: Logon time: 0 Logoff time: 9223372036854775807 seconds since the Epoch Kickoff time: 9223372036854775807 seconds since the Epoch Password last set: sam., 13 fvr. 2010 20:38:59 GMT Password can change: sam., 13 fvr. 2010 20:38:59 GMT Password must change: never Last bad password : 0 Bad password count : 0 Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

Note : Au passage on voit ci-dessus, que le RID de lutilisateur a chang et que maintenant le compte Samba de lutilisateur est bien rattach au domaine DOMAINEUK ce qui ntait pas le cas auparavant (Voir plus haut).

Avertissement
Il apparat quun changement de workgroup dans les paramtres global de Samba ne sont pas automatiquement repercut dans la base de compte Samba aprs redmarrage du service.

Questions/Rponses 1. Est-il possible de mettre jour tous les comptes du domaine en une seule fois en cas de changement de conguration (path, domaine name, etc...) il semble que Samba ne le fasse pas automatiquement pour les utilisateurs crs... ? Si linfo na pas t stocke dans la feuille LDAP de lutilisateur, elle est gnre en live par Samba, donc en changeant les options globales, a devrait tre rpercut en direct. Si elle a t stocke dans lannuaire, il va falloir mettre toutes les entres jour. A vrier, tout de mme loccasion...

625

Chapitre 17. SAMBA & OpenLDAP

17.7.7. Les paramtres avancs de chaque compte Samba ([home][proles][netlogon])


Pour quun utilisateur bncie des partages [home][proles][netlogon], il faut modier ces informations au sein de son compte. On utilise la commande pdbedit :
## On indique le chemin de tous ces lments, ## ainsi que la lettre de lecteur attribue au rpertoire home de lutilisateur $ pdbedit -h "\\\\ubuntu\\martymac" -D "U:" -S "martymac.cmd" \ -p "\\\\ubuntu\\profiles\\martymac" martymac}

Avertissement
Notez que le script de netlogon est toujours relatif au partage "netlogon" du contrleur de domaine.

Pour viter cette tche fastidieuse de modication de comptes en ajoutant les directives suivantes la section globale de notre chier de conguration :
[global] # [...] # Paramtres Samba par dfaut pour un utilisateur logon drive = U: logon home = \\ubuntu\%U logon path = \\ubuntu\profiles\%U logon script = %U.cmd # [...]

Ainsi, chaque utilisateur Samba ajout (par smbpasswd par exemple) prendra ces valeurs par dfaut.

626

Chapitre 17. SAMBA & OpenLDAP

17.7.8. Cration du compte POSIX de manire autonome


Un contrleur de domaine Samba peut tre manipul distance, soit graphiquement par un outil de gestion de domaine, tel celui propos par NT4, soit en ligne de commande avec la commande net Samba. Cependant, lheure actuelle, notre contrleur de domaine nest pas capable dajouter un compte de manire autonome. En effet, Samba peut ajouter la partie lui concernant mais nest pas congur pour ajouter, auparavant, la partie POSIX du compte. Voici quelques directives qui permettent de palier ce problme :
[global] # [...] # Gestion des comptes POSIX add machine script = /usr/sbin/useradd -g sambamachines \ -c Machine -d /dev/null -s /bin/false %u add user script = /usr/sbin/useradd -g sambausers \ -c Utilisateur -d /dev/null -s /bin/false %u add group script = /usr/sbin/groupadd %g add user to group script = /usr/bin/gpasswd -a %u %g delete user script = /usr/sbin/userdel -r %u delete group script = /usr/sbin/groupdel %g delete user from group script = /usr/bin/gpasswd -d %u %g set primary group script = /usr/sbin/usermod -g %g %u # [...]

Chacune des commandes est appele par Samba pour ajouter la partie POSIX dun compte avant la partie Samba :
-

add machine script : ajout dune machine (jonction dune machine au domaine) add user script : ajout dun utilisateur add group script : ajout dun groupe add user to group script : ajout dun groupe pour un utlisateur delete user script : suppression dun utilisateur delete group script : suppression dun groupe delete user from group script : suppression dun groupe pour un utilisateur set primary group script : positionnement dun groupe en groupe primaire pour un utilisate

Les comptes POSIX tant stocks sur la machine elle-mme, nous faisons appel aux commandes standard de manipulation de comptes sous GNU/Linux.

627

Chapitre 17. SAMBA & OpenLDAP Pour des comptes situs sur un annuaire LDAP, il faudrait faire appel des scripts particuliers, tels les ldapscripts.

17.7.9. Le superutilisateur Samba


Le superutilisateur Samba est ncessaire pour effectuer diverses oprations dadministrations, notamment pour la jonction dune machine au domaine. Ce superutilisateur doit avoir un uid Posix gal 0. Lutilisateur root est traditionnellement utilis, ajoutons-le nos utilisateurs Samba :
$ smbpasswd -a root

Nous pouvons tester cet utilisateur en ajoutant un compte via une commande RPC :
$ net rpc user add rltest -U root -S ubuntu Enter roots password: Added user rltest. # rltest est le nom de lutilisateur

Vrication :
$ id rltest uid=1002(rltest) gid=513(sambausers) groupes=513(sambausers) $ pdbedit -L root:0:root martymac:1001: rltest:1002:Utilisateur $ pdbedit -v rltest Unix username: NT username: Account Flags: User SID: Primary Group SID: Full Name: Home Directory: HomeDir Drive: Logon Script: Profile Path: Domain: ...

rltest [U ] S-1-5-21-3300186961-2405416252-210811175-1005 S-1-5-21-3300186961-2405416252-210811175-513 Utilisateur \\ubuntu\rltest U: rltest.cmd \\ubuntu\profiles\rltest DOMAINEUK

628

Chapitre 17. SAMBA & OpenLDAP

17.7.10. Jonction au domaine et test de notre contrleur


Le contrleur de domaine est prt. La dernire action effectuer est de joindre une machine cliente au domaine nouvellement cr... Concrtement, la jonction dune machine au domaine correspond la cration dun compte pour cette machine sur le PDC. Ce compte est un compte utilisateur standard, du nom netbios de la machine jointe, se terminant par un $. Lutilisateur root de Samba est celui avec lequel nous allons joindre notre machine cliente au domaine... Prenons lexemple dune machine XP. La jonction dune machine Windows XP un domaine se fait par un clic droit sur le Poste de travail -> Proprits. Cliquez ensuite sur longlet Nom de lordinateur, puis cliquez sur Modier. Une fentre apparat vous demandant le nom Netbios de votre machine et le domaine joindre. Jindique domaineuk (qui est mon domaine), et winlx pour le nom netbios de la machine. Valider. Une fentre apparat ensuite demandant le nom du compte habilit joindre une station sur le contrleur de domaine. Cest ici que le compte root de Samba rentre en action : Saisir "root" et le mot de passe correspondant puis Valider. La machine est jointe au domaine :

629

Chapitre 17. SAMBA & OpenLDAP Figure 17-7. Samba : Workstation jointe au domaine avec succs

Du ct du contrleur de domaine Samba, un compte a bien t cr (Samba + POSIX) :


## Compte Samba $ pdbedit -L # pdbedit -L

630

Chapitre 17. SAMBA & OpenLDAP


root:0:root martymac:1001: rltest:1002:Utilisateur WINFILX$:4294967295:WINFILX$ ## Compte POSIX $ getent passwd winfilx$ winfilx$:x:1003:515:Machine:/dev/null:/bin/false

Nous pouvons dsormais tester notre compte martymac sur la machine Windows.

631

Chapitre 17. SAMBA & OpenLDAP Figure 17-8. Samba : Connexion utilisateur au domaine

En se connectant au domaine domaineuk, on voit : - la lettre U: mappe vers le rpertoire home

632

Chapitre 17. SAMBA & OpenLDAP - la lettre J: mapp vers le partage donnes (via le script de logon) Figure 17-9. Samba : Disque rseau U: mappe vers votre rpertoire home

633

Chapitre 17. SAMBA & OpenLDAP Figure 17-10. Samba : Disque rseau J: mappe vers le partage [donnees]

Le prol de lutilisateur est egalement sauvegard la dconnexion :


## Connect en tant quutilisateur martymac $ ls /data/samba/profiles/martymac

634

Chapitre 17. SAMBA & OpenLDAP


Application Data Desktop IETldCache NetHood NTUSER.DAT.LOG PrintHood SendTo Templates Cookies Favorites My Documents NTUSER.DAT Recent Start Menu

ntuser.ini

17.7.11. Obtenir des information sur le domaine


$ net rpc info Enter roots password: Domain Name: DOMAINEUK Domain SID: S-1-5-21-3300186961-2405416252-210811175 Sequence number: 1266080524 Num users: 1 Num domain groups: 0 Num local groups: 0

17.7.12. Samba en tant que BDC


Le rle dun contrleur secondaire de domaine est double : rpartir la charge lie aux authentications avec le PDC et prendre le relais du PDC en cas de panne. Techniquement, un BDC est une machine jointe au domaine (qui possde donc un compte sur le PDC) et qui gre les authentications sur le domaine. Il possdera un OS level plus faible que celui de PDC. Voici un chier de conguration qui pourrait convenir pour ajouter un BDC notre domaine :
[global] # Identification Netbios workgroup = domaineuk netbios name = ubuntubdc # Controle de domaine active os level = 40 domain logons = yes domain master = no local master = no # Base de donnee de comptes - doit tre synchonise avec celle du PDC ! passdb backend = tdbsam:/var/lib/samba/mypassdb.tdb # Authentificationvial base de comptes locale security = user # Securite encrypt passwords = yes

635

Chapitre 17. SAMBA & OpenLDAP


# Gestion des logs log file = /var/log/samba/%m.log log level = 2

Avertissement
La conguration ci-dessus nest donc pas totalement adapte. Il est impratif de synchroniser les base de comptes (POSIX et Samba) an que notre BDC soit autonome en cas de panne du PDC !

Gnralement un backend LDAP est mis en oeuvre an de permettre au BDC comme au PDC de disposer de la mme base de comptes (Posix et Samba)... La mise en place dun BDC reste une opration assez complexe mettre en oeuvre. Aprs avoir correctement congur la machine et si nous disponsons dune base de comptes commune, il faut joindre le BDC au domaine de la manire suivante :
## Depuis la machine ubuntubdc : $ net rpc join -S ubuntu -W mondomaine -U root ## Un compte pour le BDC devrait tre cr sur le PDC.

17.7.13. Visualiser les connexions...


...avant de stopper un serveur pour intervention. La commande smbstatus permet de savoir en temps rel qui est connect, et quels chiers sont ouverts. Pensez lutiliser avant dintervenir sur un serveur pour sassurer que peu ou pas de personnes sont connectes :
$ smbstatus -v Registered MSG_REQ_POOL_USAGE Registered MSG_REQ_DMALLOC_MARK and LOG_CHANGED Processing section "[donnees]" Processing section "[printers]" Processing section "[homes]" Processing section "[netlogon]" Processing section "[profiles]" Samba version 3.4.0

636

Chapitre 17. SAMBA & OpenLDAP


PID Username Group Machine ------------------------------------------------------------------9848 martymac sambausers winfilx (10.0.1.3) Service pid machine Connected at ------------------------------------------------------profiles 9848 winfilx Mon Feb 15 00:16:10 2010 martymac 9848 winfilx Mon Feb 15 00:16:17 2010 IPC$ 9848 winfilx Mon Feb 15 00:16:08 2010 netlogon 9848 winfilx Mon Feb 15 00:16:15 2010

Locked files: Pid Uid DenyMode Access R/W Oplock SharePath Name Time -------------------------------------------------------------------------------------------9848 1001 DENY_NONE 0x100081 RDONLY NONE /data/samba/home/martymac . Mon Feb 15 00:17:31 201 9848 1001 DENY_NONE 0x100081 RDONLY NONE /data/samba/home/martymac . Mon Feb 15 00:17:31 201

17.7.14. Relire la conguration sans redmarrer Samba...


Samba peut relire sa conguration sans tre redmarr. Il suft denvoyer un signal HUP aux dmons qui sont en cours de fonctionnement :
$ killall -HUP smbd nmbd winbindd

Avertissement
Attention, le comportement de Samba est parfois un peu trange dans le sens o toute la conguration nest pas re-parse.

Si vous avez ajout une imprimante dans CUPS, elle ne sera pas charge.

17.7.15. En cas de problme : tude des logs !


Pensez tudier les logs et, si besoin est, augmenter le niveau de log au maximum, cest dire 10. Cest l lun des seuls moyens de se sortir dune situation o tout semble bloqu...
log file = /var/log/samba/%m.log

637

Chapitre 17. SAMBA & OpenLDAP


log level = 10

$ tail -f /var/log/samba/machine.log

17.7.16. Administration graphique ? Swat...


Samba sadministre via les lignes de commandes vu prcdement. Lun des principaux problmes de Samba est quil ne dispose pas dinterface graphique "digne de ce nom" pour ladministration. Swat (http://www.samba.org/samba/docs/man/Samba-HOWTO-Collection/SWAT.html) : interface Web rudimentaire propose en standard. Il embarque un petit serveur http et doit tre dmarr via (x)inetd. GADMIN-SAMBA (http://gadmintools.ippedweb.com/) est un autre outil possible bas sur GTK...

17.8. OpenLDAP
Source(s):

OF: SR013-ch04_part2-openldap.pdf (docs/eof/sr013-ch04_part2-openldap.pdf) Projet: Site du projet (http://www.openldap.org) Historique des versions (http://www.openldap.org/software/roadmap.html) Historique du projet (http://www.openldap.org/conf/odd-sfo-2003/keynote.html) Web: OpenLDAP Installation (Forum Ubuntu.fr) (http://forum.ubuntu-fr.org/viewtopic.php?pid=3238774) Database bdb/hdb (DB_Cong) (http://www.zytrax.com/books/ldap/ch6/bdb.html)

17.8.1. Installation OpenLDAP


Aprs avoir tudi les nombreux concepts lis aux annuaires LDAP, passons dsormais la pratique et tudions limplmentation libre la plus utilise : OpenLDAP.

638

Chapitre 17. SAMBA & OpenLDAP OpenLDAP peut tre install par le biais de paquets binaires fournis par la distribution (conseille car elle facilite la maintenance du logiciel par la suite), ou bien en compilant les sources. Les outils clients sont souvent dissocis des outils serveur et fournis dans des paquets spars. Ici, les outils clients seront installs sur la mme machine que la machine serveur. Mais ce nest pas forcment le cas dans un environnement de production o les clients agissent distance depuis une autres machine.
## Installation OpenLDAP sur Debian Lenny # slapd (Serveur) # ldap-utils (Client)

$ sudo apt-get install slapd ldap-utils Lecture des listes de paquets... Fait Construction de larbre des dpendances Lecture des informations dtat... Fait Les paquets supplmentaires suivants seront installs : libdb4.2 odbcinst1debian1 unixodbc Paquets suggrs : libmyodbc odbc-postgresql libct1 Les NOUVEAUX paquets suivants seront installs : ldap-utils libdb4.2 odbcinst1debian1 slapd unixodbc 0 mis jour, 5 nouvellement installs, 0 enlever et 0 non mis jour. Il est ncessaire de prendre 2403ko dans les archives. Aprs cette opration, 6066ko despace disque supplmentaires seront utiliss. Souhaitez-vous continuer [O/n] ? O Rception de : 1 http://ftp.fr.debian.org lenny/main libdb4.2 4.2.52+dfsg-5 [401kB] Rception de : 2 http://security.debian.org lenny/updates/main slapd 2.4.11-1+lenny1 [1404kB Rception de : 3 http://ftp.fr.debian.org lenny/main odbcinst1debian1 2.2.11-16 [65,8kB] Rception de : 4 http://ftp.fr.debian.org lenny/main unixodbc 2.2.11-16 [286kB] Rception de : 5 http://security.debian.org lenny/updates/main ldap-utils 2.4.11-1+lenny1 [2 2403ko rceptionns en 18s (128ko/s) Prconfiguration des paquets... Slection du paquet libdb4.2 prcdemment dslectionn. (Lecture de la base de donnes... 144987 fichiers et rpertoires dj installs.) Dpaquetage de libdb4.2 ( partir de .../libdb4.2_4.2.52+dfsg-5_i386.deb) ... Slection du paquet odbcinst1debian1 prcdemment dslectionn. Dpaquetage de odbcinst1debian1 ( partir de .../odbcinst1debian1_2.2.11-16_i386.deb) ... Slection du paquet unixodbc prcdemment dslectionn. Dpaquetage de unixodbc ( partir de .../unixodbc_2.2.11-16_i386.deb) ... Slection du paquet slapd prcdemment dslectionn. Dpaquetage de slapd ( partir de .../slapd_2.4.11-1+lenny1_i386.deb) ... Slection du paquet ldap-utils prcdemment dslectionn. Dpaquetage de ldap-utils ( partir de .../ldap-utils_2.4.11-1+lenny1_i386.deb) ... Traitement des actions diffres ( triggers ) pour man-db ... Paramtrage de libdb4.2 (4.2.52+dfsg-5) ... Paramtrage de odbcinst1debian1 (2.2.11-16) ... Paramtrage de unixodbc (2.2.11-16) ... Paramtrage de slapd (2.4.11-1+lenny1) ... Creating new user openldap... done.

639

Chapitre 17. SAMBA & OpenLDAP


Creating initial slapd configuration... done. Creating initial LDAP directory... done. Starting OpenLDAP: slapd. Paramtrage de ldap-utils (2.4.11-1+lenny1) ...

Une fentre apparat alors et vous demande le mot de passe associ lannuaire que lon met en place. Il peut tre chang par la suite...

17.8.2. Les outils fournis par OpenLDAP


Le projet OpenLDAP implmente un serveur LDAP, mais galement les commandes clientes permettant de manipuler des informations contenues dans lannuaire. Commandes lies au serveur :
## slapd fournit les binaires suivants : $ dpkg -L slapd | grep bin ... /usr/sbin/slapd # Dmon OpenLDAP /usr/sbin/slurpd # Dmon pour la rplication # [update replication deamon] /usr/sbin/slapadd # Ajouter une entre LDIF la base SLAPD /usr/sbin/slapcat # Utilitaire SLAPD to LDIF # Effectue un dump (une copie intgrale) de la base /usr/sbin/slapdn # Vrifier la conformit dun DN donn en ligne de commande /usr/sbin/slapindex # Cre les index au sein de la base SLAPD /usr/sbin/slappasswd # Utilitaire de conversion de mots de passe /usr/sbin/slaptest # Vrifier la validit du fichier de configuration slapd.conf

Avertissement
Chacune de ces commandes permet dagir directement au niveau du serveur OpenLDAP, notamment au niveau de sa base de donnes. Il est donc impratif de les excuter sur le serveur o fonctionne le serveur OpenLDAP et ... serveur (daemon) teint ! .

Les commandes clientes :


## ldap-utils fournit les commandes suivantes : $ dpkg -L ldap-utils | grep bin ... /usr/bin/ldapsearch # effectue une recherche au sein de lannuaire /usr/bin/ldapmodify # modifie une entre

640

Chapitre 17. SAMBA & OpenLDAP


# # # # # # #

/usr/bin/ldapdelete /usr/bin/ldapmodrdn /usr/bin/ldappasswd /usr/bin/ldapwhoami /usr/bin/ldapcompare /usr/bin/ldapadd

ajoute/suppr. attribut, ajoute/suppr. une entre, ... supprime une entre modifie le rdn dune entre (renomme une entre) modifie le mot de passe dune entre LDAP affiche avec quel utilisateur le binding a eu lieu permet de comparer lattribut dune entre une valeur spcifie ajoute une entre

Chaque commande cliente utilise le protocole LDAP pour agir sur lannuaire. Elles peuvent donc, cette fois-ci, tre utilises distance. Elles agissent en tant que clients LDAP standard. Dautres clients, graphiques notamment.

17.8.3. Conguration du serveur


La conguration du serveur OpenLDAP (le dmon slapd) seffectue en modiant le chier /etc/ldap/slapd.conf (docs/sr013-ch04_part2-openldap-slapd-conf-default.txt) Le chier de conguration est subdivis en trois sections importantes :

- la section globale (dbut du fichier) - la section concernant les options de backends (dbute par "backend") - la section concernant les dclarations et les options des arborescences gres (dbute par

Note : Lors de linstallation de OpenLDAP sur une distribution Ubuntu 9-10 (http://forum.ubuntu-fr.org/viewtopic.php?pid=3238774), il faut faire attention la manire dont OpenLDAP est intgr au systme. Elle a chang sur les dernires versions dUbuntu. Maintenant, OpenLDAP nest plus congur laide du chier slapd.conf , mais partir du rpertoire slapd.d qui contient les chiers LDIF pour congurer OpenLDAP. En fait, slapd supporte toujours les deux formats de conguration (cf. man slapd) : OpenLDAP peut tre dmarr soit par slapd -f <chier de conf>, soit par slapd -F <rpertoire de conf>. Ubuntu a dcid dutiliser la deuxime mthode par dfaut, mais il y a certainement moyen de revenir la premire, en modiant les scripts de dmarrage du dmon...

Voir aussi la partie suivante sur la conguration de la base de donnes pour des performances optimiss

641

Chapitre 17. SAMBA & OpenLDAP

17.8.4. Documentation
Toute les directives de conguration sont dcrites dans le manuel du chier de conguration :
$ man 5 slapd.conf

17.8.5. Tester la conguration & redmarrer le serveur OpenLDAP


Une fois la nouvelle conguration sauvegarde, il est important de tester sa syntaxe pour voir si aucune erreur na t commise :
$ slaptest -f /etc/ldap/slapd.conf config file testing succeeded

Puis, (re)-dmarrez le serveur LDAP, si tout est ok :


$ /etc/init.d/slapd restart

17.8.6. Linclusion des schmas


Les schmas LDAP permettent de dnir les types de donnes contenus dans lannuaire. Plusieurs sont fournis par dfaut, dcouvrir dans /etc/ldap/schema :
## Liste des schemas disponibles $ ls /etc/ldap/schema collective.schema cosine.schema corba.schema duaconf.schema core.ldif dyngroup.schema core.schema inetorgperson.ldif cosine.ldif inetorgperson.schema

java.schema misc.schema nadf.schema nis.ldif nis.schema

openldap.ldif openldap.schema ppolicy.schema README samba.schema

642

Chapitre 17. SAMBA & OpenLDAP Linclusion des schmas est effectue par la directive include :
$ cat /etc/ldap/slapd.conf ... # Schema and objectClass definitions include /etc/ldap/schema/core.schema include /etc/ldap/schema/cosine.schema include /etc/ldap/schema/nis.schema include /etc/ldap/schema/inetorgperson.schema include /etc/ldap/schema/samba.schema ...

Cest grce ces inclusions au sein du chier de conguration que lon porte la connaissance du serveur ces nouveaux types de donnes. Une fois les schmas chargs, il sera possible dajouter des entres y faisant rfrence dans notre annuaire.
Note : La directive include inclut en fait un chier de conguration (de manire gnrale). Il est donc possible de disposer de plusieurs chiers de conguration spciques et de les regrouper de cette manire.

17.8.7. Niveau de logs


Se rfrer au poly de lof ou la documentation en ligne de man slapd.conf (loglevel). any : active tous les niveaux de log (quivalent -1). 0 : desactive compltement les logs (aucun) none : desactive les logs sauf les messages haute priorit qui eux reste logg.

17.8.8. Les backends


Se rfrer au poly de lof Berkley DB (BDB) est recommand car rput plus robuste que LDBM. Pour plus dinfo, consulter: man slapd-bdb et man slapd-ldbm.

643

Chapitre 17. SAMBA & OpenLDAP Dans mon cas, le backend HDB est install par dfaut. HDB est une variante du backen BDB qui utilise une structure de base de donne hierarchique qui supporte le renomage de sous-arbre. Le comportement est identique au BDB et les mme paramtre de coniguration apply ;-)

17.8.9. Performance & Optimisation - Backend (hdb/bdb) conguration (DB_Cong)


Source(s):

Web: Database bdb and hdb (DB_Cong) (http://www.zytrax.com/books/ldap/ch6/bdb.html) DB_Cong Sample le (http://www.zytrax.com/books/ldap/ch6/bdb.html#db-cong)

La Base de Donnes Berkeley (BDB or HDB) est prfre et recommand comme back-end LDAP mais requiert attention en terme de conguration dans un environement applicatif de haute performance.

Avertissement
"...les chiers log de transaction (BDB transaction log le log.xxxxxxxxxxxx) dans lannuaire LDAP peuvent devenir trs grand, trs rapidement et requiert une maintenance rgulire..."

Un certains nombres de paramtre (directive BDB) sont localiss soit dans le chier de conguration LDAP slapd.conf, soit dans un chier de conguration de la base de donne DB_CONFIG. Il apparat que OpenLDAP conseil dutiliser de prfrence le chier DB_CONFIG pour les directives quivalentes dans slapd.conf .

17.8.10. Les databases


Se rfrer au poly de lof La racine (sufx = FQDN), rootdn (administrateur root), rootpw (mot de passe administrateur root), index (gnr par ladminsitrateur), ACLs (consulter man slapd.access), etc...

17.8.11. Mot de passe root (rootpw)


Le mot de passe du rootdn peut tre soit en clair, soit un hash gnr par la commande slappasswd. Nous pouvons gnrer ce hash de cette manire :

644

Chapitre 17. SAMBA & OpenLDAP


$ slappasswd -s "secret" -h {CRYPT} {CRYPT}hKCmXZ7Pqmm4Y ## -h option de hash disponible # {SHA} {SSHA} SHA-1 algorithm # {MD5} {SMD5} MD5 algorithm # {CRYPT} crypt # {CLEARTEXT} # donc alternativement on aurait pu avoir $ slappasswd -s "secret" -h {SHA} {SHA}5en6G6MezRroT3XKqkdPOmY/BfQ=

La valeur afche est alors copier-coller dans la valeur de la directive "rootpw" :


## Configuration du serveur ... rootpw "{CRYPT}hKCmXZ7Pqmm4Y" ...

Ceci permet de ne pas stocker en clair le mot de passe dans le chier de conguration !

17.8.12. Administrer un serveur OpenLDAP


Couper le serveur LDAP avant dutiliser une commande slap(...), an dviter un accs concurrent depuis le serveur lui-mme, ce qui pourrait corrompre la base de donnes :
$ /etc/init.d/slapd stop

Gnration des index :


$ slapindex WARNING! Runnig as root! Theres a fair chance slapd will fail to start. Check file permissions!

645

Chapitre 17. SAMBA & OpenLDAP Oups ! resultat inattendu :(( Il semble quil ne soit pas non plus possible de se connecter en tant quutilisateur OpenLDAP (su openldap) pour activer cette commande. Lutilisateur openldap a t cr durant linstallation pour excuter sladp.d. Essayons autrement :
## En tant que root ## 2nd ssai $ sudo -u openldap slapindex hdb_db_open: database "dc=ermansion,dc=net": database already in use. backend_startup_one: bi_db_open failed! (-1) slap_startup failed ##==> Erreur! # Normal lors de cet essai # le serveur est en cours dexcution # il faut larrter ! Toujours vrifier :) $ /etc/init.d/slapd stop Stopping OpenLDAP: slapd. ## 3me ssai $ sudo -u openldap slapindex ##=> OK ## On redmarre le service $ /etc/init.d/slapd start

Note : Un autre type derreur pourrait arriver :

## Source: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=432662 $ sudo -u openldap slapindex could not open config file "/etc/ldap/slapd.conf": Permission denied (13) slapindex: bad configuration file! ## Dans ce cas vrifier les permissions ## sur le fichier de configuration $ ls -l /etc/ldap/slapd.conf -rw ------- 1 root root 4850 fv 15 22:34 /etc/ldap/slapd.conf ## Si seul root peut accder au fichier ## cela ne serait pas un pb si slapd sexcutait en tant que root ## mais en ralit il est excut en tant quutilisateur openldap par dfaut ## Les permissions seraient donc modifier ainsi : -rw-r----- 1 root openldap 4850 fv 15 22:34 /etc/ldap/slapd.conf

646

Chapitre 17. SAMBA & OpenLDAP


Note : En fait, pour prsenter le problme de manire plus gnrale, il suft que les chiers BDB et que la cong de slapd soient accessibles par lutilisateur sous lequel tourne le dmon. Comme la plupart du temps, il sagit de lutilisateur openldap ou ldap et du groupe openldap ou ldap, soit on fait les manips avec cet utilisateur, soit on les fait en root, mais dans ces cas l, on donne accs aux chiers lutilisateur ldap (chown/chmod...).

Backup - "dump" de la base LDAP au format LDIF :


$ slapcat > openldap-backup.pdif dn: dc=ermansion,dc=net objectClass: top objectClass: dcObject objectClass: organization o: ermansion.net dc: ermansion structuralObjectClass: organization entryUUID: ec0fe296-aec1-102e-8511-a7ada7fe837f creatorsName: createTimestamp: 20100215210751Z entryCSN: 20100215210751.607176Z#000000#000#000000 modifiersName: modifyTimestamp: 20100215210751Z dn: cn=admin,dc=ermansion,dc=net objectClass: simpleSecurityObject objectClass: organizationalRole cn: admin description: LDAP administrator userPassword:: e2ffeXB0fTVRQ1BIdG85TnQuVWM= structuralObjectClass: organizationalRole entryUUID: ec145394-aec1-102e-8512-a7ada7fe837f creatorsName: createTimestamp: 20100215210751Z entryCSN: 20100215210751.636600Z#000000#000#000000 modifiersName: modifyTimestamp: 20100215210751Z

Restauration - Peupler notre annuaire en utilisant un chier LDIF :


$ slapadd < openldap-backup.pdif

Arrt et dmarrage du serveur :

647

Chapitre 17. SAMBA & OpenLDAP


## via script /etc/init.d/slapd : $ /etc/init.d/slapd [start|stop|restart] ## Dmarrer le serveur $ /etc/init.d/slapd start ## Et aussi $ /usr/sbin/slapd -g openldap -u openldap -f /etc/ldap/slapd.conf

Note : Si on souhaite dmarrer le service LDAP avec dautres arguments il faut regarder le contenu du script de dmarrage (/etc/init.d/slapd probalement) Sur Debian Lenny la conguration se trouve dans le chier /etc/default/slapd qui est appel dans le script /etc/init.d/slapd.

17.8.13. Utilisation des outils clients (Ajouter entre, initialiser, re-initialiser)


la diffrence des outils slap(...), les outils ldap(...) utilisent le protocole LDAP, il peuvent donc tre mis en oeuvre depuis nimporte quelle machine disposant dun accs rseau au serveur LDAP. Ils utilisent bien videmment le format LDIF pour changer des informations avec le serveur.

Avertissement
!!! Attention !!! pour la suppression, ce nest pas grave de le faire en tant que root. Ce qui compte, cest le slapadd/slapmodify, car il va crer les chier avec pour propritaire celui qui le fait. Si les commande clientes sont executes en tant que root, le dmon slapd (qui tourne avec lutilisateur openldap) ny aura pas accs (permission denied sur les chiers potentiellement crs). Toutes les outils clients modiant lannuaire doivent tre excuts par lutilisateur openldap tant que faire ce peut :
## Syntaxe en tant que root # sudo -u openldap ldapadd ...

Ajouter une entre : ldapadd


# Syntaxe ldapadd -W -D <binddn> -x -H ldap://<serveur> \ -f <fichier.ldif>

648

Chapitre 17. SAMBA & OpenLDAP


#-W active la demande de mot de passe pour sauthentifier en tant que <binddn>. #-x permet de ne pas utiliser SASL pour lauthentification. # le fichier LDIF source doit contenir une (ou plusieurs) entre(s) insrer et lintgralit de ses (leurs) attributs.

## Fichier LDIF insrer (fichier.ldif) : dn: uid=dupont,ou=users,dc=ermansion,dc=net objectClass: account objectClass: posixAccount cn: dupont uid: dupont uidNumber: 10001 gidNumber: 1024 homeDirectory: /home/dupont userPassword:: e0NSWVBUfXZKblR0TjVSaXQ0Tmc= loginShell: /bin/sh gecos: dupont description: dupont

Insertion de cette entre depuis le serveur lui-mme (localhost) avec le compte "manager" dclar dans le chier de conguration.
## Insertion de lentre : $ ldapadd -W -D "cn=manager,dc=ermansion,dc=net" -x -H ldap://localhost \ -f sr013-ch04_part2-openldap-fichier-dupont-ldif.txt Enter LDAP Password: adding new entry "uid=dupont,ou=users,dc=ermansion,dc=net" ldap_add: No such object (32) matched DN: dc=ermansion,dc=net

Note : Cela ne fonctionne pas car lannuaire nest pas encore initialis avec les entres de base : ou=users et dc=martymac,dc=com.

Linitialisation de lannuaire nest quun ajout massif de plusieurs entres. Cet ajout massif peut se faire par le biais de slapadd si vous possdez dj un dump de lannuaire et si vous vous situez sur le serveur. distance, cest loutil ldapadd qui va nous permettre deffectuer cette opration. Il suft de fournir ldapadd un chier LDIF contenant plusieurs entres qui seront ajoutes dans le mme ordre avec lequel elles apparaissent dans le chier.

649

Chapitre 17. SAMBA & OpenLDAP Ce chier va donc tout dabord contenir lentre de la racine, qui est ncessaire, puis chacune des "ou" que nous avons vues en exemple. Enn, les feuilles seront constitues dutilisateurs et de groupes. Fichier dinitialisation LDIF insr (docs/sr013-ch04_part2-openldap-chier-initialisation-ldif.txt), il comprend :
lentre de la racine (indispensable) lentre des deux ou : users et groups un groupe : utilisateurs deux utilisateurs : garfield et odie appartenant au groupe utilisateurs (attr. gidNumber)

Figure 17-11. OpenLDAP : Schma reprsentant une arborescence dinitialisation

Insertion de cette arborescence :


$ ldapadd -W -D "cn=manager,dc=ermansion,dc=net" -x \ -H ldap://localhost -f fichier.ldif ## 1er essai Enter LDAP Password: adding new entry "dc=ermansion,dc=net" ldap_add: Already exists (68)

650

Chapitre 17. SAMBA & OpenLDAP


## ==> Jenleve dans le fichier diff la partie dcrivant la racine... ## 2me essai Enter LDAP Password: adding new entry "ou=users,dc=ermansion,dc=net" adding new entry "ou=groups,dc=ermansion,dc=net" adding new entry "cn=utilisateurs,ou=groups,dc=ermansion,dc=net" adding new entry "uid=garfield,ou=users,dc=ermansion,dc=net" adding new entry "uid=odie,ou=users,dc=ermansion,dc=net" ## ==> OK

En cas derreur dinitialistaiton (LDIF incorrect ou autre) il peut tre utile de r-initialiser lannuaire simplement... Rinitialisation de lannuaire...
## Etapes : - Stopper slapd ## En tant quutilisateur openldap : - supprimer tous les fichiers contenus dans le rpertoire de donnes qui est spcifi dans ta config, sauf le DB_CONFIG si tu en as un - slapadd < fichier.ldif - slapindex - re-dmarrer slapd

17.8.14. Afcher larborescence dun annuaire ldap


Existe-t-il un outil (en ligne de commande) permettant dafcher larborescence dun annuaire ldap ? Un outil qui fonctionnerai comme la commande "tree" ? slapcat en ligne de commande mais pas vraiment fait pour afcher une arborescence... Le top ce serait une commande qui permette dafcher larborescence ( partir dun nud spcie dans la commande) et qui nafcherai que le DN (ou un autre attribut spci dans la commande) des entres. Cela doit tre jouable en Perl ou en Python en traitant la sortie de slapcat ou en faisant une boucle avec ldapsearch et les ltres qui vont bien.

651

Chapitre 17. SAMBA & OpenLDAP Sinon les outils grapiques : phpldapadmin, etc...

17.8.15. Rechercher une entre : ldapsearch


## Syntaxe : ldapsearch -x -H ldap://<serveur> -b <base> [-s porte] [filtre] [attributs] #- base de la recherche #- porte de la recherche (base, one ou sub) - sub par dfaut #- filtre (critres de recherche) #- attributs que lon souhaite afficher - entre entire par dfaut #-option -D (et loption -W) pour sauthentifier - lecture pour tous par dfaut)

Recherchons :
## tous les uid commenant par "garf" partir de la racine $ ldapsearch -x -H ldap://localhost -b "dc=ermansion,dc=net" "(uid=garf*)" # extended LDIF # # LDAPv3 # base <dc=ermansion,dc=net> with scope subtree # filter: (uid=garf*) # requesting: ALL # # garfield, users, ermansion.net dn: uid=garfield,ou=users,dc=ermansion,dc=net objectClass: account objectClass: posixAccount cn: garfield uid: garfield uidNumber: 10001 gidNumber: 2000 homeDirectory: /home/garfield loginShell: /bin/sh gecos: garfield description: garfield # search result search: 2 result: 0 Success # numResponses: 2 # numEntries: 1 ## Entres ayant un gidNumber gal 2000 $ ldapsearch -x -H ldap://localhost \ -b "dc=ermansion,dc=net" "(gidNumber=2000)" # extended LDIF #

652

Chapitre 17. SAMBA & OpenLDAP


# # # # # LDAPv3 base <dc=ermansion,dc=net> with scope subtree filter: (gidNumber=2000) requesting: ALL

# utilisateurs, groups, ermansion.net dn: cn=utilisateurs,ou=groups,dc=ermansion,dc=net objectClass: posixGroup cn: utilisateurs gidNumber: 2000 # garfield, users, ermansion.net dn: uid=garfield,ou=users,dc=ermansion,dc=net objectClass: account objectClass: posixAccount cn: garfield uid: garfield uidNumber: 10001 gidNumber: 2000 homeDirectory: /home/garfield loginShell: /bin/sh gecos: garfield description: garfield # odie, users, ermansion.net dn: uid=odie,ou=users,dc=ermansion,dc=net objectClass: account objectClass: posixAccount cn: odie uid: odie uidNumber: 10002 gidNumber: 2000 homeDirectory: /home/odie loginShell: /bin/sh gecos: odie description: odie # search result search: 2 result: 0 Success # numResponses: 4 # numEntries: 3 ## Amliorons notre requte pour ne retourner que ## les deux comptes utilisateurs et pas le groupe $ ldapsearch -x -H ldap://localhost -b "dc=ermansion,dc=net" \ "(&(gidNumber=2000)(objectClass=posixAccount))" ... # garfield, users, ermansion.net dn: uid=garfield,ou=users,dc=ermansion,dc=net

653

Chapitre 17. SAMBA & OpenLDAP


objectClass: account objectClass: posixAccount cn: garfield ... # odie, users, ermansion.net dn: uid=odie,ou=users,dc=ermansion,dc=net objectClass: account objectClass: posixAccount ... ## affiche enfin uniquement leur rpertoire home ## (et pas la totalit de lentre comme cest le cas par dfaut) : $ ldapsearch -x -H ldap://localhost -b "dc=ermansion,dc=net" \ "(&(gidNumber=2000)(objectClass=posixAccount))" homeDirectory # extended LDIF # # LDAPv3 # base <dc=ermansion,dc=net> with scope subtree # filter: (&(gidNumber=2000)(objectClass=posixAccount)) # requesting: homeDirectory # # garfield, users, ermansion.net dn: uid=garfield,ou=users,dc=ermansion,dc=net homeDirectory: /home/garfield # odie, users, ermansion.net dn: uid=odie,ou=users,dc=ermansion,dc=net homeDirectory: /home/odie ...

17.8.16. Supprimer une entre : ldapdelete


Syntaxe : ldapdelete -W -D <binddn> -x -H ldap://<serveur> <dn>

## Suppression de lutilisateur odie $ ldapdelete -x -H ldap://localhost -W -D "cn=manager,dc=ermansion,dc=net" \ "uid=odie,ou=users,dc=ermansion,dc=net" ## Suppression de la branche users : $ ldapdelete -x -H ldap://localhost -W -D "cn=manager,dc=ermansion,dc=net" -r \ "ou=users,dc=ermansion,dc=net"

654

Chapitre 17. SAMBA & OpenLDAP


Note : Il est possible de rinitialiser un annuaire en supprimant simplement les chiers de la base de donnes (cf. directive "directory" /var/lib/ldap) et de le redmarrer. Mthode "sauvage, brutale, simple et rapide" !

Avertissement
Attention si vous possdez plusieurs bases ne pas toutes les effacer...

Avertissement
!!!Attention!!! aussi au chier DB_CONFIG qui sera englob par le * de la suppression ! Ce dernier peut tre conserv et doit ltre dans la plupart des cas. ## Suppression violente de la base $ /etc/init.d/slapd stop # Arrt $ rm -f /var/lib/ldap/* # Suppression # Attention au fichier DB_CONFIG !!! $ /etc/init.d/slapd start # Re-dmarrage

17.8.17. Modier une entre : ldapmodify


La commande ldapmodify est un peu le "couteau suisse" des annuaires LDAP !. Elle permet deffectuer toutes sortes doprations (incluant ajout et suppression dentres). ldapmodify peut se substituer ldapadd et ldapdelete, mais vous allez voir que son utilisation nest pas des plus simples ! Tout passe par le chier ldif indiqu en entre et qui va dcrire lopration effectuer... :
## Syntaxe : $ ldapmodify -W -D <binddn> -x \ -H ldap://<serveur> -f <fichier.ldif> ## #####Oprations possibles : ajouter dune entre supprimer dune entre ajouter un attribut supprimer un attribut modifier un attribut ## pour une liste exhaustive des ## oprations que lon peut effectuer.

$ man slapd.replog $ man ldif

655

Chapitre 17. SAMBA & OpenLDAP

Se rfrer au poly de lof trs dtaill pour des examples dutilisation...

17.8.18. Renommer une entre : ldapmodrdn


Loutil ldapmodrdn permet de modier le RDN (uniquement) dune entre :
## Syntaxe : ldapadd -W -D <binddn> -x -H ldap://<serveur> <dn> <nouveau_rdn> ## Renommer "garfield" en "pookie" $ ldapmodrdn -W -D "cn=Manager,dc=ermansion,dc=net" -x -H ldap://localhost \ "uid=garfield,ou=users,dc=ermansion,dc=net" "uid=pookie" ## Lattribut "uid : pookie" sera ajout automatiquement ## lentre car il compose le nouveau RDN. Lancienne ## valeur de luid ("uid : garfield") sera conserve.

17.8.19. Conguration des outils clients


Il existe un chier de conguration pour les outils clients qui contiennent les options que les commandes clientes doivent utiliser par dfaut : ladresse du serveur cible, le binddn, etc... Renseigner ce chier de conguration vite de passer ces options chaque fois en lignes de commandes ! Deux chiers de conguration :

/etc/ldap/ldap.conf # Disponible pour tous les utilisateurs (options gnrales) ~/.ldaprc (docs/sr013-ch04_part2-openldap-fichier-ldaprc.txt) # Dfini par lut

## Savoir quel fichier de config est pris en compte par les commandes ## slap* avec slaptest en mode debug ## (valeur 64, parsing de la config) : $ slaptest -d 64 2>&1 | less ## La premire ligne, indique quel fichier le service lit...

656

Chapitre 17. SAMBA & OpenLDAP


## 1er ssai ==> Resultat KO $ ldapsearch -x # extended LDIF # # LDAPv3 # base <> (default) with scope subtree # filter: (objectclass=*) # requesting: ALL # # search result search: 2 result: 32 No such object # numResponses: 1 ##=> Erreur ! ##=> Je cre le fichier ~/.ldaprc (docs/sr013-ch04_part2-openldap-fichier-ldaprc.txt) ## 2me ssai ==> Resultat OK $ ldapsearch -x # extended LDIF # # LDAPv3 # base <dc=ermansion , dc=net> (default) with scope subtree # filter: (objectclass=*) # requesting: ALL # # ermansion.net dn: dc=ermansion,dc=net objectClass: top objectClass: dcObject objectClass: organization o: ermansion.net dc: ermansion # admin, ermansion.net dn: cn=admin,dc=ermansion,dc=net objectClass: simpleSecurityObject objectClass: organizationalRole cn: admin description: LDAP administrator # users, ermansion.net dn: ou=users,dc=ermansion,dc=net objectClass: top objectClass: organizationalUnit ou: users # groups, ermansion.net dn: ou=groups,dc=ermansion,dc=net objectClass: top

657

Chapitre 17. SAMBA & OpenLDAP


objectClass: organizationalUnit ou: groups # utilisateurs, groups, ermansion.net dn: cn=utilisateurs,ou=groups,dc=ermansion,dc=net objectClass: posixGroup cn: utilisateurs gidNumber: 2000 ... ## ==> OK lannuaire dfile :)

Problme connu :
$ ldapsearch -x -H ldap://localhost -b "dc=moullinvert,dc=lan" "(uid=gabin)" ldap_sasl_bind(SIMPLE) : cant contact LDAP server (-1) ## En augmentant le niveau de log, il se peut que les droits ## sur sur le fichier /var/run/slapd.args (Permission denied) ## Le fichier de conf du cours indique ## /var/run/slapd.args pour ce fichier ## Mais sur Debian ce fichier de conf doit tre dans /var/run/slapd/. ## Il faut modifier la ligne du fichier slapd.conf

17.8.20. Outils graphiques dadministration


Trois outils graphique sont particulirement intressants pour nous simplier la tche de gestion dun annuaire LDAP au quotidien autre que par le biais des lignes de commandes :

gq (http://sourceforge.net/projects/gqclient) : Dvelopp en C / GTK ldapbrowser (http://www-unix.mcs.anl.gov/~gawor/ldap/index.html) : Dvelopp en JAVA (accs au site web) phpLDAPAdmin (http://phpldapadmin.sourceforge.net) : Dvelopp en PHP LTB project (http://ltb-project.org/wiki) : Dvelopp en PHP, compilation doutils pour les adminsitrateurs LDAP Shelldap (http://projects.martini.nu/shelldap) : Une interface shell-like pratique pour naviguer dans un annuaire LDAP et modier son contenu. Il garde lhistorique des commande, a des fonctions utiles : autocompletion, mise en cache de credentiels, etc...

658

Chapitre 17. SAMBA & OpenLDAP Je me suis amus un peu avec phpLDAPAdmin et je dois dire que cet outil est trs pratique :) En deux temps trois mouvement, jai pu crer des entres, les dplacer, les copier ou encore les supprimer...
## Installation phpLDAPAdmin $ apt-get install phpldapadmin ## Naviguer sur http://localhost/phpldapadmin ## Se connecter de faon "Anomnymous"

659

Chapitre 17. SAMBA & OpenLDAP Figure 17-12. phpLDAPAdmin

660

Chapitre 17. SAMBA & OpenLDAP

17.9. Connexion de Samba notre annuaire


Source(s):

OF: SR013-ch05_part3-samba.pdf (docs/eof/sr013-ch05_part3-samba.pdf) Web: Installing Samba with OpenLDAP on Ubuntu (http://islandlinux.org/howto/installing-samba-openldap-ubuntu) Authentication Linux avec LDAP (http://articles.mongueurs.net/magazines/linuxmag67.html) PAM & libpam-ldap (http://www.padl.com) nss_ldap not working (getent passwd) (http://www.linuxquestions.org/questions/slackware-14/nssldap-not-working-getent-passwd-458580/) Bug#510678: libnss-ldap: ldap entry on nsswitch.conf causes gdm hang (http://www.mail-archive.com/debian-bugs-dist@lists.debian.org/msg601005.html) Re: could not hard reconnect to LDAP server - Server is unavailable (http://www.openldap.org/lists/openldap-technical/200806/msg00011.html)

17.9.1. Rappel
Samba ncessite deux types de comptes : Un compte POSIX , Un compte Samba qui complte les informations du compte POSIX. Lannuaire va permettre de centraliser ces deux comptes et donc faciliter ladministration de notre serveur Samba.

17.9.2. Prparation de lannuaire


Effaons tout dabord les anciennes donnes de lannuaire :
## Fichiers de base de donnes $ ls -l /var/lib/ldap ... -rw-r--r-- 1 openldap openldap -rw------- 1 openldap openldap ... -rw-r--r-- 1 openldap openldap

4096 fv 17 09:02 alock 8192 fv 17 09:02 __db.001 96 fv 15 21:07 DB_CONFIG

661

Chapitre 17. SAMBA & OpenLDAP


-rw-------rw-------rw-------rw------1 1 1 1 openldap openldap openldap openldap openldap openldap openldap openldap 8192 32768 76409 8192 fv fv fv fv 17 17 17 17 08:55 08:55 09:02 08:25 dn2id.bdb id2entry.bdb log.0000000001 objectClass.bdb

## Suppression $ /etc/init.d/slapd stop $ rm -f /var/lib/ldap/* $ /etc/init.d/slapd start

Crons ensuite trois Organisational Unit (OU) pour stocker les trois types de comptes (utilisateurs, groupes, machines) que gre Samba gre. Avec le chier samba-chier-base-ldif.txt (docs/sr013-ch05_part3-samba-chier-base-ldif.txt) :
## Initialisation de lannuaire $ ldapadd -W -D "cn=manager,dc=ermansion,dc=net" -x \ -H ldap://localhost -f samba-fichier-base-ldif.txt ... adding new entry "dc=ermansion,dc=net" adding new entry "ou=users,dc=ermansion,dc=net" adding new entry "ou=groups,dc=ermansion,dc=net" adding new entry "ou=machines,dc=ermansion,dc=net" ... ## Test daccs lannuaire depuis lhte Ubuntu (Samba) ## vers la machine virtuelle Debian (Annuaire LDAP) $ ldapsearch -x -H ldap://192.168.1.100 \ -b "dc=ermansion,dc=net" ... # ermansion.net dn: dc=ermansion,dc=net objectClass: dcObject objectClass: organization dc: ermansion o: ermansion description: ER Mansion # users, ermansion.net dn: ou=users,dc=ermansion,dc=net objectClass: top objectClass: organizationalUnit ou: users # groups, ermansion.net dn: ou=groups,dc=ermansion,dc=net ...

662

Chapitre 17. SAMBA & OpenLDAP


#==> Connexion OK

17.9.3. Comptes POSIX - Nsswitch


Source(s):

Web: Librairie libnss-ldap (dveloppe par PADL) (http://www.padl.com)

Congurer notre serveur GNU/Linux pour aller chercher les comptes POSIX sur lannuaire via le mcanisme Nsswitch. Nsswitch (Name Service Switch) permet de rediriger les requtes de noms vers des sources trs diverses. Une requte de nom est le fait dobtenir des informations concernant un nom particulier (rsoudre un login en uid, un nom de machine en adresse IP, connatre le rpertoire [home] dun utilisateur, etc...). La source de ces donnes est habituellement un chier (/etc/passwd, /etc/shadow, /etc/hosts) mais elle peut tre une base de donnes, un annuaire, etc... En effet, Nsswitch propose un mcanisme de plugins qui permet dtendre ses capacits dinterconnexion.
Note : Nsswitch (Name Service Switch) : Si les paquets glibc-doc-reference et info sont installs, essayer :
# info libc "Name Service Switch"

# Information sur le fichier # /etc/nsswitch.conf (docs/sr013-ch05_part3-samba-fichier-nss

Installons le plugin (la librairie) libnss-ldap qui permet Nsswitch dutiliser un annuaire LDAP comme source de donnes :
$ apt-get install libnss-ldap

663

Chapitre 17. SAMBA & OpenLDAP Congurons libnss-ldap avec le chier /etc/libnss-ldap.conf (docs/sr013-ch05_part3-samba-chier-libnss-ldap-conf.txt) dcrivant notament : Les droits daccs : par dfaut, lannuaire est accessible en lecture seule mais il est possible dindiquer la librairie un compte utiliser avec les directives binddn (lecture), bindpw et rootbinddn (criture). Lemplacement des comptes c.a.d o trouver les informations fournies habituellement par /etc/passwd (comptes utilisateurs) et par /etc/group (comptes de groupes).
Note : Pour les comptes utilisateurs, nous utilisons une astuce : pour Samba, nsswitch doit connatre la fois les comptes utilisateurs et les comptes machines. Puisque nous ne pouvons spcier quune base de recherche et une porte, nous indiquons une recherche partir du niveau suprieur (ici, la racine de lannuaire) avec une porte sub. Cette mthode permet nsswitch de descendre la fois dans lOU users, mais aussi dans lOU machines. Les groupes ne posent pas de problme car ils sont tous stocks dans la mme OU . La porte choisie ici est "one".

Pour plus dinformation :


$ man libnss-ldap.conf # Documentation

Activons la recherche dans LDAP au niveau de Nsswitch en modiant le chier /etc/nsswitch.conf () (ajouter ldap la n des entres passwd et group

17.9.4. Ajout de compte (ldapscripts)


Ajoutons deux comptes lannuaire. Un groupe utilisateurs et un utilisateur gareld appartenant ce groupe (chier utilisateur.ldif (docs/sr013-ch05_part3-samba-chier-utilisateur-ldif.txt)) :
$ ldapadd -x -W -D "cn=manager,dc=ermansion,dc=net" \ -f utilisateur.ldif ... adding new entry "cn=utilisateurs,ou=groups,dc=ermansion,dc=net" adding new entry "uid=garfield,ou=users,dc=ermansion,dc=net" ...

Les ldapscripts (http://contribs.martymac.com) permettent dajouter rapidement et simplement un compte POSIX un annuaire LDAP en saffranchissant des commandes prsentes ci-dessus.

664

Chapitre 17. SAMBA & OpenLDAP

17.9.5. Test de la reconnaissance dun compte


Voyons si nos nouveaux comptes sont bien reconnus et pris en compte par le systme :
$ id garfield id: garfield: usager inexistant. ## Je retente de recrer un utilisateur avec ## un nom diffrent mais le problme persiste :( $ id rltest id: rltest: usager inexistant.

Clairement ce stade le systme nest pas fonctionnel :(( Pourtant laccs lannuaire fonctionne, jai mis un niveau de log "any" dans le chier de conguration LDAP, je fais un ldapsearch -x le contenu safche (voir plus bas) ==> Aucun message derreur apparait dans syslog... Le service slapd aurait pu manuellement tre dmarrer en mode "debug" avec :
$ slapd -d 256

et regarder ce qui apparat lcran quand lorsquon essaye de rsourde des noms dutilisateurs ou de lister les entres connues, par ex. : id gareld; getent passwd; getent group... Un autre test de vrication possible, essayer de changer le propritaire dun chier :
chown garfield:utilisateurs fichier

et voir ce qui se passe... mais cela ne conrmerais que la prsence du problme. En vriant, ces 2 comptes nexistent pas localement dans /etc/passwd donc ce nest pas le problme. Le fait que LDAP fonctionne de lui mme permet de cerner un peu que le problme vient de la connection Nsswtich... En effet avec laide de :

$ tail -f /var/log/syslog # avec dans le fichier de configuration loglevel any

665

Chapitre 17. SAMBA & OpenLDAP


## rien ne semble se passer au niveau de LDAP ## contrairement un simple $ ldapsearch -x

On conrme que le problme vient du systme Nsswitch et pas de LDAP... aucune communication entre nss_ldap et lannuaire... Aprs un redmarrage de la Machine Virtuelle Debian, le message derreur suivant apparat :
... nss_ldap: failed to bind to LDAP server ldap://localhost: Cant contact LDAP server ...

Cest bizarre parce quil me semble ne pas avoir vu te tel message dans les logs prcdement mais aprs changement de conguration Nsswitch je navais par encore redmarrer la machine pensant que le changement tait effectif immdiatement sans ncessiter de redmarrage, mais apparemment ce nest pas le cas, en fait si cest le cas comme conrm par le coordinateur. Un tel service na pas besoin dtre redmarr. On voit que le module nss_ldap essaye daccder lURI ldap://localhost: et jai trouv bizarre que ce ne soit pas ldap://localhost:389 ou ldap://localhost tout court (sans ":" la n)... mais en fait aprs conrmation, cela peut tre normal, le : nal que lon vois est peut-tre juste un symbole :, na rien voir avec lURL. Jai donc tout de mme prcis le port dans le chier de conguration libnss_ldap.conf et en redmarrant jai revu le message... Jai donc tent de congurer le ldap.conf, et jai test (sans redmarrer) et cela a march cette fois :) Mais sans avoir pralablement test mon changement de port comme lerreur apparaissait toujours au dmarrage, jai dcid de commenter tous le chier ldap.conf et ressayer pour voir si la prcision du port dans le chier de cong ntait pas sufsant et bien cest le cas. La solution me semblais dindiquer le port 389 dans le chier de conguration. En dpit de ce qui est dit, le port 389 ne me semblait pas utilis par dfaut par le module nss_ldap qui est en charge de trouver linformation dans lannuaire...

666

Chapitre 17. SAMBA & OpenLDAP Toutefois, je me suis dis, mince quand mme a se trouve il sufsait simplement de redmarrer la machine sans avoir besoin de prciser le port, donc jai comment la prcision de port dans le chier de cong et redmarr la machine, et cela marche toujours mme aprs un redmarrage... ! Finalement tant bien tant que mal je tente de trouver comment redmarrer le service de nom pour quil prenne en compte les modications mais la encore jai suppos que nsswitch travail la vol du fait que je ne trouvais rien sur la question. Est-t-il possible de redmarrer un tel service sans avoir a redmarrer la machine ? En fait "non", ce nest pas ncessaire.
Note : Mise jour de Julien Aulagnier : Le "problme" provient du composant "nscd". Cest un dmon qui fournit un cache aux services de recherche de noms. Il suft de redmarrer le dmon (/etc/init.d/nscd restart) et les modications du /etc/nsswitch.conf seront effectives (dans le sens ou le cache de noms sera mis jour). Cela explique pourquoi la commande "id" fonctionne aprs un redmarrage de la machine.

Note : Mise jour de Ganal : Il avait tendance dsactiver nscd lpoque o il dcouvrait LDAP cause de ces problmes justement. Malheureusement, dans le cas de gros annuaires, mieux vaut fonctionner avec car dans un environnement de 2500 utilisateurs, mme avec nscd, les rsolutions UID/GID -> noms peuvent tre un poil longues.

Bon maintenant jai encore le message derreur au dmarrage de la machine (nss_ldap: failed to bind to LDAP server ldap://localhost: Cant contact LDAP server) Il semblerait que le serveur ldap nest pas dmarr avant que le module tente dy accder... A la rigueur, on pourrait tenter dutiliser un annuaire externe ma machine pour en avoir le coeur net. Sinon, essayer de dmarrer slapd plus tt dans les scripts rc.d... Au pire, il nest pas primordial que le serveur LDAP soit accessible au boot. Il y a toujours des comptes locaux pour administrer la machine... je mets donc de cot ce problme rsoudre pour plus tard peut-tre... Question : Il est dit dans la documentation de LDAP Name Service Provider
$ man nss_ldap # identique $ man libnss_ldap.conf

quil existe deux chiers de conguration mais lequel est rellemet utilis :

667

Chapitre 17. SAMBA & OpenLDAP


/etc/libnss-ldap.conf /etc/ldap/ldap.conf (location par dfaut sur Debian Lenny) "... (The location of the configuration file is configurable at compile time; the default path is /etc/libnss-ldap.conf.) Also, some features may be unavailable on certain operating systems or with certain LDAP libraries. For more information, consult your vendor. CONFIGURATION nss_ldap stores its configuration in the ldap.conf file, the location of which is configurable at compile time. (It should be noted that some LDAP client libraries, such as OpenLDAP, also use a configuration file of the same name. ..."

Ayant comment tous les paramtres dans /etc/ldap/ldap.conf jen conclue le premier mais dans ce cas quoi sert ce dernier ? Comment puis-je savoir lequel des deux est vraiment utilis (path de compilation) ?
$ dpkg -L libnss-ldap /usr /usr/share /usr/share/libnss-ldap

# Fichier qui est utilis. # Ce nest pas toujours simple, car les packagers # font un peu comme ils le sentent...

/usr/share/libnss-ldap/ldap.conf /usr/share/doc /usr/share/doc/libnss-ldap /usr/share/doc/libnss-ldap/AUTHORS /usr/share/doc/libnss-ldap/README.Debian /usr/share/doc/libnss-ldap/copyright /usr/share/doc/libnss-ldap/examples /usr/share/doc/libnss-ldap/examples/nsswitch.ldap /usr/share/doc/libnss-ldap/examples/people.ldif /usr/share/doc/libnss-ldap/examples/groups.ldif /usr/share/doc/libnss-ldap/examples/ldap.conf.gz /usr/share/doc/libnss-ldap/buildinfo.gz /usr/share/doc/libnss-ldap/README.gz /usr/share/doc/libnss-ldap/NEWS.gz /usr/share/doc/libnss-ldap/changelog.Debian.gz /usr/share/doc/libnss-ldap/changelog.gz /usr/share/doc/libnss-ldap/LDAP-Permissions.txt.gz /usr/share/man /usr/share/man/man5 /usr/share/man/man5/libnss-ldap.conf.5.gz /usr/lib

668

Chapitre 17. SAMBA & OpenLDAP


/lib /lib/libnss_ldap-2.7.so /usr/lib/libnss_ldap.so /lib/libnss_ldap.so.2

OK, cest rgl... je passe ! Je continue puisque le principal fonctionne :


$ id garfield uid=10001(garfield) gid=2000(utilisateurs) groupes=2000(utilisateurs) $ id rltest uid=10002(rltest) gid=2000(utilisateurs) groupes=2000(utilisateurs) $ getent group ... utilisateurs:*:2000: $ getent passwd ... garfield:CAK06tY3dm7gE:10001:2000:garfield:/home/garfield:/bin/sh rltest:CAK06tY3dm7gE:10002:2000:rltest:/home/garfield:/bin/sh

Les informations de compte et de groupe safche correctement donc le problme initial est rgl... Le groupe et les utilisateur apparaissent parmi la liste de ceux connus ! De plus, les utilisateurs appartiennent bien au groupe "utilisateurs" !

17.9.6. Connexion sur le systme Unix avec le compte LDAP


En ltat, il nest pas possible de se connecter sur le systme Unix avec le compte garel par example. Pour que ceci soit possible, il faudrait congurer PAM (Pluggable Authentication Modules), le systme modulaire dauthentication utilis par GNU/Linux) pour quil utilise lui-aussi LDAP. Nous avons travaill avec nsswitch sur la "reconnaissance" des comptes par le systme. PAM intervient en aval et permet lauthentication. Il faut donc congurer une librairie supplmentaire : libpam-ldap, disponible elle aussi sur http://www.padl.com. Ceci est une autre histoire, Samba ne ncessite pas cette conguration...

669

Chapitre 17. SAMBA & OpenLDAP

17.9.7. Connexion de Samba lannuaire


Congurer OpenLDAP pour quil soit capable de grer les comptes Samba et Samba pour quil aille chercher ses comptes sur lannuaire.

17.9.7.1. Copie du schema Samba


La premire tape est de copier le schma de Samba (fourni par le paquet samba-doc) dans le rpertoire schema dOpenLDAP et de linclure dans la conguration. :
$ cp /usr/share/doc/samba-doc/examples/LDAP/samba.schema.gz /etc/ldap/schema $ cd /etc/ldap/schema $ gunzip samba.schema.gz

Ajoutons ensuite :
## la fin des "include" dans le fichier /etc/ldap/slapd.conf : include /etc/ldap/schema/samba.schema

Enn, redmarrons le serveur LDAP :


$ /etc/init.d/slapd restart

17.9.7.2. Conguration de Samba


La dernire tape est de modier la conguration de Samba (/etc/samba/smb.conf) pour lui indiquer o stocker ses propres comptes. Modier la directive "passdb backend" :
[global] # Identification Netbios workgroup = homeuk netbiosname = ubuntu # Controle de domaine desactive oslevel = 40

670

Chapitre 17. SAMBA & OpenLDAP


domainlogons = no domainmaster = no localmaster = no # Base de donnee de passdbbackend = ldapadmindn = ldapssl = ldapdeletedn = ldapusersuffix = ldapmachinesuffix = ldapgroupsuffix = ldapsuffix = comptes ldapsam:ldap://localhost "cn=manager,dc=ermansion,dc=net" off no ou=users ou=machines ou=groups dc=ermansion,dc=net

# Authentification via la base de comptes locale security = user # Securite encryptpasswords = yes #Gestion des logs logfile = /var/log/samba/%m.log loglevel = 2 #Partage accessible uniquement au groupe sambausers [donnees] path = /data/samba/donnees comment = PartageDonnees writeable = yes browsable = yes guestok = no validusers = @utilisateurs

Le "passdb backend" utiliser est notre annuaire. Est prcis galement :


#- lemplacement des comptes utilisateurs, groupes et machines #- le compte administrateur LDAP utiliser ("ldap admin dn") pour que Samba puisse crire dans lannuaire. #- aucun mot de passe nest prcis dans le fichier de configuration

Pour des raisons de scurit, on va indiquer le mot de passe via lignes de commandes :
$ smbpasswd -w mon_mot_de_passe_admin_LDAP

671

Chapitre 17. SAMBA & OpenLDAP


Setting stored password for "cn=manager,dc=ermansion,dc=net" in secrets.tdb

Samba stocke le mot de passe dans un autre chier : secrets.tdb. Cration du rpertoire /data/samba/donnees avec activation des bons droits au groups "utilisateurs"...
$ mkdir -p /data/samba/donnees $ chgrp utilisateurs /data/samba/donnees $ chmod 775 /data/samba/donnees

Redmarrer Samba :
$ /etc/init.d/samba restart

17.9.7.3. Ajout du compte Samba


Essayons dajouter garled nos utilisateurs Samba :
$ smbpasswd -a garfield New SMB password: Retype new SMB password: Added user garfield.

Vrier

## Liste des utilisateurs connus de Samba : $ pdbedit -L smbldap_search_domain_info: Searching for:[(&(objectClass=sambaDomain)(sambaDomainName=UBUNT smbldap_open_connection: connection opened smbldap_search_domain_info: Searching for:[(&(objectClass=sambaDomain)(sambaDomainName=UBUNT smbldap_open_connection: connection opened init_sam_from_ldap: Entry found for user: garfield garfield:10001:garfield

Test connexion au partage

672

Chapitre 17. SAMBA & OpenLDAP


$ smbclient -U garfield //ubuntu/donnees Enter garfields password: Domain=[UBUNTU] OS=[Unix] Server=[Samba 3.2.5] smb: \>

Le test peut videmment tre ralis depuis une machine Windows si on prfre ! Dans tous les cas, lutilisateur gareld a bien le droit de se connecter et peut crer un chier dans le rpertoire partag !
Note : Nous navons prsent ici quun serveur de chiers autonome. Le principe pour un contrleur de domaine est identique, except que le contrleur de domaine doit, en plus, tre capable dajouter lui-mme les comptes POSIX lannuaire. Ici interviennent dautres directives Samba (add user script, add machine script, ...) et la ncessit dutiliser des scripts externes tels les ldapscripts (http://contribs.martymac.com).

17.9.8. Diagnostiquer un problme


17.9.8.1. Vrier que lannuaire LDAP fonctionne correctement
## Vrifier la config de slapd ## Augmenter le niveau de logs dans le fichier de configuration LDAP Loglevel 256 (ou encore "any" pour avoir tous les logs) ## Il existe aussi une directive pour rediriger ## les logs vers un fichier spcifique logdir /var/log/ldap.log ## Regarder dans les logs systme /var/log/syslog ## ou /var/log/ldap.log (si acfif) ## Par example il est possible de le voir en temps reel ## en tapant dans un nouveau terminal $ tail -f /var/log/syslog ## Pour regarder dans les logs OpenLDAP sil il y a des connexions ## et leur rsultat on peut lancer slapd comme ceci : $ slapd -d 256 ## Supprimer les fichiers BDB (Optionel) ## Les re-crer en injectant ton fichier LDIF de dpart (si annuaire vide!) ## Ensuite il suffit de faire une simple recherche dans lannuaire

673

Chapitre 17. SAMBA & OpenLDAP


$ ldapsearch -x ... ## En plus dune connection Anonymous, ## vrifier que le mot de passe du manager : cn=manager,dc=ermansion,dc=net ## fonctionne bien ##=> Si des problmes persistent il faut les rsoudres au niveau du service LDAP

17.9.8.2. Vrier que le service Nsswtich (libnss-ldap/nss_ldap) fonctionne

## Vrifier quel fichier de configuration est utilis par Nsswitch ## (Path la compilation: /etc/libnss-ldap.conf, /etc/ldap/ldap.conf, /usr/share/ldap/ldap. ## Vrifier la configuration de lutilisation de LDAP pour le service de nom ## Vrifier lacces au information des utilisateurs enregistrer dans lannuaire ## Ils doivent apparatre dans la liste fournit par : $ getent passwd $ id nom_utilisateur ## Doit retourner les informations uid, gid, etc ## de lutilsateur en paramtre ## De mme pour les groupes dfinit dans lannuaire $ getent group ## Vrifier que le compte OpenLDAP et parmi les utilisateurs ignors nss_initgroups_ignoreusers root,openldap,.... ## ## ## ## Faire de mme pour chaque compte de service systme qui pourrait poser problme Par example si gdm freeze, et ue le userid du dmon gdm est dans passwd, ajouter le comme compte ignorer...

##==> Si le problme persiste, le problme vient du service de nom Nsswitch

17.9.8.3. Vrier que la liaison Samba - LDAP fonctionne


## Augmenter le niveau de logs de Samba et regarder dans smbd.log ## Vrifier que le mot de passe du manager : # cn=manager,dc=ermansion,dc=net est bien connu de Samba # (smbpasswd -w ...) ## Regarder dans les logs OpenLDAP sil y a des connexions # et leur rsultat (on peut lancer slapd comme ceci : slapd -d 256)

674

Chapitre 18. SR015 - Administrer un serveur CVS


Installer et administrer un environnement de dveloppement collaboratif.

18.1. Systme de gestion de version (Version Control Systems - VCS/SCM Source Control Management)
Source(s):

Web: Gestion de Version (Wikipedia) (http://fr.wikipedia.org/wiki/Gestion_de_version_d%C3%A9centralis%C3%A9e#Syst.C3.A8mes_centralis.C3.A9s_et_d Revision Control (Wikipedia) (http://en.wikipedia.org/wiki/Revision_control)

18.1.1. Gestion de versions centralise (CVS, Subversion)


CVS et Subversion sont des logiciels de gestion de versions centralise, ce qui veut dire quil nexiste quun seul dpt des versions, dpt qui fait rfrence. Cela simplie la gestion des versions mais est contraignant pour certains usages (travail sans connexion au rseau ou tout simplement travail sur des branches exprimentales ou contestes).

18.1.2. Gestion de versions dcentralise (Git, Mercurial, Bazaar,...)


Avec larrive des logiciels libres et leur dveloppement communautaire, une autre faon de voir la gestion de versions est apparue. Cette autre vision consiste voir loutil de gestion de versions comme un outil permettant chacun de travailler son rythme, de faon dsynchronise des autres, puis doffrir un moyen ces dveloppeurs de schanger leur travaux respectifs. Cest ce que lon nomme la gestion de versions dcentralise. Mercurial, Darcs, Bazaar, Git, Monotone, GNU Arch et BitKeeper (propritaire) sont des logiciels de gestion de versions dcentralise. Avec ceux-ci, il existe plusieurs dpts de versions et aucun na de statut privilgi.

675

Chapitre 18. SR015 - Administrer un serveur CVS

18.1.3. Comparaison
Source(s):

Web: Comparison Table between Bazaar, CVS, Git, Mercurial, Subversion (http://versioncontrolblog.com/comparison/Bazaar/CVS/Git/Mercurial/Subversion/index.html) Git vs. Mercurial: Please Relax (MacGyver/JamesBond) (http://importantshock.wordpress.com/2008/08/07/git-vs-mercurial/) Mercurial vs Git (http://rg03.wordpress.com/2009/04/07/mercurial-vs-git/) Why switch to Bazaar ? (http://doc.bazaar.canonical.com/migration/en/why-switch-to-bazaar.html) Opinion: Autre Contribution dun developpeur (Bazaar -, Mercurial -, Git +...) (docs/sr015-ch03-vcs-comparaison-autre-contribution.txt)

JP aurait une prfrence pour Mercurial dun point de vu technique. Il rsume ainsi : "... Git a t construit par un dveloppeur, pour des dveloppeur, hors de toute contrainte de production. Je rsumerai ainsi : git, a marche ..." Dautres suggre : "... Choisir un VCS dpasse le simple cadre technique : cest un choix social, si les dveloppeurs (ou nimporte quel utilisateurs) de ton projet naiment pas ton VCS, ils ne lutiliseront pas/mal... Aujourdhui, un project manager de logiciel libre qui utiliserait un VCS autre que cvs, svn, git ou mercurial est sr de perdre 60% des possibles contributions extrieures..."

18.1.4. Quels VCS/SCM choisir ?


Parmi les systmes de gestions de versions lequel choisir ? Les plus utiliss dans le libre semble tre : SVN/Git/Mercurial/Bazaar... Aucun ne semble faire totalement lunanimit... Le mieux est de tous les essayer et de voir celui qui nous suite le mieux... mais cela dpendera aussi grandement de :
- Du temps que lon a pour apprendre... sur le long terme le mieux est den maitriser au moins un et de connatre brivement les autres... - La taille du projet : Pour un petit projet la maison il fairont tous laffaire pour le developpement dun programme denvergure cest une autre question... - Si lon integre un projet existant... pas de choix,

676

Chapitre 18. SR015 - Administrer un serveur CVS


il faut utiliser loutil mis disposition par les developper du projet... - Si lon crer son propre projet, SVN est simple et certainement le plus rpandu lheure actuelle mais a des limitations (centralis, renomage dlicat,...) qui pousse de plus en plus de projet open source vers Mercurial ou Git... - Pour ma part je choisirais entre Git et Mercurial... aprs cest une question de got... chacun a ses atots et limites... Mercurial semble plus simple dapproche que Git...

En clair il ny a pas de choix idal, chacun de tester et y prendre got ! Pourtant un avantage clair du dcentralis (Git) sur le centralis (CVS, SVN) :
Source: http://www.scribd.com/doc/15789311/Introduction-a-Git

A propos de Git Et pourquoi quil est meilleur que les autres, sil vous plat ? * Fini les .svn ou CVS qui tranent partout - Gestion globale dune arborescence * Commiter nest pas publier - Valider ses modifications est diffrent denvoyer ses modifications dans le tronc commun * Enfin matre chez soi - Valider, modifier, faire des branches se fait localement sans lien rseau sans lien avec * Ne fait rien de moins que les autres - Gestion par dpt centralis ou distribu avec synchronisation * Interoprable

18.2. CVS/Subversion
Source(s):

OF: SR015-ch00-pageDeGarde.pdf (docs/eof/sr015-ch00-pageDeGarde.pdf) SR015-ch01-010-cours-cvs.pdf (docs/eof/sr015-ch01-010-cours-cvs.pdf) Tutorial: Grez vos projets laide du gestionnaire de versions Subversion (http://www.siteduzero.com/tutoriel-3-2696-gerez-vos-projets-a-l-aide-du-gestionnaire-de-versionssubversion.html)

677

Chapitre 18. SR015 - Administrer un serveur CVS

18.3. Git (Language C)


18.3.1. Prsentation, Rfrence et Documentation
Source(s):

Web: Fiche Plume sur Git [FR] (http://www.projet-plume.org/fr/che/git) Git (site ofciel) (http://git-scm.com) Git Documentation (EN) (http://git-scm.com/documentation) Git Documentation (FR) (http://www.alexgirard.com/git-book/index.html) Git Talk (PDF) (http://www.kernel.org/pub/linux/kernel/people/rric/git-talk-pub.pdf) QuickStart: Git getting started (http://wiki.github.com/bard/sameplace/getting-started-with-git) Git Cheat Sheet I (http://cheat.errtheblog.com/s/git) Git Cheat Sheet II (http://people.gnome.org/~federico/misc/git-cheat-sheet.txt) Git QuickStart (Kernel.org) (https://git.wiki.kernel.org/index.php/QuickStart) Tutorial: Ofcial Git Tutorial (http://www.kernel.org/pub/software/scm/git/docs/gittutorial.html) Introduction Git (2008) [FR] (http://www.scribd.com/doc/15789311/Introduction-a-Git) Understanding Git Conceptually (Branches) (http://www.eecs.harvard.edu/~cduan/technical/git) Mini Tutorial dun tudiant de lof (http://ferry.eof.eu.org/lesjournaux/pl/public_html/sourceAutres/html/git.html) Grez vos codes sources avec Git (Site du Zro) (http://www.siteduzero.com/tutoriel-3-254198-gerez-vos-codes-sources-avec-git.html) Vido Tutorial: Git Casts (http://gitcasts.com/) Initialization and Cloning (http://gitcasts.com/posts/setup-initialization-and-cloning) Plugins: Git sous Eclipse (http://repo.or.cz/w/egit.git) Git sous Netbeans (http://nbgit.org) Git pour Tortoise (http://code.google.com/p/tortoisegit)

18.3.1.1. Fonctionnalits gnrales


GIT est un gestionnaire de version dcentralis qui permet, comme dautres outils (CVS, SVN, ...), de grer le contenu des chiers sources dun logiciel. En particulier, il permet de :
* * * * * Conserver toutes les versions de tous les fichiers Rcuprer toutes les versions de tous les fichiers Comparer les versions des fichiers Grer une arborescence Travailler de manire cooprative

678

Chapitre 18. SR015 - Administrer un serveur CVS Contrairement dautres outils de gestion de version, GIT ne possde pas de dpt centralis (comme par exemple CVS). Chaque copie de travail possde son propre dpt et permet le dveloppement local. La synchronisation des dpts locaux peut se faire avec dautres dpts, y compris des dpt publics partags (ouverts aux committers dun projet comme dans le modle CVS). Le systme distribu permet davoir plusieurs serveurs contenant le code source, chaque serveur possdant ventuellement son propre historique. Chaque serveur peut se synchroniser partir de diffrentes sources. GIT donne satisfaction aux utilisateurs par sa facilit dutilisation, sa robustesse, son modle totalement distribu et sa gestion des branches. GIT facilite grandement la cration, la fusion des branches ce qui incite les dveloppeurs crer davantage de branches de test pour revenir une branche principale par la suite. Fonctionnalits :
* * * * * *

Gestion dune arborescence locale Chaque client possde son dpt local Changement de branche et fusion de branche en local Travail hors ligne sans connexion rseau Accs extrieur uniquement pour la mise jour du dpt local ou la mise jour du dpt d Synchronisation avec une arborescence distribue : serveur HTTP et dmon GIT, SSH, FTP

Les commandes Git sont organises selon le prol de lutilisateur :


* * * * Dveloppeur Individuel (Standalone) Dveloppeur Individuel (Participant) Intgrateur Administrateur du dpt

18.3.1.2. Interoprabilit
Interoprabilit avec les autres gestionnaires de version CVS, SVN, Arch...

679

Chapitre 18. SR015 - Administrer un serveur CVS

18.3.1.3. Limitations, difcults, fonctionnalits importantes non couvertes


Des conits peuvent apparatre lors de la fusion de branches locale/locale, locale/distante, distante/locale. Dans ce cas GIT afche les zones de conits quil convient de rsoudre manuellement. Le modle totalement distribu ncessite une modication des habitudes de dveloppement pour les personnes habitues aux outils centraliss comme CVS ou SVN.

18.3.2. Notion : rpertoire Git (.git), rpertoire de travail et index Git


Source(s):

Git Community Book : Le rpertoire Git et le rpertoire de travail (http://www.alexgirard.com/gitbook/1_le_r%25C3%25A9pertoire_git_et_le_r%25C3%25A9pertoire_de_travail.html) Lindex Git (http://www.alexgirard.com/git-book/1_l%25E2%2580%2599index_git.html)

Every Git clone is a full-edged repository with complete history and full revision tracking capabilities, not dependent on network access or a central server. Branching and merging are fast and easy to do. Le rpertoire Git (.git par dfaut) : Le rpertoire git est un rpertoire qui contient tout lhistorique de Git et les mta-informations du projet : tous les objets (commits, tree, blobs, tags), tous les pointeurs vers les diffrentes branches et plus encore. Un seul rpertoire Git par projet. Situ la racine de votre projet, ce dossier se nomme .git par dfaut mais il peut tre nomm diffremment. Le rpertoire de travail : Le rpertoire de travail de Git est le rpertoire qui contient la version courante des chiers sur lesquels vous travaillez. Les chiers de ce rpertoire sont souvent effacs ou remplacs par Git quand vous changez de branche, ce qui est tout fait normal. Tout votre historique est stock dans votre rpertoire Git ; le rpertoire de travail est simplement une version temporaire de votre projet dans lequel vous modiez les chiers jusqu votre prochain commit. Lindex Git :

680

Chapitre 18. SR015 - Administrer un serveur CVS Lindex Git est une zone dassemblage (stage) entre votre rpertoire de travail et votre dpt. Vous pouvez utiliser lindex pour construire un groupe de changements qui seront committs ensembles. Quand vous crez un commit, cest ce qui se trouve dans lindex qui est committ et non ce qui se trouve dans le rpertoire de travail. La faon la plus simple de voir ce quest lindex est dutiliser la commande git status. Quand vous lancez git status, vous pouvez voir quels chiers sont assembls ("le are staged", actuellement dans lindex), quels sont ceux modis mais pas assembls et ceux qui ne sont pas suivis.

18.3.3. Installation/Conguration
$ apt-get install git-core # # $ $ Configuration intiale --global permet dutiliser les mme paramtres pour tous les projets) git config --global user.name Richard Lger git config --global user.email richard.leger@blabla.com

# Vrification de la configuration $ git config user.name Richard Lger $ git config user.email richard.leger@blabla.com # Afficher tous les paramtres configurs $ git config -l user.name=Richard Lger user.email=richard.leger@blabla.com color.branch=auto color.status=auto core.repositoryformatversion=0 core.filemode=true core.bare=false core.logallrefupdates=true remote.origin.fetch=+refs/heads/*:refs/remotes/origin/* remote.origin.url=git@athaliasoft.fr:kring.git branch.master.remote=origin branch.master.merge=refs/heads/master # Afficher le fichier de configuration $ cat ~/.gitconfig [user] name = Richard Lger email = richard.leger@blabla.com # Options de configuration $ git config --global color.branch auto $ git config --global color.status auto

681

Chapitre 18. SR015 - Administrer un serveur CVS

18.3.4. Cration projet (nouveau ou depuis existant)


Crer un nouveau projet de zro :

$ mkdir myproject $ cd myproject $ git init Initialized empty Git repository in /tmp/myproject/.git/ $ find .git .git .git/hooks .git/hooks/update.sample .git/hooks/commit-msg.sample .git/hooks/post-receive.sample .git/hooks/pre-commit.sample .git/hooks/prepare-commit-msg.sample .git/hooks/post-update.sample .git/hooks/applypatch-msg.sample .git/hooks/post-commit.sample .git/hooks/pre-applypatch.sample .git/hooks/pre-rebase.sample .git/objects # Git sauvegarde les donnes (objets compresss) dans les .git/objects/info .git/objects/pack .git/info .git/info/exclude .git/HEAD .git/config .git/refs .git/refs/heads .git/refs/tags .git/description .git/branches $ touch helloworld.txt # Crer un fichier $ echo "Bonjour le monde \!" >> helloworld.txt # Modifier un fichier $ git ls-files --cache # Par dfaut aucun fichier dans le dpt $ git add . # Ajouter tous les fichiers pour le prochain $ git ls-files --cache # Liste des fichiers prt pour le prochain c helloworld.txt $ git ls-files --stage # Liste des fichiers dans lindex 100644 c37b2ce44b821b6f0fb577bb9ca36a21384c9b77 0 helloworld.txt $ # # # # # # # # git status On branch master Initial commit Changes to be committed: (use "git rm --cached <file>..." to unstage) new file: helloworld.txt

# Affiche le status actuel, action au procha

682

Chapitre 18. SR015 - Administrer un serveur CVS

$ git commit # Prompted pour indiquer un commentaire de c [master (root-commit) 4b7ccd6] Ceci est mon premier commit avec git :) 1 files changed, 1 insertions(+), 0 deletions(-) create mode 100644 helloworld.txt $ git status # On branch master nothing to commit (working directory clean)

# On vrifie que Git a bien ajouter le fichi # Aucun fichier ne reste commiter :) # Le repertoire de travail est propre # Afficher les logs - Voir le(s) commit(s)

$ git log commit 4b7ccd68c6d011b50b85b00998e777dc44f00a1d Author: Richard Lger <richard.leger@blabla.com> Date: Sat May 29 20:31:41 2010 +0100 Ceci est mon premier commit avec git :)

$ find .git # En comparant au resultat prcedent de cett (...) # On voit bien que Git a ajout un groupe d .git/objects .git/objects/bf .git/objects/bf/432a2926d1d87abfe6015918ee077ed871cb63 .git/objects/c3 .git/objects/c3/7b2ce44b821b6f0fb577bb9ca36a21384c9b77 .git/objects/info .git/objects/4b .git/objects/4b/7ccd68c6d011b50b85b00998e777dc44f00a1d .git/objects/pack (...)

Note : Laccs au dpot Git de notre projet PHP Kring requiert la prcense dune clef publique SSH (DSA ou RSA) sur le serveur. Pour plus dinfo consulter la page du projet.

Copier un projet existant :

# DUPLIQUER (cloner) un dept existant $ cd .. $ git clone git clone git://athaliasoft.fr/git/kring.git # Alternative syntaxe: git@athalia $ git clone git clone git://athaliasoft.fr/git/kring.git dev-kring # Alternative pour perso Initialized empty Git repository in /tmp/kring/.git/ # "dev-kring" est le nom peronalis remote: Counting objects: 39, done. remote: Compressing objects: 100% (34/34), done. remote: Total 39 (delta 1), reused 0 (delta 0) Receiving objects: 100% (39/39), 36.59 KiB, done. Resolving deltas: 100% (1/1), done. $ ls (...) drwxr-xr-x 6 filostene filostene

4096 2010-05-29 20:46 kring

683

Chapitre 18. SR015 - Administrer un serveur CVS


(...)

18.3.5. Historique du projet (Consulter les logs)


$ cd kring $ git log commit 93ebb69dac3ad8125ae3e43073421539e87d33ee Author: Jimmy Rudolf <jimmy@blabla.lan> Date: Wed May 26 01:03:35 2010 +0200 Sources initiales commit 097624824ba476b675ad901e8c79b466c8e0b3ed Author: Jimmy Rudolf <jimmy@blabla.lan> Date: Wed May 26 01:00:03 2010 +0200 Initialisation du dpot kring

# Afficher lhistorique complet du p

$ git log --author=Jimmy Rudolf --oneline 93ebb69 Sources initiales 0976248 Initialisation du dpot kring

# Afficher lhistorique pour un util # Le format da

18.3.6. Appliquer des mise jour et changement au projet


Obtenir les changements des autres avant tous changements locaux (si le travaille est collaboratif) :

# # $ # $

A faire par la suite, chaque fois, avant de modifier et committer les fichiers en local je devrais faire un : git pull git@athaliasoft.fr:kring.git master ou simplement git pull origin master # je suppose, vrifier...

# EFFECTUER UN CHANGEMENT $ nano README $ git add .

# Je modifie un fichier du projet

# je publie (assemble) dans lindex # pour inclure la modification au p

$ git commit -m "Add project description to README file" # Je commit :) # c.a.d que japplique les modifica

684

Chapitre 18. SR015 - Administrer un serveur CVS

Partager ses changements :

# PUBLIER VERS LE DEPOT COMMUN $ git push origin master Counting objects: 5, done. Delta compression using up to 2 threads. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 586 bytes, done. Total 3 (delta 1), reused 0 (delta 0) To git@athaliasoft.fr:kring.git 93ebb69..b343e30 master -> master

# Puis je partage mes changement # en metant jour la branche commu

# Ci-dessus origin et master sont remplacer automatiquement # par les valeurs configurs automatiquement lors de lopration clone $ git config -l ... remote.origin.fetch=+refs/heads/*:refs/remotes/origin/* remote.origin.url=git@athaliasoft.fr:kring.git branch.master.remote=origin branch.master.merge=refs/heads/master # origin etant compris comme remote.origin.url et donc git@athaliasoft.fr:kring.git # master etant compris comme branch.master.merge et donc master:master # ALTERNATIVEMENT # on pourrait faire de facon plus explicite : $ git push git@athaliasoft.fr:kring.git master:master

# EXPORTER UN PATCH (aps un commit) $ git format-patch origin/master # Alternative 1 $ git format-patch HEAD^

# creates 0001-commit-message.txt # (HEAD^ means every patch since one revision before the # tip of the branch, also known as HEAD) # cre 0001-message.txt

# Alternative 2 $ git format-patch origin -1

Note : Le patch est format idalement pour tre envoy par courriel.

# IMPORTER/APPLIQUER UN PATCH (le patch 0001-message.txt est recu par courriel ou via scp par exemple) $ git apply /path/to/patch/0001-message.txt

685

Chapitre 18. SR015 - Administrer un serveur CVS


$ git commit -a # Alternativement $ git apply < /path/to/patch/0001-message.txt $ git commit -a

Note : git am permet dappliquer les patchs reus dans sa boite aux lettres (mbox).

18.3.7. Les branches


Chaque dpt peut avoir plusieurs branches, par dfaut il en existe dj avant mme de travailler sur le dpt :
$ git branch -a * master remotes/origin/HEAD -> origin/master remotes/origin/master

On observe les branches existantes master and origin/master dans le listing prcdant. master est la branche courante sur laquelle on travaille (marque par lastrisque). origin/master est la branche "master" du dpt distant. Aprs quelques jours, quand vous voudrez mettre jour, les nouveauts seront rcupres/transferres (fetched) depuis le dpt distant et sauves localement dans la branche "origin/master". /remotes/ regroupent toutes les branches li une source non locale, distante donc (transfrer depuis/vers un hte distant).

18.3.8. Ajouter des chier lindex : Quelle diffrence entre "git add -A", "git add -u" et "git add ." ? Enlever du repertoire

686

Chapitre 18. SR015 - Administrer un serveur CVS

de travail les chiers supprims


Source(s):

Tutorial: Difference of git add -A and git add . (http://stackoverow.com/questions/572549/difference-of-git-add-a-and-git-add) Removing Deleted Files from your Git Working Directory (http://www.geekgumbo.com/2010/05/16/removing-deleted-les-from-your-git-working-directory/)

git add est la commande qui permet dassembler des chiers du repertoire de travail (courant) vers lindex (repertoire de "prparation", "pr-commit") en vue du prochain commit (qui correspond un transfert des chiers assembls dans lindex vers le dpot Git local : le repertoire Git .git du projet) "git add -A" est un raccourci pour "git add .; git add -u". De ce que je comprends partir du test dtaill ci-aprs :
Pour le prochain commit, $ git add . # # # # #

assemble dans lindex uniquement les fichiers crs ou modifis mais pas ceux effacs (via rm para exemple) Simplement parce que les fichiers nexiste plus :) Toutefois, les fichiers effacs apparaissent toujours dans le rpertoire simplement parce quil nont pas t netoys (cleared) de ce rpertoire (

$ git add -u

# assemble uniquement les fichiers modifis ou effacs # mais pas ceux crs # quivaut git add -update # les deux oprations en une, assemble donc tous les fichiers # quivaut git add -all

$ git add -A

Note : "...The -u says look at the index, and only add les from your working directory that are in the index. Any les with modied content in the index will be updated, and any les that have been removed in the working directory, will be put in the index for removal in the next commit..."

Note : git rm ajoute directement dans lindex les chiers effacs, sans passer par add .

# Initialiser le test $ cd /tmp $ mkdir tmp

687

Chapitre 18. SR015 - Administrer un serveur CVS


$ cd tmp $ git init Initialized empty Git repository in /tmp/tmp/.git/ # Crer du contenu et un premier commit $ echo Change me > change-me $ echo Delete me > delete-me $ ls change-me delete-me $ cat change-me Change me $ git add change-me delete-me $ git commit -m initial $ git log # $ $ $ Changements aprs commit echo OK >> change-me rm delete-me echo Add me > add-me

# Fichier modifi # Fichier effac # Fichier ajout

$ git add . $ git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # new file: add-me # modified: change-me # # Changed but not updated: # (use "git add/rm <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # deleted: delete-me # $ git reset change-me: locally modified delete-me: locally modified $ git status # On branch master # Changed but not updated: # (use "git add/rm <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: change-me # deleted: delete-me # # Untracked files: # (use "git add <file>..." to include in what will be committed) # # add-me no changes added to commit (use "git add" and/or "git commit -a")

688

Chapitre 18. SR015 - Administrer un serveur CVS

$ $ # # # # # # # # # # #

git add -u git status On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) modified: deleted: change-me delete-me

Untracked files: (use "git add <file>..." to include in what will be committed) add-me

$ git reset change-me: locally modified delete-me: locally modified $ git status # On branch master # Changed but not updated: # (use "git add/rm <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: change-me # deleted: delete-me # # Untracked files: # (use "git add <file>..." to include in what will be committed) # # add-me no changes added to commit (use "git add" and/or "git commit -a") $ $ # # # # # # # # git add -A git status On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) new file: modified: deleted: add-me change-me delete-me

18.3.9. Enlever des chier lindex, avant de committer


Voir la commande git update-index avec les options --remove ou --force-remove

689

Chapitre 18. SR015 - Administrer un serveur CVS

18.3.10. A ne pas faire !


$ $ $ $ rm -r /dpot git local/ cd /dpot git local/ git add . git commit -m "Jai tout supprim"

# ou "git add -A" ou "git add -u"

Note : Juste pour info : - il me semble aprs avoir lu un peu la doc que "git add ." na aucun effet sur les chiers effacs :) Par cette commande, il ne sont pas assembls dans lindex. Ce serait plutot "git add -A" ou "git add -u" :) - Par ailleurs, pas besoin de sauvegarde puisque lhistorique est conserv dans le dpot, il sufrait donc pour rcuprer les chiers de revenir au point avant le comit en question pour rcuprer lensemble de larborescence... :)

18.3.11. Git - Congurer un dpt distant (Remote)


Setting up a new remote git repository (http://toolmantim.com/thoughts/setting_up_a_new_remote_git_repository)

18.3.12. Git - Congurer un dpt public HTTP ("static") Travailler en collaboration


Suite mes explorations et divers tests sur la mise en place dun dpt plublic Git, jai nalement russi rendre mon dpt Git public via HTTP sur le serveur de lof... voici un rsum condens des tapes suivis... Dans le cadre de divers projet raliss en groupe, il apparat essentiel mes yeux dutiliser un outil tel que Git pour grer et partager le code et le dvelopper en pleine collaboration... Pour le projet PHP on dispose dun serveur Git mis en place par Jimmy, mais pour ma collaboration avec Christelle sur le projet Chat Ajax ce nest pas le cas..., il a donc fallu trouver une solution concilliant les deux contraintes :) Pour faciliter la gestion du code, je lui ai donc propos dutiliser Git qui est relativement simple utiliser avec mise en place dun dpt public pour chacun... au lieu de passer par un serveur. Cela va nous permettre :

- de travailler facilement et ensemble sur le code en changeant nos modifications via dpt - de garder un historique des changements et de pouvoir revenir en arriere si besoin

690

Chapitre 18. SR015 - Administrer un serveur CVS

- de fusionner des parties du code en cas de conflit... (si on a procd des changements a

Voici les tapes (HOWTO) suivre de zro, pour que lon puisse collaborer via des dpts Git public HTTP (le mien et le sien)... Ensuite, une fois linfrastructure en place, on travail normalement en rptant certaines tapes dcrites, elle "pull" de moi, elle modie, elle commit, elle publie, je "pull" delle, je modie, je publie... et ainsi de suite... magique :)
Note : Pour avoir un bref apercu de Git jinvite lire :

- la section : Git (Language C) - notre wiki du projet PHP : (Git ct client (http://kring.athaliasoft.fr/wiki/index.php/Gestion_

Cest vraiment pas bien long lire et peut aider comprendre.

18.3.12.1. Mise jour dinitialisation (Optionnelle)


Christelle menvoie ses dernires mise jour en chier joint par courriel, ainsi je peux mettre jour mon dpt Git public avant quelle ne lutilise une premire fois... pour initialiser son dpt... :)

18.3.12.2. Installer/Congurer Git (Optionelle si dj install)


( faire une fois seulement) (si Git est dja install on peut passer cette tape...) $ apt-get install git-core $ git config --global user.name Marc Dupond $ git config --global user.email marc.dupond@blabla.com Accorder les paramtre vos propre nom et adresse courriel --global permet dutiliser les mme paramtres pour tous les projets. $ git config -l # Afficher lensemble de la configuration

Pour plus de dtail sur linstallation se rfrer la section Git ddie Installation/Conguration.

691

Chapitre 18. SR015 - Administrer un serveur CVS

18.3.12.3. Cloner depuis mon dpt Git public (la premire fois seulement)
( faire une seule fois pour initialiser le projet) $ mkdir ~/projets

# Jassume que ceci est son repertoire personnel de projet de developpe # A addapter a son environement bien sur :)

$ cd ~/projets $ git clone http://ferry.eof.eu.org/~rlr/git/chat.git

# Cest mon depot Git public de not # il est expliqu ci-apres comment # pour que je puisse rcuperer ses

$ cd chat $ git log

# Toujours ce mettre dans le rpertoire du dpt Git pour lancer un commande # Ici "chat" est le nom du repertoire du projet cr automatiquement lors du # Je lance la commande permettant dafficher lhistorique des changements (l

Le repertoire ~/projets/chat est le repertoire de travail sur lequel elle va pouvoir faire s Le repertoire ~/projets/chat/.git est son dpt Git local du projet (une copie de mon dpt

* Exclure certains fichiers (A ne faire quune fois, la premire fois...) (notemmant les fichiers temporaire *~) $ nano .git/info/exclude # d-commenter la ligne " #~* " (supprimer le #) # enregistrer les changements * Puis vrifier $ cat .git/info/exclude # git-ls-files --others --exclude-from=.git/info/exclude # Lines that start with # are comments. # For a project mostly in C, the following would be a good set of # exclude patterns (uncomment them if you want to use them): # *.[oa] *~

18.3.12.4. Modier le code et mettre jour son dpt Git local


(A faire a chaque fois quelle veux effectuer des modifications et publier son code apres lavoir tester bien sur :) $ cd ~/projets/chat $ git pull http://ferry.eof.eu.org/~rlr/git/chat.git master # Cette opration va mettre a jour son dpt locale avec mes changements mais attention, si elle a modifi des fichiers sans les avoirs commits, voir ci-aprs, les changements peuvent provoquer des conflits lors du prochain commit... il est donc prfrable de comiter un maximum de changement voir tous... :) $ nano nom_du_fichier_que_tu_souhaite_modifier # Ici jindique nano comme diteur mais elle peut modifier

692

Chapitre 18. SR015 - Administrer un serveur CVS


# les fichier avec celui de son choix : gedit, netbeans, etc... # Elle peut faire des changements dans plusieurs fichier la fois, # toutefois il vaut mieux y aller pas pas et modifier/commiter une fonctionalite/bug la * Un fois quelle a modifi ce quelle voulait (implementer un nouvelle function, rsolu un si elle a test et que ca fonctionne, il faut quelle commite ses changements (cad transfrer ses changements de son rpertoire de travail vers son depot Git local), pour cela elle fais : $ git status (optionel) $ git add . $ git commit -A

# Pour visualiser les modifications effectu depuis le dernier comm # Ajouter tous les fichiers modifis lors du prochain comit # Commiter tous les changements (--all), inclue les fichiers effac

* Une fentre va souvrir pour pouvoir rdiger un commentaire de commit. Le premier paragraphe de commentaire doit tre court est signal brivement ce qui a chang "Resolution bug 2010-06-04-001 Pb de connection base de donnees" ou "Ajout de la classe User" ...

Eventuellement elle cre un deuxime paragraphe en laissant une ligne blanche entre les de (toujours dans le mme commentaire de commit) pour dcrire plus longuement les changements ajouter plus de details. " Cration de la classe User, ajout de proprit : - Nom - Prnom - Email " Puis elle enregistre son commentaire (CTRL+O Y et exit CTRL+X lditeur...) Mainteant elle peux visualiser son commit dans lhistorique : $ git log # Optionel, mais permet de vrifier que le commit apparat bien # dans lhistorique

18.3.12.5. Crer son dpt Git public partir de son dpt Git local
(A faire une fois seulement) # Son dpt Git local se trouve dans ~/projets/chat/ # Elle cre son depot Git public dans ~/public_html/git/ # Pour cela elle fait : $ git clone --bare ~/projets/chat ~/public_html/git/chat.git $ cd ~/public_html/git/chat.git/

693

Chapitre 18. SR015 - Administrer un serveur CVS


$ $ $ $

touch git-daemon-export-ok git --bare update-server-info cp ~/public_html/git/chat.git/hooks/post-update.sample ~/public_html/git/chat.git/hooks/po chmod +x ~/public_html/git/chat.git/hooks/post-update

18.3.12.6. Mettre jour son dpt Git public partir de son depot Git local
( faire aprs chaque commit ou aprs plusieurs de tes commit) $ cd ~/projets/chat/ $ git push ~/public_html/git/chat.git master

18.3.12.7. Transfrer son dpt Git public (sur ferry.eof.eu.org)


(pour que je puisse accder a tes modification) (A faire aprs chaque mise jour de ton depot Git public)

# En assumant quelle a une connexion ssh fonctionnelle vers son compte sur un serveur (ex: $ rsync -av --del --delete-excluded --filter="- *~" ~/public_html/git/ ccn@ferry.eof.eu.org: # # $ > >

La premire fois il se peut que cela ne fonctionne pas parce que le repertoire public_html de destination nexiste pas. Il peut tre cr manuellement sur le serveur de destination ssh ccn@ferry.eof.eu.org mkdir public_html/git exit

18.3.12.8. Mise jour de mon dpt Git local depuis son dpt public (sur ferry.eof.eu.org)
( faire avant chacune des modifications que je veux effectuer) (Pour que je puisse accder ses modifications avant de travailler sur le code) # Un fois sa synchronisation termine, il ne me reste plus qu rcuprer # rgulirement ses mises jour depuis son dpt public : $ git pull http://ferry.eof.eu.org/~ccn/git/chat.git master

18.3.12.9. Tester son dpt Git public


(On peut facilement le faire soit mme...) $ cd /tmp $ git clone http://ferry.eof.eu.org/~ccn/git/chat.git master

694

Chapitre 18. SR015 - Administrer un serveur CVS

# Voir lhistorique des changements publi sur son dpt public $ git log # pour effacer notre test :) $ rm -r chat/

18.4. Mercurial (Python)


Source(s):

Web: Mercurial (http://mercurial.selenic.com) Tutorial: Joel Spolskys hg tutorial (http://hginit.com) Grer vos projets avec Mercurial (http://www.siteduzero.com/tutoriel-3-196002-gerer-vos-projets-avec-mercurial.html)

18.5. Bazaar (Python)


Source(s):

Web: Bazaar (http://bazaar.canonical.com/en)

18.6. darcs
Source(s):

Web: Bazaar (http://bazaar.canonical.com/en)

695

Chapitre 19. SR016 Dployer un extranet scuris (VPN - Rseaux privs virtuels)
19.1. Les rseaux privs virtuels (VPN)
19.1.1. Introduction
Source(s):

OF: Page de Garde (docs/eof/sr016-ch00-pageDeGarde.pdf) Thorie sur les rseaux privs virtuels (docs/eof/sr016-ch01-act001-sr016-theorie-vpn.pdf)

Rseau : cest un ensemble dordinateurs (y compris les priphriques qui y sont connects) relis ensemble par des canaux lectroniques de communication, qui leur permettent dchanger des informations entre eux Priv : ensemble de techniques de chiffrement visant empcher quiconque autre que le destinataire des lments mis de pouvoir analyser et utiliser les renseignements fournis. On entend galement fournir une notion dauthentication Virtuel : procd logiciel octroyant la capacit de smanciper des contraintes physiques. Ici, on sappuiera sur les possibilits de TCP/IP. Le VPN est donc un moyen logiciel (intgr une bote matrielle usage unique ou non) dtendre son rseau, appuy sur la couche TCP/IP, en usant dauthentication et de chiffrement du trac. Trois structures se dessinent :
- la communication poste poste (point point), - la communication des nomades vers lentreprise, - la communication entre rseaux .

696

Chapitre 19. SR016 Dployer un extranet scuris (VPN - Rseaux privs virtuels)

19.1.2. Mise en place dun VPN sur SSH


Source(s):

OF: VPN sur SSH (docs/eof/sr016-ch02-act002-sr016-vpn_ssh.pdf)

...

19.1.3. Mise en place dun VPN sur SSL


Source(s):

OF: VPN sur SSL (docs/eof/sr016-ch03-act003-sr016-vpn_ssl.pdf)

...

19.1.4. VPN sur IPSEC


Source(s):

OF: Et IPSEC dans tout cela... (docs/eof/sr016-ch04-act004-sr016-vpn_ipsec.pdf)

...

697

Chapitre 20. Le langage Perl appliqu ladministration systme


20.1. Introduction la programmation en Perl
Source(s):

OF: SR018-ch00-intro_perl.pdf (docs/eof/sr018-ch00-intro_perl.pdf)

20.1.1. Documentation de Perl


Source(s):

Doc: La Documentation de Perl[En Ligne] (http://articles.mongueurs.net/magazines/linuxmag53.html) (Local, en ligne, FAQ, Ressources) La Documentation de Perl[Hors Ligne] (docs/linuxmag/sr018-ch00-doc_perl-linuxmag53.html) Documentation Perl Ofciel (http://perldoc.perl.org) Web: Comment dbuter en Perl - Par Sylvain Lhullier - Version 1.0.5 (http://sylvain.lhullier.org/publications/perl.html) Examples de manipulation de Perl (http://www.dil.univ-mrs.fr/~chris/Perl/Generalites.htm)

La premire chose faire est de lire La Documentation de Perl accessible au lien ci-dessus pour savoir comment accder la documentation trs riche et complte du language Perl. Ensuite, je conseillerais dinstaller le paquet .deb : perl-doc Ce paquet permet daccder la doc via : man, info ou directement par des scripts Perl :

## Requiert installation of perl-doc.deb $ man perl $ man perlfunc # Liste de toutes les fonctions # Voir sprintf pour le detail sur les commande printf, fprintf, etc... $ man perldebtut $ perldoc -f sprintf $ info print # Tutorial sur le dbugeur perl) # Affiche documentation sur la fonction sprintf

698

Chapitre 20. Le langage Perl appliqu ladministration systme


etc... #### # Consulter La Documentation de Perl au lien ci-dessus pour # plus de dtail et autres accs au page de manuel et tutorials ####

20.1.2. Langages dots de ramasse-miettes


Source(s):

Web: Ramasse-miettes (http://fr.wikipedia.org/wiki/Ramasse-miettes_%28informatique%29) Langages dots de ramasse-miettes (http://fr.wikipedia.org/wiki/Ramassemiettes_%28informatique%29#Langages_dot.C3.A9s_de_ramasse-miettes) Avantages et inconvnients (http://fr.wikipedia.org/wiki/Ramassemiettes_%28informatique%29#Avantages_et_inconv.C3.A9nients_des_ramasse-miettes)

Un ramasse-miettes, ou rcuprateur de mmoire, ou glaneur de cellules (en anglais garbage collector, abrg en GC) est un sous-systme informatique de gestion automatique de la mmoire. Il est responsable du recyclage de la mmoire pralablement alloue puis inutilise. Les langages utilisant un ramasse-miettes permettent dcrire des programmes plus simples et plus srs. La mmoire tant gre automatiquement par lenvironnement dexcution, le programmeur est libr de cette tche, source de nombreuses erreurs difciles dbusquer. La gestion manuelle de la mmoire est lune des sources les plus courantes derreur.

20.2. OF Sance 1 : Scalaires, listes, tableaux et fonctions


20.2.1. Premiers pas
Source(s):

OF (Sylvain Lhullier): En Ligne (http://sylvain.lhullier.org/publications/intro_perl/chapitre01.html) Hors Ligne (docs/eof/sr018-ch01-premiers-pas.pdf)

699

Chapitre 20. Le langage Perl appliqu ladministration systme Perl est un langage la fois interprt et compil. Cest linterpreteur perl qui compile et execute la vol.

20.2.1.1. Trois mthode pour executer le code


# Ligne de commande -e option ==> Faire un calcul ou appeler une fonction... $ perl -w -e print ("Bonjour le monde ! \n"); # -w affiche des messages davertissement print (...) interpreted as function at -e line 1 Bonjour le monde ! # Fichier salut.pl contenant le code ==> Coder sur plusieurs lignes print ("Bonjour le monde ! \n"); puis : $ perl -w salut.pl

# Lancer le script

# Script shell salut2.pl contenant le code ==> Programme utilis plusieurs fois #!/usr/bin/perl -w print "Bonjour le monde ! \n"; puis : chmod +x salut2.pl ./salut2.pl

# Rendre executable # Lancer le script

20.2.1.2. Syntaxe & Contextes


Les fonctions peuvent prendre arguments entre parenthses (longue imbrication dargument) ou non (un ou deux arguments simples). Commentaire de ligne commence par un # (dise) Ligne de code termine par un ; (point virgule) Groupe dinstruction dans des {} (accolades) Perl est un langage faiblement typ, seulement trois types de donnes:
- Les scalaires (donnes atomique) : $nom_variable Entier, flottant, rel, chane de caractre, boolans... ==> Diffrencier par leur valeur et le contexte - Les tableaux : @nom_tableau, $nom_tableau[4] lment dindice 4 Permettent de stocker plusieurs scalaires en les indiant - Les tables de hachages : %nom_table, $h{uneclef} lment de clef uneclef

700

Chapitre 20. Le langage Perl appliqu ladministration systme


Structure de donnes permettant dassocier une chane de caractres un scalaire ; ==> clefs (uniques) <=> valeurs

Chaque opration en Perl est value dans un contexte spcique. Il peut jouer un rle important sur le type des oprandes dune expression et/ou sur le type de sa valeur. Il existe plusieurs contextes : le contexte scalaire (chanes de caractres, numrique ou tolrant=ni lun ni lautre), le contexte de liste, et le contexte vide (void context).
Note : Mme si cela nest pas forcment explicite chaque instant, le contexte est souvent important.

20.2.2. Les scalaires


Source(s):

OF (Sylvain Lhullier): En Ligne (http://sylvain.lhullier.org/publications/intro_perl/chapitre02.html) Hors Ligne (docs/eof/sr018-ch02-scalaires.pdf)

Les scalaires sont le type de donnes atomique (donne atome). Cela signie que la granularit de donnes ne va pas au del.

20.2.2.1. Exemple de scalaires


12 "texte" texte -3.14 3e9 # Un nombre entier (int) # Une chane de caractres (string)

# Un nombre virgule flottante (float)

Note : Contrairement au C o le caractre \0 de code ASCII 0 (zro) est le marqueur de n de chane, en Perl les chanes de caractres peuvent sans souci contenir ce caractre : "a\0f" est une chane comportant 3 caractres. On aura donc aucun mal traiter des chiers binaires en Perl.

701

Chapitre 20. Le langage Perl appliqu ladministration systme

20.2.2.2. Dlimiteurs de chanes de caractres


### # " (double quotes) ==> le contenu est interprt print "Bonjour\n" print "Bonjour $prenom" print "${prefixe}figure$suffixe" ## Affiche "Bonjour" suivie dune fin de ligne ## Affiche "Bonjour Jean"

## Accoler un texte immdiatement aprs/avant une variable

# Protger les caractres " $ @ \ avec un anti-slash print "\" \$ \@ \\"; ## Affiche " $ @ \

### # (simple quotes) ==> le contenu Nest PAS interprt print Bonjour\n" print Bonjour $prenom ## Affiche "Bonjour\n" ## Affiche "Bonjour $prenom"

# Protger les caractres \ avec un anti-slash print \ " $ @ \\ \n \t $v ## Affiche " $ @ \ \n \t $v

20.2.2.3. Les nombres nont pas besoin de dlimiteurs


$num = 10.25 ## Affecte le nombre 10,25 la variable $num

20.2.2.4. Dclarer une variable


my $var1; my $num = 10; my $prenom = "Richard"; # Dclaration de la variable $var non initialise # Dclaration de variables initialises

$x = $num + 3; # Autres examples $phrase = "Bonjour $prenom";

Note : Les variables non dclarer ont la valeur par dfaut : undef (non-dni)
# Equivaut : $x=undef; undef($x); # Alternative

Tester quune variable scalaire vaut ou non undef : dened ($variable)


if(defined($x)) if($x) # vrai si $x est dfinie # retourne faux si NON dfinie

702

Chapitre 20. Le langage Perl appliqu ladministration systme


# valeur undef est une valeur fausse # Incorrect if($x!=undef)

# Erreur classique - Ne fonctionne pas !

Note : En Perl, il nest pas obligatoire de dclarer les variables mais il est conseill de toujours les dclarer pour dvidentes raisons de relecture et pour viter des erreurs btes.

20.2.2.5. Variables spciales (ARGV, $0, ENV, ...)


# toujours dfinie (mme dans les fonctions) # ne ncessite pas de dclaration. @ARGV $0 # tableau contenant les arguments de la ligne de commande du programme # contient le nom du programme

%ENV $ENV{PATH} $ENV{HOME} ...

# contient les variables denvironnement du programme # contient le path # nom du rpertoire personnel de lutilisateur qui excute le programme

20.2.2.6. Dclaration de contantes en Perl


Source: Perl Doc > Contantes (http://perldoc.perl.org/constant.html) use constant PI => 4 * atan2(1, 1); use constant DEBUG => 0; print "Pi equals ", PI, "...\n" if DEBUG; use constant { SEC => 0, MIN => 1, HOUR => 2, MDAY => 3, MON => 4, YEAR => 5, WDAY => 6, YDAY => 7, ISDST => 8, };

703

Chapitre 20. Le langage Perl appliqu ladministration systme

use constant WEEKDAYS => qw( Sunday Monday Tuesday Wednesday Thursday Friday Saturday ); print "Today is ", (WEEKDAYS)[ (localtime)[WDAY] ], ".\n";

20.2.2.7. Oprateurs Numriques


# Classique + - * / % ** + addition $x=11+2 - soustraction $x=11-2 * multiplication $x=11*2 / division $x=11/2 % modulo $x=11%2 puissance $x=2 ** **2 # Raccourcis += -= $x+=2 quivaut $x-=2 quivaut $x*=2 quivaut $x/=2 quivaut $x%=2 quivaut (puissance na pas # # # # # # vaut vaut vaut vaut vaut vaut 13 9 22 5,5 1 4

*= /= %= $x=$x+2 $x=$x-2 $x=$x*2 $x=$x/2 $x=$x%2 de raccourci)

20.2.2.8. Fonctions Numriques (mathmatique)


sin($x) cos($x) exp($x) log($x) abs($x) sqrt($x) # # # # sinus et cosinus de $x e puissance et logarithme en base e de $x valeur absolue de $x racine carre de $x

20.2.2.9. Oprateurs de Chane de caractres


# Classique . x . concatenation x rpetition $x="Bon"."jour" # vaut "Bonjour" $x="bla"x3 # vaut "blablabla"

# Raccourcis .= x= $x.="bla" quivaut $xx=2 quivaut

$x=$x."bla" $x=$xx2

704

Chapitre 20. Le langage Perl appliqu ladministration systme

20.2.2.10. Functions de Chanes


length($x) length("bonjour\n") length(bonjour\n) $c = chop($x) # # # # # longueur de la chane $x vaut 8 vaut 9 supprime le dernier caractre de la chane $x le caractre est renvoy par la fonction

$num = chomp($x) reverse($x)

# supprime le dernier caractre de $x sil sagit dune fin de ligne # renvoie le nombre de caractres supprims. # renvoie la chane compose des caractres de $x dans lordre inverse

substr($x,offset,length) # vaut la sous-chane de position offset et de longueur length # Les positions commencent 0 # Cette fonction peut tre une lvalue, cest--dire quon peut lui affecter une # valeur (lvalue pour left-value : la gauche du signe gal de laffectation) : my $v = "salut toi"; substr($v,5,1) = "ation "; # vaut "salutation toi". index($chane,$sousChane,$position) # # # # #

renvoie la position de la premire occurrence de $sousChane dans $chane. Le troisime paramtre (optionel) indique la positi du dbut de la recherche ; sinon la recherche part du dbut de la chane (position 0)

rindex($chane,$sousChane,$position)

# index mais en partant de la fin de la chane # (la recherche est effectue de droite gauche)

20.2.2.11. Boolens
# Tous ce qui est diffrent de zro est VRAI ! # Est 0 0 "0" "" undef FAUX : # Entier zro # Chane zro # Chane vide # variable non dfinie

20.2.2.12. Oprateurs boolens


exp1 && exp2 exp1 and exp2 # ET Logique

705

Chapitre 20. Le langage Perl appliqu ladministration systme


exp1 || exp2 exp1 or exp2 !exp not exp # OU Logique

# Ngation Boolenne

20.2.2.13. Oprateurs de comparaison


# Contexte impos galit diffrence infriorit supriorit inf ou gal sup ou gal comparaison # # # # # # # numrique == != < > <= >= <=> de chanes eq ne lt gt le ge cmp

Loprateur <=> est surnomm spaceship (vaisseau spatial en franais) <=> et cmp renvoie un nombre qui dpend de lordre entre leurs deux paramtres. ($x<=>$y) est : - positive si $x < $y, - ngative si $x > $y, - nulle si $x egual $y Pour cmp, la comparaison se fait sur lordre des chanes selon la table ASCII.

20.2.3. Structures de contrle


Source(s):

OF (Sylvain Lhullier): En Ligne (http://sylvain.lhullier.org/publications/intro_perl/chapitre03.html) Hors Ligne (docs/eof/sr018-ch03-structures-controle.pdf)

20.2.3.1. if (condition VRAI), unless (condition FAUSSE)


# unless( expression ) est quivalent if( !(expression) ) instruction if( condition ); ## Racourci pour une instruction if( condition1 ) { instructions1 }

706

Chapitre 20. Le langage Perl appliqu ladministration systme


elsif( condition2 ) { instructions2 } else { instructions3 }

20.2.3.2. Boucles for (pour), while (tant que), until (jusqu)


Syntaxe :
for( initialisation; condition; incrment ) { instructions; } for( my $i=0; $i<=20; $i+=2 ) { print "$i\n"; } ## Affiche tous les entiers pairs de 0 20 inclus

# until(condition) est quivalent while(!(condition)) instruction while( condition ); ## Racourci pour une instruction while( condition ) { instructions; } my $i = 0; while( $i <= 20 ) { print "$i\n"; $i+=2; } do { instruction; } while( condition ); ## Bloc instruction executer 0 ou N fois (jamais)

## Affiche tous les entiers pairs de 0 20 inclus

## Bloc dinstruction execut 1 ou N fois (au moins une fois

Saut de boucles :

707

Chapitre 20. Le langage Perl appliqu ladministration systme


## Pour for, while, until seulement ## !!! et pas pour do !!!

next # (suivant en franais) provoque la fin de lexcution du bloc, # le programme value directement lincrment (dans le cas dune boucle for) puis le test es

last # (dernier en franais) provoque la fin de la boucle, ni lincrment ni le test ne sont effe redo # (refaire en franais) provoque le redmarrage du bloc dinstructions sans que # la condition ni lincrmentation ne soient effectues. my $i = -1; while( 1 ) # 1 est vrai { $i++; last if( $i > 20 ); next if( $i%2 != 0 ); print "$i\n"; } ## Affiche tous les entiers pairs de 0 20 inclus

Boucle foreach, voir ci-dessous dans la partie Listes et Tableaux

20.2.4. Listes et tableaux


Source(s):

OF (Sylvain Lhullier): En Ligne (http://sylvain.lhullier.org/publications/intro_perl/chapitre04.html) Hors Ligne (docs/eof/sr018-ch04-listes-tableaux.pdf) Tutorial : Example de manipulation de listes (http://www.dil.univ-mrs.fr/~chris/Perl/Listes.htm)

20.2.4.1. Liste
Liste : une suite (donc ordonne) de valeurs scalaires.
# Une liste est reprsente par les valeurs encadres par des parenthses () (2,5,-3) (2,age,"Bonjour $prenom") () # Liste vide

708

Chapitre 20. Le langage Perl appliqu ladministration systme


# Interval ($debut..$fin) (1..10) (a..z)

# Tous les entiers de 1 10 # Toutes les lettres de lalphabet, # en minuscule et dans lordre

# Applatissement de liste (Imbrication) (1,2,("nom",12),"aaa",-1) equivaut (1,2,"nom",12,"aaa",-1) @t = (1,2,"age") @t2 = (10,@t,20) quivaut @t2 = (10,1,2,"age",20) # Rptition (2,10)x3 quivaut

(2,10,2,10,2,10).

20.2.4.2. Tableau
Tableau : contenient plusieurs valeurs scalaires. Cest une variable qui peut avoir une liste pour valeur.
my @t; my @t = (); # Dclaration dun tableau vide # Alternative # Affecter des valeurs dinitialisation

my @t = (3,chaine,"bonjour $prenom");

# Accder aux valeurs : # $t[indice] - Indice dmarre 0 $t[1] = 4; # affectation dun lment print "@t\n"; print "$t[0]\n"; $#t # affichage du tableau (lments spars par des espaces) # affichage dun lment # indice du dernier lment

# Parcours en sens inverse $t[-1] # le dernier lment de @t $t[$#t] # alternative $t[-2] # lavant-dernier, etc.

# Nombre dlments scalar(@t) # donne le nombre dlments du tableau @t $#t+1 # alternative 1 $x=@t # alternative 2 # lement existe ? if( exists( $t[100] ) ) { ... } # !!! Attention !!!

# vrai si llment dindice 100 du tableau existe

Distinction entre absent et indfini

709

Chapitre 20. Le langage Perl appliqu ladministration systme


if( defined( $t[100] ) ) { ... } # vrai si llment dindice 100 du tableau est dfinie

20.2.4.3. Affectations
@t = @s ($a,$b) = (1,2) ($a,$b) = (1) ($a,$b) = @t @t = (1,2) ($a,$b) = ($b,$a) # # # # # #

Copie de tableau - Les tableaux restent distincts affecte une valeur chacune des variables affectation de $a 1, affectation de $b undef (ancienne valeur perdue) affectation de $a et $b aux premires valeurs du tableau rinitialise le tableau @t (anciennes valeurs perdues) changer $a et $b

20.2.4.4. Multi-dclaration
# Dclarer plusieurs variables avec un seul my my ($a,$b) # Correct ! my $a,$b # Incorrect ! # Affecter des valeurs par dfaut my ($a,$b) = (1,2) # via une liste my ($c,$d) = @t # via un tableau

20.2.4.5. Absorption dune liste par un tableau


($a,@t) = @s; # l-value (membre gauche dune affectation), # $a reoit le premier lment # @t absorbe tous les autres (@s pas modifi)

@s = (10,1,2,"age",20); ($a, @t, @u, $b) = @s; # quivaut @s = (10,1,2,"age",20); $a = 10; @t = (1,2,"age",20); @u = (); $b = undef;

710

Chapitre 20. Le langage Perl appliqu ladministration systme

20.2.4.6. Boucle foreach


# Syntaxe : foreach variable (liste) { instructions } foreach (@t) { ... } # sans variable de boucle, utiliser $_ (variable spciale) foreach my $v (@t) { ... } # my permet de dclarer une nouvelle variable la vole foreach $v (32,@t,"age",@t2) { ... } foreach $v (1,43,"toto") { print "$v\n"; } foreach (@t) { print "$_\n"; } # affiche chaque lment de la liste sur une ligne

20.2.4.7. Manipulation de tableau, pile & le

my @t = (1,2,3,4); # AJOUTER unshift(@t,5,6);

# Ajout gauche (dbut de tableau) # @t vaut (5,6,1,2,3,4) # Ajout droite (fin de tableau) # @t vaut (1,2,3,4,5,6).

push(@t,5,6);

# SUPPRIMER $v = shift(@t);

# supprime premier lment (les autres sont dcals) # et renvoie lment supprim # $v vaut 1 et @t vaut (2,3,4) # supprime dernier lment # et renvoie lment supprim # $v vaut alors 4 et @t vaut (1,2,3)

$v = pop(@t);

# INVERSION @s = reverse(@t);

# liste en ordre inverse

# Voir aussi splice TABLEAU,OFFSET,LONGUEUR,LISTE # Supprime dun tableau les lments conscutifs dsigns par # OFFSET (indice du premier lment) et # LONGUEUR (nombre dlments concerns) et # les remplace par les lments de LISTE si il y en a. splice (@table, $offset, $longueur, @liste); splice(@a,@a,0,$x,$y) splice(@a,-1)

711

Chapitre 20. Le langage Perl appliqu ladministration systme


splice(@a,0,1) splice(@a,0,0,$x,$y) splice(@a,$i,1,$y)

Manipulation de piles :
Note : Une pile est un lieu de stockage ayant pour particularit que le dernier lment y tre entr sera le premier en sortir (last in-rst out) comme pour une pile dassiettes sur une tagre de placard.

push pop

# ajouter un lment de la pile # prendre un lment de la pile

Manipulation de le :
Note : Une le est un endroit o le premier entr est le premier sortir (rst in-rst out) comme pour une le une caisse de magasin.

push shift

# ajouter un lment la file # prendre un lment la file

20.2.4.8. Loprateur qw
# Crer facilement une liste de chanes de caractres. @t = qw/Ou alors comme cela .../; # Dlimiteurs : les slashs @t = qw(Cela est bien plus facile faire non ?); # Dlimiteurs : les parenthses (souvent # quivaut @t = ( Ceci, est, quelque, peu, pnible, , crire, ,, non, ? ); # # # # La chane de caractre sera dcoupe selon - les espaces, - les tabulations et - les retours la ligne.

# Il faut le voir comme une espce de quote.

712

Chapitre 20. Le langage Perl appliqu ladministration systme


#* Il exite la simple quote #* Il existe la double quote " #* Il existe une simple quote avec le dlimiteur quon veut, # cest loprateur q (pour quote) par exemple : q(texte entre simple quote) # Intret : avoir le signe dedans sans mettre de \ #* Il existe une double quote avec le dlimiteur quon veut, #* cest loprateur qq (pour quote quote) par exemple : qq(texte entre double quote) # Intret : avoir le signe " dedans sans mettre de \ #* Et enfin il existe une quote trange/rigolote qui est qw (pour quote word) # qui effectue une simple quote en dcoupant les mots dans une liste qw(Un Deux Trois) # quivaut (Un,Deux,Trois) # Plus facile ! # Et pour parcourir, cest comme une liste habituelle : foreach my $valeur (qw(Un Deux Trois)) #ou bien my @tableau = qw(Un Deux Trois);

#### ## Remarque : pour q, qq et qw, on peut choisir le sparateur quon veut # # soit en couple ouvrant/fermant, par exemple : () {} <> etc qq{texte entre simple quote} # soit en rptition, par exemple : qq/texte entre simple quote/ qq:texte entre simple quote:

20.2.5. crire une fonction


Source(s):

OF (Sylvain Lhullier): En Ligne (http://sylvain.lhullier.org/publications/intro_perl/chapitre05.html) Hors Ligne (docs/eof/sr018-ch05-fonction.pdf)

Une fonction est un ensemble dinstructions regroupes de manire tre utilises plusieurs fois sans avoir dupliquer du code.

713

Chapitre 20. Le langage Perl appliqu ladministration systme

20.2.5.1. Dclaration & Appels


# DECLARATION (identique pour fonction et procdure) sub maJolieFonction { my ($x,$y,@t) = @_; # @_ variable spciale contenant les valeurs ... instructions ... # scalaires des paramtres passs return $z; # lexclusion de toutes autres } return ($x,$z); return @t; # retourne une liste # retourne un tableau (il est converti en liste)

# Attention !!! my $x = @_; # incorrect my ($x) = @_; # correct # Alternative my $x = shift; # dans une sous-routine, # shift travaille par dfaut sur @_ # APPEL maJolieFonction(10,20,30); $v = maJolieFonction(10,20,30); maJolieFonction 10,20,30;

# Procedure sans valeur de retour # Function avec valeur de retour # viter

@s = fonction(...); # rcuprer une liste retourne par la fonction ($j,$k) = fonction(...); # rcuprer une liste retourne par la fonction

20.2.5.2. Exemple de fonction


#!/usr/bin/perl -w use strict; my $t = "Bonjour Larry"; # variable globale print "$t\n"; # avec ou sans parenthses sub f { my ($x,$z) = @_; my $m = $x*$z; printf("%d\n", $m); return ($x+$z,$m); }

# deux arguments attendus # $m, $x et $z are variable locale # retourne une liste

my @t = f(3,5); print "$t $t[0] $t[1]\n";

714

Chapitre 20. Le langage Perl appliqu ladministration systme

20.2.6. print, printf, fprintf, sprintf


Pour la documentation voir :

## Requiert installation du paquet .deb : perl-doc $ man perlfunc # Liste de toutes les fonctions $ perldoc -f sprintf # Voir sprintf pour le detail sur les commande printf, fprintf, etc. $ man printf # Alternative $ info printf # Alternative

# Syntaxe : printf FORMAT [ARGUMENT]... # Affiche une chane FORMAT en interprtant les directives # % et \ au format numerique et chane print print print print "text"; # Afficher text "$scalaire"; "@tableau"; # Afficher tableau "%hash"; # Afficher table de hashage

# Formatter un nombre avec 8 zero den-tte $result = sprintf("%08d", $number); # Arrondir un nombre trois chiffres aprs la virgule $rounded = sprintf("%.3f", $number);

%% %c %s %d %u %o %x %e %f %g

a percent sign a character with the given number a string a signed integer, in decimal an unsigned integer, in decimal an unsigned integer, in octal an unsigned integer, in hexadecimal a floating-point number, in scientific notation a floating-point number, in fixed decimal notation a floating-point number, in %e or %f notation

# Perl permets aussi certaines conversion : %X %E %G %b %B %p %n like %x, but using upper-case letters like %e, but using an upper-case "E" like %g, but with an upper-case "E" (if applicable) an unsigned integer, in binary like %b, but using an upper-case "B" with the # flag a pointer (outputs the Perl values address in hexadecimal) special: *stores* the number of characters output so far into the next variable in the parameter list 12; 12; 12; # prints "< 12>" # prints "<+12>" # prints "< 12>"

printf <% d>, printf <%+d>, printf <%6s>,

715

Chapitre 20. Le langage Perl appliqu ladministration systme


printf printf printf printf printf printf printf <%-6s>, <%06s>, <%#o>, <%#x>, <%#X>, <%#b>, <%#B>, 12; 12; 12; 12; 12; 12; 12; # # # # # # # prints prints prints prints prints prints prints "<12 >" "<000012>" "<014>" "<0xc>" "<0XC>" "<0b1100>" "<0B1100>"

20.2.7. Autres fonctions sur les listes


Source(s):

OF (Sylvain Lhullier): En Ligne (http://sylvain.lhullier.org/publications/intro_perl/chapitre06.html) Hors Ligne (docs/eof/sr018-ch06-fonctions-listes.pdf)

20.2.7.1. join : Joindre les lments dans une chane


# Syntaxe : scalaire = join (sparateur, liste); $s = join(" ",1,2,3); # $s vaut "1 2 3" $s = join(,,$x,$y,$y); # $s vaut "$x,$y,$y" @t=(1,2,3) $s = join(" : ",@t);

# $s vaut "1 : 2 : 3" # Affiche salut:ici

print join(:,split(/ /,salut ici));

20.2.7.2. split : Dcouper une chane de caractres en liste


# Syntaxe : liste = split( /sparateur /, chane ); @t = split(/-/,"4-12-455"); $v = "key==26"; ($x,$y) = split(/==/,$v); # @t vaut (4,12,455)

# $x vaut "key", $y vaut 26 # Affiche salut:ici

print join(:,split(/ /,salut ici));

716

Chapitre 20. Le langage Perl appliqu ladministration systme

20.2.7.3. sort : Trier une liste


# Syntaxe : # liste2 = sort(liste1); # liste2 = sort( { comparaison } liste1 ); #

# ne pas mettre de virgule entre # le bloc dinstructions et la liste

# Le bloc dinstruction de comparaison est optionel # La valeur de positive, si ngative, si nulle, sils

comparaison est le resultat de lexpression comparant deux valeurs locales $a $a doit tre avant $b dans la liste rsultat $a doit tre aprs $b sont quivalents

# Comparaison cmp # comparer respectivement les chanes de caractres selon lordre lexical # par dfaut <=> # les nombres selon lordre numrique

@s = sort( {$a cmp $b} @t ); @s = sort( @t );

# @s vaut @t trie selon lordre lexical. # Alternative

@s = sort( {$a <=> $b} @t ); @s = sort( {$a <=> $b or $a cmp $b} @t );

# Le critre de tri est ici numrique. # le tri est ici dabord numrique puis lexical. # place 8 navets avant 12 carottes, etc

@s = sort( { fonction($a,$b) } @t );

# propre fonction de tri ( deux arguments) # renvoit un nombre dont la valeur dpend # de lordre voulu (voir juste avant).

## Attention au contexte ! my @s = sort (20,1,3,2); # Classement de chane my @s = sort ({ $a cmp $b}(20,1,3,2)); # quivalent print("@s \n"); # Affiche 1 2 20 3 (Contexte de chane par dfaut) my @s = sort ({ $a <=> $b}(20,1,3,2)); # quivalent print("@s \n"); # Affiche 1 2 3 20 (Contexte numrique)

20.2.7.4. grep : Slectionner des lments


# Syntaxe1 : liste2 = grep { slection } liste1;

# Attention !!! Pas de parenthses, ni de # $_ variable spciale contenant les valeu # les tests seront effectus

# Syntaxe2 : liste2 = grep( /regexp /, liste1 );

# Selection selon une expression rgulire

# En contexte de liste ==> Renvoie la liste des lments correspondant au critre de slecti # Les lments renvoys sont ceux pour lesquels lvaluation du bloc dinstructions a pour v

717

Chapitre 20. Le langage Perl appliqu ladministration systme

@t = grep { $_<0 } $x,$y,$z; # Affecte @t les lments ngatifs de la liste. @s = grep { $_!=8 and $_!=4 } @t; # Met dans @s les lments de @t diffrents de 4 et de 8 @s = grep { fonction($_) } @t; # Propre fonction de slection # Renvoie vrai ou faux selon si llment est garder o # En contexte scalaire ==> Renvoie le nombre dlments qui correspondent au critre $n = grep { ... } @t;

20.2.7.5. map : Appliquer un traitement tous les lments


# Syntaxe : liste2 = map( { expression } liste1 ); # # # # Pas de virgule entre le bloc dinstructions et la liste Variable spciale $_ vaut localement chaque lment de la liste

@s @p @s @s

= = = =

map( map( map( map(

{ { { {

-$_ } @t ); $_."s" } @t ); substr($_,0,2) } @t ); fonction($_) } @t );

# # # #

@s aura pour valeurs les opposs des valeurs de @t Tous les mots de @t sont mis au pluriel dans @p @s aura pour valeurs les deux premiers caractres des propre fonction

map( { $_*=4 } @t );

# Modification de la liste dorigine # Tous les lments de @t sont multiplis par quatre

20.2.7.6. Un exemple : le crible dratosthne


# Calculer tous les nombres premiers infrieurs un nombre donn n sub Crible { my ($n) = @_; # Liste initiale : my @nombres = (2..$n); # Liste des nombres premiers trouvs : my @premiers = (); # Tant quil y a des lments (un tableau # en contexte boolen vaut faux sil est vide) : while( @nombres ) { # On extrait le premier nombre my $prem = shift @nombres; # On indique quil est premier push @premiers, $prem;

718

Chapitre 20. Le langage Perl appliqu ladministration systme


# On supprime ses multiples @nombres = grep { ( $_ % $prem )!=0 } @nombres; } # On renvoie la liste des nombres premiers return @premiers; }

20.2.8. Exercices Sance 1


Source(s):

OF (Sylvain Lhullier): En Ligne (http://sylvain.lhullier.org/ens/eof/seance01.pdf) Hors Ligne (docs/eof/sr018-ch06-seance01.pdf)

20.2.8.1. Exercice 1
De quelle version de Perl disposez-vous ?
$ perl -v This is perl, v5.10.0 built for i486-linux-gnu-thread-multi ...

20.2.8.2. Exercice 2. Perl pour sduire


Script exo2.pl (docs/sr018-ch06-seance01-exo2-pl.txt) prend le prnom dune personne en paramtre et qui lui souhaite bonjour Cet exercise ma permis de dcouvrir le language Perl, la cration de ma premire fonction et le passage de paramtres.
$ ./sr018-ch06-seance01-exo2.pl Sophie Bonjour Sophie ! $ ./sr018-ch06-seance01-exo2.pl Bonjour belle inconnue !

719

Chapitre 20. Le langage Perl appliqu ladministration systme

20.2.8.3. Exercice 3. Boucles


Script exo3.pl (docs/sr018-ch06-seance01-exo3-pl.txt) afche la table de multiplication de 1 n en utilisant foreach Cet exercise ma permis de dcouvrir la notion de liste, et leur systme daffectation ainsi que la boucle for each.
Note : Attention de toujours bien affecter les listes dans des variable de type tableau !!!

Note : Attention de toujour bien dclarer les variables de la boucle foreach et de toujours mettre entre parenthse la variable de liste qui suit.

$ ./sr018-ch06-seance01-exo3.pl 4 1 2 3 4 2 4 6 8 3 6 9 12 4 8 12 16 $ ./sr018-ch06-seance01-exo3.pl 5 1 2 3 4 5 2 4 6 8 10 3 6 9 12 15 4 8 12 16 20 5 10 15 20 25 $ ./sr018-ch06-seance01-exo3.pl 10 1 2 3 4 5 6 7 2 4 6 8 10 12 14 3 6 9 12 15 18 21 4 8 12 16 20 24 28 5 10 15 20 25 30 35 6 12 18 24 30 36 42 7 14 21 28 35 42 49 8 16 24 32 40 48 56 9 18 27 36 45 54 63 10 20 30 40 50 60 70

8 16 24 32 40 48 56 64 72 80

9 18 27 36 45 54 63 72 81 90

10 20 30 40 50 60 70 80 90 100

$ ./sr018-ch06-seance01-exo3.pl chaine ## Attention ce script ne vrifie pas si le paramtr Argument "chaine" isnt numeric in range (or flop) at ./sr018-ch06-seance01-exo3.pl line 13.

720

Chapitre 20. Le langage Perl appliqu ladministration systme

20.2.8.4. Exercice 4. Tableau


Script exo4.pl (docs/sr018-ch06-seance01-exo4-pl.txt) manipule un tableau
$ ./sr018-ch06-seance01-exo4.pl 1 2 3 33 1 2 3 33 4 5 1 2 3 33 4 5 -1 0 1 2 3 33 4 5 -1 0 1 9 3 33 4 5 -2 0 2 18 6 66 8 10 0 2 18 6 66 8 10 66 18 10 8 6 2 0

20.2.8.5. Exercice 5. Diviseur


Script exo5.pl (docs/sr018-ch06-seance01-exo5-pl.txt) calcule et afche tous les diviseurs dun nombre pass en paramtre
$ 1 $ 1 $ 1 $ 1 $ 1 ./sr018-ch06-seance01-exo5.pl 5 ./sr018-ch06-seance01-exo5.pl 2 3 4 6 12 ./sr018-ch06-seance01-exo5.pl 2 4 5 10 20 ./sr018-ch06-seance01-exo5.pl 5 25 ./sr018-ch06-seance01-exo5.pl 2 4 5 10 20 25 50 100 5 12 20 25 100

20.3. OF Sance 2 : Fichiers, Tables de hachage et Expressions Rgulires


20.3.1. Tables de hachage
Source(s):

OF (Sylvain Lhullier): En Ligne (http://sylvain.lhullier.org/publications/intro_perl/chapitre07.html) Hors Ligne (docs/eof/sr018-ch07-table-hachage.pdf)

721

Chapitre 20. Le langage Perl appliqu ladministration systme

20.3.1.1. Description
Une table de hachage (hash table en anglais - HT) est un type de donne en Perl permettant dassocier une valeur une clef. Une sorte de tableau qui associe une valeur scalaire : un entier la position i (pour i entier), une certaine valeur scalaire est prsente.
# clef <=> value # Faire correspondre une valeur scalaire (comme pour un tableau) # toute chane de caractres (plutt qu un entier). my %h; my %h = (); # Dclaration dune HT # Alternative # Affecter des valeurs dinitialisation

my %h = ( "Paul" => "01.23.45.67.89", "Virginie" => "06.06.06.06.06", "Pierre" => "heu ..." );

# Affectation de plusieurs lment via des listes # (clef, valeur, clef, valeur, ...) my %h = ("Paul", "01.23.45.67.89", "Virginie", "06.06.06.06.06", "Pierre", "heu ..."); # Alternative my @t = ("Paul", "01.23.45.67.89", "Virginie", "06.06.06.06.06", "Pierre", "heu ..."); my %h = @t; # Accder aux valeurs : # $h{uneclef} # Accder la valeur de uneclef # Indice dmarre 0 $h{Paul} $h{"Marie-Pierre"} $h{Marie-Pierre} my $k = "Jacques"; $h{$k} = "02.02.02.02.02"; # dlimiter avec simples ou doubles quotes " # si la clef comporte dautres caractres que # des lettres, des chiffres et le soulign _ # Acces via une variable scalaire

$h{Richard} = "06.62.20.80.57"; print "Tl : $h{Richard}\n"; $h{Jean-Paul} = "03.03.03.03.03"; if( $h{"Jean-Paul"} ne "Heu ..." ) { ... } @t = %h;

# affectation dun lment # affichage dun lment

# Affectation dune table de hachage un tableau # renvoie une liste des clefs et des valeurs,

722

Chapitre 20. Le langage Perl appliqu ladministration systme


# se suivant respectivement deux deux, # dans un ordre quelconque # @t vaut ("Pierre", "heu ...", "Paul", "01.23.45.67.89", "Virginie", "06.06.06.06.06") # Conversion direct en liste foreach my $x (%h) { print "$x\n"; # Affiche tous les couples clef/valeur } # lement existe ? if( exists( $h{hello} ) ) # vrai si llment de clef hello de la table existe { print "La clef hello existe\n"; } # !!! Attention !!! Distinction entre absent et indfini # FAUX si llment nexiste pas ou # si llment existe et vaut undef # vrai si llment de clef hello de la table est dfinie

if( defined( $h{hello} ) ) { ... }

# Table de hachage est vide (ne comporte aucune clef) ou non ? if( %h eq 0 ) { print "%h est vide\n"; }

20.3.1.2. keys, values, each : Trois fonctions pour parcourrir la table de hachage
## keys : obtenir une liste des clefs my @t = keys(%h); # renvoie une liste de toutes les clefs exhaustive # @t vaut ("Virginie", "Pierre", "Paul")

foreach my $k (keys(%h)) # parcourir toute la table de hachage { print "Clef=$k Valeur=$h{$k}\n"; # afficher tous les couples clef/valeur } ## values : obtenir une liste des valeurs my @t = values(%h); # renvoie une liste de toutes les valeurs exhaustive foreach my $v (values(%h)) { print "Valeur=$v\n"; } # parcourir toute la table de hachage # afficher toutes les valeurs

723

Chapitre 20. Le langage Perl appliqu ladministration systme

## each : itration sur les couples (clef,valeur) renvoie un un tous les couples (clef,valeur) while( my ($k,$v) = each(%h) ) { print "Clef=$k Valeur=$v\n"; }

20.3.1.3. Autovivication
Modier un lment dune table de hachage qui nexiste pas, il sera cr :
# Dans un contexte numrique, une lment prendra pour # valeur initiale zro 0 $h{bye}++; # vaut 1

# Dans un contexte de chane de caractres, il prendra pour # valeur la chane vide "" $h{hello} .= "aprs"; # vaut ""."aprs"

## Comptage de mot my @texte = qw( bonjour vous bonjour ); my %comptage = (); foreach my $mot ( @texte ) { $comptage{$mot}++; } while( my ($k,$v) = each(%comptage) ) { print "Le mot $k est prsent $v fois\n"; } # Affiche # Le mot vous est prsent 1 fois # Le mot bonjour est prsent 2 fois

20.3.1.4. delete : Supprimer une clef dans une table de hachage


# Il faut utiliser loprateur delete. delete( $h{hello} ); # !!! Attention !!!! $h{hello} = undef; # Incorrect !

724

Chapitre 20. Le langage Perl appliqu ladministration systme

20.3.1.5. Inverser une table de hachage (inverser clefs et valeurs)


%h = reverse(%h); # Les valeurs deviennent les clefs et inversement

my %h = ("Paul", "01.23.45.67.89", "Virginie", "06.06.06.06.06", "Pierre", "heu ..."); my %quidonc = reverse %h; # Annuaire invers !

20.3.1.6. Tableaux plusieurs dimensions

# Les clefs sont la concatnation des coordonnes dans les n dimensions : dim1:dim2:dim3:... my %h = (); foreach my $i (0..4) { foreach my $j (-3..10) { foreach my $k (130..148) { $h{"$i:$j:$k"} = Calcul($i,$j,$k); } } }

Pour la cration de tableau plusieurs dimension, voir aussi rfrence anonyme de tableau ci-aprs...

20.3.2. Manipulation des chiers


Source(s):

OF (Sylvain Lhullier): En Ligne (http://sylvain.lhullier.org/publications/intro_perl/chapitre09.html) Hors Ligne (docs/eof/sr018-ch09-chiers.pdf)

20.3.2.1. Description
Perl a une manire trs simple, facile et trs puissante de manipuler des chiers :
# Perl dispose doprateurs prenant en paramtre un nom de fichier # Ce nom de fichier doit tre un scalaire (une variable ou une constante) $ perldoc -f -X # liste complte des operateurs de fichier disponible # Syntaxe : if( -e "/usr/tmp/fichier" ) # Fichier existe ? { print "Le fichier existe\n";

725

Chapitre 20. Le langage Perl appliqu ladministration systme


} -e -f -d -l teste teste teste teste si si si si chemin valable dans le systme de fichier (rpertoire, fichier, etc) fichier normal. son paramtre est un rpertoire. son paramtre est un lien symbolique.

-r teste si le programme a le droit de lire le fichier/rpertoire/etc -w teste si le programme a le droit dcrire. -x teste si le programme a le droit dexcuter le fichier ou daccder au rpertoire. -o teste si le -z teste si le -s teste si le en fait cet fichier appartient lutilisateur qui excute le programme. fichier est vide. fichier est non vide oprateur renvoie la taille du fichier

-M renvoie lge en jour du fichier (depuis le dbut de lexcution du programme) my $file = "/usr/doc/perl"; if( -f $file && -w $file ) { ... } my $taille = -s $file; my $age = -M $file;

20.3.2.2. Fonction glob


# Cette fonction renvoie une liste de noms de fichiers. # Cette liste correspond lvaluation de lexpression # selon les wildcards du shell. glob( *.o ) # Renvoie tous les fichier ayant lextension .o <*.o>; # Alternative syntaxe @l = glob(/usr/include/*.h); # @l contient tous les fichiers dextension .h @l = </usr/include/*.h>; # Aleternative syntaxe

#!/usr/bin/perl -w use strict; foreach my $name ( <*> ) { print "$name\n" if( -l $name ); } #!/usr/bin/perl -w use strict; foreach my $name ( <.*>, <*> ) { next if( ! -d $name );

726

Chapitre 20. Le langage Perl appliqu ladministration systme


next if( ! -w $name ); print "$name : ". ( -s $name ) ."\n"; }

20.3.2.3. Ouverture, Lecture, Ecriture, Fermeture dun chier


# OUVERTURE # Syntaxe 1: open (HANDLE, expression ) # Syntaxe 2: open (HANDLE, "commande|") # Ouverture de fichier # Execution de commande

# HANDLE: descripteur de fichier # expression: scalaire, nom du fichier ouvrir prcd de zro, un ou deux caractres indiquant le mode douverture : Caractre(s) Mode douverture aucun lecture < lecture > criture (crasement) >> criture (ajout) +> lecture et criture (crasement) +< lecture et criture (ajout open(FIC1,"<index.html") # ouvre index.html en lecture open(FIC2,">index.html") # ouvre index.html en criture-crasement

# Excution de commandes open(FIC1,"ls|") open(FIC2,"df -HT $device|") open(FIC3,"|gzip > $a.gz") open(FIC4,"|mail robert\@bidochon.org") # Faire appel df pour obtenir lespace disque disponible # sur certaines partitions pour un serveur de stockage, # dans le but de lancer une alerte si cet espace disponible est trop restreint. open(FIC, "df -B 1024 \| grep /mnt \| awk {print \$4}|"); ...

# Test douverture open(FIC2,"</tmp/$a") or die("open: $!"); # Methode 1 (preferably) # $! (variable magique) contient le message err # die met fin au programme et affiche un param if( ! open(FIC,">>data.txt") ) { exit(1); } # Methode 2

727

Chapitre 20. Le langage Perl appliqu ladministration systme


if( -e $file ) { open(FIC,"<$file") ... # Methode 3 : Pas ncessaire !!! # Ne pas sinquieter, la fonction open fera ce test ... # donc pas ncessaire de le faire explicitement :-)

# LECTURE $l = <FIC>; @t = <FIC>;

# Ligne par ligne (contexte scalaire) # Toutes les lignes restantes (contexte liste) # Iteration sur les lignes du fichier

while( defined( $l = <FIC> ) ) { chomp $l; print "$. : $l\n"; }

# Supprime le dernier caractre retour la ligne # $. vaut le numro de la ligne courante

# Si la variable spciale omni-prsente $_ est utilis, la construction while( defined( $_ = <FIC> ) ) # quivaut while( <FIC> )

# ECRITURE print( FIC "toto\n" ); printf( FIC "%03d", $i );

# Le premier argument est le descripteur de fichier # !!! Attention !!! Pas de virgule aprs le descripteur

Note : Il est trs important de tester les valeurs de retour des fonctions manipulant les chiers

crire une table de hachage sur disque avec les chiers DBM ==> Voir poly of

20.3.2.4. Descripteur ARGV


# Le but de <ARGV> : lire dans les fichiers passs en paramtres du script. # @ARGV est le tableau qui contient les paramtres du script. # <ARGV> est le descripteur qui permet de lire squentiellement tous les # fichiers dont le nom est dans le tableau @ARGV. # Et pour les trucs prsents dans @ARGV qui ne sont pas des fichiers, # il y a un warning lcran. foreach my $argument (@ARGV) { print "Argument du script : $argument\n"; } while( defined( my $ligne = <ARGV> ) ) { print "Contenu des fichiers passs en paramtre : $ligne"; }

728

Chapitre 20. Le langage Perl appliqu ladministration systme

# Pas du tout la mme chose :-) # Si je veux mettre des paramtres mon script qui ne sont # pas que des fichiers, mais aussi des options. prog.pl -option1 -option2 fichier1 fichier2 fichier3 # On peut modifier le tableau @ARGV en supprimant # les deux premiers lments (commande shift), puis lire dans <ARGV> # qui parcours donc uniquement les 3 fichiers (sans les options!). # Pour ceux que cela intresse, il a des modules de gestion des options : http://perldoc.perl.org/Getopt/Std.html http://perldoc.perl.org/Getopt/Std.html # On peut modifier @ARGV et se servir de cela pour tre encore plus paresseux... # Parcourir des fichiers (pas donns en arguments) ? # Je les mets dans @ARGV : @ARGV = (fichier10, fichier11, fichier12); # ou mieux : @ARGV = qw(fichier10 fichier11 fichier12); # et hop ! <ARGV> va parcourir ces trois fichiers dont le nom est # indiqu dans le code. # parcourir tous les fichiers *.txt du rpertoires "textes" ? @ARGV = glob( textes/*.txt ); # ou @ARGV = <textes/*.txt>; # Et hop ! <ARGV> va parcourir ces fichiers !

# Comment les descripteurs peuvent-ils faire rfrence des fichiers ? # Il ny a pas de fichier dans ce cas, imagine quil font rfrence un flux. open(FIC1,"ls|") # permet de lire ce qua crit la commande (ici ls). # # # # aucun fichier, un flux. Lorsque le programme crit dans FIC4, les donnes seront rediriges vers la commande mail (entre stantard).

open(FIC4,"|mail robert\@bidochon.org")

## 1) Lancer une commande extrieure (et ne rien rcuprer) system( ls -lh / >>/tmp/test ); # Cration/ajout du fichier /tmp/test et puis cest tout :-) ## 2) Lancer une commande extrieure et interagir avec elle open(FIC1,"ls -lh /|") or die(...); while( defined( my $ligne = <FIC1> ) ) { print "La commande a crit ceci : $ligne"; # ou tout autre traiment sur les valeurs successives de $ligne } close( FIC1 );

729

Chapitre 20. Le langage Perl appliqu ladministration systme


# quivaut my $result = ls -lh; my @lines = split( "\n", $result );

# pour rcuprer le rsultat de la commande dans $re # si il y a plusieurs lignes, je les place dans un t

# mais ici le contrle derreur est plus difficile.

20.3.3. Expressions rgulires


Source(s):

OF (Sylvain Lhullier): En Ligne (http://sylvain.lhullier.org/publications/intro_perl/chapitre10.html) Hors Ligne (docs/eof/sr018-ch10-regexp.pdf)

Deux types de fonctionnalits dans les expressions rgulires :


## La correspondance de motif (pattern matching en anglais) = Tester (vrifier) si une chane de caractres comporte un certain motif. = extraire sous-chane dune variable # Syntaxe : m/motif/ $v =~ m/voiture/; # m = match # VRAI si $v contient voiture

## La substitution = remplacement dune chane par une autre # Syntaxe : s/motif/chane/ $v =~ s/voiture/pieds/; # s = substitution # Remplacer voiture par pieds dans $v

# Par dfaut, cest la premire occurence qui match qui sera remplace. # Sauf utiliser loption g (pour global) qui effectuera tous les remplacements # possibles (sans boucler linfini si le motif est r-crit, car on repart de # la fin de la chaine remplace). $v =~ s/voiture/pieds/g; # g ici est une option... ## ~= operateur bind pour lier un variable une expression rgulire if( $v =~ m/sentier/ ) { instructions } # instructions excutes si $v contient la chane sentier

if ($v =~ m/([0-9]+)[\+ - \* \/]\1/) { ... }

# Vrifier que $v comporte deux fois de suite # un mme nombre (spares par un signe # dopration mathmatique).

730

Chapitre 20. Le langage Perl appliqu ladministration systme


## !~ oprateur de ngation dune correspondance if( $w !~ m/pieds/ ) { ... } # quivaut if( ! ( $w =~ m/pieds/ ) ) { ... }

Motifs utilisable :
## Les caractres abc...xyz ABC...xyz 012...89 %-_... ## Les caractres spciaux echapper avec un anti-slash (\) \ | ( ) [ ] { } ^ $ * + ? . # Ces caractres ont un rle particulier # Ajouter cette liste le caractre choisi comme sparateur ## Autres caractres spciaux utilisable \n saut de ligne \r retour chariot \t tabulation \f saut de page \e chappement . [abc] [a-z] [A-Z] [R-Z] [0-9] [2a-zR] [ -~] # # # # # # # # (caractre point) correspond un caractre quel quil soit sauf \n [caractres] matche un caractre parmi ceux prsents entre crochets Interval de caractres quivalant aux 26 lettres minuscules de lalphabet. quivaut aux 26 lettres majuscules Interval de R Z (code ASCII R inferieur Z) quivaut aux 10 chiffres correspondance avec toute lettre minuscule ou le 2 ou le R majuscule. correspond un caractre ASCII imprimable et de numro infrieur 127

Example: m/tot[a-zA0-9]V/

# interval position quelconque

## Ngation (ne pas matcher) ^ # (accent circonflexe) "tout caractre sauf ..." # Uniquement en dbut dintervale [^ao] # matche tout caractre sauf le a et le o [^0-9] # matche tout caractre non numrique ## Quantificateur # peuvent tre appliqus tout motif : m/[0-9-]{4,8}/ * m/a*/ # (ltoile) le motif peut tre prsent 0 fois ou plus # raccourci pour {0,} # le mot vide, a, aa, aaa, aaaa, ...

731

Chapitre 20. Le langage Perl appliqu ladministration systme


m/za*/ + m/a+/ ? m/a?/ {n } m/a{4}/ {n ,} m/a{2,}/ {,n } m/a{,3}/ # ne sapplique qu a : zoro, zara, zaari, ... # 1 fois ou plus # raccourci pour {1,} # a, aa, aaa ... # 0 ou 1 fois # raccourci pour {0,1} # mot vide ou a # n fois exactement # aaaa # au moins n fois # aa, aaa, aaaa ... # au plus n fois # mot vide, a, aa ou aaa

{n ,m} # entre m et n fois m/a{2,5}/ # aa, aaa, aaaa ou aaaaa

Note : + et * sont des caractres spciaux uiquement en dehors des ensembles, pas dedans. En dehors des ensembles, ce sont des quanticateurs. Dans les ensembles, ce sont des caractres qui nont rien de particulier, les deux caractres spciaux connus sont :
^ pour complment # et - pour intervale

## Raccourcis des ensembles courants : \d \D \w \W \s \S : : : : : : un un un un un un chiffre (d=digit), quivalent [0-9] non-numrique, quivalent [^0-9] alphanumrique (w=word ou caractre), quivalent [0-9a-zA-Z_] non-alphanumrique, quivalent [^0-9a-zA-Z_] espacement(s=space), quivalent [ \n\t\r\f] non-espacement, quivalent [^ \n\t\r\f]

## Utiliser des parenthses pour effectuer un regroupement entre plusieurs motifs # pour leur appliquer conjointement le mme quantificateur. m/[+-]?\d+\.\d+/ # permet de reconnatre un nombre dcimal, sign ou non : # un caractre + ou - optionnel, # au moins un chiffre, un point et enfin au moins un chiffre.

732

Chapitre 20. Le langage Perl appliqu ladministration systme

m/[+-]?\d+\.?\d*/

# rendre optionnelle la partie dcimale # non-obligatoire la prsence du point # et celle des chiffres aprs la virgule. # ici le point et les chiffres qui le suivent sont # rendus solidaires dans labsence ou la prsence.

m/[+-]?\d+(\.d+)?/

m/meuh{3}/ m/(meuh){3}/

# meugler longtemps # meugler plusieurs fois !

# (le signe pipe) avoir le choix entre des alternatives # mots comportant soit Fred, soit Paul, soit Julie # regroupement vaut : # Fred Martin ou Paul Martin ou Julie Martin

m/Fred|Paul|Julie/ m/(Fred|Paul|Julie) Martin/

^ $v =~ m/^a/ $ $v =~ m/c$/ \b m/\btoto\b/

# laccent circonflexe ( ^) correspond au dbut de la chane. # VRAI si la variable $v commence par la lettre a # le signe dollar ($) correspond la fin de la chane # VRAI si la variable $v se termine par la lettre c. # # # # marque un dbut ou une fin de mot matche " toto", " toto autreMot", " unMot toto autreMot", etc. mais pas " unMot totoMotColl" car le deuxime \b ne peut pas tre vrai entre la lettre o et la lettre M.

20.3.4. Exercices Sance 2


Source(s):

OF (Sylvain Lhullier): En Ligne (http://sylvain.lhullier.org/ens/eof/seance02.pdf) Hors Ligne (docs/eof/sr018-ch10-seance02.pdf)

20.3.4.1. Exercice 1. Fichiers


Script exo1.pl (docs/sr018-ch10-seance02-exo1-pl.txt) manipulation de chiers
$ ./sr018-ch10-seance02-exo1.pl

733

Chapitre 20. Le langage Perl appliqu ladministration systme


/mnt/hsubuntu/16-SR018-Langage-Perl/sr018-ch00-cheatsheatperl-v01.ods /mnt/hsubuntu/16-SR018-Langage-Perl/sr018-ch00-cheatsheatperl.ods /mnt/hsubuntu/16-SR018-Langage-Perl/sr018-ch00-intro_perl.pdf /mnt/hsubuntu/16-SR018-Langage-Perl/sr018-ch01-premiers-pas.pdf /mnt/hsubuntu/16-SR018-Langage-Perl/sr018-ch02-scalaires.pdf /mnt/hsubuntu/16-SR018-Langage-Perl/sr018-ch03-structures-controle.pdf /mnt/hsubuntu/16-SR018-Langage-Perl/sr018-ch04-listes-tableaux.pdf /mnt/hsubuntu/16-SR018-Langage-Perl/sr018-ch05-fonction.pdf /mnt/hsubuntu/16-SR018-Langage-Perl/sr018-ch06-fonctions-listes.pdf /mnt/hsubuntu/16-SR018-Langage-Perl/sr018-ch06-seance01-exo1.pl~ /mnt/hsubuntu/16-SR018-Langage-Perl/sr018-ch06-seance01-exo2.pl /mnt/hsubuntu/16-SR018-Langage-Perl/sr018-ch06-seance01-exo2.pl~ /mnt/hsubuntu/16-SR018-Langage-Perl/sr018-ch06-seance01-exo3.pl /mnt/hsubuntu/16-SR018-Langage-Perl/sr018-ch06-seance01-exo3.pl~ /mnt/hsubuntu/16-SR018-Langage-Perl/sr018-ch06-seance01-exo4.pl /mnt/hsubuntu/16-SR018-Langage-Perl/sr018-ch06-seance01-exo4.pl~ /mnt/hsubuntu/16-SR018-Langage-Perl/sr018-ch06-seance01-exo5.pl /mnt/hsubuntu/16-SR018-Langage-Perl/sr018-ch06-seance01-exo5.pl~ /mnt/hsubuntu/16-SR018-Langage-Perl/sr018-ch06-seance01.pdf /mnt/hsubuntu/16-SR018-Langage-Perl/sr018-ch07-table-hachage.pdf /mnt/hsubuntu/16-SR018-Langage-Perl/sr018-ch09-fichiers.pdf /mnt/hsubuntu/16-SR018-Langage-Perl/sr018-ch10-regexp.pdf /mnt/hsubuntu/16-SR018-Langage-Perl/sr018-ch10-seance02-exo1.pl /mnt/hsubuntu/16-SR018-Langage-Perl/sr018-ch10-seance02-exo1.pl~ /mnt/hsubuntu/16-SR018-Langage-Perl/sr018-ch10-seance02.pdf /mnt/hsubuntu/16-SR018-Langage-Perl/sr018-ch11-references.pdf /mnt/hsubuntu/16-SR018-Langage-Perl/sr018-ch11-seance03.pdf /mnt/hsubuntu/16-SR018-Langage-Perl/sr018-template.pl /mnt/hsubuntu/16-SR018-Langage-Perl/sr018-template.pl~ /mnt/hsubuntu/16-SR018-Langage-Perl/sr018-ch06-seance01-exo2.pl /mnt/hsubuntu/16-SR018-Langage-Perl/sr018-ch06-seance01-exo3.pl /mnt/hsubuntu/16-SR018-Langage-Perl/sr018-ch06-seance01-exo4.pl /mnt/hsubuntu/16-SR018-Langage-Perl/sr018-ch06-seance01-exo5.pl /mnt/hsubuntu/16-SR018-Langage-Perl/sr018-ch10-seance02-exo1.pl /mnt/hsubuntu/16-SR018-Langage-Perl/sr018-ch06-seance01-exo5.pl /mnt/hsubuntu/16-SR018-Langage-Perl/sr018-ch06-seance01-exo3.pl /mnt/hsubuntu/16-SR018-Langage-Perl/sr018-ch06-seance01-exo2.pl /mnt/hsubuntu/16-SR018-Langage-Perl/sr018-ch06-seance01-exo4.pl /mnt/hsubuntu/16-SR018-Langage-Perl/sr018-ch10-seance02-exo1.pl 472 833 863 959 988

734

Chapitre 20. Le langage Perl appliqu ladministration systme

20.3.4.2. Exercice 2. Table de hachage


Script exo2.pl (docs/sr018-ch10-seance02-exo2-pl.txt) manipulation de table de hachage
$ ./sr018-ch10-seance02-exo2.pl octobre velo juin octobre: 31 velo: inconnu juin: 30 $ ./sr018-ch10-seance02-exo2.pl OctoBre JanvIER baTeau JuIN octobre: 31 janvier: 31 bateau: inconnu juin: 30

20.3.4.3. Exercice 3. Table de hachage et chiers


Script exo3.pl (docs/sr018-ch10-seance02-exo3-pl.txt)
$ ./sr018-ch10-seance02-exo3.pl Login=telnetd Passwd=x Login=bin Passwd=x Login=nobody Passwd=x Login=lp Passwd=x Login=gdm Passwd=x Login=irc Passwd=x Login=bbbbb Passwd=x Login=list Passwd=x Login=messagebus Passwd=x Login=filostene Passwd=x Login=sys Passwd=x Login=Debian-exim Passwd=x Login=haldaemon Passwd=x Login=gnats Passwd=x Login=ddddd Passwd=x Login=eeeee Passwd=x Login=avahi Passwd=x Login=proxy Passwd=x Login=games Passwd=x Login=libuuid Passwd=x Login=aaaaa Passwd=x Login=hplip Passwd=x Login=proftpd Passwd=x Login=www-data Passwd=x Login=ccccc Passwd=x Login=ftp Passwd=x Login=statd Passwd=x Login=mail Passwd=x Login=root Passwd=x

735

Chapitre 20. Le langage Perl appliqu ladministration systme


Login=daemon Passwd=x Login=backup Passwd=x Login=uucp Passwd=x Login=sync Passwd=x Login=vboxadd Passwd=x Login=mysql Passwd=x Login=man Passwd=x Login=news Passwd=x Login=lp Passwd=x Login=gdm Passwd=x Login=bbbbb Passwd=x Login=sys Passwd=x Login=ddddd Passwd=x Login=ccccc Passwd=x Login=ftp Passwd=x Login=sync Passwd=x Login=mysql Passwd=x

20.3.4.4. Exercice 4. Expressions rgulires


Script exo4.pl (docs/sr018-ch10-seance02-exo4-pl.txt)
$ ./sr018-ch10-seance02-exo4.pl Fichier /etc/passwd : root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/bin/sh bin:x:2:2:bin:/bin:/bin/sh sys:x:3:3:sys:/dev:/bin/sh sync:x:4:65534:sync:/bin:/bin/sync ... libuuid:x:100:101::/var/lib/libuuid:/bin/sh syslog:x:101:102::/home/syslog:/bin/false messagebus:x:102:106::/var/run/dbus:/bin/false hplip:x:103:7:HPLIP system user,:/var/run/hplip:/bin/false avahi-autoipd:x:104:110:Avahi autoip daemon,:/var/lib/avahi-autoipd:/bin/false avahi:x:105:111:Avahi mDNS daemon,:/var/run/avahi-daemon:/bin/false couchdb:x:106:113:CouchDB Administrator,:/var/lib/couchdb:/bin/bash haldaemon:x:107:114:Hardware abstraction layer,:/var/run/hald:/bin/false ... gdm:x:112:119:Gnome Display Manager:/var/lib/gdm:/bin/false filostene:x:1000:1000:Filostene,:/home/filostene:/bin/bash # Utilisateur ROOT $ ./sr018-ch10-seance02-exo4.pl Fichier /etc/passwd : root:x:0:0:root:/root:/bin/bash # Sans /bin/bash

736

Chapitre 20. Le langage Perl appliqu ladministration systme


$ ./sr018-ch10-seance02-exo4.pl Fichier /etc/passwd : daemon:x:1:1:daemon:/usr/sbin:/bin/sh bin:x:2:2:bin:/bin:/bin/sh sys:x:3:3:sys:/dev:/bin/sh sync:x:4:65534:sync:/bin:/bin/sync ... syslog:x:101:102::/home/syslog:/bin/false messagebus:x:102:106::/var/run/dbus:/bin/false hplip:x:103:7:HPLIP system user,:/var/run/hplip:/bin/false avahi-autoipd:x:104:110:Avahi autoip daemon,:/var/lib/avahi-autoipd:/bin/false avahi:x:105:111:Avahi mDNS daemon,:/var/run/avahi-daemon:/bin/false ... pulse:x:111:117:PulseAudio daemon,:/var/run/pulse:/bin/false gdm:x:112:119:Gnome Display Manager:/var/lib/gdm:/bin/false # Remplace /home par /mnt/home $ ./sr018-ch10-seance02-exo4.pl Fichier /etc/passwd : root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/bin/sh ... libuuid:x:100:101::/var/lib/libuuid:/bin/sh syslog:x:101:102::/mnt/home/syslog:/bin/false messagebus:x:102:106::/var/run/dbus:/bin/false hplip:x:103:7:HPLIP system user,:/var/run/hplip:/bin/false ... saned:x:110:116::/mnt/home/saned:/bin/false pulse:x:111:117:PulseAudio daemon,:/var/run/pulse:/bin/false gdm:x:112:119:Gnome Display Manager:/var/lib/gdm:/bin/false filostene:x:1000:1000:Filostene,:/mnt/home/filostene:/bin/bash # Supprime mot de passe $ ./sr018-ch10-seance02-exo4.pl Fichier /etc/passwd : root:0:0:root:/root:/bin/bash daemon:1:1:daemon:/usr/sbin:/bin/sh bin:2:2:bin:/bin:/bin/sh ... kernoops:109:65534:Kernel Oops Tracking Daemon,:/:/bin/false saned:110:116::/home/saned:/bin/false pulse:111:117:PulseAudio daemon,:/var/run/pulse:/bin/false gdm:112:119:Gnome Display Manager:/var/lib/gdm:/bin/false filostene:1000:1000:Filostene,:/home/filostene:/bin/bash # Echange login et mot de passe $ ./sr018-ch10-seance02-exo4.pl Fichier /etc/passwd : x:root:0:0:root:/root:/bin/bash x:daemon:1:1:daemon:/usr/sbin:/bin/sh x:bin:2:2:bin:/bin:/bin/sh x:sys:3:3:sys:/dev:/bin/sh x:sync:4:65534:sync:/bin:/bin/sync

737

Chapitre 20. Le langage Perl appliqu ladministration systme


x:games:5:60:games:/usr/games:/bin/sh x:man:6:12:man:/var/cache/man:/bin/sh x:lp:7:7:lp:/var/spool/lpd:/bin/sh ... x:pulse:111:117:PulseAudio daemon,:/var/run/pulse:/bin/false x:gdm:112:119:Gnome Display Manager:/var/lib/gdm:/bin/false x:filostene:1000:1000:Filostene,:/home/filostene:/bin/bash

20.4. OF Sance 3 : Rfrences et Application ladministration systme


20.4.1. Rfrences
Source(s):

OF (Sylvain Lhullier): En Ligne (http://sylvain.lhullier.org/publications/intro_perl/chapitre11.html) Hors Ligne (docs/eof/sr018-ch11-references.pdf)

Les rfrences permettent de btir des structures complexes et composes : tableau de tableaux ou de tables de hachage et inversement, table de hachage de tableaux ou de tables de hachage ... Chaque variable, quelle soit scalaire, tableau ou table de hachage, est prsente une position donne dans la mmoire. Une rfrence vers une variable est (schmatiquement) ladresse mmoire de cette variable. Une telle rfrence peut elle-mme tre stocke dans une variable scalaire.

20.4.1.1. Schmas des structures de rfrence en Perl


Note : Avant la programmation et la manipulation de rfrences, il est fortement conseill de faire un schma de la structure de rfrence. Se reporter au poly de lOF pour des examples et la syntaxe schmatique(similaire aux pointeurs en C) ;-)

738

Chapitre 20. Le langage Perl appliqu ladministration systme


Figure 20-1. Schma de Rfrence Simple en Perl ($refv pointe vers $v)

Figure 20-2. Schma de Rfrence Diverse en Perl

739

Chapitre 20. Le langage Perl appliqu ladministration systme

20.4.1.2. Rfrences sur scalaire


# Rfrence de la variable $v my $refv = \$v; # ( \ ) Anti-slash permet de prendre la rfrence dune variable # $v est la rfrence de la variable $v # $refv pointe vers $v # Drfrence la variable $refv. $$refv # $$refv quivaut la variable scalaire pointe par la rfrence $refv # Avec deux dollars est quivalente $v tant que $refv pointe vers $v my $v = -43.5; my $refv = \$v; print "$refv\n"; print "$$refv\n"; $$refv = 56; print "$$refv\n"; print "$v\n";

# affiche SCALAR(0x80ff4f0) la valeur de la rfrence # affiche -43.5 contenu de la variable $v pointe par $refv # affecte 56 $v # affiche 56 # affiche 56

20.4.1.3. Passage de rfrence via des functions


# en entre sub f { my ($ref) = @_; $$ref = 0; } f($refv); f(\$v); # en sortie sub f2 { my $w = 43; return \$w; } my $reff = f2();

# prend en argument une rfrence # affecte 0 la variable pointe

# $v vaut 0 # Equivalent

# dclare une variable locale # renvoie une rfrence vers $w

# Affecte rfrence

740

Chapitre 20. Le langage Perl appliqu ladministration systme

20.4.1.4. Rfrence sur les tableaux


my @t = (23, "ab", -54.4); # Rfrence de la variable @t my $reft = \@t; # Dfrence de la variable @t @$reft # quivalent @t my @t2 = @$reft; foreach my $e (@$reft) { ... } @$reft = (654.7, -9, "bonjour"); # Copie @t dans une autre variable tableau # Process @t ... # Affecte @t avec de nouvelles valeurs

# $reft est quivalente au nom t de la variable tant que $reft pointe sur @t Tableau t @t $t[i] $t[i] Rfrence $reft @$reft $$reft[i] $reft->[i]

# Equivaut $$reft[i] # Equivaut $t[1] = "coucou"

$reft->[1] = "coucou";

# Crer des tableaux de tableaux my @t1 = ( 16, -33 ); my @t2 = ( "el", 0.3, 4 ); my @t = ( 6, \@t1, \@t2, "s" ); # !!! Attention !!! Nquivaut pas my @t2 = ( 6, ( 16, -33 ), ( "el", 0.3, 4 ), "s" ); # Ici il y a cration dun tableau sept lments # par aplatissement des listes.

20.4.1.5. Rfrence sur table de hachage


my %h = ( Paul => 21, Julie => 19 ); # Rfrence my $refh = \%h; # Drfence %$refh

# $refh est une rfrence vers la table de hachage %h

# quivalent %h # Copie de %h dans une autre variable # Parcours des clefs...

my %h2 = %$refh; foreach my $k (keys %$refh) { ... } $$refh{Paul}

# Accs la valeur

741

Chapitre 20. Le langage Perl appliqu ladministration systme


$refh->{Paul} # quivalent $refh->{Jacques} = 33; # Affectation dune nouvelle valeur... # $refh est quivalente au nom h de la variable tant que $reft pointe sur %h Hash h %h $h{Paul} $h{Paul} Rfrence $refh %$refh $$refh{Paul} $refh->{Paul}

# Afficher couple key/valeur foreach my $k (keys %$refh) { print "$k $refh->{$k}\n"; }

Avertissement
!!! Attention !!! Pas darithmtique possible sur les rfrences en Perl
my $v my $r print $r++; print = 45; = \$v; "$r\n"; # affiche SCALAR(0x80fd4c4) "$r\n"; # affiche 135255237

Avertissement
!!! Attention !!! Lorsquon passe une rfrence une fonction, seule la copie de la rfrence est effectue, la structure pointe par la rfrence ne lest pas !
sub f3 { my ($reftab) = @_; $reftab->[2] = 32.3; } my @t = ( 49, "hello", -2 ); my $r = \@t; f3( $r ); # @t est modifi f3( \@t ); # quivalent # Les deux rfrences pointent donc vers la mme zone mmoire

742

Chapitre 20. Le langage Perl appliqu ladministration systme

20.4.1.6. Rfrence anonyme


## Vers un scalaire, la syntaxe est : \valeur-constante my $ref1 = \34; my $ref2 = \"er"; print "$$ref1 $$ref2\n";

## Vers un tableau, la syntaxe est : [lment1 , lment2 , lment3 , etc] my $r = [ 34.4, "ac", -71 ]; print "$r->[0]\n"; $r->[2] = 901; foreach my $e (@$r) { ... } # !!! Attention !!! \(2,"er",$v) quivaut (\2,\"er",\$v)

my @t = ( 6, [ 16, -33 ], [ "el", 0.3, 4 ], "s" ); # quivaut my @t1 = ( 16, -33 ); my @t2 = ( "el", 0.3, 4 ); my @t = ( 6, \@t1, \@t2, "s" ); # Rfrenve vers un tableau contenant des rfrences vers des tableaux my $r = [ 6, [ 16, -33 ], [ "el", 0.3, 4 ], "s" ]; ## Accder aux lments print "$r->[0]\n"; # affiche 6

# $r->[1] est une rfrence vers tableau print "$r->[1]->[0]\n"; # affiche 16 print "$r->[1]->[1]\n"; # affiche -33 # $r->[2] est une rfrence vers tableau print "$r->[2]->[0]\n"; # affiche el print "$r->[2]->[1]\n"; # affiche 0.3 print "$r->[2]->[2]\n"; # affiche 4 print "$r->[3]\n"; # affiche s # Il est dusage dutiliser loprateur flche (->) # plutt que de la syntaxe double-dollar ($$) # $r->[1] est une rfrence vers tableau, # @{$r->[1]} est le tableau en question. foreach my $e ( @{$r->[1]} ) { ... } # Parcourt 16 et -33

743

Chapitre 20. Le langage Perl appliqu ladministration systme

$r->[2][1]

# quivaut

$r->[2]->[1]

## Vers une table de hachage, la syntaxe est : {clef1 =>valeur1 , clef2 =>valeur2 , etc} my $r = { Paul => 21, Julie => "e" }; my %h = ( Paul => 21, Julie => "e" ); # Rfrenve vers une table de hachage contenant des rfrences vers des tables de hachage my $r = { Paul => { rue => Pasteur, tel => 06461341 }, Julie => { rue => Jaures, tel => 03729103 } }; # quivaut my %h1 = ( rue tel my %h2 = ( rue tel my $r = { Paul Julie

=> => => => => =>

Pasteur, 06461341 ); Jaures, 03729103 ); \%h1, \%h2 };

## Accder aux lments # $r->{Paul} est une rfrence print "$r->{Paul}->{tel}\n"; # print "$r->{Paul}{tel}\n"; # print "$r->{Paul}{rue}\n"; # vers une table de hachage affiche 06461341 quivalent affiche Pasteur

# $r->{Julie} est une rfrence vers une table de hachage print "$r->{Julie}{tel}\n"; # affiche 03729103 print "$r->{Julie}{rue}\n"; # affiche Jaures

## Rfrences anonymes diverses my $r = [ [a,4], b, [1,z], {P=>[-2,"er",0],A=>7}, 8 ]; ## Accder aux lments print "$r->[3]->{P}->[1]\n"; print "$r->[3]{P}[1]\n"; my $reft = $r->[0];

# affiche "er" # quivalent # parcourir le premier tableau du deuxime niveau

744

Chapitre 20. Le langage Perl appliqu ladministration systme


foreach my $v (@$reft) { print "$v\n"; } foreach my $v (@{$r->[0]}) { print "$v\n"; } foreach my $k (keys %{$r->[3]}) { print "$k $r->[3]{$k}\n"; } # quivalent sans variable intermdiaire # Syntaxe : @{rfrence}

# parcour de la table de hachage # Syntaxe : %{rfrence}

Avertissement
Une valeur de rfrence anonyme est une constante, il est impossible de modier la valeur pointe par la rfrence

20.4.1.7. Fonction (oprateur) ref()


# Connatre le type dune rfrence # Cette fonction renvoie : "SCALAR" "ARRAY" "HASH" FAUX si si si si son son son son argument argument argument argument est une rfrence sur scalaire, est une rfrence sur tableau, est une rfrence sur table de hachage, nest pas une rfrence (cest un scalaire classique).

foreach my $p (@$r) { if( ref($p) eq "ARRAY" ) { print "( "; foreach my $v (@$p) { print "$v "; } print ")\n"; } elsif( ref($p) eq "HASH" ) { foreach my $k (keys(%$p)) { print "$k : $p->{$k}\n"; } } elsif( !ref($p) ) { print "$p\n"; }

# # # # # # #

Affiche : ( a 4 ) b ( 1 z ) P : ARRAY(0x8100c20) A : 7 8

745

Chapitre 20. Le langage Perl appliqu ladministration systme


}

20.4.1.8. Fonction Dumper


## Explorer et afficher recursivement des rfrences diverses use Data::Dumper; # Equivalant du #include en langage C print Dumper($r); # Renvoie une (longue) chane de caractres # reprsentant toute la structure rfrence

20.4.1.9. Rfrences circulaires


my $r = [ 71, { "Hello" => -34.7, "Ptt" => { "R5" => "As4" } } ]; $r->[1]{Ptt}{Od} = $r; # Cre la rfrence circulaire print Dumper($r); # Affiche la structure de rfrence sans problme

Avertissement
!!! Attention !!! Lors de la libration de la mmoire, il faut absolument viter de crer des zones mmoires inaccessibles (aucune variable ne nous permet dy accder) et non librables :
$r->[1] = undef; $r = undef; # toujours "casser" la circularit # avant de modifier la valeur de la variable $r # et la mmoire sera libre correctement...

20.4.1.10. Rfrence sur chiers


## Cre une variable dont il est possible de prendre ladresse open(FILE,">toto") or die("$!"); my $reff = \*FILE; ## possible de crer une rfrence vers un des trois fichiers pr-existant my $refo = \*STDOUT;

746

Chapitre 20. Le langage Perl appliqu ladministration systme


open(FILE,">toto") or die("$!"); my $reff = \*FILE; print $reff "ok\n"; sub affiche { my ($ref) = @_; print $ref "ok\n"; } affiche( $reff ); affiche( \*FILE ); # quivalent close( $reff );

20.4.1.11. Rfrences sur fonctions


## Rfrence vers la fonction sub affcoucou { my ($p) = @_; print "Coucou $p\n"; } my $ref = \&affcoucou; ## Dfrence &$ref("Larry"); # Appel $ref->("Larry"); # quivalent sub f { my ($f,$p) = @_; $f->( $p ); } f( $ref, "Larry" ); f( \&affcoucou, "Larry" ); # quivalent

20.4.2. Exercices Sance 3


Source(s):

OF (Sylvain Lhullier): En Ligne (http://sylvain.lhullier.org/ens/eof/seance03.pdf) Hors Ligne (docs/eof/sr018-ch11-seance03.pdf)

Le but de ce TD est de continuer lapprentissage du langage Perl par des exemples dutilisation des rfrences appliqus ladministration systme.

747

Chapitre 20. Le langage Perl appliqu ladministration systme

20.4.2.1. Exercice 1. Rfrences, Premiers pas!


Script exo1.pl (docs/sr018-ch11-seance03-exo1-pl.txt) construit et manipule une rfrence vers une table de hachage dont les clefs seraient le login dune personne et la valeur une rfrence vers une table de hachage comportant les clefs suivantes :
uid : son numro dutilisateur, home : son rpertoire personnel, gid : une rfrence vers un tableau comportant ses numros de groupe.

Example : root, duid 0, son rpertoire personnel est /root et ses groupes sont 0, 2 et 10, paul, duid 500, son rpertoire personnel est /home/paul et ses groupes sont 200, 4 et 10.

Figure 20-3. Schma la structure de rfrence en mmoire

748

Chapitre 20. Le langage Perl appliqu ladministration systme

$ ./sr018-ch11-seance03-exo1-pl.txt HASH(0xa4c910) # Afficher rfrence $VAR1 = { # Afficher structure de rfrences avec Dumper root => { uid => 0, home => /root, gid => [ 0, 2, 10 ] }, paul => { uid => 500, home => /home/paul, gid => [ 200, 4, 10 ] } }; Utilisateur: [root] ID utilisateur : 0 Repertoire personnel : /root Groupes : #0 #2 #10 10 - 2 - 0 Utilisateur: [paul] ID utilisateur : 500 Repertoire personnel : /home/paul Groupes : #4 #10 #200 200 - 10 - 4 # Afficher structure de rferences sans Dumper

# Liste gnre par foreach (croissant) # Liste gnre par join (dcroissant)

# Liste gnre par foreach (croissant) # Liste gnre par join (dcroissant)

20.4.2.2. Exercice 2. manipulation du chier passwd


Script exo2.pl (docs/sr018-ch11-seance03-exo2-pl.txt) manipulation du chier passwd
# # # # # # # # # Fichier passwd est compos 7 champs spars par le caractre : (deux-points). Lordre des champs est le suivant : login : le nom du compte de lutilisateur, passwd : la squence chiffre du mot de passe (ou * dans certains cas), uid : le numro de lutilisateur (0 pour root), gid : le numro de groupe de lutilisateur info : des informations sur lutilisateur (nom, etc), home : le rpertoire personnel de lutilisateur, shell : le chemin de lexecutable de son shell prfr

749

Chapitre 20. Le langage Perl appliqu ladministration systme


## 1. Quelle structure pourrait-on utiliser pour stocker en mmoire toutes ces donnes et les manipuler facilement ?

# Dans un tableau @t = ($login1, $passwd1, $uid1, $gid1, $info1, $home1, $shell1, $login2, $passwd2, $uid2, et # Sachant que le nombre de paramtre est fixe, un tableau simple pourrait tre suffisant... # 1er utilisateur dmarre indice 0, # 2eme utilisateur indice 7 (0+7paramtres), # 3eme utilisateur indice 14, etc... # Dans une table de hachage %h = ( login1=>xxx, passwd1=>xxx, uid1=>, gid1=>, info1=>, home1=>, shell1=>, login2=>, passwd2=>, uid2=>, etc...) # Combinaison de table de hachage et tableau $ref = { user1 => [$login, $passwd, $uid, $gid, $info, $home, $shell], user2 => [$login, $passwd, $uid, $gid, $info, $home, $shell], etc...}

## 2. On se propose de stocker ces informations dans un tableau qui aura pour valeur des rfrence vers des tables de hachage dont les clefs seront : login, uid, gid, info, passwd, home et shell.

Schma de cette structure de donnes :

750

Chapitre 20. Le langage Perl appliqu ladministration systme Figure 20-4. Schma de structure de donnes pour stockage de passwd

$ ./sr018-ch11-seance03-exo2.pl Le fichier /etc/passwd existe ARRAY(0x713178) root::x::0::0::root::/root::/bin/bash:: daemon::x::1::1::daemon::/usr/sbin::/bin/sh:: bin::x::2::2::bin::/bin::/bin/sh::

751

Chapitre 20. Le langage Perl appliqu ladministration systme


sys::x::3::3::sys::/dev::/bin/sh:: sync::x::4::65534::sync::/bin::/bin/sync:: games::x::5::60::games::/usr/games::/bin/sh:: man::x::6::12::man::/var/cache/man::/bin/sh:: lp::x::7::7::lp::/var/spool/lpd::/bin/sh:: mail::x::8::8::mail::/var/mail::/bin/sh:: news::x::9::9::news::/var/spool/news::/bin/sh:: uucp::x::10::10::uucp::/var/spool/uucp::/bin/sh:: proxy::x::13::13::proxy::/bin::/bin/sh:: www-data::x::33::33::www-data::/var/www::/bin/sh:: backup::x::34::34::backup::/var/backups::/bin/sh:: list::x::38::38::Mailing List Manager::/var/list::/bin/sh:: irc::x::39::39::ircd::/var/run/ircd::/bin/sh:: gnats::x::41::41::Gnats Bug-Reporting System (admin)::/var/lib/gnats::/bin/sh:: nobody::x::65534::65534::nobody::/nonexistent::/bin/sh:: libuuid::x::100::101::::/var/lib/libuuid::/bin/sh:: syslog::x::101::102::::/home/syslog::/bin/false:: messagebus::x::102::106::::/var/run/dbus::/bin/false:: hplip::x::103::7::HPLIP system user,::/var/run/hplip::/bin/false:: avahi-autoipd::x::104::110::Avahi autoip daemon,::/var/lib/avahi-autoipd::/bin/false:: avahi::x::105::111::Avahi mDNS daemon,::/var/run/avahi-daemon::/bin/false:: couchdb::x::106::113::CouchDB Administrator,::/var/lib/couchdb::/bin/bash:: haldaemon::x::107::114::Hardware abstraction layer,::/var/run/hald::/bin/false:: speech-dispatcher::x::108::29::Speech Dispatcher,::/var/run/speech-dispatcher::/bin/sh:: kernoops::x::109::65534::Kernel Oops Tracking Daemon,::/::/bin/false:: saned::x::110::116::::/home/saned::/bin/false:: pulse::x::111::117::PulseAudio daemon,::/var/run/pulse::/bin/false:: gdm::x::112::119::Gnome Display Manager::/var/lib/gdm::/bin/false:: filostene::x::1000::1000::Filostene,::/home/filostene::/bin/bash:: uid pairs: ARRAY(0x71eb58) root::x::0::0::root::/root::/bin/bash:: bin::x::2::2::bin::/bin::/bin/sh:: sync::x::4::65534::sync::/bin::/bin/sync:: man::x::6::12::man::/var/cache/man::/bin/sh:: mail::x::8::8::mail::/var/mail::/bin/sh:: uucp::x::10::10::uucp::/var/spool/uucp::/bin/sh:: backup::x::34::34::backup::/var/backups::/bin/sh:: list::x::38::38::Mailing List Manager::/var/list::/bin/sh:: nobody::x::65534::65534::nobody::/nonexistent::/bin/sh:: libuuid::x::100::101::::/var/lib/libuuid::/bin/sh:: messagebus::x::102::106::::/var/run/dbus::/bin/false:: avahi-autoipd::x::104::110::Avahi autoip daemon,::/var/lib/avahi-autoipd::/bin/false:: couchdb::x::106::113::CouchDB Administrator,::/var/lib/couchdb::/bin/bash:: speech-dispatcher::x::108::29::Speech Dispatcher,::/var/run/speech-dispatcher::/bin/sh:: saned::x::110::116::::/home/saned::/bin/false:: gdm::x::112::119::Gnome Display Manager::/var/lib/gdm::/bin/false:: filostene::x::1000::1000::Filostene,::/home/filostene::/bin/bash:: gid +10 : ARRAY(0x71eb58) root::x::0::10::root::/root::/bin/bash::

752

Chapitre 20. Le langage Perl appliqu ladministration systme


bin::x::2::12::bin::/bin::/bin/sh:: sync::x::4::65544::sync::/bin::/bin/sync:: man::x::6::22::man::/var/cache/man::/bin/sh:: mail::x::8::18::mail::/var/mail::/bin/sh:: uucp::x::10::20::uucp::/var/spool/uucp::/bin/sh:: backup::x::34::44::backup::/var/backups::/bin/sh:: list::x::38::48::Mailing List Manager::/var/list::/bin/sh:: nobody::x::65534::65544::nobody::/nonexistent::/bin/sh:: libuuid::x::100::111::::/var/lib/libuuid::/bin/sh:: messagebus::x::102::116::::/var/run/dbus::/bin/false:: avahi-autoipd::x::104::120::Avahi autoip daemon,::/var/lib/avahi-autoipd::/bin/false:: couchdb::x::106::123::CouchDB Administrator,::/var/lib/couchdb::/bin/bash:: speech-dispatcher::x::108::39::Speech Dispatcher,::/var/run/speech-dispatcher::/bin/sh:: saned::x::110::126::::/home/saned::/bin/false:: gdm::x::112::129::Gnome Display Manager::/var/lib/gdm::/bin/false:: filostene::x::1000::1010::Filostene,::/home/filostene::/bin/bash:: ordre alphabtique du login : ARRAY(0x713178) avahi-autoipd::x::104::120::Avahi autoip daemon,::/var/lib/avahi-autoipd::/bin/false:: backup::x::34::44::backup::/var/backups::/bin/sh:: bin::x::2::12::bin::/bin::/bin/sh:: couchdb::x::106::123::CouchDB Administrator,::/var/lib/couchdb::/bin/bash:: filostene::x::1000::1010::Filostene,::/home/filostene::/bin/bash:: gdm::x::112::129::Gnome Display Manager::/var/lib/gdm::/bin/false:: libuuid::x::100::111::::/var/lib/libuuid::/bin/sh:: list::x::38::48::Mailing List Manager::/var/list::/bin/sh:: mail::x::8::18::mail::/var/mail::/bin/sh:: man::x::6::22::man::/var/cache/man::/bin/sh:: messagebus::x::102::116::::/var/run/dbus::/bin/false:: nobody::x::65534::65544::nobody::/nonexistent::/bin/sh:: root::x::0::10::root::/root::/bin/bash:: saned::x::110::126::::/home/saned::/bin/false:: speech-dispatcher::x::108::39::Speech Dispatcher,::/var/run/speech-dispatcher::/bin/sh:: sync::x::4::65544::sync::/bin::/bin/sync:: uucp::x::10::20::uucp::/var/spool/uucp::/bin/sh::

753

Chapitre 21. Mthodologie de conception des sites Web et interfaces


21.1. De lide la mise en production
21.1.1. En bref
Source(s):

OF: Cours & methodologie (docs/eof/SI001-ch00_cours_methodologie.pdf)

Vue densemble des phases avant la mise en dveloppement dun site. Mthodologie pour prparer lensemble des informations ncessaires aux dveloppeurs pour la ralisation dun site Web. Avoir un dcoupage prcis des tches avec une estimation des temps et un planning de suivi. Dcoupe en un ensemble de taches clefs avec lordre dans lesquelles elles doivent tre ralises : identier les risques et surveiller pour viter tous drapages. Rcolter le maximum dinformations pour diriger llan cratif en fonction des besoins.

21.1.2. Mthode et plan daction


1. Dfinir le projet : savoir rellement pourquoi et quoi il vas servir. 1.1. Collecter les informations : comprendre au mieux lentreprise : son mtier ses principaux concurrents profil de ses clients attentes des utilisateurs du site support de communication site existant contenus quelle souhaite utiliser pour le site ses points forts commerciaux (prix, services, qualits) la date de mise en ligne prvue (et les facteurs pouvant la modifier)

754

Chapitre 21. Mthodologie de conception des sites Web et interfaces


son budget comment doit tre assure la maintenance du site ==> Visualiser les attentes du client ==> Fondation pour le projet Questions importantes se poser afin que le projet rponde efficacement aux attentes des clients et des utilisateurs du site : objectifs principaux du site ? attentes ? profils des utilisateurs ? message faire passer ? valeurs mettre en avant ampleur du projet (dlais, budget) ? comment sera assure la maintenance ? interlocuteurs pour le projet (un responsable, un charge du contenu) ?

==> Informations et conclusions ==> Faire valider par le client Puis approfondir plus en dtail 1.2. Identifier le public Deux philosophies distinctes : centrer la communication sur le produit (mise en avant du produit) une orientation centre utilisateur (faciliter la navigation) connatre le public et ses habitudes, les usages,... dfinir de catgories dutilisateur peut influencer le graphisme ==> Public identifi 1.3. Analyse sectorielle Sintresser la concurrence. conforter ou non les conclusions ralises vrifier les informations essentielles vrifier les oublis analyser les points forts/faibles des solutions mises en places graphisme, architecture, ergonomie, fonctionnalits

==> Vue critique sur les choix raliss 1.4. Dfinition des fonctionnalits Faire des choix critiques lis la technique (taille ecran, prsence danimation, etc...) Cerner les fonctionnalits importantes (usages) :

755

Chapitre 21. Mthodologie de conception des sites Web et interfaces


liaison une base de donnes personnalisation ( cookies/login ) lettre dinformation flux RSS scurit accrues achat en ligne systme de gestion de contenu en ligne moteur de recherche indexant galement des documents pdf

- Sassurer avec les developpeur quil ny aura pas dincohrences techniques - Tester dans des conditions proches de lenvironnement rel ==> rdiger les spcifications techniques (document densemble des fonctionnalits techniques) rfrence pour lensemble des acteurs (termes techniques, comprhension) ==> faire valider et signer par lensemble des dcideurs 1.5. Dossier de synthse Document de synthse concise de lanalyse des donnes rcupres : Il fait apparatre lorientation du projet Rfrence pour les quipes (objectifs, public, style gnral du site) ==> faire valider et signer 1.6. Cotation (juste et efficace ?) Estimer le temps ncessaire pour la ralisation Demander aux quipes (dveloppeurs, graphistes, consultants) - de dcouper en tches leur travail - destimer le temps de travail en heure. 66% du temps homme = conception, dveloppement, tests 34% du temps de gestion = rendez-vous clients, suivi dquipes, runions... Conserver ces informations pour : - comparer tout au long du projet le temps pass et le temps prvu - anticiper les drapages - avoir des donnes utiles pour les projets suivants Surveiller les "petites modifications" demandes au fur et mesure --> raliser chaque fois un avenant au contrat (rfrence des modifications et changement de planning) 1.7. Le cahier des charges Raliser le cahier des charges : ensemble des lments du projets et de leur formalisation. Aucun document type mais quelques lments importants :

756

Chapitre 21. Mthodologie de conception des sites Web et interfaces


prsentation du projet dossier de synthse spcifications techniques planning de livraison rpartition du budget par postes (avec les heures) dates de rendus des contenus

==> reprendre les responsabilits des deux parties. ==> document qui fait foi (donc important : soigner et dtailler) se protger et protger le client. ==> valid et sign 2. Suivi client Phase continue pendant toute la dure de vie du projet. prparer le client rassurer le client expliquer comment a se droulee offrir une visibilit au client sur les volutions Points importants prendre en compte : 2.1. Dlais - dates de livraisons des livrables dfinies dans le cahier des charges - les communiquer aux quipes. - identifier les tches clefs, des membre de lquipe, qui ne peuvent absolument pas draper dans le temps. - visibilit globale du projet avec une finesse allant jusqu la journe pour suivre au jour le jour lavancement - demander chaque acteur interne de noter les temps passs par tches avec le pourcentage davancement. (remit ensuite une fois par semaine). Cela permettra - comparer les temps prvus et temps rellement passs pour viter de crer un surplus de pression car des tches sont sous-cots - isoler les dates de rendu dinformation par le client 2.2. Dfinition des tests dfinir tests doivent pour vrifier la pertinance des choix ou remonter une alerte intgrer des tests dergonomie durant la phase de cration graphique vrifier si informations recherches sont facilement trouves vrifier que lapplication ne contient pas de bugs

Raliser des tests via - Groupe de testeurs professionnels (expert, egonome) - Groupe dutilisateurs (en situation relle, sondages 2.3. Espaces dchanges Deux espaces dchanges doivent exister pour chaque projet : - un pour les membres de lquipe, protge par mot de passe,

757

Chapitre 21. Mthodologie de conception des sites Web et interfaces


pas disponible au client - un autre pour le client (suivre lvolution du projet, stocker document projet, rcuprer livrable) 3. Dvelopper larchitecture Quatre points prendre en compte : - connatre les usages qui vont tre fais du site. - dfinir le contenu que lon doit mettre en place. - organis de manire hirarchique (arborescence du site) - organisation de chaque page. 3.1. Utilisateur - dfinir sont les cas dutilisation ("parcours types", agencement logique, deroulement intuitif) - se mettre la place des utilisateurs - vrifier aucun risques de se perdent en cours de route, ou heurtent des difficults Pour les parcours types, deux aspects possibles -la recherche dinformations (un critre), tache simple : ladresse de contact de lentreprise le plan daccs le prix dun produit les dernires nouveauts les heures douvertures la date de la prochaine formation

- la recherche dinformation (plusieurs critres), tache complexe : comparer deux produits rechercher un collier en argent moins de 100 euros rechercher un bijou en argent savoir si un t-shirt est disponible en bleu et sa taille sinscrire la lettre dinformation mensuelle se dsinscrire la lettre dinformation mensuelle changer ses informations personnelles (adresse de livraisons)

3.2. Contenu De ce que recherche lutilisateur on en dduit les informations mettre dans le site. - Rfrencer lensemble des informations - Rflchir son organisation (catgories, sous-catgories) organisation logique du contenu - Chercher le contenu tudier lexistant (plaquettes, produits, brochures, ancien site - identifier les contenus manquants, ou reprendre - identifier et prciser les attentes des utilisateurs finaux - fixer une date de remise par le client (un retard de livraison peut retarder lensemble du projet) - rflchir lvolution du contenu

758

Chapitre 21. Mthodologie de conception des sites Web et interfaces


- dfinir les rythmes de mises jour (journalires, hebdomadaire, mensuelles...) prvoir lintgration de ces mises jours. 3.3. Site Travailler sur larchitecture du site. Dfinir le plan du site. Prvoir des systmes de navigation supplmentaires (different cas dutilisation possible) Larborescence par dfaut doit tre la plus pertinente mettre en place des systmes de navigation transversale (menus, menus droulants, plan du site, breadcrumbs (home>produits>gammes>break) systmes de recherches. remonter dernires actualits et promotions en cours sur la page daccueil systme de recherche par critres 3.4. Les Pages Dterminer les diffrents types de pages. dfinir des gabarits types (page: accueil, informations, contact) lments prvoir Taille de la fentre Logo lments de navigation principale et secondaire Entte et pied de page lments dinformations (textes, images) Mdias (vidos,sons,animations) Fonctionnalits Informations rcurrentes (adresse, tlphone...) Champs dinscriptions Pour raliser les maquettes, diffrents logiciels - dessiner interfaces : OpenOffice - gnration dinterface : Glade, Qt-designer 3.5. Prototypage HTML Raliser un prototype HTML assez facilement. - raliser en XHTML en insistant sur la smantique des balises - interface fonctionnelle (voir comment accder aux informations) - valider les choix raliss en regard des cas dutilisations noncs Conserver la structure des pages Avoir une ide de laffichage final en appliquant la CSS adquate 4. Conception Graphique Tous les lments ncessaires sont maintenant rcolts. On connat - les besoins, et comment y rpondre. - lensemble des fonctionnalits attendues

759

Chapitre 21. Mthodologie de conception des sites Web et interfaces


- comment sorganise le site. Il faut - lui donner un ct attrayant. - Attention leffet "le site tendance" un site nest pas un laboratoire exprimentation mais avant tout un outil pour lutilisateur ==> La priorit doit donc tre lergonomie et la facilit dutilisation. 4.1. Brief de rappel Prparer les quipes aux attentes du client et de lutilisateur. Organiser une runion Vrifier que les orientations sont en adquation avec les besoins Les gabarits/prototypes seront permettront au graphistes de mieux visualiser les objectifs du site final. - Convier les dveloppeurs. En effet, durant leur phase de cration, les graphistes auront besoin de vrifier la faisabilit de leur choix. - Vrifier avec graphiste/developpeurs quil ny a pas dincohrence technique. 4.2. Dveloppement de concept visuel Rflchir des concepts visuels : - associer des ides gnrales (couleur, forme, organisation, ... ). - crer diffrentes ambiances pour un mme contenu prototypes = bande dessine noir et blanc laquelle on souhaite donner vie. Vrifier tendances possibles dgages respectent bien les rgles essentielles : dure de tlchargement pas de couleur trop difficile diffrencier par des dficients visuels possibilit dintgrer lensemble des fonctionnalits contraintes de navigateur ==> le directeur artistique retiens deux ou trois tendances diffrentes. ==> Pour chaque option retenue, habiller au moins deux pages : - la page daccueil - une page intrieure 4.3. Retour au dcideur et slection Prsenter les interfaces au dcideur pour quil choisse le style appropri. (via lespace dchange) - prvoir ensuite une runion pour expliquer les choix graphiques - si le travail prparatoire a t bien ralis, lensemble du design est dj orient utilisateurs et raliser une modification non rflchie risque de le rendre bancale. - prparer largumentaire allant avec chaque choix graphique. 4.4. Ralisation dune maquette Ton gnral t choisi = plus difficile fait.

760

Chapitre 21. Mthodologie de conception des sites Web et interfaces

Il faut maintenant -dcliner le graphisme pour chaque gabarit. - Un point ne pas oublier : les liens avec les diffrents tats (survol, visit, dsactiv). - raliser un certain nombre de tests dergonomie pour vrifier que tous les choix dorganisation raliss par les graphistes restent bien cohrents pour les utilisateurs. 4.5. Rdaction de la charte graphique Ds que les choix graphiques sont dfinis et valids, raliser la charte graphique (document): - rpondre aux questions du formataqe des lments (police, tailles de textes, palettes de couleurs, formes utiliser etc...) - fait rfrence pour le site - servira lors de la dclinaison graphique pour dautres supports comme du papier entte, des supports de communication, etc... Si la charte graphique existe dj il faut sen servir de rfrence pour orienter vos rflexions. 5. Conclusion Cration dinterface web dcoule dun raisonnement logique ou lutilisateur est au centre des proccupations. Gros travail raliser avant de rflchir au design Tout enchaner parfaitement Augmenter nos chances de crer une site utilis.

21.2. TP : Ralisation dune analyse des besoins


21.2.1. Sujet
Christian DUPONT a rachet une socit en perte de vitesse de vente de pices de Karting. Le prcdent exploitant narrivait pas proposer des tarifs sufsamment attractifs cause du manque de clients. Christian sait que lentreprise peut marcher grce aux simulations quil a ralises dans son business plan. Pour cela il doit avoir des frais de structure minimum en investissant ds le dpart dans une solution logicielle performante. Il a besoin dune solution lui permettant dintgrer trois aspects

761

Chapitre 21. Mthodologie de conception des sites Web et interfaces


une communication dynamique au travers dun site web pour toucher le public le plus large possible. un espace partenaires pour dliser ses clients les plus importants ( circuits de kart, revendeur ) un espace priv qui lui sera ddi an de grer facilement les commandes en attentes et le suivi de la facturation.

An de mettre en avant son entreprise, il a prvu dutiliser la majeure partie de son budget communication pour sponsoriser un pilote connu. Les accords sont en cours de ngociation mais rien ne sera mis en place avant la prochaine saison ( il faut compter un an ). Il ne sait pas encore trop comment en tirer partie au mieux sur le site mais il est impensable de ne pas communiquer dessus. Christian a bien conscience que pour que le site soit attractif, il doit tre vivant et il est prt bloquer lquivalent dune journe par semaine sa secrtaire pour quelle le mette jour rgulirement. Ce sera dailleurs elle qui utilisera principalement la partie prive. Elle na bien entendu aucune connaissance en dveloppement web et il faut donc des interfaces intuitives aussi bien pour la mise jour du contenu que pour le suivi des factures.

21.2.2. Exercices
21.2.2.1. Rpondre aux questions importantes et isoler les rponses manquantes
La rcupration dinformation est toujours parcellaire, et il reste souvent des questions en suspens, ou que lon dcouvre au l du projet. Pour ce qui est des points dombre du sujet, nous prenons la place du client et proposons des rponses cohrentes. 1. Quel est leur mtier ? La vente de pice de Karting 2. Quels sont les contenus quil souhaite utiliser pour le site ? Cest pas vraimenent indiqu... Hypothses sur le type de documents que lon peut trouver :
pourquoi ce mtier les valeurs sur lesquelles lentreprise fonctionne objectifs de lentreprise (elle mme, pas par rapport au site) logo

762

Chapitre 21. Mthodologie de conception des sites Web et interfaces


flyers/brochures/lettre dactualit catalogue produit/plaquettes tarifaires mode de paiement disponibles mode de livraison conditions gnerale de vente / info legales information de contact / plan daccs photos du circuit ancien site web articles de journaux / revue comparative information sur le pilote partenaire liste evenements organis/sponsoris/particip par lentreprise

3. Quels sont leurs supports de communication ? Cest pas vraimenent indiqu ormis la possibilit dun partenariat avec un pilote connu... En toute hypothse possible :
tlphone fax courriel site web mailinglist/forums/irc magazines (spcialis ou non) association de karting groupe de revendeur/alliance vnementiel (sponsoriser,participer,organiser) patenariat pilote patenariat ecole/universit/club dentreprise patenariat association dlves/association au sein dentreprise publicit (journeaux/magasine/tv/internet/radio) bouches oreilles lettre dactualit offre spciale, exclusivit/promotion

4. Le client a-t-il dj un site et, si oui, pourquoi souhaite-t-il une refonte ? Cest pas indiqu ! En toute hypothse : - dynamisme du site - automatisation des tches quotidiennes - rduction des cots Objectifs de lentreprise pas atteints ==> Expliquer les objectifs ==> A quel besoin il tente de rpondre ==> Comment ==> Progression - Faible progression des ventes ==> les faire augmenter - Faible accroissement de la rentabilit et des bnces ==> les faires augmenter - Processus de gestion complexe (client, partenaire, commande, facturation, catalogues, infos) ==> Simplier les process pour les clients

763

Chapitre 21. Mthodologie de conception des sites Web et interfaces (externe) et les grants (interne) ==> Trouver facilement linformation / achat en quelques clics - Faible visibilit/notorit ==> la faire augmenter, se rapprocher du client, des partenaires ==> augmenter les statistiques de visite ==> promouvoir ses valeurs et ce en quoi elle croit :) - Service aprs vente report comme mdiocre (suite une enqute de satisfaction par example) ==> Amliorer lassistance direct et indirect, le suivi, etc... ==> Amliorer les services rendus

5. Quels sont leurs principaux concurrents nationaux et internationaux ? Cest pas indiqu ! Mais courte liste disponible dans la section analyse sectorielle ci-dessous... Le client a probablement fait une analyse de march centr sur :
nombre de clients potentiels tarifs proposs, tarifs prt tre pays par le client mthode de diffrenciation (cylindres, pistes couvertes, ...) chiffre daffaire possible type de produit proposer (longueur de course/dure/vitesse des kart ...) existence de concurrents

La concurrence locale sera certes sur les karts, mais galement sur les autres divertissements concurrents (paintball, laser game, cinma, ...)
Note : Le pdg de Coca Cola considre leau du robinet comme un concurrent direct ;)

Note : Ltude que lon fait concerne une forme de concurrence moins directe que ne lest le stand de paint ball du coin et ceci, mme si ce sont des sites de kart. La localisation gographique fait que ce ne sont pas des concurrents, nanmoins, quelquun qui faira une recherche partir de google pour un site de kart dans sa ville visitera probablement plusieurs sites qui ne correspondent pas. Si le site de votre client ne propose pas un plan daccs, un visuel rappelant le karting ainsi que des tarifs et horaires douverture, il est probable que le taux de transformation (taux de visiteurs devenant clients) soit trs faible. Le fait que le site soit largement en dessous au niveau qualit des sites prcdemment visits jouera galement en sa dfaveur, etc...

6. Quels sont leurs points forts commerciaux (prix, services, qualits) ? Cest pas indiqu ! En toute hypothse : - Prix: les meilleurs du march - Rapport Qualit/Prix imbattable :) - Services et suivi de qualit - Finance dactivit autour du kart (evenement, partenriat) - Informe et sinforme, conseils - Amusez-vous ! - Sensation forte ! - Plaisir Intense/Passion

764

Chapitre 21. Mthodologie de conception des sites Web et interfaces

7. Quelle est la date de mise en ligne prvue ? Cest pas indiqu ! Mais au plus tard la date de signature du partenariat avec un pilote :) 1 6 mois... en toute hypothse...

8. Quels sont les facteurs qui pourraient modier cette date (nouveau produit, tude en cours, salon, ...) ? Signature dun partenariat avec un pilote... 9. Comment doit tre assure la maintenance du site ? Une fois par semaine par la secrtaire... Quizz qui soccupe : - de la gestion du site dans son ensemble (decisionel) - de la gestion du catalogue (produit, promotion, exclusivit) - de la gestions des infos ? - de la gestion des clients ? - de la gestion des partenaires (pilote, ecole, entreprise, etc...) ? - de la gestion des commande/factures - du service aprs vente ? - du service lgales ? - du service daide et dassistance, conseils, etc ? - de la maintenance technique (installation, upgrade, sauvegarde,...) ?

10. Quels sont les objectifs principaux du site ? Information aux visiteurs, vente de produit des tarrifs attractif, dliser la clientle, gestion commande/facturation, systme performant, frais minimum 11. Quelles sont les attentes du client ? Augmenter sa clientle et ses ventes grace a un systme dinformation et de gestion performant moindre frais. 12. Quel est le message faire passer ? Offre des produits aux tarifs attractifs, Espace partenaire Sponsorise des pilotes 13. Quelles sont les valeurs mettre en avant ( professionnel, bon march, ludique, able ) ? Bon march, ludique, achat facile, supporte la profession 14. Quel peut tre lampleur du projet en termes de dlais et budget ? Difcile dire premire vue... 1 6 mois ? 15. Qui seront les interlocuteurs pour le projet. Cest pas indiqu mais certainement Mr Dupond pour le decisionnel, sa secrtaire pour les tests dergonomie et lobtension du contenu. 16. Quels sont les prols des utilisateurs (sexe, ge, profession, habitudes Web) ? Sexe: homme (la majorit la plus probable) Age : 14-40 Profession : Technicien Mcanique/Grant de centre de Karting/Grossiste/Sportif Habitude Web : ?

765

Chapitre 21. Mthodologie de conception des sites Web et interfaces 17. Quelles sont les attentes des utilisateurs du site ? Visiteur lambda: Information, Evenement, etc... Partenaire: Nouveaut, trouver rapidement produit, gerer leur achat, suivit de commande, assistance Secretaire : Grer les commandes/factures, les partenaires, communiquer avec les partenaires, assister les clients...

21.2.2.2. Analyse sectorielle


Identiez quelques sites concurrents reprsentatifs et listez les fonctionnalits proposes. Faire une recherche sur Internet... On peut aussi utiliser dautres sites plus spcialiss tel que http://www.societe.com/index_entrep.html qui permettent de faire une recherche sur le code APE (type de mtier) et le dpartement. Dans le mme genre, les pages jaunes sont galement une solution envisageable. Ces solutions sont beaucoup plus efcaces pour une recherche cible gographiquement. Mme sil nest pas vident davoir un regard critique, des donnes comparatives sont utiles, comme :
information facilement accessible facile trouver site complet, donnes dtailles mise jour rgulire systme de recherche efficace beaucoup de choix

Tout cela permet didentier des points critiques permettant de se diffrencier et qui de toute faon servent de critres aux visiteurs. Ce sont en gnrale les mmes qualits que lon va trouver dans les sites que lon utilise frquemment. Il peut-tre intressant de regarder les fonctionnalits prsentes dans des produits comme magento (http://www.magentocommerce.com/fr). Il prsente entre autres une partie ditoriale et une gestion de commandes.
http://www.euro-kart.fr Numro 1 dans la vente en ligne multicart Tout le materiel de karting par Internet http://www.alpha-karting.fr Numero 1 sur la vente en ligne karting ! http://www.action-karting.fr

766

Chapitre 21. Mthodologie de conception des sites Web et interfaces


Tout le kart tout de suite http://www.laumatec.com Boutique France http://renneskart.fr/piecesocas.aspx

#### ## Points forts des sites concurrents #### # Graphisme Sobrit Couleur de fond: blanc ou clair semble le mieux Aspect professionel/bon design (euro-kart, alpha-karting, laumatec) Style Couleur karting: argent (metal), gold, rouge, jaune (voiture) orange(flamme/speed), gris(road), noir(pneu), blanc, noir&blanc(pilote) # Architecture Le site est le catalogue Affichage des marques de facon discrte, en pied de page ou lors du listing des produits/catalogue Publicit regrouper dans une colonne Architecture logique Mode de payement et mode de livraison regrouper dans le panier Produit: Image, nom, description (courte et longue), reference, prix, quantit, bouton ajout au panier Site organis # Ergonomie Intuitif Facilit dutilisation On sait toujours o lon se trouve Possibilit de trier les listes de produit Acces facile au nouveau produits Acces facile au promotion Hilight promotion et reduction tarifaire dans la liste des produits Etape dachat: achat/panier -> Adresse de livraison -> Mode dexpedition -> payment -> confirmation Menu horizontal Menu coulissant Site accessible en franais (par dfaut) et en anglais Information succinte/Simplicit Trouver facilement le catalogue/magasin Access au magasin/catalogue clairement spar Acces direct la page contact et au information (1 clic, max 2)

767

Chapitre 21. Mthodologie de conception des sites Web et interfaces


Commande en un peu plus de clics Image visuel pour naviguer dans les catgories de produits, les images facilite la navigation Possibilit dajouter produit et choisir quantit directement depuis la liste (navigation/resultat de recherche) Toujours savoir ou je me trouve et ou je peux aller... Acces facile : Contact / Groupe-Entreprise / mode de payement # Fonctionnalits Voir de produit en quelques clics Ajouter au panier et commander en quelques clics Possibilit de recherche Contact par tlphone, email, rponse sous 24h Livraison gratuite a domicile en 24h Livraison en France et ltranger Mode de payment accessible Possde leur propre piste et equipe Promote leur pilote Classement, competition passe et venir... Vente de produit doccasion... Liste de produit #### ## Points faibles des sites concurrents #### # Graphisme Information barr sans raison claire Couleur de fond: noir Trop noir ou terne, pas assez de couleur Aspect non professionel/mauvais design (rennekart) Manque de style Eviter trop de noir ou de vert Taille de texte trop petite Flashy icone et page... Trop flashy ! Trop rouge, trop noir, trop fonc Utilisation de gris clair pour le texte principale pas tres lisible (attention au contraste) # Architecture Page dacceuil vide Dfilement de liste de marque ! Site chaotic Duplication dinformation sur la page... perte inutile despace et de lisibilit Trop de tout ! Information pas organis de faon suffisement logique Espace client et panier spar Mode de livraison et de payment spar du panier et espace client Publicits eparpills Trop de pub et de promotion, distracte lutilisateur Trop dinformation/Compliqu

768

Chapitre 21. Mthodologie de conception des sites Web et interfaces


Trop de promotion ! Diffrente column pas toujours cohrante Information redondante sur la mme page Trop despace pris par lentte, limite visibilite Page non disponible Espace client part Mention: "Cliquez sur la photo de larticle pour accder la fiche dtaille du produit" Site en anglais possde bien moins dinformation que la version franaise Site en anglais ne correspond pas la version franaise Fond sonore difficile supprimer, revient systmatiquement lors dun changement de page ! # Ergonomie Compte utilisateur pas en haut gauche, regrouper avec panier Liste de produit pas bien organis Rapidement perdu dans le ddale du site Pas possible de choisir la quantit produit lors de lajout depuis la liste Pas possible dajouter le produit depuis la liste sans avoir accder dabord a la description dtaille Pas de bouton, menu pour accder au magasin/catalogue Acces a la page contact demande trop de clic Navigation trop simple/pas assez dinformation Information pas clair Trop de texte partout Pas assez de texte ou dinformation Page trop long / trop de dfilement Pas de filtrage de liste Un seul mode daffichage des liste de produits O se trouve le magasin ? # Fonctionnalits Produits non affich sous forme de liste Pas dinformation sur la company, sur ce quil font des la page dacceuil Pas dinformation lutilisateur pour lui indiquer ce quil peut faire depuis la page dacceuil Pas de comparaison de produit possilbe La page contact contient de liens vers dautres sites... la reserver pour contacter lentreprise... Moteur de recherche permet pas toujours des recherches selon critre prdfinis (marque, reference, option avances) Moteur de recherche pas toujours accessible ds la premiere page Mcanique de prcision Entretien de Kart Atelier entretien Vente de karting et pieces/accessoires Karting de location/de competition Site uniquement en Francais pas possible de passer dans une autre langue #### ## Nombre de fonctionnalits recenses (celles qui existent) ###

769

Chapitre 21. Mthodologie de conception des sites Web et interfaces

[Depuis toutes les pages] Bandeau dentete avec information: Logo+slogan Infos entreprise Infos contact Infos lgales / Mentions lgales Conditions de vente Paiements & Livraisons / Livraison et dlais Mode de payment / Payment scuris (Carte bleus acceptes VISA, MASTERCARD, etc...) Espace Client / Mon Comptes / (lien vers lespace ou encart de connection sur page daccueil Visualiser si le panier est vide ou plein - Lien pour y accder Publicit sur des produits Icone pour changer de langue Lien vers Nouveaut Liens vers Promotions/Exclusivit Lien vers Meilleur vente Champs pour la recherche (mot clefs, par rference, par marques) Menu de catgories: Accueil Kart complets / Ensemble / Kart neuf Occasions / Kart occasion Equipement pilote Consommable / Lubrifiant et produit dentretien Chassis et pices ou chassis Accessoire Chassis Pneus / Pneumatique Moteurs Moteurs et pices / Accessoires moteur / Piece Moteur et accesssoires Outils / Outillage et Matriel (Contact) Train roulant Transmission Freinage Equipment padock Guide Espace infos / Forums / (Videos) Liste des pistes (Prsentation des circuits de karting nationaux ou internationaux) Information sur les pilotes Aide/FAQ (crer un compte client ? trouver un produit dans le catalogue ? passer commande ? Que faire en cas de problme ? Vous avez des questions ? etc...) Plan (qui inclue le catalogue) Bandeau: Votre Commande Ouvrir/Modifier mon panier Assistance/Contact Hotline Different mode de financement Service (livraison a domicile, assistance et conseils, suivi de commande, reparation revision entretien, reprise ancien kart)

770

Chapitre 21. Mthodologie de conception des sites Web et interfaces


Guarantie de livraison Obtenir Catalogue Pied de page (ou autres): Toutes les pieces et accessoire en un clic Affichage des marques de materiels disponible Boutiques team astuces [Depuis acceuil (ou toute page/en bandeau)]: News/Quoi de neuf ! / News-Infos / Actualit Newsletter (souscription) Nouveaut Promotions/Exclusivits/Selection du moment/Produit a ne pas manquer (lien vers la page promotion ou courte liste de produit) Meilleur vente / Top Vente [Chaque page contient] Liste de sous-categorie (photo+nom ou liste bule) Fil dAriane Liste de produits (Image produit, Titre, prix, lien pour plus de dtail ou desctiption produit, livraison/delai) Possibilit de trier les produits Possibilit dajouter au panier Affichage des liste par : Grille, Liste, tableau... Horaire douverture Date de dernire mise jour [Page detail produit] Liste variantes de produit disponible (couleur, taille, rference, prix) Bouton pour ajouter au panier (avec ou non possibilit de choisir immediatement la quantit) Peut contenir la liste des sous-categories de la catgorie Navigation et tri de la liste Liste des produits similaires (dans le mme rayon) [Panier] Liste des produits Possibilite de changer la quantit, le pays de livraison, Recalcule automatique du prix total Indique les frais de port Indique la TVA Possibilit de coupon de rduction un bouton pour continuer les achats un bouton pour commander (completer la commande)

771

Chapitre 21. Mthodologie de conception des sites Web et interfaces

21.2.2.3. Analyse des besoins


Dcrivez les besoins du client et proposez des fonctionnalits qui vous semblent appropries pour y rpondre. Vous pouvez vous limiter la section publique en fonction du temps quil vous reste. Tableau 21-1. Section publique Besoins Prsenter lentreprise Fonctionalits Section accessible depuis toutes les pages : logo entreprise / slogan prsentation de lentreprise informations de contacts (par tlphone, email, rponse sous 24h, etc...)

formulaire de contact Plan daccs

Prsenter les informations lgales

Sections accessible depuis toutes les pages Section Legale sur lentreprise Section Conditions Gnrale de Ventes

772

Chapitre 21. Mthodologie de conception des sites Web et interfaces Besoins Prsenter des produits Fonctionalits Accs un catalogue de produit : accessible depuis nimporte quelle page classement de produit par catgories et sous-categories

lister les produits au sain dune catgorie :

- nom, description, prix, rabais, promotion, reference, quantit, bouton ajout au panier - afchage grille ou liste, possibilit de trier la liste che produit dtaille [avec en option: liste des produits similaires]

comparer deux ou plusieurs produits [Option]

Prevoir un champs pour rechercher des produit. Accessible depuis toute page : Recherche simple Recherche avance (par marque, rfrence, etc...)

773

Chapitre 21. Mthodologie de conception des sites Web et interfaces Besoins Vendre des produit / Offrir un service dachate en ligne Fonctionalits Espace client : Lien/Espace dincription nouveau client Lien/Espace de connection pour les clients inscrits

Accs un panier dachat depuis toutes les pages : Afcher un rsum du contenu (quantit de produit au minimum) Lien pour accder la page du contenu dtaill du panier

Bouton commander Lien vers section mode de payment Lien vers section mode de livraison

Lien vers section conditions gnrales de vente

Possibilit de commander en ligne : Ajout de produit au panier depuis liste ou che produit dtaille

Liste des produits

Cot de livraison (afcher cot de livraison si addresse de livraison disponible)


Calcul du total Suppression de produit au panier Bouton commander Bouton continuer les achats

Possibilit de choisir quantit de chaque produit Possibilit de rabais en cas doffre promotionel/code promotion

Complter la commande avec afchage dtaill des tapes


Lien vers section mode de payment Lien vers section mode de livraison

774

Chapitre 21. Mthodologie de conception des sites Web et interfaces Besoins Mettre en avant des prix avantageux Fonctionalits Prvoir sur la page daccueil un espace pour : Mettre en avant les nouveaux produits.Lien vers Nouveaut Mettre en avant les promotions du mois. Lien vers Promotions/Exclusivit Mettre en avant les meilleurs vente. Lien vers Meilleur vente [Optionel]

Mettre en avant les produits doccasion [Optionel]

Lettre promotionel envoye par email [Optionel]

Mettre en avant les offres spciales/paquets [Optionel]

Mettre en avant la qualit des produits [Optionel] Mettre en avant les services

Prvoir sur la page daccueil pour indiquer des normes de qualits


Section Mode de payement (regrouper dans le panier) Section Mode de livraison (regrouper dans le panier) : Livraison gratuite a domicile en 24h, en France et ltranger...

Guarantie de livraison

Section Aide : En ligne (FAQ/Support automatique), hotline information (sur toutes les page (ou du moins pour le catalogue) ou dans la page contact), assistance et conseils, Service aprs-vente, suivi, etc... Transparance/Suivi de commande/Accs aux factures en ligne

Reparation/Revision/Entretien, reprise ancien kart [Optionel]

775

Chapitre 21. Mthodologie de conception des sites Web et interfaces Besoins Promouvoir des partenariats Fonctionalits
Avec des fournisseurs : afchage des marques (en page daccueil ou dans le catalogue) Avec des partenaires : afchage des sites de piste de karting, meilleur clients, etc... (dans une sections ddis par exemple) [Optionel]

Avec des pilotes : sponsoring, partenarship, etc... [optionel]

Prsenter de linformation

Diffuse des information sur le karting : actualits, vnements (courses, etc...) Lettre dactualit envoye par courriel [optionel] avec en sus les promotions et autres vnements... Prsente des pilotes de lentreprise (interne ou externe), classement, personne, valeurs, etc... Actions, evnement et pilotes directement nacirement support par lentreprise, etc... [optionel]

Prsenter certaines actions de lentreprise

Total Tableau 21-2. Section partenaires / Espace Client Besoins Espace Client : Gestion prol utilisateur

...

Fonctionalits Inscription avec double conrmation par courriel. Authentication

Gestion information personnel (nom, prenom, addresse courriel, password, etc) avec double conrmation par courriel.

Des-inscription avec double conrmation par courriel et courrier.

776

Chapitre 21. Mthodologie de conception des sites Web et interfaces Besoins Espace Client : Gestion des commandes Fonctionalits

Addresse(s) de livraison (creation/suppression) Addresse(s) de facturation (creation/suppression)

Suivi de commande (brouillon, en cours, complte, archive)


Facturation (command complt)

Facturation unique pour plusieurs commandes en cours dlivr plusieurs addresses [Optionel] Crer une nouvelle commande partir dune existante [Optionel]

Espace Client : Souscription aux lettre dactualits Espace Client : Besoin daide

Inscription/desinscription la lettre dactualit

Module de gestion dincident/requte cliente (tickets) li la FAQ Lien vers laide en ligne/FAQ

Lien vers la page contact

Tableau 21-3. Section prive Besoins Espace Utilisateur Fonctionalits

Authentication Gestion information personnel (nom, prenom, addresse courriel, password, etc) avec double conrmation par courriel.

Gestion des alertes

Gestion des pages dinformation Gestion du catalogue produits Gestion des promotions et offres (code promotionel) Gestion des clients Gestion des commandes/facturation Gestion des fournisseurs [Optionel] Gestion des incident/requtes (tickets) et FAQ

... ... ... ... ... ... ...

777

Chapitre 21. Mthodologie de conception des sites Web et interfaces Besoins Gestion des lettres dactualit (mailing) Adminstration du site Fonctionalits ...

Conguration Gestion des comptes utilisteurs

Gestion des sauvegardes (automatique/manuel)

Monitoring

Connatre les statistiques

de visite du site de vente de client du systme

Tableau 21-4. Commun lensemble des Sections ci-avant Besoins Communication en plusieurs langues Facilit la navigation et les actions (achats, gestion, maintenance, mise jour, etc...) Fonctionalits Franais (au moins) / Anglais [Optionel] Icone pour changer de langue

Site simple et intuitif Accessibilit en un minimum de clics Information claires et concises

Aide la navigation (l dariane, point dtape afch, etc...) Image visuel pour naviguer dans le site (catgories produits, etc...)

Section plan du site (accessible via un lien ou directement en bas de page)

778

Chapitre 21. Mthodologie de conception des sites Web et interfaces

21.3. Les cas dutilisation (UML use case diagram)


21.3.1. Introduction
Dans la logique design centr utilisateurs on a lenchainement suivant :
- dfinition du type dutilisateur - pour chaque type : -> dfinition des besoins/usages (recherche dinfo/achat/location) -> pour chaque type dutilisation => est ce que lon souhaite rpondre au besoin : si oui, comment faire pour faciliter/amliorer lexprience utilisateur.

Les USE CASE sont l pour nous aider tablir des scenarios dutilisation et ne rien oublier. UML est un langage visuel normalis permettant de modliser graphiquement lanalyse rigoureuse et comprhensible prcdant un projet. Utiliser pour crer un ensemble de diagrammes permettant de modliser (sous forme dobjet) lensemble des informations. Nous nous interressons essentiellement aux diagrammes de cas dutilisation an de modliser nos scnarios. Lobjectif etant de visualiser lensemble des utilisations qui peuvent tre faites du systme et idalement identier celles qui sont critiques.

Avertissement
Il est important de diffrencier cas dutilisation et scnario :
- [description partielle] Un cas dutilisation est un client qui souhaite accder aux informations dun produit - [description dtaille] Les scnarios seront plus dvelopps en indiquant notamment les conditions requises (authentifi il accde aux donnes sinon il doit sauthentifier)

Les cas dutilisation reprsentent les objectifs des utilisateurs (et donc les besoins fonctionnels intgrer au systme : fonctionnalits du systme) et non les parcours.

Un scnario est la ralisation dune squence dinteractions

Voir les cas dutilisations comme des classes dont les instances seraient les scnarios.

779

Chapitre 21. Mthodologie de conception des sites Web et interfaces Crer un cas dutilisation (use case) consiste reprsenter les diffrents acteurs, le systme, les cas dutilisations et les interactions existantes.

21.3.2. Umbrello (raliser des diagrammes UML)


Source(s):

Web: Umbrello (http://uml.sourceforge.net/index.php)

Umbrello est un logiciel permettant de raliser des diagrammes UML sous KDE : classes, tats, activits, squences, collaboration, cas dutilisation, composants, dploiements. Il permet de gnrer : - du code partir des diagrammes raliss : SQL, Java, Php, Javascript, Python, ADA, Perl - le squelette des classes, la dnition des attributs et des mthodes, partir du diagramme de classes. - les commentaires (dans le code gnr) : format phpDocumentor (http://www.phpdoc.org) pour php, etc...
Note : Une partie du temps pass en analyse est donc du temps en moins passer durant la phase de dveloppement et de documentation.

## Installation $ sudo apt-get update $ sudo apt-get install umbrello

780

Chapitre 21. Mthodologie de conception des sites Web et interfaces

21.3.3. Exo2 : Cas dutilisation Kart website


Figure 21-1. SI001 : UML Cas dutilisation

781

Chapitre 21. Mthodologie de conception des sites Web et interfaces

Source: EOF-SI001-umbrello-use-case-diagram.xmi (docs/EOF-SI001-umbrello-use-case-diagram.xmi)

21.4. Proposition graphique dinterface : Ergonomie & Accessibilit


Source(s):

OF: Cours Ergonomie (docs/eof/SI001-ch03-ergonomie.pdf) Outils pour crer des IHM rapidemement: QT4 Designer application (http://qt.nokia.com/doc/4.5/designer-manual.html) Pencil Project - Sketching and Protyping with Firefox (http://www.evolus.vn/Pencil/Home.html) Web: Top Ten Mistakes in Web Design (http://www.useit.com/alertbox/9605.html)

21.4.1. Dnition (s)


Le mot ergonomie vient du grec ergon ( travail ) et nomos ( rgles, lois ) ce que lon peut traduire par "la science du travail". Pour avoir une dnition ofcielle, on peut reprendre celle de lassociation internationale dergonomie ( IEA ) : Lergonomie (ou ltude des facteurs humains) est la discipline scientique qui vise la comprhension fondamentale des interactions entre les tres humains et les autres composantes dun systme, et la mise en oeuvre dans la conception de thories, de principes, de mthodes et de donnes pertinentes an damliorer le bien-tre des hommes et lefcacit globale des systmes. Lergonomie touche normment de domaines dont trois domaines de spcialisation : - Lergonomie physique sintresse notamment aux postures de travail, aux troubles musculo-squelettiques o encore la scurit et la sant. - Lergonomie cognitive sintresse aux processus mentaux entrant dans linteraction entre lutilisateur et le systme. - Lergonomie organisationnelle sintresse lorganisation de rgles et de processus comme la communication, le travail en quipe ou le travail coopratif.

782

Chapitre 21. Mthodologie de conception des sites Web et interfaces


Note : Ergonomie et les zones cliquables [Loi de Fitts] :

... en ergonomie et en interaction Homme-machine, la loi de Fitts est un modle du mouvement humain, prdisant le temps requis pour aller rapidement dune position de dpart une zone nale de destination, en fonction de la distance la cible et de la taille de la cible... ... partir de lquation, on voit un compromis vitesse-prcision associ au pointage, o les cibles les plus petites ou loignes ncessitent plus de temps pour tre atteintes... http://fr.wikipedia.org/wiki/Loi_de_Fitts

21.4.2. Mthode
Lors de la conception des pages, il est important de toujours garder en tte les besoins de lutilisateur et sa faon de naviguer. Pour cela, il vaut mieux faire simple, tout en restant fonctionnel pour le plus grand nombre.

21.4.3. Organisation visuelle


Il est important que linformation utile dans la page soit mise en valeur... les endroits les plus visibles sont la zone du haut et le centre de la page. Le choix de lendroit ou disposer les informations en fonction de leur importance est donc la premire tape. Il faut ensuite dcider de la place que lon souhaite leur consacrer. Pour lutilisateur, limportant est :
- linformation (on peut donc lui consacrer environ 80% de lespace) - de pouvoir y accder (et 20% pour la navigation) #==> videmment cela ne laisse que peu de place pour la publicit ou les animations.

Note : Il est important de toujours se mettre la place de lutilisateur, et si un lment ne lui apporte rien alors il nest pas ncessaire. Cependant, si un lment est rellement ncessaire, il vaut mieux prendre de la place la navigation.

783

Chapitre 21. Mthodologie de conception des sites Web et interfaces

21.4.4. Taille de la page


Dnir la place totale utilise (taille de page). Se reporte aux statistiques dutilisation (fvrier 2010 : http://www.libstat.com/pages/resolution.htm) De trs nombreuses rsolutions diffrentes sont utilises. Il est donc important doffrir une mise en page sufsamment souple pour pouvoir tre visualise correctement avec diffrentes tailles de fentres. Dans certains cas, il est tout de mme plus facile de faire certain choix si lon a une connaissance sufsante des utilisateurs potentiels. (cas dun intranet sur machines conguration standard 1280*1024).

Avertissement
Mme dans ce cas l, tous les utilisateurs ne naviguent pas en plein cran et il est important de faire un audit sur leur faon de travailler.

21.4.5. Conception multiplateforme


Grer le problme de versions des navigateurs. Consulter les statistiques ralises par xiti (http://www.atinternet-institute.com/fr-fr/barometre-des-navigateurs/barometre-des-navigateursdecembre-2009/index-1-1-3-186.html). Le choix souvent ralis est davoir une compatibilit Firefox, Chrome, Internet explorer ( windows ) et Safari.

21.4.6. Vitesse de chargement du site & Accessibilit


Lun des critres importants pour lutilisateur est la rapidit de chargement du site. Certains utilisateurs ont toujours des connections plus faibles que la moyenne :

- proposer plusieurs formats de vidos ou de fichiers sonores (laisser lutilisateur de choi en fonction de sa connection). - prciser pour chaque fichier en tlchargement son format et son poids. - indiquer o tlcharger le logiciel pour le consulter - proposer le contenu dans diffrents formats (discours au format txt en plus de la vido) aussi motive par des considrations daccessibilit de linformation.

784

Chapitre 21. Mthodologie de conception des sites Web et interfaces Les considrations de poids des pages restent dactualits pour lhbergeur (gestion de la bande passante utilise).

21.4.7. Navigation / Interface Homme-Machine


Source(s):

Articles "Landing Pages": 11 solutions pour amliorer "landing pages" (http://www.digital-web.com/articles/11_ways_to_improve_landing_pages/) 10 astuces pour optimiser votre "landing page" (http://www.marketingonthebeach.com/optimisez-votre-landing-page-e-tourisme-avec-10-astuces) Articles Navigation: Is Navigation Useful? (http://www.useit.com/alertbox/20000109.html) de lergonome Jakob Nielsen (2000), "Navigation blindness" (http://www.guuui.com/issues/01_05.php) de Erik Olsen (2005), voir aussi les interfaces la minority report (http://www.fredcavazza.net/2010/03/26/les-interfaces-naturelles-daujourdhui-et-de-demain) SixthSense a wearable gestural interface (http://www.pranavmistry.com/projects/sixthsense) Plan de site: Site Map Usability : 47 design guidelines (http://www.nngroup.com/reports/sitemaps) [Hors Ligne] (docs/SI001-ch03-ergonomie-SiteMapUsability-2nd-edition.pdf)

Lergonomie cognitive prend en compte les comportements intelligents des utilisateurs an dadapter les interfaces. Des relations toites existent avec les sciences cognitives telles que la psychologie cognitive, lintelligence articielle ou encore la smiotique : - Relation entre lergonomie et lintelligence articielle : systme experts articiels qui jouent un rle dassistance lutilisateur. - Rapport avec la smiotique (qui sintresse la signication des signes ) : prsence de systme de signalisation. La navigation : Lutilisateur doit pouvoir tout moment rpondre aux questions fondamentales :
- O suis-je ? le logo en au gauche le logo sert galement de lien vers la page daccueil du site) utilisation des "breadcrumbs" ou fil dAriane "landing pages" - O suis-je dj all ? conserver les couleurs par dfauts des liens afin de capitaliser sur lexprience utilisateur "back" function / bookmarks - O puis-je aller ?

785

Chapitre 21. Mthodologie de conception des sites Web et interfaces

tout texte soulign est un lien et que tout lien est soulign. prciser si lien est externe ou interne au site (exemple : http://fr.wikipedia.org/wiki/Hyperlien) prciser dans quelle langue sera la page du lien (exemple : http://standblog.org/blog) le titre des liens doit tre prcis sur le contenu de la destination possibilit de faire une recherche, la recherche doit tre simple recherche accessible en tout point du site La page de rponse doit tenir compte de la pertinence des rponses prciser quelques informations sur la page de destination telles quun extrait (comme go ou un breadcrumb (eof.eu.org), date de mise jour des rsultats (pertinence). remonter dautre informations correspondant au centre dintrt de lutilisateur

Note : Landing pages : ce sont les pages par lesquelles les utilisateurs arrivent sur le site. Consulter les articles lis en en-tte de cette section.

Note : A propos de Navigation, consulter les articles sus mentionns. "...Nielsen dit quun site attractif qui retient lattention des lecteurs prends trs peu de temps se charger, prsente linformation de faon succinte, souligne les liens imporant (mais pas toute la phrase qui contient le lien) et contient de linformation jour. Le principe, selon Nielsen, est que le site Web doit tre conu pour aider le visiteur trouver ce quil cherche -- et pas ce que le producteur ou le departement marketing essaye de promouvoir..." www.nytimes.com (http://www.nytimes.com/library/tech/98/07/cyber/articles/13usability.html)

21.4.8. Conception du contenu


Note : Garder en mmoire que le web nest pas du "print", lutilisateur cherche avant tout une information.

La lecture sur le web est trs diffrentes de la lecture sur papier. Les visiteurs sont souvent presss et cherchent une information spcique. Rdiger pour le web :
textes brefs informations importantes mises en avant rduire les textes (de 50% par rapport au format papier) utiliser des paragraphes courts, sous-titres et listes puces donnes sous forme de tableaux graphiques

786

Chapitre 21. Mthodologie de conception des sites Web et interfaces


- dcouper pages en plusieurs sections et utiliser des liens pour naviguer dune page lautre. - creation dindex (facilite la navigation) - bien organis - soutenu par un code smantiquement juste ==> mieux index par les moteurs de recherche ==> plus accessible

Police caractres :
- limit nombre de police utilises - prciser les polices en fonction du systme - les tester en conditions relles - diffrentes tailles de caractres pour mettre en avant les informations - mieux utiliser des tailles de polices relatives

Les formulaires, mettre laise lutilisateur et lassister autant que possible :


Proposer par dfaut les valeurs les plus courantes Limiter les saisies au strict minimum Indiquer les entres obligatoires et les limiter au strict minimum Utiliser des boutons de slection si le nombre de choix est restreint Utiliser des listes de slection pour les longues listes (5 12 choix o espace restreint) - Pour les listes, prsenter les donnes dans un ordre logique pour lutilisateur (souvent ordre alphabtique) - Autoriser la possibilit de cliquer sur le texte associ un bouton pour cocher le bouton (utilisation de label)

21.4.9. A ne pas faire !


Source(s):

web: 8 websites you need to stop building (http://theoatmeal.com/comics/websites_stop) How a web design go straight to hell (http://theoatmeal.com/comics/design_hell)

787

Chapitre 21. Mthodologie de conception des sites Web et interfaces

21.4.10. Pour rsumer en bref...!


Pour rsumer, de mon point de vu lessentiel dun site web serait donc :
-

simple information claire, concise, et structure (Information Architecture) toute information doit tre lisible et accessible travers le web une page daccueil qui ressemble un plan de site :) ou en tout cas un plan de site dispo un fil dAriane (ou "breadcrumbs") un moteur de recherche

21.4.11. Travaux Pratique SI001


An de faire une proposition graphique et de fonctionnalits, le fait de regarder ce qui existe (analyse sectorielle) permet de se positionner et parfois de trouver de linspiration. Faire une proposition sans une fonctionnalit critique que tous les autres concurrents proposent reviens vendre un produit qui ne marchera pas. En investissant quelques heures, il est assez facile davoir une bonne vision de ce qui existe et de faire une proposition cohrente avec le march (en fonctionnalit et donc en prix). Dans un deuxime temps, effectivement, un travail est faire avec le client pour afner et vrier que cela convient bien ces attentes. Maintenant, si lon veux vraiment faire les choses correctement, ce serait surtout auprs de client potentiels que lon devrait vrier la pertinences des choix raliss.
## Installation Qt4-Designer $ sudo apt-get install qt4-designer $ sudo apt-get install qt4-dev-tools $ sudo apt-get install qt4-demos

# QT Graphique # Documentation # Demos qtdemo

Source Qt4-Designer : SI001-ch03-ergonomie-maquette-kart-site.ui (projets/si001-ch03-ergonomie-projet-web/SI001-ch03-ergonomie-maquette-kart-site.ui)

788

Chapitre 21. Mthodologie de conception des sites Web et interfaces Figure 21-2. SI001 : Ergonomie/Maquette (QT4-Designer) 1/7

789

Chapitre 21. Mthodologie de conception des sites Web et interfaces

790

Chapitre 21. Mthodologie de conception des sites Web et interfaces Figure 21-3. SI001 : Ergonomie/Maquette (QT4-Designer) 2/7

791

Chapitre 21. Mthodologie de conception des sites Web et interfaces

Note : Linterface ci-dessus dcrit ce que verrait lutilisateur lorsquil clique sur le mot "Catalogue" : Les catgories de produits safche avec une image et une description.

792

Chapitre 21. Mthodologie de conception des sites Web et interfaces Figure 21-4. SI001 : Ergonomie/Maquette (QT4-Designer) 3/7

793

Chapitre 21. Mthodologie de conception des sites Web et interfaces

Note : Linterface ci-dessus dcrit ce que verrait lutilisateur lorsquil passe la souris sur le mot "Catalogue" (Effet "Rollover") : La liste de liens vers les categories de produits du catalogue safche.

794

Chapitre 21. Mthodologie de conception des sites Web et interfaces Figure 21-5. SI001 : Ergonomie/Maquette (QT4-Designer) 4/7

795

Chapitre 21. Mthodologie de conception des sites Web et interfaces

796

Chapitre 21. Mthodologie de conception des sites Web et interfaces Figure 21-6. SI001 : Ergonomie/Maquette (QT4-Designer) 5/7

797

Chapitre 21. Mthodologie de conception des sites Web et interfaces

798

Chapitre 21. Mthodologie de conception des sites Web et interfaces Figure 21-7. SI001 : Ergonomie/Maquette (QT4-Designer) 6/7

799

Chapitre 21. Mthodologie de conception des sites Web et interfaces

800

Chapitre 21. Mthodologie de conception des sites Web et interfaces Figure 21-8. SI001 : Ergonomie/Maquette (QT4-Designer) 7/7

801

Chapitre 21. Mthodologie de conception des sites Web et interfaces

Suite la suggestion dAlix, jai tent laventure avec lextension Firefox Pencil (http://www.evolus.vn/Pencil/Home.html) pour compltter ma maquette dinterface en crant les vues : liste de produit dune catgorie, che produit dtaille. Source Pencil : SI001-ch03-ergonomie-maquette-pencil.ep (projets/si001-ch03-ergonomie-projet-web/SI001-ch03-ergonomie-maquette-pencil.ep)

802

Chapitre 21. Mthodologie de conception des sites Web et interfaces Figure 21-9. SI001 : Ergonomie/Maquette (Pencil) 1/2

803

Chapitre 21. Mthodologie de conception des sites Web et interfaces

804

Chapitre 21. Mthodologie de conception des sites Web et interfaces Figure 21-10. SI001 : Ergonomie/Maquette (Pencil) 2/2

805

Chapitre 21. Mthodologie de conception des sites Web et interfaces

Les deux solutions logiciels pour crer rapidement des IHM sont simple dutilisation et ne requiert pas beacoup de temps pour tre apprhender. Ma prference irait pour lextension Firefox Pencil (http://www.evolus.vn/Pencil/Home.html) car plus simple, plus rapide et beaucoup moins lourde mettre en oeuvre. Les deux solutions offre la possibilit de sauvegarder linterface en XML et dexporter vers dautres formats tel que PNG par example.

Avertissement
Toutefois aucune des deux solutions noffre de solution parfaite. Elles ont toutes deux lors dfaut de conception et des limitations quand ce qui peut tre fait. Mais elles offre toutes deux la possibilit dobtenir rapidement un resultat de maquette.

21.5. Conclusion
A travers lanalyse des besoins on a pu identier les attentes du clients et des utilisateurs du sites ainsi que les acteurs. Avec lanalyse sectorielle, il est facile de se comparer aux concurrents et ensuite didentier les fonctionnalits clefs intgrer pour le site client. Cest une source dinspiration. Ensuite la description dtaill des besoins/fonctionnalits a permis de bien rpondre aux attentes identies. Enn, travers la cration de diagramme de cas dutilisation, on voit bien ce que peut faire lutilisateur,les diffrentes tapes, quand il a besoin de sauthentier. Avec ce type de schma il est facile de vrier si lon gre bien tous les cas et valider avec le client. La cration de scnario na pas t ralis ici mais aurait permis de dtailler les tapes suivis par les utilisateurs du site pour un ou plusieurs cas dutilisation donns. Le fait de prendre le temps de regarder des sites de e-commerce traditionnel et des framework ddis est aussi une excellente ide. Quand lergonomie et laccessibilt se sont des points importants intgrer ds le dpart et vrier/valider tout au long du processus de dveloppement.

806

Chapitre 21. Mthodologie de conception des sites Web et interfaces

21.6. GIMP
21.6.1. Cours
Source(s):

OF: Cours GIMP (docs/eof/SI001-ch04-31_cours_gimp.pdf) Web: GNU Image Manipulation Program (GIMP) (http://www.gimp.org)

21.6.2. Maquette
Source(s):

OF: Maquette Gimp (docs/eof/SI001-ch04-gimp-tp_maquette.pdf)

Source GIMP : SI001-ch03-ergonomie-maquette-kart-site-gimp (projets/si001-ch03-ergonomie-projet-web/SI001-ch03-ergonomie-maquette-kart-site-gimp.xcf)

807

Chapitre 21. Mthodologie de conception des sites Web et interfaces Figure 21-11. SI001 : Ergonomie/Maquette (GIMP) 1/1

808

Chapitre 21. Mthodologie de conception des sites Web et interfaces

21.6.3. Rendu XHTML


Voir page de projet ddi maquette site karting (kart.eu) (projets/si001-ch03-ergonomie-projet-web/www/index.html). Voir aussi le projet web cr lors de SI002.

21.7. Hbergement de site Web sur Internet


21.7.1. toile-libre.org
Source(s):

web: Toile-Libre (toile-libre.org) Par o commencer ? (http://www.toile-libre.org/fr/par_ou_commencer) Envoyer sa premire page : FTP/FTPS

Suite au passage un service payant de mon hebergeur, jai dcid de rechercher un autre fournisseur pour hberger mon espace web (peu utilis) et voir ce qui existe en offre dhbergment gratuit. Ceci en attendant dhberger moi mme mon espace web directement la maison dans le future. Jai pu constater que le nombre de possibilit a drastiquement diminu avec les annes ! Finalement je suis tomb par hasard sur Toile-Libre.org () dont les concepts (http://www.toile-libre.org/fr/concepts) mont particulirement attirs :

* "Best Effort" principe de non-garantie de la qualit du service, on essaie de faire de notre mieux. * galit entre tous * Prix libre (Pourquoi un prix "libre" ? (http://www.toile-libre.org/le-prix-libre)) modle financier citoyen qui dit que le prix est choisi par lutilisateur. Il donne alors ce quil veut, ce quil peut, et ce quil pense que cela vaut et mrite. * DIY (do it yourself) organisation alternative, base sur les principes dautogestion, de cration participative & collaborative, et dindpendance... rester libre de nos choix...

a me semble trs honte... et en plus facile et rapide mettre en place...!


Note : Il est difcile de juger des services rendus a priori sans avoir essay ! Quoi que la dernire nouvelle fasse mention dune procdure judiciaire leur encontre, sous la forme denqute prliminaire (requisition de donnes) et un appel aux dons... Je tente donc lexperience par curiosit... en esprant que les dbouchs seront positifs :)

809

Chapitre 21. Mthodologie de conception des sites Web et interfaces

Pour crer mon espace Web, jai donc suivis les instructions dtailles dans la Foire Aux Questions : FAQ > Par o commencer ? (http://www.toile-libre.org/fr/par_ou_commencer) Je passe les dtails mais en gros la procdure est trs standard :

1. Je crer mon compte depuis la page dinscription https://panel.toile-libre.org/subscribe.pl 2. Aprs quelques minutes je reois un courriel de confirmation avec mes paramtres de conne 3. Je me connecte mon espace via le panel https://panel.toile-libre.org (https://panel.toile-libre.org/) 4. Je cre un nouveau projet (groupe de travail), tape indispensable mais qui peut permettr par la suite de travailler plusieurs sur un projet commun. 5. Aprs quelques minutes, je reois un courriel de confirmation de cration du groupe. 6. Je peux donc maintenant crer mon espace web au sain de mon nouveau groupe. 7. Aprs quelques minutes, je reois un courriel de confirmation de cration de mon espace w 8. Je peux donc maintenant activer mes bases de donnes (MySql et PostGre) 9. Aprs confirmation, mon espace web est prt, je peux y accder via : http://ermansion.toile-libre.org (accs public) ftp://ftp.toile-libre.org (accs priv) sql.toile-libre.org (bases de donnes) Login: nom_de_la_base Pwd : password_utilis_pour_crer_la_base

810

Chapitre 22. HTML, XHTML, CSS


22.1. Prsentation de la squence
Source(s):

OF: Prsentation de la squence (docs/eof/SI002-ch00-presentation_de_la_sequence.pdf)

Julien Fredon notre coordinateur, travaille comme dveloppeur dans le domaine du web depuis un dizaine dannes, et pendant quelques semaines nous guide pour la squence XHTML/CSS. Lobjectif de cette squence est dapprendre crer des documents web tout en respectant les normes et les recommandations en vigueur sur Internet. Structurer nos documents de manire smantique grce au XHTML et en modier la prsentation laide des CSS. Cet enseignement donne les bases absolument ncessaires pour dvelopper tout ce qui peut tre vu sur le web car mme si les applications et sites complexes sont souvent bass sur des technologies diffrentes (que ce soit pour le langage de programmation, la systme de base de donnes, le serveur dhbergement) ils partagent tous un point commun : lutilisation du HTML / XHTML et des CSS pour prsenter linformation dans votre navigateur. Nous allons donc tudier la syntaxe de ces langages, leur utilit et nous allons bien videmment mettre tout cela en pratique. Une fois ces connaissances acquises, nous serrons en mesure de crer des documents (ou pages web) simples, des sites statiques pour passer la suite avec PHP et Spip. La squence est divise en dix : - "prsentation de lactivit" - prsentation de lhtml et ralisation de document html : remonter un peu le temps an de voir comment taient construites les pages web il y a quelques annes, pourquoi cela posait problme et les solutions plus modernes qui sont maintenant utilises. Vous trouverez des documents qui tenterons de vous faire dcouvrir pourquoi les recommandations (ou normes ou standards) sont importantes sur un mdia comme internet. Ces documents ont maintenant quelques annes, mais ils sont toujours dactualit car ils ne traitent pas de techniques mais plutt de mthodes.

811

Chapitre 22. HTML, XHTML, CSS - prsentation de xhml : le vif du sujet. Comprendre lutilit du langage XHML et comment le maitriser. Si nous navons pas tudier le HTML cest tout simplement que le XHTML et le HTML sont extrmement similaires, les seuls petites diffrences se font dans la syntaxe (assez strict pour le xhtml, beaucoup moins pour le HTML). Une fois le langage XHML maitris, le HTML naura pas de secret pour nous. - application du XHTML des cas rel : ensemble dexercices permettant de manipuler le langage et de crer nos premiers documents. - utilisation des CSS : lapprentissage du langage CSS et sa mise en pratique par quelques exercices. - chat de suivi : Le suivi ne prendra pas forcement la forme dun chat, cela se fera en fonction des disponibilits de chacun. - ralisation dun site : Ce sera la partie projet de la squence. Ce sera du travail en quipe et lobjectif sera de dvelopper un petit site (deux ou trois pages) ou un ensemble de deux ou trois documents de votre choix laide des technologies apprises. - volution venir : une projection dans un avenir relativement proche maintenant. On dcouvrira une partie des CSS 3 (la prochaine version du langage) et le HTML5. Une partie de ces technologies peuvent et sont dj utilises mais pas dinquitude, ce que nous aurons appris durant la squence nest pas perdu ou obsolte pour autant, car sur le web diffrentes versions dun langage coexistent en gnral de nombreuses annes. - bilan de la session : Le bilan de session sera loccasion dchanger sur la squence, prendre quelques conseils et remarques sur la ralisation de projet. Nous pourrons galement discuter un peu de choses qui sortent du domaine de la squence mais qui reste dans celui dinternet et du web.

22.2. Importance des standards sur Internet


Source(s):

OF: Importance des standards sur Internet (docs/eof/SI002-ch01-1-importance_des_standards_sur_internet.pdf) Web: World Wide Web Consortium (W3C) (http://www.w3.org) Open Web Group pour les standard du Web (http://openweb.eu.org) Alsacrations 3.0 (http://www.alsacreations.com) Hypertext Markup Language - Historique (http://fr.wikipedia.org/wiki/HTML#Historique)

HTML, XHTML, CSS sont toutes des technologies dites standards car elles sont dnies par un seul organisme : le World Wide Web Consortium (W3C).

812

Chapitre 22. HTML, XHTML, CSS Pour comprendre lengouement actuel pour les standards et matriser les technologies XHTML et CSS, il faut au pralable comprendre les grands conceptes ports par ces technologies.
Note : Alsacrations est une communaut ddie lapprentissage des standards web (W3C, HTML, XHTML, CSS) ainsi qu laccessibilit numrique. Au menu : actualits , tutoriels , articles , astuces , outils, quiz... En savoir plus... (http://www.alsacreations.com/page/about)

22.2.1. Origine
World Wide Web (ou Web) : application Internet/systme hypertexte public fonctionnant sur Internet permettant de consulter, avec un navigateur Web, des pages Web mises en ligne dans des sites Web.
volution qua connue le web depuis sa cration jusqu nos jours

Aot 1991: Naissance du web, son crateur Tim Berners-Lee invente le language hypertexte (HTML) ... : Cration de navigateur graphique (NCSA Mosaic, etc...) Ajout dimages dans les documents ... : Ajout de nouvelles possibilit (text format, etc...) ... : la "guerre des navigateurs" opposant Netscape et Microsoft - HTML devient plus s ... : technique des tableaux dtourn et utiliser pour la mise en page Vers 1994: creation de CSS 1995: le World Wide Web Consortium (W3C) est fond et publie des recommandations sur le technologies web afin den promouvoir la compatibilit. 1997: le W3C publie les spcifications du HTML 4 2000: le W3C plublie les spcifications du XHTML 1.0 les navigateur deviennent plus compatibles et respecteux des spcifications. ... : HTML5/XHTML5 stantardisation en cours

22.2.2. 1er Principes : au service de tous !


Le web renoue alors avec ses principes dorigines :

"Mettre le Web et ses services la disposition de tous les individus, quel que soit - leur matriel ou logiciel, - leur infrastructure rseau, - leur langue maternelle, - leur culture, - leur localisation gographique, - leurs aptitudes physiques ou mentales." Tim Berners-Lee

813

Chapitre 22. HTML, XHTML, CSS

22.2.3. 2me principe : Introprabilit & Accessibilit


Un des principes lmentaires du web est lintroprabilit : plusieurs systmes, identiques ou radicalement diffrents, puissent communiquer sans ambigut et fonctionner ensemble. dcouvrir :

"Les problmes de la mise en page par tableaux" (http://openweb.eu.org/articles/problemes_ta "En quoi la mise en page par tableaux est-elle stupide" (http://www.cybercodeur.net/weblog/p

Remplissent parfaitement leur rle quand il sagit de structurer des donnes viter les tableaux pour faire de la mise en page :
Laffichage des tableaux se fait lentement Les tableaux nuisent laccessiblit Les tableaux nuisent limpression Les tableaux sont complexes et coteux produire Les tableaux alourdissent les pages Les tableaux nont pas t crs pour faire de la mise en page

Accessibilit et linteroprabilit la nouvelle direction :


- il est indispensable de crer ses documents indpendament de la faon dont ils vont tre consults ; - il faut les rendre accessibles depuis nimporte quels quipements en sadaptant leurs contraintes * daffichage (taille de lcran, rsolution, nombre de couleurs affiches, etc.) * de manipulation (clavier, souris, trackpad, etc.) * de fonctionnement

22.2.4. 3me Principe : Sparer forme et fond


Sparation forme (CSS) / fond (XHTML), dissocier : - les informations porteuses de sens

814

Chapitre 22. HTML, XHTML, CSS


(les donnes qui signifient quelques choses) - des donnes de prsentation (malable, adaptable et flexible)

22.2.5. 4me Principe : La smantique (validation)


La smantique pour comprendre linformation : Les quipements en plus dafficher de linformation, ont maintenant la ncessit de la comprendre ! "Le <abbr title="HyperText Markup Language">HTML</abbr> est un langage ddi la publication sur le web."

Les enjeux cachs derrire la bonne structuration dune information en XHTML "Respecter la smantique XHTML" (http://openweb.eu.org/articles/respecter_semantique) [PDF H La smantique des balises est destine indiquer la nature du contenu quelle encadre. Le (X)HTML dfinit de nombreuses balises: titre (h1, h2...), listes (ul, ol,...), paragraphe (p), citation (blockquote), tableau de donnes (table), un bloc regroupant plusieurs contenus (div), etc... Pourquoi est-ce si important de respecter la smantique des balises ? Encadrer un contenu avec la balise adquate, permet : - de structurer le document correctement, indpendamment de la forme quil va prendre - aux programmes qui traiteront linformation de linterprter correctement

La ncessit de respecter et suivre des standards communs sur le web "Toi comprendre moi" (http://openweb.eu.org/articles/toi_comprendre_moi) [PDF Hors-Ligne] (d Lever lambigut : bien se faire comprendre est un impratif. - viter au lecteur interprter, deviner le sens. - viter de sexprime de faon ambigu ==> lintrt des outils de validation (validator) pour rassurer lauteur sur la qualit de son langage Mnager le pass, le prsent et le futur - Evolution Chaque document Web doit mentionner la grammaire (DTD) laquelle il se rfre en y faisant rfrence : - DOCTYPE (pour Type de Document) plac sur la premire ligne du document - un prologue XML peut aussi tre indiqu juste avant Faux-plis (Quirks) contre amidonnage (Strict/Standard) Mode Quirks : Compatibilit avec les bogues des anciens navigateurs

815

Chapitre 22. HTML, XHTML, CSS


Mode Strict/Standard : Respect au plus prs les normes du W3C

Note : Un document HTML servi en tant que XML, que ce soit du XHTML 1.0, du XHTML 1.1 ou du XHTML 5, doit comporter le prologue XML. Autrement dit, pour un document XHTML 5, on aurait :
<?xml version="1.0" encoding="utf-8"?> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr"> <head> <title>Cette page est du HTML 5 servi en tant que XML</title> </head> <body> </body> </html>

Note : Tout comme HTML ou XHTML, les documents HTML5 ncessitent un Doctype indiquant la mthode de rendu standard au navigateur. Toutefois, pour les documents XML cette dclaration est facultative, le navigateur linterprtant en mode standard par dfaut.
<!DOCTYPE html> # HTML5 doctype

22.2.6. 5me Principe : La qualit


Approche transversale, matriser des aspects lis :
- la communication (rfrencement, positionnement, marketing, production et maintenance de contenus, documentation), - la technique (bases de donnes, compatibilit, accessibilit, scurit), - aux services (logistique, e-commerce, etc.), - lergonomie (design dinterface et dinteractions, architecture de linformation, design graphique, etc.).

==> efficacit vis--vis des usagers ==> efficience des dveloppements

816

Chapitre 22. HTML, XHTML, CSS

22.2.7. Limportance des jeux de caractres


Source(s):

Web: Introduction aux jeux de caractres (http://openweb.eu.org/articles/jeux_caracteres) Migrer vers le jeu de caractres pour UTF-8 (http://openweb.eu.org/articles/changer_pour_utf8) Unicode (Wikipedia) (http://fr.wikipedia.org/wiki/Unicode)

Le jeu de caractre est la faon de reprsenter chaque caractre (et donc un texte) dans la base binaire (0/1). ASCII : Premier jeu de caractre. 8 bits (1 bit de parit + 7 bits de caractre). 128 caractres reprsentantable pour lchange dinformation sommaire en anglais. ISO-8859-1 (ou ISO-Latin1) : Jeu de caractre ASCII tendu. 8bits (8 bits de caractre). 256 caractres reprsentable pour lchange dinformation dans les langues dEurope Occidentale.
Note : De nombreux jeux tendus ont vu le jour, pour coder des langues comme le grec ou le russe (alphabet cyrillique)...

ISO-8859-15 : ISO-8859-1 modi pour pouvoir contenir des symboles comme le sigle , trop rcent pour tre inclus dans la norme originale, ou (un oubli pour des raison obscure). MacRoman (pour MacOs), Windows-1252 (pour Windows) et autres : jeux tendus propritaires
Note : Windows-1252 pose quelques problmes, car de nombreuses pages renseignes comme ISO-8859-1 sont en fait encodes en Windows-1252, ce qui a pouss les navigateurs, du moins sous Windows, systmatiquement reprsenter les pages renseignes comme utilisant lISO-8859-1 (sans distinction) laide du jeu de caractres Windows-1252.

La varit des jeux tendus est comme une preuve clatante de leur insufsance. En effet, 256 caractres rend impossible la rdaction dun document en plusieurs langues. Oublions donc tout de suite le document texte reprenant des mots japonnais et leur traduction en franais. Solution 1: UCS-2 (Universal Character Set) : jeux de caractres cods sur deux octets. 256 65536 caractres reprsentables.

817

Chapitre 22. HTML, XHTML, CSS UCS-4 : jeux de caractres cods sur 32 bits. Plus de 4 milliards de caractres reprsentables. Mais on perd une caractristique intressante des jeux tendu : leur compatibilit en ce qui concerne les 128 premiers caractres communs tous (Compatibilit ASCII). Solution 2: UTF-8 (Unicode Transformation Format) : utilise un nombre doctets variable (entre 1 et 6 octets) pour reprsenter les caractres, en introduisant une convention pour diffrencier les octets isols (commanant par 0 pour compatibilit ASCII), reprsentant eux seuls un caractre, ou les octets groups, devant tre considrs plusieurs pour pouvoir en extraire linformation. Cette norme permet de reprsenter un nombre impressionnant de caractres diffrents, sans compter le fait quelle permet un autre systme de reprsentation, lagrgation de glyphes, que je ne dtaillerai pas ici. Seuls un peu plus de 90000 caractres ont t attribus pour linstant. Voir aussi UTF-16 et UTF-32.

22.3. (x)HTML
Source(s):

OF: Prsentation (x)HTML (docs/eof/SI002-ch03-presentation-xhtml.pdf) Atelier (x)HTML (docs/eof/SI002-ch03-atelierxhtml.pdf) W3C: XHTML 1.0 The Extensible HyperText Markup Language (Second Edition) (http://www.w3.org/TR/2002/REC-xhtml1-20020801) DTD du langage XHTML 1.0 Strict (http://www.w3.org/TR/xhtml1/dtds.html#a_dtd_XHTML-1.0-Strict) Web: (x)HTML Cheat Sheets (http://www.addedbytes.com/cheat-sheets) Savoir utiliser acronymes, abreviations et sigles (http://www.alsacreations.com/actu/lire/154-savoir-utiliser-les-acronymes-abreviations-et-sigles.html) How to Use ABBR in HTML5, and in General (http://camendesign.com/code/using-abbr) Tutorials: Tutorial W3C (http://www.w3schools.com/html/default.asp) Tutorial Site du Zro (http://www.siteduzero.com/tutoriel-3-13666-apprenez-a-creer-votre-site-web.html)

818

Chapitre 22. HTML, XHTML, CSS

22.3.1. DOCTYPE Dclaration


Lune des suivantes pour un document (x)HTML:
## XHTML 1.0 Strict <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> ## XHTML 1.0 Transitional <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> ## XHTML 1.0 Frameset <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"> ## XHTML 1.1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> ## (x)HTML 5 <!DOCTYPE html>

# HTML5 doctype

22.3.2. Tags/Entities/Attributes/Events
Source: http://www.addedbytes.com/cheat-sheets/html-cheat-sheet (http://www.addedbytes.com/cheat-sheets/html-cheat-sheet/)

819

Chapitre 22. HTML, XHTML, CSS Figure 22-1. SI002: (x)HTML Cheat Sheet

820

Chapitre 22. HTML, XHTML, CSS

# Structure html head title link meta script body # Attributs genriques id class style title # Tags a img src alt p span div br hr h1, h2, h3, h4, h5, h6 em strong cite # Tag: dsigner un source dinformation "inline" dfn # Dfinition blockquote # Citation "block" q # Citation "inline" cite # Attr: URL source dinformation code # Ligne de code samp # Resultat dun script/programme kbd # Information/commande saisir par utilisateur var # Dsigner une variable abbr # Abrviation acronym # Accronyme sub # Indice (en bas) sup # Exposant (en haut) ins del pre address ul/li # insertion texte # suppression texte # textes pr-formats # adresse # liste simple

821

Chapitre 22. HTML, XHTML, CSS


ol/li dl/dt/dd table caption thead tbody tfood tr th td object form action method (post/get) label for # permet dattacher un texte cliquable un champ de formulaire. # id du champs li au label # liste ordonne # liste de dfinition/dialogue

input type (text, radio, checkbox, password, hidden submit, reset, button, image, file) name # nom de la variable accessible dans le script value # valeur par dfaut textarea cols rows select # Menu droulant multiple option # Option du menu value # Valeur de loption choisi fieldset legend # groupe de champs de formulaire # lgende du fieldset

Note : Il est admis quon peut utiliser les listes de dnition pour faire un lien entre un terme et des dnitions, et pas seulement grammaticalement parlant. Pour illustrer ce propos, voir les remarques de Julien dans la section projet web ci-aprs.

22.3.3. Atelier XHTML: Essais et Validation


Instructions : Atelier (x)HTML (docs/eof/SI002-ch03-atelierxhtml.pdf)

822

Chapitre 22. HTML, XHTML, CSS Resultat : Voir page de projet ddi si002-ch03-atelier (projets/si002-ch03-atelierxhtml/index.html).
Note : En mode strict (que ce soit en HTML 4.01 ou en XHTML 1.0), les lments BODY et FORM ne peuvent pas avoir pour enfant un lment de type en ligne (inline en anglais), comme BR.

Cet atelier ma permis de dcouvrir la difcult dobtenir des documents XHTML valides et toutes les contraintes lies.
Note : Au dbut cela prend beaucoup de temps dobtenir des documents valide, cest tout fait normal. Avec le temps et lexprience, on y passera beaucoup moins de temps.

La validation est un processus contraingnant mais rigoureux quil est plus que ncessaire dintgrer au cycle de dveloppement pour sassurer que les documents publis ont une syntaxe valide. Cest aussi un exercise qui requiert de la patience, de la pratique et une bonne connaissance XHTML surtout lors de la validation de document "Strict" ! Le validateur du W3C ne pardonne pas :) Le fait de comprendre les erreurs permet de les viter bien plus facilement par la suite. Lobjectif nest pas non plus de faire des documents valides en une fois ; il est trs possible dviter les plus grosses erreurs mais certaines sont plus oues et cest l que les validateurs (et autres outils) sont ncessaires.

22.3.4. Questions/Rponses
Q&A XHTML : 1. Quelle diffrence entre ABBR et ACRONYM ? Savoir utiliser acronymes, abreviations et sigles (http://www.alsacreations.com/actu/lire/154-savoir-utiliser-les-acronymes-abreviations-et-sigles.html) How to Use ABBR in HTML5, and in General (http://camendesign.com/code/using-abbr) 2. Pourquoi ne pas mettre la dclaration XML juste avant le DOCTYPE tout au dbut ? Ne serait-ce pas mieux de la mettre ?
<?xml version="1.0" encoding="UTF-8" ?>

Cest effectivement quelque chose qui peut se faire lors que le document XHTML est correctement format. Mais ce nest pas obligatoire (les recommandations XHML nen font pas mention et mme dans les documents XML ce prologue nest pas obligatoire). Le problme principal vient du fait que cette dclaration nest pas prise en charge de la mme faon dans les navigateurs ; il fait par exemple basculer IE en mode non standard et en modie un peu le comportement (comme les doctype), il est donc ncessaire de grer plusieurs cas pour les diffrents navigateurs et cest pour viter cela quil nest pas vraiment utilis.

823

Chapitre 22. HTML, XHTML, CSS 3. Pourquoi est-il ncessaire dencadrer un block-text PRE par un OBJECT lui mme devant tre encadr par un P ou DIV, ou autre tag block pour pouvoir valider le document...? quel est lintrt ? Question un peu difcile. Julien tentera dy apporter une rponse dans un autre message. 4. Quel est lintrt de PRE face CODE ? Nest ce pas fait pour la mme chose ? Quel est vraiment lutilit de PRE ? Auriez-vous un example de cas dutilisation ? On ne peut pas vraiment parler dintrt. PRE sert prsenter un texte format en prenant en compte les espaces et retour la ligne prsent dans le code source. Il ny a pas vraiment de notion smantique derrire cette balise. CODE se prsente de manire identique mais elle apporte galement un sens ce quelle contient : un code informatique. PRE est un peu une relique qui a t conserve pour des raisons de compatibilits ;il me semble dailleurs quil tait prvu que cette balise soient supprimes des futures versions de XHTML car lapparence donnes au texte par cette balise peut tre gre par les rgles CSS. En conclusion : - si tu veux mettre un code informatique dans ton document : utilise CODE ; - si ton texte na rien voir avec un code et que tu veux juste conserver un style dafchage sans trop te fatiguer : utilise PRE ; 5. Je ne comprends pas lutilit de lattribut "for" dans un LABEL ? De ce que jai compris on peut cliquer sur le label pour atteindre le champ correspondant mais en gnral de tel label sont plac cot ou encadre un champ de formulaire donc je ne vois pas trop lintrt ? Auriez-vous un exemple de cas concrt ? Cet attribut attribut lie un libell et un champ et concerne donc lergonomie et laccessibilit. Voir aussi Loi de Fitts. a a un cot trs pratique : cliquer sur le libell place ton curseur dans le champ associ. Par exemple, sur des checkbox ou des bouton radio, cest vraiment trs apprciables :) Tu peux cliquer sur le texte pour valider la case cocher.

# Source:http://www.eof.eu.org/spip.php?rubrique8 ... <input id="mailsup" name="mailsup" type="checkbox" value="oui" />&nbsp;&nbsp; <label for="mailsup">jaccepte de recevoir dautres courriels que la rponse cette demande de la part de <strong>lcole ouverte francophone</strong>.</label> ...

Plus quadquate sur des formulaires avec bcp de questions. Lergonomie est ainsi amlior car cliquer sur un bouton radio peut tre assez difcile pour certaines personnes, cest petit un bouton radio et donc cela ncessite beaucoup de prcision et tout le monde ne manie pas la souris avec une extrme dextrit (pense aux personnes ges, au personnes avec une souris peut prcise, etc.). Un champ et son libell ne sont jamais trs loigns en effet ... mais ils ne sont pas toujours prsents de la mme manire (libell gauche et champ droite, libell au dessus du champ, libell gauche (penser au autres langues et mode dcriture)) et mme si toi tu arrives facilement faire le lien entre les deux

824

Chapitre 22. HTML, XHTML, CSS lments grce leur position ... ce nest pas forcement le cas de tout le monde car tout le monde na pas les informations visuelles dont tu disposes (pense aux non voyants, aux machines (car les pages peuvent aussi tre exploiter par dautres programmes : genre google) etc.).

6. Apparement il est aussi possible dencadrer un champ de formulaire par des tags LABEL ? Quel est le mieux crer un tag LABEL vide avec lattribut "for" ou encadrer le champs du formulaire dans un couple de tag LABEL ? Il ny a pas de meilleurs solutions, les deux sont quivalentes. Tu peux choisir lune ou lautre en fonction de larchitecture de ta page. Voir aussi rponse prcedente. 7. Auriez-vous des conseils ou des sources dinformation pour facilement diter des documents xml ou xhtml dans vim ? Est-il possible davoir lauto completion de tag par exemple ou la prvisualitation des tag/attributs disponibles ? ...

22.4. CSS (Feuilles de Style en Cascade)


Source(s):

OF: Prsentation CSS (docs/eof/SI002-ch04-presentation-css.pdf) Atelier CSS (docs/eof/SI002-ch04-ateliercss.pdf) W3C: CSS v2 (EN) (http://www.w3.org/TR/CSS21) CSS v2 (FR) (http://www.yoyodesign.org/doc/w3c/css2/cover.html) DTD du langage CSS v2 () Web: CSS Cheat Sheets I (http://www.addedbytes.com/cheat-sheets) CSS Cheat Sheets II (http://www.ilovejackdaniels.com/css_cheat_sheet.pdf) Tutorials: Tutorial W3C (http://www.w3schools.com/html/default.asp) Tutorial Site du Zro (http://www.siteduzero.com/tutoriel-3-13666-apprenez-a-creer-votre-site-web.html#part_13663) Tutorial Site Alsacration (http://www.alsacreations.com/tuto/liste/2-css.html) Position: OpenWeb Initiation au positionement CSS (http://openweb.eu.org/articles/initiation_ux/) Css position: position static, absolute, relative and xed of an element (http://css.epstudio.org/en/css-properties/position-static-absolute-relative-static.html) Simple 2 column CSS layout (http://www.456bereastreet.com/lab/developing_with_web_standards/csslayout/2-col) Simple 3 column CSS layout (http://www.neuroticweb.com/recursos/3-columns-layout/) Spcique(s): Styling form controls (http://www.456bereastreet.com/archive/200409/styling_form_controls/) A new image replacement technique (http://www.kryogenix.org/code/browser/lir/) Replacing Text by an Image (http://wellstyled.com/css-replace-text-by-image.html)

825

Chapitre 22. HTML, XHTML, CSS

22.4.1. Prsentation
CSS ou Cascading Style Sheets (Feuilles de Style en Cascade) est un langage dont la fonction est de dnir la mise en forme des documents web HTML, XHTML ou mme XML. Il permet dcrire simplement des rgles dnissant laspect dun document (polices, couleurs, dimensions, positionnement appliquer aux diffrents lments constituant le document). La force du langage CSS est la possibilit de dissocier compltement le contenu de la prsentation dun document (galement appelle sparation forme / fond). Les CSS 3 qui sont en cours de dveloppement doivent apporter des solutions aux inconvnients existant, mais il faudra encore attendre pour voir la recommandation nalise et sa mise en oeuvre dans les navigateurs.

22.4.2. Avantages (Beaucoup)


Lutilisation des CSS permet :
- une volution et mise jour des documents plus faciles (volution du fond indpendante de la forme, collaboration entre developpeur/graphiste) - une meilleurs accessibilit (plusieurs prsentation, rpondre au prfrence/dficience des utilisateurs) - une plus grande portabilit (indpendance du matriel, adapter laffichage pour : projecteur, cran dordinateur, imprimante, mobile, etc.) - une plus grande homognit dans laspect des documents (mme prsentation pour plusieurs documents) - une plus grande rapidit de consultation (fichier CSS de prsentation mis en cache)

22.4.3. Inconvnients (Peu)


Il subsiste encore un certain nombre dinconvnients lutilisations des CSS mais ils peuvent paraitre drisoires face aux facilits offertes :
- Les anciens navigateurs (marginaux et inexistant) ne peuvent pas afficher les documents web correctement (4ime gnration : MS IE4, Netscape) mais le contenu reste parfaitement consultable. - Les CSS ne peuvent pas rpondre tous les besoins graphiques.

826

Chapitre 22. HTML, XHTML, CSS


(prsentations en colonnes, les bordures arrondies, de laffichage des ombres et de multiples images de fond ne sont pas faisable.) ==> contourns par des balises supplmentaires ou des bibliothque Javascript. - Limplmentation des CSS nest pas quivalente dans tous les navigateurs ==> Contourner les dysfonctionnements par des "bidouilles"

22.4.4. Syntaxe CSS


Une feuille de style CSS est une liste de rgles dafchage sappliquant sur un lment (x)HTML : P, DIV, UL, EM, etc...

827

Chapitre 22. HTML, XHTML, CSS Figure 22-2. SI002: CSS(v2) Syntaxe de Rgle

Source: cours de lOF La faon de modliser un lment est appel modle de bote (Box Model en anglais). Il existe deux modles de bote diffrents qui inuent sur la faon dont les CSS vont sappliquer sur les lments (inuencer le rendu) :
- le modle de bote standard du W3C (utilis par les navigateurs, respecte standards/strict) - le modle de bote de Microsoft

828

Chapitre 22. HTML, XHTML, CSS

Figure 22-3. SI002: CSS(v2) Modle de bote standard du W3C

Source: cours de lOF

829

Chapitre 22. HTML, XHTML, CSS

Avertissement
Le model de bote de Microsoft diffre de la prcdente car la taille du contenu et des marges internes ne sont pas dissocies. Pour en savoir plus consulter http://openweb.eu.org/articles/dimensions_botes_css.

Source: http://www.addedbytes.com/cheat-sheets/css-cheat-sheet

830

Chapitre 22. HTML, XHTML, CSS Figure 22-4. SI002: CSS(v2) Cheat Sheet

831

Chapitre 22. HTML, XHTML, CSS

22.4.5. Intgration des CSS avec les documents XHTML / Type de mdia
Trois mthodes :
## Insertion directe dans les balises # Mise en forme applique que sur # - llment o elle est dclare # - aux lments enfants ... <p style="color: green; font-size: 12px;"> blabla </p> ...

## Insertion dans len-tte du document # Mise en forme appliqu sur - tous les lments de la page ... <head> <style type="text/css"> p { color: green; font-size: 12px; } </style> </head> <body> ...

## Utilisation de fichiers distincts # Spcifier les rgles de prsentation dans un fichier spar # Fichier texte (extension .css) qui sera ddi au style. ... <head> <link rel="stylesheet" type="text/css" href="style.css" /> </head> ...

## Importation de fichier @import url(fichier.css) # Faire rfrence un fichier CSS directement dans un autre fichier # Diviser votre mise en page en plusieurs fichier simple et facile maintenir # Utilis dans un document (x)HTML ...

832

Chapitre 22. HTML, XHTML, CSS


<style type="text/css"> @import url(style.css); </style> ... # Utilis dans un fichier CSS @import url(header.css); @import url(content.css); @import url(footer.css); ...

Avertissement
Pour tre prise en compte dans un chier CSS, la dclaration @import doit tre plac en dbut du chier.

Lorsque vous crez une feuille de styles CSS, elle sapplique par dfaut tous les mdias, la prsentation que vous aurez faite sera la mme pour un afchage sur cran ou une impression papier par exemple. Il est possible dappliquer une prsentation particulire en dnissant le mdia. Neufs types de mdia :
all screen print speech braille embossed projection tv handheld : : : : : : : : : dsigne tous les mdias (par dfaut) sortie sur cran informatique ; sortie sur imprimante ; synttiseurs vocaux (la version 2 des CSS utilise le mdia aural) ; cible les lecteurs brailles ; utilise pour les les impressions brailles ; pour les prsentations projetes ; pour laffichage dans les tlvisions avec acces web. destination des PDA.

Note : La plupart de ces diffrents mdias ne sont pas toujours bien pris en compte par les appareils auxquels elles se destinent.

## Utilisation lors de lappel dun fichier CSS externe ... <link rel="stylesheet" type="text/css" href="style.css" media="screen, print" /> ... ## OU ... <link rel="stylesheet" type="text/css" href="style.css" media="screen" /> <style type="text/css">

833

Chapitre 22. HTML, XHTML, CSS


@media print { p { color: green; font-size: 12px; } } </style> ... ## Utilisation dans une rgle ... <style type="text/css"> @import url(style.css) print; </style> ...

22.4.6. La priorit des slecteurs


Il est possible de dclarer plusieurs rgles portant le mme lment, et cest pour viter ce genre de conit que des rgles de priorits ont t tablies. Contrairement une ide reue, ce nest pas la dernire dclaration qui est prioritaire, il existe tout un systme grant les priorits des rgles CSS. Ce systme est bas sur le poids des slecteurs ; plus le poids dun slecteur sera important et plus il sera prioritaire sur les autres. Pour bien comprendre la manire de calculer les priorits, se rfrer au poly de cours de loF (Section V.)

22.4.7. Atelier CSS: Essais et Validation


Instructions : Atelier CSS (v2) (docs/eof/SI002-ch04-ateliercss.pdf) Resultat : Voir page de projet ddi si002-ch03-atelier (projets/si002-ch03-atelierxhtml/index.html).

834

Chapitre 22. HTML, XHTML, CSS

22.5. Projets Web


22.5.1. CV Taos
Lobjectif est de mettre en pratique ce que nous avons apris :) Nous devons crer au moins un document de notre choix (articles, CV, prsentation, lettres, page daccueil ou de contenu de site, etc.) an dutiliser de manire adquat les diffrentes balises XHML (lobjectif nest pas forcment de toutes les utiliser, mais il faut que le ou les documents soient assez complet). Une fois le document cr, il faudra bien sur lhabiller laide de feuilles de styles CSS. Resultat : Voir page de projet ddi CV Taos (projets/si001-ch03-ergonomie-projet-web/taos/index.html) (optimis pour les navigateurs repectueux des standards : refox 3+, Chromium 5+, Opera 10+, Firefox 3.5+, IE8+ :). Voir aussi le rendu XHTML de la maquette du site de karting crer lors de SI001.
Note : Remarques de Julien: Niveau html Ok. Comme tu le fais remarqu la balise vido cest plus du html5 mais cest fonctionnel; on peut garder la validation en passant par du javascript mais au nal cela revient exactement au mme. Attention aux balises vides : <p></p> si tu les utilises pour crer un espacement, ce nest pas une bonne chose, cela devrait tre fait avec les CSS. [RL: Je suis daccord, je les ai laiss simplement pour une harmonie par rapport au bloc de cette section pour en facilit la maintenance.] Il faudra faire attention dans les feuilles de styles : il vaut mieux liminer les commentaires de code (code mort) car cela peut crer une confusion et attention galement quand tu mets des commentaires : par exemple a {color: #386dcf; /*; #4276d3; #1b63e7; #769cdf*/;} pourrait poser problme avec certains navigateurs car la ligne est termin par deux ; (le commentaire ninclut pas le dernier ; ). Tu utilises galement des hack pour IE . . . pas de problme avec a cest trs souvent ncessaire (hlas) mais tu devrais les regrouper dans une feuille de style part : cela facilite la maintenance et la recherche des bugs.[RL A retravailler oui...] Une autre petite note : div#experience, div#education peut facilement scrire #experience, #education . Cest plus simple et il faut toujours privilgier la simplicit et un peu plus performant (a se voit dans certain projet complexe ou lorsque tu utilises des bibliothques javascript comme jquery pour manipuler les lments).

Note : Il y a til un moyen de mieux crire smantiquement les parties expriences et ducation du projet CV ? En utlisant des listes (UL/LI) par example ? Il ny a pas toujours une solution meilleure quune autre. La mme chose peut tre dcrite de diffrente faon est rester tout fait logique et valable smantiquement. Pour ces deux parties, Julien nutiliserai pas forcement les listes car il ny a pas forcment de lien entre les lments dune liste (comme dans une liste de course par exemple).

835

Chapitre 22. HTML, XHTML, CSS


Il aurait peut-tre utilis une liste de dnition. Il est admis quon peut utiliser ces listes pour faire un lien entre un terme et des dnitions (pas seulement grammaticalement parlant) :
<dl> <dt>date</dt> <dd> place 1 <br poste 1 <br description </dd> <dt>date</dt> <dd> place 2 <br poste 2 <br description </dd> </dl>

/> /> 1

/> /> 2

Ainsi, chaque poste est li sa date de faon (le poste est en quelque sorte la dnition de ce que tu faisais une date). Sinon, il est tout fait possible de lcrire simplement avec un ou plusieurs titres et des paragraphes :
<h2>date</h2> <p> place 1 <br /> poste 1 <br /> description 1 </p>

22.5.2. Attention: Adresse courriel en direct sur les pages !!! Avertissement
Si on mets les adresses mails en direct sur les pages, les petits robots qui passent et les rcupre se feront une joie de vous spammer.

JP a mentionn une tude qui portait justement sur les diffrentes possibilits de contourner le @ avec les statistiques que le chercheur avait ralises sur lefcacit des dtes techniques. En attendant de la retrouver, voici de quoi lire sur la question : hiding-email-addresses (http://www.csarven.ca/hiding-email-addresses) tips-obfu-java (http://womeninbusiness.about.com/od/internetmarketingseo/a/tips-obfu-java.htm)

836

Chapitre 22. HTML, XHTML, CSS Dun autre cot, comme le fait remarquer Arnaud, beaucoup de solution de protection sont des solutions qui marche "une fois". Par exemple la solution de facebook, email dans une image, peut tre contourn par lcriture de l OCR en peu de temps. Certaines techniques rduise grandement le niveau accessibilit (plage braille, lynx, ie ;). Par ailleurs, le javascript ou ash juste pour a, cest aussi dommage. Un technique simple mais limit consiste remplacer "@" par "&#64;". En ayant tendance privilgier les techniques moins utilises, on a plus de chance de ne pas tre gres par les robots.
arn_auld_@mas_cret d\u006ft org (remove _) # devrait limit les dgats # le seul code html est le \u006F # qui sera interprt en "o".

## Cela donne l affichage arn_auld_@mas_cret dot org (remove _)

Note : Aprs le AT et DOT, dans ce cas, le public cibl dot connatre.

En paliatif, pour des sites plus grands publics, un formulaire de contact est le plus souvent utilis. Mais cela peut engendrer dautres problmes :) On peut aussi utiliser une(ou des) addresse(s) diffrente(s).

22.5.3. Site multi-navigateur: Comment grer la compatibilit !


Quelques ressources en vrac explorer ulterieurement... Source(s):

Web: Esprit Cratif : Les conseils dun webmaster (http://esprit-creatif.blog.mongenie.com/index.php?idblogp=406297) Conseils pour le rendu multi-navigateur (http://fr.how-to.mobi/index.php?id=84912) Internet-Explorer-Platform-Preview (http://forum.alsacreations.com/topic-9-47483-1-Internet-Explorer-Platform-Preview-et-IE-6.html) Graded Browser Support (http://developer.yahoo.com/yui/articles/gbs/index.html) YUI 3 Yahoo!

837

Chapitre 22. HTML, XHTML, CSS User Interface Library (http://developer.yahoo.com/yui/3/) Video: The YUI CSS Foundation (http://developer.yahoo.com/yui/base/#video)

CSS Reset oui ? non ? : CSS Reset Reloaded (http://meyerweb.com/eric/thoughts/2007/05/01/reset-reloaded) Is it OK to use a CSS reset stylesheet? (http://stackoverow.com/questions/167531/is-it-ok-to-use-a-css-reset-stylesheet) NO CSS RESET (http://snook.ca/archives/html_and_css/no_css_reset/) Why Reset Style Sheets Are Bad (http://meiert.com/en/blog/20080419/reset-style-sheets-are-bad/)

Dans la vido de 42 minutes (Oct 2007), Nate Koechley un membre de lquipe Yahoo User Interface (YUI) et composant CSS prsente une introduction de :

CSS Reset - Foundation propre : re-initialiser les paramtres CSS par dfaut des navigateur (browser.css) permet de sassurer dune consistance entre navigateur. CSS Fonts - Control Typographique Utiliser les pourcentages pour dfinir la taille de police CSS Grids - Control de la page et de lagencement Utiliser des rgles CSS prdefinit pour une mise en page consistante et souple CSS Base - Basic Helper/Snipset lib : CSS de base utiliser comme vu par dfaut - Pour un systme en production prfrer un CSS propre.

22.5.4. CSS - Lien Interne/Externe


Source(s):

Web: Internal / External Links, the CSS3 Way (http://camendesign.com/code/uth2_css3-hyperlinks)

22.5.5. (x)HTML - Video Embarque pour tous


Source(s):

(x)HTML Vido: Video for Everybody (http://camendesign.com/code/video_for_everybody) Video for Everybody (TEST PAGE) (http://camendesign.com/code/video_for_everybody/test.html) Cortado (player Java for .ogg publication) (http://www.theora.org/cortado) Applet, object ou embed? (http://www.numabilis.com/blog/2006-09-05-applet_object_ou_embed)

838

Chapitre 22. HTML, XHTML, CSS

Ogg Theora/Vorbis: Ogg Theora Codec (http://www.theora.org) TheoraARM: Ogg Theora/Vorbis decoding library optimised for use on ARM processors (http://wss.co.uk/pinknoise/theorarm) Google soutien Theora (http://linuxfr.org/~zorgzorg2/29597.html) Edition Vido: OpenShot: dition et conversion facile de video sous Linux (http://www.openshotvideo.com)

Pour la publication de vido, le mieux est toujours de privilgier un format libre tel que theora/vorbis (.ogg) par rapport H264 (mp4). En dpit de ses qualits, dun support matriel disponible et dune large adoption dans les chanes de production, le H264 nest pas libre de droit.
...le codec Theora est le meilleur pour le web : non seulement il a des performance comparable celles de ses concurrent, mais surtout il est 100% libre... google-opensource.blogspot.com - Interesting times for Video on the Web (http://google-opensource.blogspot.com/2010/04/interesting-times-for-video-on-web.html)

Larrive de la balise VIDEO dans le futur standard (x)HTML5 est en grand pas en avant. Les diffrentes techniques de fallback sont envisager pour rendre le contenu accessible au plus grand nombre. Privilgier des techniques (x)HTML. Cortado est utile pour les navigateurs qui nont pas de support pour la balise "video".

22.5.6. Exemples de site (Ombrage, Effets 3D, ...)


Les ombrages et les effets 3D sont assez galres raliser en HTML/CSS. La tendance est donc de les utiliser avec parcimonie, surtout quils peuvent facilement alourdir le design. Il y a certains exemple o ils utilisent un peu deffet de lumire mais par touche lgre :
http://store.apple.com/fr http://tapbots.com ##=> Style assez proche; normment de blanc pour garder un design ar.

On pourrait contre argumenter avec des design aux fond trs colors :

839

Chapitre 22. HTML, XHTML, CSS


http://www.delibarapp.com ##=> mme l, on garde un design mettant en valeur le contenu central.

Pour plus de graphismes de sites sympas pour ceux que a intresse :


http://www.fredcavazza.net (http://www.fredcavazza.net/?s=Mes+3+sites+coup+de+coeur)

22.6. (x)HTML5 & CSS3


22.6.1. xHTML5
Source(s):

Web: How to learn (x)HTML5 (http://camendesign.com/code/how_to_learn_html5) Internal / External Links, the CSS3 Way (http://camendesign.com/code/uth2_css3-hyperlinks) HTML 5 Content on InfoQ (http://www.infoq.com/html-5)

22.6.2. CSS3
Source(s):

OF: SI002-ch06-css3.pdf (docs/eof/SI002-ch06-css3.pdf) Web: CSS3 Current Work (modules, priorit, status) (http://www.w3.org/Style/CSS/current-work) CSS3 Info (http://www.css3.info) CSS3 Pr-visualisation (http://www.css3.info/preview) Internal / External Links, the CSS3 Way (http://camendesign.com/code/uth2_css3-hyperlinks)

Le travail sur la version 3 des CSS a dbut il y a un peu plus de dix ans. Cette version se veut modulaire, elle est divise en plusieurs parties ayant chacune son domaine de fonctionnalit :
- la gestion des couleurs ;

840

Chapitre 22. HTML, XHTML, CSS


la gestion la gestion la gestion la gestion etc. des slecteurs ; typographique ; de la ngociation de style ; des annotations ruby ;

La complexit de la mise en uvre et la quantit des diffrents modules apparat comme lune des raisons du retard pris par limplmentation des CSS 3 dans les navigateurs. Quelques nouvelles proprits de mise en forme et mise en page CSS3 qui commencent tre utilisable dans certains navigateurs :
- border-radius [-moz-border-radius ou -webkit-border-radius] # A terme les prefixe seront supprims - border-image - background (plusieurs images de fond) - text-shadow (appliquer des ombres aux textes) - box-shadow (appliquer des ombres aux lments) - font-face (permettre de spcifier ladresse dun fichier contenant la police utiliser) - opacity (gestion des couleurs amliors)

22.6.3. Respect des standards - Suite de test(s) pour vrier la conformit des navigateurs Web
Source(s):

Compliance: Microsofts HTML5 Compliance Test Results Are Disputed by Google, Mozilla, and Opera (http://www.infoq.com/news/2010/06/HTML5-Compliance-Dispute) Compliance Test Suite: Acid Test 3 (http://acid3.acidtests.org/) When Can I use... Compatibility tables (HTML5, CSS3, SVG) (http://caniuse.com) CSS3 Selector Test Suite (http://tools.css3.info/selectors-test/test.html) Results of running various SVG implementations through the ofcial SVG Test Suite (http://www.codedread.com/svg-support.php) Ofcial SVG Test Suite (http://www.w3.org/Graphics/SVG/WG/wiki/Test_Suite_Overview) Aplle HTML5 Showcase (http://www.apple.com/html5) Microsoft (http://samples.msdn.microsoft.com/ietestcenter/)

841

Chapitre 23. SI010 - Interfaces Web enrichies


23.1. RIA
23.1.1. Conception dapplications Internet riches
Source(s):

OF: SI010-ch01-20_cours_concevoiruneria.pdf (docs/eof/SI010-ch01-20_cours_concevoiruneria.pdf)

Apple: Apple User Experience - Human Interface Guidelines (http://developer.apple.com/mac/library/documentation/UserExperience/Conceptual/AppleHIGuidelines/XHIGIntro/XHI Web: Toute lactualit des interfaces riches (Flash, Ajax, Silverlight, AIR, WPF. . . ) (http://www.interfacesriches.fr) Nielsen Norman Group Reports and Whitepapers (http://www.nngroup.com/reports/) Ephemeral Web-Based Applications (http://www.useit.com/alertbox/20021125.html) iPad Usability: First Findings From User Testing (http://www.useit.com/alertbox/ipad.html) Book: The Elements of User Experience (http://www.jjg.net/elements/)

23.1.2. Utilisation de scnarios/schmas (Pattern) connues et identis


Source(s):

Web: Yahoo Pattern Library (http://developer.yahoo.com/ypatterns)

Un scnario/schma (ou Pattern en anglais) dcrit une solution optimal un problme commun dans un context specic. De IAWiki: scnarios/schmas sont des solutions optimal des problmes communs. Les problmes communs sont etudis par une communaut et souvent des solutions communes merge spontanment. La meilleure mthode nit par faire surface au dessus du lot and sidentie par elle-mme puis est paun jusqu devenir un scnario/schma (Design Pattern).

842

Chapitre 23. SI010 - Interfaces Web enrichies

23.1.3. Framework(s) Javascript


Source(s):

Liste ordonne par le nbre doffre demploi (indeed.com): jQuery is a fast and concise JavaScript Library (http://jquery.com) Dojo Toolkit (http://www.dojotoolkit.org) YUI Library (http://developer.yahoo.com/yui) ExtJS (http://www.extjs.com) script.aculo.us (http://script.aculo.us) MooTools : compact, modular, Object-Oriented JavaScript framework for intermediate and advanced JavaScript developer (http://mootools.net) Comparaison: jQuery vs MooTools (http://jqueryvsmootools.com) SitePen Ajax Developement (http://www.sitepen.com) The Mojo of Dojo (http://onlamp.com/pub/a/onlamp/2007/11/01/the-mojo-of-dojo.html) Magazine: PHP Solutions 2010-05 Num 05: Framework Javascript (http://download.phpsolmag.org/fr/PHP_05_2010_FR.pdf)

23.1.4. Utiliser AJAX (Asynchronous JavaScript + XML)


Source(s):

OF: SI010-ch02-30_cours_ajax.pdf (docs/eof/SI010-ch02-30_cours_ajax.pdf) Javascript: Cours Javascript (http://fr.selfhtml.org/introduction/technologies/javascript.htm) Javascript DHTML (http://www.java2s.com/Code/JavaScript/CatalogJavaScript.htm) HTML/Javascript Tutorial (http://www.mredkj.com/tutorials/tutorial003.html) JavaScript and AJAX (http://www.webmasterworld.com/javascript/3414436.htm) Ajax: Ajax: A New Approach to Web Applications (2005) (http://www.adaptivepath.com/ideas/essays/archives/000385.php) XMLHttpRequest (http://www.xul.fr/Objet-XMLHttpRequest.htm) Cours XML Ajax (http://www.xul.fr/xml-ajax.html) XMLHttpRequest using POST method (http://www.openjs.com/articles/ajax_xmlhttp_using_post.php) Ajax/XMLHttpRequest multi browser support (http://www.tizag.com/ajaxTutorial/ajaxbrowsersupport.php) Timer: JavaScript Timers with setTimeout and setInterval (http://www.elated.com/articles/javascript-timers-with-settimeout-and-setinterval) Parsing XML: XML Parser (Transformer XML Docs en objet DOM) (http://www.w3schools.com/xml/xml_parser.asp) XML DOM (Parcourir dun Document XML) (http://www.w3schools.com/xml/xml_dom.asp)

Asynchronous JavaScript + CSS + DOM + XMLHttpRequest = AJAX :) Lobjet XMLHttpRequest permet dinteragir avec le serveur, grce ses mthodes et ses attributs :

843

Chapitre 23. SI010 - Interfaces Web enrichies


### ATTRIBUTS readyState le code dtat passe successivement de 0 4 qui signifie "prt". Les tats de readyState sont les suivants (seul le dernier est vraiment utile): 0: non initialis. 1: connexion tablie. 2: requte reue. 3: rponse en cours. 4: termin. status 200 est ok 404 si la page nest pas trouve. onreadystatechange proprit active par un vnement de changement dtat. On lui assigne une fonction.

Les donnes fournies par le serveur seront rcupres dans les champs responseXml ou respons Sil sagit dun fichier xml, il sera lisible dans responseXml par les mthodes de Dom. responseText contient les donnes charges dans une chane de caractres. responseXml contient les donnes charges sous forme xml, les mthodes de DOM servent les extraire.

### MTHODES Pour recueillir des informations sur le serveur cet objet dispose de deux mthodes: open(mode, url, boolean) tablit une connexion. mode: type de requte, GET ou POST url: lendroit ou trouver les donnes, un fichier avec son chemin sur le disque. boolean: true (asynchrone) / false (synchrone). en option on peut ajouter un login et un mot de passe. send("chaine") Envoie une requte au serveur. null pour une commande GET.

844

Chapitre 23. SI010 - Interfaces Web enrichies

23.1.5. Document Objetc Model (DOM)


Source(s):

Web: DOM Ressources (developer.mozilla.org) [en] (https://developer.mozilla.org/en/DOM) About DOM (developer.mozilla.org) [en] (http://developer.mozilla.org/en/docs/About_the_Document_Object_Model) Les lments du DOM avec les mthodes JavaScript [en] (http://krook.org/jsdom) DOM (XUL.fr) (http://www.xul.fr/xml-dom.html) DOM Introduction (http://www.digital-web.com/articles/the_document_object_model/) Rfrence: Gecko DOM Reference (https://developer.mozilla.org/en/Gecko_DOM_Reference) Document Object Model (DOM) Reference (Tellme.Studio) (https://studio.tellme.com/dom/ref/) W3C: DOM Level 3 (http://www.w3.org/TR/DOM-Level-3-Core/Overview.html) Tutorial: DOM3: querySelector() and querySelectorAll() methods (http://www.javascriptkit.com/dhtmltutors/css_selectors_api.shtml) document.querySelector (Mozilla) (https://developer.mozilla.org/en/DOM/document.querySelector)

23.1.6. JSON (JavaScript Object Notation) et JSONP !


Source(s):

JSON: Introducing JSON (http://www.json.org) JSON (Wikipedia EN) (http://en.wikipedia.org/wiki/JSON) JSON (Wikipedia FR) (http://fr.wikipedia.org/wiki/JavaScript_Object_Notation) JSONP: Cross-domain communications with JSONP, Part 1: Combine JSONP and jQuery to quickly build powerful mashups (http://www.ibm.com/developerworks/library/wa-aj-jsonp1/?ca=dgrjw64JSONP-jQuery&S_TACT=105AGY46&S_CMP=grsitejw64) What in the heck is JSONP and why would you use it? (http://www.insideria.com/2009/03/what-in-the-heck-is-jsonp-and.html) What is JSONP? (http://remysharp.com/2007/10/08/what-is-jsonp)

Note : Le xml est surtout utile pour des donnes. Dans le cas dobjets on pourrait utiliser directement des objets javascripts pass en texte dans le format JSON par exemple. Nanmoins, si on sais le faire en XML et que les libs sont crites, on peut changer nimporte quelles informations structures.

JSON est un format de donnes textuel, gnrique, driv de la notation des objets du langage ECMAScript. Un document JSON ne comprend que deux lments structurels :

845

Chapitre 23. SI010 - Interfaces Web enrichies


* des ensembles de paires nom / valeur ; * des listes ordonnes de valeurs.

Ces mmes lments reprsentent 3 types de donnes :


* des objets ; * des tableaux ; * des valeurs gnriques de type tableau, objet, boolen, nombre, chane ou null.

Ces types de donnes sont sufsamment gnriques et abstraits pour pouvoir :


- tre reprsents dans nimporte quel langage de programmation - reprsenter nimporte quelle donne concrte.

Le principaux avantages de JSON :


simple mettre en uvre par un programmeur tout en tant complet. peu verbeux, donc lisible par un humain et par une machine ; facile apprendre (syntaxe rduite et non-extensible) peu de limitations types de donnes connus et simples dcrire.

Exemple :
{"menu": { "id": "file", "value": "File", "popup": { "menuitem": [ {"value": "New", "onclick": "CreateNewDoc()"}, {"value": "Open", "onclick": "OpenDoc()"}, {"value": "Close", "onclick": "CloseDoc()"} ] } }}

846

Chapitre 23. SI010 - Interfaces Web enrichies

23.1.7. Amliorer les performances : "minify" javascript, concatenate CSS in one, optimiser les images...
Source(s):

Vido(s): Mobile JavaScript Development (http://www.infoq.com/presentations/Mobile-JavaScript-Development) Tools: YUI Compressor (http://developer.yahoo.com/yui/compressor) JSMin (http://crockford.com/javascript/jsmin) ShrinkSafe (Dojo toolkit) (http://www.dojotoolkit.org/reference-guide/shrinksafe/index.html) JavaScript Compressor Compress JavaScript Code Online for Free (http://www.minifyjavascript.com) Online Javascript Compression Tool : Minify (JSMin) or Packer (Dean Edwards) (http://jscompress.com)

Rules: High Performance Web Sites: Rule (http://search.yahoo.com/search?va=High+Performance+Web+Sites%3A+Rule&vs=developer.yahoo.com&vs=develope Rule 1 - Make Fewer HTTP Requests (http://developer.yahoo.net/blog/archives/2007/04/rule_1_make_few.html) Rule 2 - Use a Content Delivery Network (http://developer.yahoo.net/blog/archives/2007/04/high_performanc_1.html) Rule 3 - Add an Expires Header (http://developer.yahoo.net/blog/archives/2007/05/high_performanc_2.html) Rule 4 - Gzip Components (http://developer.yahoo.net/blog/archives/2007/07/high_performanc_3.html) Rule 5 Put Stylesheets at the Top (http://developer.yahoo.net/blog/archives/2007/07/high_performanc_4.html) Rule 6 Move Scripts to the Bottom (http://developer.yahoo.net/blog/archives/2007/07/high_performanc_5.html) Rule 7 Avoid CSS Expressions (http://developer.yahoo.net/blog/archives/2007/07/high_performanc_6.html) Rule 8 Make JavaScript and CSS External (http://developer.yahoo.net/blog/archives/2007/07/rule_8_make_jav.html) Rule 9 Reduce DNS Lookups (http://developer.yahoo.net/blog/archives/2007/07/high_performanc_7.html) Rule 10 Minify JavaScript (http://developer.yahoo.net/blog/archives/2007/07/high_performanc_8.html) Rule 11 Avoid Redirects (http://developer.yahoo.net/blog/archives/2007/07/high_performanc_9.html) Rule 12 Remove Duplicate Scripts (http://developer.yahoo.net/blog/archives/2007/07/high_performanc_10.html) Rule 13 Congure ETags (http://developer.yahoo.net/blog/archives/2007/07/high_performanc_11.html) Rule 14 - Make Ajax Cacheable (http://developer.yahoo.net/blog/archives/2007/09/high_performanc_12.html)

Le dveloppement dapplication ou de site web doit tre conduit en gardant toujours le facteur performance lesprit... Ceci est dautant plus vrai dans le monde mobile o les performances sont encore moindre que sur les ordinateurs de bureau !!! Pour le monde mobile, garder aussi lesprit que lutilisateur paye souvent en fonction de la quantit de donnes, minimiser le trafc revient faire faire des conomies lutilisateur tout en amliorant les performances...

847

Chapitre 23. SI010 - Interfaces Web enrichies Pour optimiser les performances, garder aussi lesprit les points suivants... - "Minify" javascript : ceci consiste compresser le code javascript (enlever les commentaires, les espaces inutiles, ...), on peut mme aller jusqu "offusquer" le code (recodage automatique) pour une meilleure optimisation (difcile dbugger...). - Concatener CSS : mieux vaut un gros chiers que plusieurs chiers dun point de vue utilisateur, tandis que dun point de vu dveloppeur mieux vaut privilgier plusieurs petits chiers pour faciliter la r-utilisabilit et loptimisation en fonction du contexte. Le mieux est de concatener les informations CSS en un seul chier... qui peut-tre "mini" aussi :) - Optimiser les images : optimiser taille et resolution des images pour garantir de meilleurs performances... - Penser mobile : pour le developpement mobile, prendre du recul par rapport au monde desktop et penser la cible, certaines fonctionilit "Bureau" ne sont pas adaptable/ncessaire au monde "mobile"... - Utiliser JSON/JSONP au lieu de XML : JSON est un format de donne plus lger compar au XML pour lchange dinformation client/serveur. La diffrence peut tre signicative dans un environement mobile..., cest donc loption privilgier dans cet environement... - Optimiser pour diffrente taille dcran : attention davoir des rsolutions, taille de police, etc... exible pour diffrente taille dcran... ne pas utiliser des positions absolues ou des tailles xes...

23.1.8. TP - AJAX
Source(s):

OF: SI010-ch03-tp_ajax.pdf (docs/eof/SI010-ch03-tp_ajax.pdf) Tutorial: SI010-ch03-tp_ajax.pdf (docs/eof/SI010-ch03-tp_ajax.pdf)

Tlcharger larchive .zip regroupant les scripts PHP du TP : TP SI010 AJAX (Archive .zip) (projets/si010ajax-v01.zip) Ou consulter les chiers sources en ligne : index.html (projets/si010ajax/index.html) (inclus le javascript) valider.php (projets/si010ajax/valider.phps)

848

Chapitre 23. SI010 - Interfaces Web enrichies Accessible aussi depuis la page Projets/TPs (projets/index.html). Pour la premiere partie du TP Ajax, dans le script php il faut faire un "echo" et non pas un "return" comme indiqu dans le cours... sinon la rponse HTTP reste vide :)) Dans le TP ajax deuxime partie, est-ce oblig de parser le resultat XML en Javascript en parcourant manuellement chaque noeud ? Ny a t-il pas moyen de transformer rapidement un document XML en un objet Javascript directement utilisable laide dune fonction de "parsing" existante ? Jai trouv ca par example :

Source: XML Parser (Transformer XML Docs en objet DOM) (http://www.w3schools.com/xml/xml_par if (window.DOMParser) { parser=new DOMParser(); xmlDoc=parser.parseFromString(text,"text/xml"); } else // Internet Explorer { xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); xmlDoc.async="false"; xmlDoc.loadXML(text); }

En fait on sapercevoit quil ne faut pas confondre parcours (objet DOM) et parsing (texte XML) ! En fait cest fait le parsing est automatiquement fait par lobjet XMLHttpRequest partir de la rponse recu :) [Lexample ci-dessus reste utile pour parser un text xml brut depuis une variable...] En effet "responseXML" est deja un objet javascript (XML Document) accessible via XML DOM syntaxe (comme indiqu dans le TP) comme dcrit ici : XML DOM (Parcourir dun Document XML) (http://www.w3schools.com/xml/xml_dom.asp) Le parours pour lafchage des infos reste donc obligatoire :) Au passage sur cette page informe aussi sur comment crer un objet XMLHttpRequest qui soit multi-plateforme (multi-navigateur) ... et ici aussi : http://www.tizag.com/ajaxTutorial/ajaxbrowsersupport.php

849

Chapitre 23. SI010 - Interfaces Web enrichies Sur ce dernier lien, le codeur utilise les instructions try...catch..., cest intressant...

23.1.9. Dbugger Javascript/AJAX - Conseil et retour dexprience


Source(s):

Web: How to print object attribute and values (http://www.highdots.com/forums/javascript/how-print-object-attributes-values-258641.html)

Pour vrier la rponse HTTP jai utilis la bibliothque libcurl via lapplication en ligne de commande curl (Voir section ddie cURL) :
$ sudo apt-get install curl $ curl http://votresite/valider.php?valeur=blabla&type=blabla (Remplacer blabla par des valeurs que le script peut comprendre et utiliser :) On obtient un contenu de rponse (ou non) en fonction de votre script.php :)

Pour voir len-tte HTTP de la rponse, on peut utiliser loption -i ou -I (si le parametre "lenght" est zero cest que votre script ne renvoie pas de contenu apres len-tte HTTP) cURL est un excellent remplacement Telnet pour ce type de test :) Par ailleurs, jai pass 2H a chercher pourquoi mon script javascript ne fonctionnait pas comme je voulais, en fait il cest avr que mon script externe netait pas inclut entierement (partiellement tronqu) lors de lexecution de la page html (je sais toujours pas pourquoi!). Du coup je nest pas utilis de chier externe (pourtant conseiller pour du xhtml) pour le javascript et tout mis dans un seul chier html. Pour debuger, il est conseill dutiliser des extensions Javascript trs pratique : - La console derreur (https://developer.mozilla.org/fr/Console_d%27erreurs) disponible dans le menu "Outils" de Firefox, elle permet de suivre le rapport des erreurs de lapplication chrome et des pages Web ouvertes par lutilisateur. - Le plugin Firebug (https://addons.mozilla.org/en-US/refox/addon/1843/), il ma permis de voir notamment que le javascript externe ntait pas charg correctement lors de lafchage de la page fentre Firebug de script restait vide.

850

Chapitre 23. SI010 - Interfaces Web enrichies - Tamper data (https://addons.mozilla.org/en-US/refox/addon/966/) (Recommand par Arnaud), cela permet de voir toute les requtes envoyes, et les modier la vole.
Note : Dans Firefox, il est aussi possible dutiliser la fonction console.debug(monmessage_ou_monobjet) qui permet dafcher des informations de dbugage dans une console (Firebug par exemple) :
console.debug("Ceci est un message pour la console"); console.debug(monObjet); // // // // //

Affiche le message dans la console... Affiche lobjet dans la console et rends son contenu DOM accessible Possible de parcourir lobjet... et de v o il se trouve dans le document

Voici les quelques recommandations pertinantes dArnaud :


Important : Le plus important en dveloppement, comme en rseau, et de bien dbugger les diffrentes couches au fur et mesure sous peine dtre perdu.

Ici on le comportement suivant :


Le En Le Le html sert saisir les informations. javascript on rcupre les informations et on les envoie au serveur (php) php calcul un rsultat et le renvoi retour est gr en javascript et il est intgr dans le hmtl.

On a donc 3 aspects :
Le formulaire HTML La gestion de connection en javascript Le calcul en php

Il faut donc essayer de vrier chacune de ces briques sparemment : Vrier le formulaire HTML :

Par example les boutons radio doivent avoir le mme noms ("name") sinon il devient possible cocher plusieurs ce qui est contraire la logique des boutons radio (utiliser "checkbox" da Un "name" unique mais des valeurs diffrentes (et un id diffrents pour les labels) :

851

Chapitre 23. SI010 - Interfaces Web enrichies

# INCORRECT <input type=text id=datas name=datas /> <input type=radio name=booleen id=booleen /> <input type=radio name=numeric id=numeric /> <input type=radio name=chaine id=chaine /> # CORRECT <input type=radio name=itype id=booleen value=bool/> <input type=radio name=itype id=numeric value=num/> <input type=radio name=itype id=chaine value=str/>

Sans a, le php est nettemment plus difcile raliser. Ensuite, en utilisant la mthode GET, il sera possible de dboggu sparemment le html, le JS et le PHP :
# Par exemple http://xxxx/monscript.php?itype=str&datas=toto

Vrier que le rsultat du script php est correct tout en faisant vari les valeurs de itype et datas. Pour le php, on peut rcuprer les valeurs trs simplement :
<?php $strToTest = $_GET[datas]; $strType = $_GET[itype]; echo "[+] data : ". $strToTest ." / ".$strToType; ?>

Cela va permettre de debugger tranquillement mon php jusqua ce quil fonctionne. Une fois que cest le cas, je passe au debug du formulaire. Puis crer un formulaire avec un appel classique :
<form action="monscript.php" method="get">

852

Chapitre 23. SI010 - Interfaces Web enrichies Et regarder si a fonctionne. Une fois que cest bon, passer lappel javascript. Dans un premier temps, faire un appel statique et rcuprer mon rsultat :
montruc.open("GET", "http://xxxx/monscript.php?itype=str&datas=toto", true);

On peut vrier que le rsultat est bien retourn avec un sniffer si ncessaire (wireshark) mais un alert en Javascript devrait largement sufre. Ensuite rcuprer les variables de mon formulaire et les passer en paramtre. Dans le javascript :
strToCall = "http://xxxx/monscript.php?itype="+strType+"&datas="+strToTest montruc.open("GET", strToCall, true);

Les variables doivent tre rcupres dans le formulaire :


strType = document.getElementByName(strType).value

Note : Dans le cas spcique des boutons radio, getElementsByName retourne un tableau de bouton radio mais pas la valeur que lon cherche directement, il faut donc cherch lequel est selectionn avec loption checked :
function getType(){ //pour chaque bouton radio dont le nom est itype : for ( var i=0 ; i < document.getElementsByName(itype).length ; i++ ){ //on regarde sil a le statut checked if (document.getElementsByName(itype)[i].checked){ //le "== True" est sous entendu dans le if //le checked est un attribut permettant de savoir sil est slectionn //si c est le cas on retourne la valeur du bouton slectionn //je me met un petit alert pour faciliter le debug ;) alert(document.getElementsByName(itype)[i].value); return document.getElementsByName(itype)[i].value; } } //Si jarrive ici, cest que mon return na pas t appel => //donc aucun bouton nest slectionn et donc message d erreur par exemple alert("Choix dun type obligatoire"); return -1

853

Chapitre 23. SI010 - Interfaces Web enrichies


} Pour faire une fonction plus gnrique, on peut lui passer le nom du bouton radio : function getRadBtnValue(strBtnName){ ... //on remplace tous les itype par strBtnName if (document.getElementsByName(strBtnName)[i].checked){ ... }

En utilisant du GET, le dbuggage est normment simpli. Cela permet de voir si lappel de lurl fonctionne correctement et si les valeurs passes sont les bonnes. Une fois que cela marche, on peut passer la mthode POST (http://www.openjs.com/articles/ajax_xmlhttp_using_post.php) (transfert des paramtres via len-tte HTTP), un peu plus complexe mettre en place.

23.1.10. Projet Ajax : Logiciel de Chat


Source(s):

OF: SI010-ch04-tp_ajax_avance.pdf (docs/eof/SI010-ch04-tp_ajax_avance.pdf) Web: TP mini Chat (Site su Zro) (http://www.siteduzero.com/tutoriel-3-14518-tp-un-mini-chat.html) Logiciel de chat simple (Php/Mysql) (http://www.phpcs.com/codes/LOGICIEL-CHAT-TRES-SIMPLE-PHP-MYSQL_39234.aspx) CHAT PHP/AJAX SIMPLE ET COMPACT (http://www.phpcs.com/codes/CHAT-PHP-AJAX-SIMPLE-COMPACT_45840.aspx)

Lobjectif est la ralisation dinterface enrichie... en crant un systme de Chat. Pour ce projet, je massocie avec Christelle. Premier jet de code recu de Christelle : ccn-v01-chat.tar.gz (projets/si010ajax/ccn-v01-chat.tar.gz) Accessible aussi depuis la page Projets/TPs (projets/index.html).

854

Chapitre 23. SI010 - Interfaces Web enrichies Jimporte sa structure de base de donnes sans souci. Chaque champs de table dans la colonne Colation indique latin1_swedish_ci je propose de remplacer par utf8_unicode_ci pour la suite... comme ca me parat plus standard et universelle... Dans un premier temps, on discute surtout sur la mthode de travaille... Je lui propose avant tout de chose dutiliser Git pour simpler la gestion et lchange des modications de code que lon est amen effectuer. Christelle nayant encore jamais utilis Git, je lui envoie un HOWTO dtaill pour lui permettre de tester et de crer son dpt public Git public HTTP sur Ferry partir duquel je pourrais rcuprer son code. Jai moi mme effectu les oprations dcritent et mis en place mon dpt Git public pour le projet Chat Ajax (http://ferry.eof.eu.org/~rlr/git/chat.git) pour que Christelle puisse rcuprer mes modications. Dans un deuxime temps, il parat important que lon se mette daccord un minimum sur le cahier des charges et lorganisation du code avant de coder... ceci facilitera le dvelopement et la collaboration autour du projet... On se met donc daccord sur les quelques modications suivantes en regard du premier jet de code :
- Pour tous les fichiers, ajout de commentaires pour faciliter laccs au code...

auth.html - Renomer en index.html ou davoir une page index.html qui serait la page dacceuil de lapplication - Bien indent le code pour le rendre lisible - Remplacer lutilisation de <span> par <legend> dans le "fieldset" car plus appropri pour les titres dencart - Pour le look and feel regrouper les attributs syle CSS dans une feuille de style, interne, ou eventuellement externe pour lutiliser pour la page chat.html aussi... afin dobtenir une homognit du layout... - Passer la partie "modifier" mon compte, sur la page chat.html, cela ne doit apparaitre que pour lutilisateur deja connecte (pour changer son nom_utilisateur par exam - mettre en place un verification du nom_utilisateur lors de la frappe via Ajax pour assurer un enregistrement unique - En option, vrifier lors du chargement de la page si lutilisateur est dj connect (session php?) via appel Ajax, puis rediriger automatiquement, lutilisateur vers chat.html si dj connect - Ceci supprimerais le besoin davoir la partie "Pas encore inscrit", qui nest pas forcment utile sur cette page - Lajout dun mot de passe nest peut-tre pas essentiel dans le cadre du TP, il ne semble dailleurs pas faire parti du cahier des charges. Lutilisateur arrive sur la page daccueil rentre un nom dutilisateur, le systeme confirme la validite du nom, et boom lutilisateur clique "connect", il est alors enregistr (ouverture de sesssion) et redirig vers chat.html

855

Chapitre 23. SI010 - Interfaces Web enrichies


chat.html - Bien indent le code pour le rendre lisible - Remplacer lutilisation de <span> par <legend> dans le fieldset car plus appropri pour les titres dencart - Regrouper les attributs de layout (css) dans un fichier externe (commun avec auth.html), cela permet aussi de simplifier le code HTML et donc de simplifier la maintenance. - Dplacer le div "message" lexterieur du formulaire ou dans un fieldset spcifique (avec un <legend>Liste des messages</legend>) et peut-tre renomer lst_message pour garder un certaine convention de nomage (toutes les variables javascrip/html/php qui correspondent la mme chose, devraient avoir le meme nom afin de faciliter la comprehension et la maintenance) - Remplacer le label "votre message" par "Editer un message puis envoyer..." - le texte area devrait tre de la meme largeur que le div de la liste de message et placer juste en dessous. - le texte area devrait etre de deux ligne max, ca suffit pour un chat. - Mettre les boutons verticalement sur la droite du champ texte avec effacer au dessus de envoyer avec "envoyer" en gras ? - sassurer aussi quen tapand "Enter" le bouton "Envoyer" est activ

Note : Dans lidal, le code javascript pour ces deux pages devrait tre externalis dans un chier .js Malheureusement sur ma plateforme web cela ne fonctionne pas donc jai propos de tout mettre dans les chiers html dans un premier temps. Ce qui est vraiment commun pourra etre externalis eventuellement.

Insert_tp_chat.php & list_message.php - Pour un si petit projet, il propos de regrouper les deux scriptz PHP en un seul "chat.php" - Ainsi pour diffrencier les actions on passerait un parametre "action" au script PHP pour lui dire ce quil doit faire et retourner... avec lutilisation dune structure "switch" dans le PHP cela ne devrait pas tre compliqu... - Les paramtres de configuration devraient tre externaliser dans un fichier externe config.php, qui est ensuite inclut dans chat.php, ceci facilite les tests sur nos deux plateforme diffrentes avec nos paramtres personnels - Toujours bien indent le code pour assurer une bonne visibilit - Utiliser des variables et toujours les initialiser

Bon maintenant le code proprement parler...


Avant de commencer coder et pour assurer un maintenance facile du code, rflchissons aux oprations que lon veut excuter (traduites sous forme de fonction) et aux information dont on a besoin en entre et sortie de ces fonctions... ce sera une bonne base partire de laquelle on pourra commencer coder :)

En partant du cahiers des charges on voit rapidement que lon a besoin de deux parametres principaux pour toutes les oprations: $user : utilistateur

856

Chapitre 23. SI010 - Interfaces Web enrichies


$message : le texte du message Eventuellement on peut construire une strcuture (objet ou nom) du genre : User - name - dernier_rafraichissement Message - lst_message - username

: nom utilisateur, alias/login de connection : timestamp

: texte (du/des messages) : nom de lutilisateur auquel lst_message appartient

A voir... Ce sont les donnes que lon manipulerait...

Ensuite on tablit une liste non exhaustive des oprations (des fonctions mettre en place) :

auth.html - function userCheck($username) { // Vrifie si le nom choisi par lutilisteur est disponible // Cette fonction est active des que le champ du formulaire est modifi (onChange event) } - function userConnect($user) { // Enregistre lutilistateur if(userRegister(){ // Redirige vers chat.html si succes redirectTo(chat.html); } } - redirectTo($page){...} // Redirige vers une autre page

- userRegister($user) { // Enregistre le nouvel utilisateur, retourne VRAI si succes addToUserTable($user) // Eventuellement ces deux fonctions peuvent etre // directement grer addToMessageTable($user) // en php plutot que en ajax }

chat.html - setInterval("refreshPage($user)", 5000);

// Rafraichir la page tous // les 5000ieme de seconde

- refreshPage($user){ // Proceder au rafraichissement de la page getMessages($user); // Obtenir les nouveaux message de lutilisateur // et rafraichir le div lst_message $lastRafraichissement = time(); deleteLstMessage($user, $lastRafraichissement) } - getMessages($user){...}Get les nouveaux message pour un utilistateur

857

Chapitre 23. SI010 - Interfaces Web enrichies


- setMessages($msg, $user) {...} Set les nouveaux message pour un utilisateur - sendMessage($msg, $senderUser) { $msg = <br /> + $senderUser + " : " + $msg; foreach($connectedUsers as $user){ $oldMsg = getMessages($user) $newMsg = $oldMsg + $msg; setMessage($newMsg, $user) } } - disconnectUser(){...} deconnect utilisateur connect (efface la session PHP)

Aprs il y la gestion des utlisateurs (optionnel) : - Mise jour affichage - Mise jour Profile utilisateur (changer lallias...)

chat.php - Pratiquement toutes les fonctions javascript devrait avoir leur pendant en PHP, de cette facon la fonction javascipt ne fait que appeler le script chat.php via la methode GET en precisant les paramtres ncessaires au script PHP : action = (action a operer, une fonction PHP pour chacune des actions) user = (user on which action is operated) msg = (text of the message necessaire laction, le message envoy)

Voila, ceci constitue un brouillon de dpart... Aprs il faudra :


- bien vrifier chaque scnario que lon aura pour que lapplication fonctionne et voir quelles fonctions sont activs et les messages renvoyer par le script PHP. - discute de ce que renvoie chaque fonction et le script PHP pour grer aussi les erreurs possibles...

Lide un fois encore cest de bien sparer toutes les oprations dont on a besoin en fonction puis decrire chacune dentre elle une a une... Deuxime jet de code : ccn-v02-chat.tar.gz (projets/si010ajax/ccn-v02-chat.tar.gz) en attendant lutilisation de Git... Accessible aussi depuis la page Projets/TPs (projets/index.html).

858

Chapitre 23. SI010 - Interfaces Web enrichies Autre proposition en discussion propos de rgle de codage pour le script PHP :
Il est propos de diviser le script chat.php en sections de la facon suivante : // Description (script, date creation, auteur, license) // Includes (liste des fichiers inclus donc config.php) // Functions (dclaration et definition de toute les fonctions, eventuellement cette partie peut-tre externaliser dans un autre fichier functions.php) // Variables (dfinition et initialisation de toutes les variables utilis par le script) // Initialisation (toute les actions dinitialisation: recuperation des variables GET par exemple, etc...) // Main (partie principale du script, ou les fonctions seront appels) (...) switch($action){ case "operation01" : $result = function01(); break; case "operation02" : $result = function02(); break; (...) case "default" : $result = "error"; } (...) return $result;

859

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)


24.1. Prsentation
Source(s):

OF: Prsentation de la squence (docs/eof/SI016-ch00-Presentation_de_la_sequence.pdf) Prsentation des languages (docs/eof/SI016-ch01-presentation_langages.pdf)

Tableau 24-1. Language de script . Site ofciel Perl www.perl.org (http://www.perl.org) perl6.org (perl6.org/) Python http://www.python.org Bien quune version 3 de Python soit sortie (appele Python 3000), le travail sera fait avec la version 2. En effet la plupart des bibliothques de Python nont pas encore t adaptes pour cette nouvelle version. PHP PHP (http://php.net)

860

Chapitre 24. Initiation au langage de script (PHP, Python, Perl) . Dnition Perl
... langage de programmation cr par Larry Wall en 1987 et reprenant des fonctionnalits du langage C et des langages de scripts sed, awk et shell (sh). Cest un langage interprt, polyvalent, et particulirement adapt au traitement et la manipulation de chiers texte, notamment du fait de lintgration des expressions rgulires dans la syntaxe mme du langage... ...optimis pour lextraction dinformations de chiers textes et la gnration de rapports...

Python Cr en 1989 par Guido van Rossum, ce langage trouve lorigine de son nom dans la srie tlvise humoristique des Monty Python. Python est un langage de programmation interprt multi-paradigme. Il favorise la programmation imprative structure, et oriente objet. Il est dot dun typage dynamique fort, dune gestion automatique de la mmoire par ramasse-miettes et dun systme de gestion dexceptions ; il est ainsi similaire Perl, Ruby, Scheme, Smalltalk et Tcl.

PHP PHP signie : Hypertext Preprocessor. Ce langage a t cr en 1994 par Rasmus Lerdorf. Il est lorigine issue de librairies pearl, puis implment en C. PHP est un langage de script qui est principalement utilis pour tre excut par un serveur HTTP, mais il peut fonctionner comme nimporte quel langage interprt en utilisant les scripts et son interprteur sur un ordinateur.

Source(s): http://fr.wikipedia.org/wiki/PHP_Hypertex

Une syntaxe simple, des types de donnes de haut niveau et des fr.wikipedia.org/wiki/Perl_(langage) bibliothques extensives rendent ce langage trs attractif pour le dveloppement rapide dapplications, comme langage dextension dapplications, pour le dveloppement de scripts, ou encore comme interface permettant de connecter des composants existants. Il est utilis pour programmer le serveur dapplication Zope. Il est apprci par les pdagogues qui y trouvent un langage o la syntaxe, clairement spare des mcanismes de bas

861

Chapitre 24. Initiation au langage de script (PHP, Python, Perl) . Modles de programmation Caracteristiques Perl Python PHP

Procdurale, Procdurale, Procdurale, fonctionnelle et oriente fonctionnelle et oriente fonctionnelle et oriente objet. objet. objet.

www.python.org/about Introduction to PHP www.perl.org/about.html (http://www.python.org/about) (http://fr3.php.net/manual/fr/introduction.p (http://www.perl.org/about.html) Python est un langage JDN: Interview de programmation Rasmus Lerdorf, gnraliste et de haut inventeur du PHP niveau. Entre autres de (http://www.journaldunet.com/developpeur ses caractristiques :
Python Python Python Python Python

est un langage interprt (il ne ncessi est libre et sa licence est compatible avec est portable, il existe sous diffrentes pl est orient objet ce qui donne un code s comes with batteries included , en clair

Documentation

Stable: 5.12 ... (http://perldoc.perl.org/index.html) (2010-04), 5.10 (http://perldoc.perl.org/index.html) (2007-12), delta (http://search.cpan.org/dist/perl5.12.0/pod/perl5120delta.pod) Unstable: 5.11 En developement: 6 (http://perlcabal.org/syn/) PHP5 cheatsheet online (http://www.serversidemagazine.com/cheatsheets/PHP5/)

Docs PHP (version 4 et 5) (http://php.net/docs.php) Manuel PHP (version 4 et 5) (http://php.net/manual/fr/index.php)

862

Chapitre 24. Initiation au langage de script (PHP, Python, Perl) . Ressources & Communaut Perl Python PHP

Comprehensive Perl Association www.zend.com Archive Network Francophone Python (http://www.zend.com) (CPAN) (http://www.afpy.org) (Coeur PHP) (http://www.cpan.org) VPython (3D www.nexen.net The Perl Foundation Programming for (http://www.nexen.net) (http://www.perlfoundation.org) Ordinary Mortals) (http://vpython.org) http://www.phpdebutant.org Les Mongueurs de Perl (http://www.phpdebutant.org/article118.ph (http://www.mongueurs.net) of-SI016-ch09presentation_python_u8.pdf http://php.developpez.com/cours/ (docs/eof/SI016-ch09presentation_python_u8.pdf) Listes de diffusion (http ://www.php.net/support.php) MIT Courses : Introduction to Liens PHP (http Computer Science and ://www.php.net/links.php) Programming (+Vidos) (http://ocw.mit.edu/courses/electricalengineering-andcomputer-science/6-00introduction-tocomputer-science-andprogramming-fall2008) Apprendre programmer avec Python (http://inforef.be/swi/download/apprendre_python.pdf) Python 3 (http://inforef.be/swi/download/apprendre_python3.pdf) (Grard Swinnen) Initiation Python 3 (Bob Cordeau) (http://www.afpy.org/Members/bcordeau/Python3v11.pdf/download) Full Circle - Ubuntu Community Magasine (Num: 26 to 37) (http://fullcirclemagazine.org/downloadsnew/) The Python Package Index (recense des milliers de modules et de packages !) (pypi.python.org/pypi)

863

Dive into python (http://diveintopython.adrahon.org/toc/index.html)

Chapitre 24. Initiation au langage de script (PHP, Python, Perl) . Devise(s) Perl Il y a plus dune faon de le faire [There Is More Than One Way To Do It (TIMTOWTDI)]; la trononneuse suisse des langages de programmation; lassistant idal des administrateurs de systme. Python PHP

Sa philosophie de ... dveloppementmet met laccent sur la lisibilit du code. Il ne devrait subsister quune seule mthode, qui soit la fois optimale et naturelle pour chaque chose.

24.2. Dvelopement Modulaire (OO, Framework, MVC, etc...)


Source(s):

Tutorial: Implmenter un modle MVC (simple) en php (http://julien-pauli.developpez.com/tutoriels/php/mvc-controleur/)

Comment exploiter la programation objet pour crer des applications modulaires, comment organiser le code au mieux...? Pour aller encore plus loin dans la modularit des applications lutilisation de frameworks est intressante. Les frameworks sortent du cadre du cours car il faudrait une squence par framework, et encore ... Zend Framework et Symfony sont deux frameworks PHP trs intressants mais il en existe beaucoup dautres comme Cake PHP ... Les frameworks simposent aujourdhui comme des bases pour le dveloppement dapplications "complexes". Il y a quand mme quelques concepts quil est intressant de connaitre pour bien dcouper son application/comprendre le fonctionnement des framework (ils simposent comme des "standard" notamment dans les diffrents framworks de dernire gnration) :

- Le modle MVC (Modle Vue Contrleur) (http://fr.wikipedia.org/wiki/Mod%C3%A8le-Vue-Contr%

- ORM (mapping objet relationnel) (http://fr.wikipedia.org/wiki/Mapping_objet-relationnel) :

864

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)

Ces concepts et les architectures/dcoupages qui en dcoulent sont trop lourd pour la partie qui nous intresse dans SI.

24.3. PHP
24.3.1. Premier Pas...
Source(s):

OF: SI016-ch02-premiers_pas_php.pdf (docs/eof/SI016-ch02-premiers_pas_php.pdf)

Pour linsatallation et le conguration de PHP, se rfrer la section SR009 - PHP installation et conguration.

24.3.2. Installation dApache, PHP et MySQL sous Linux (LAMP)


Pour linsatallation et le conguration de PHP, se rfrer la section SR009 - PHP installation et conguration.

24.3.3. VirtualHost ddi :)


Pour travailler sur le projet PHP et tester le language, je cre un site web ddi (VirtualHost) dans la machine virtuelle (contenant la conguration LAMP) en le rendant accessible depuis lhte Ubuntu :
# Configuration VirtualBox depuis lhte 0. 1. 2. 3. 4. 5. 6. Sassurer que la VM est teinte Executer "VirtualBox" Selection la VM Aller dans "Preference > Rseau" Configurer le mode accs rseau "Accs par pont" Valider Dmarrer la VM

# Dans la machine virtuelle (VM) dmarre

865

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)


# Crer le fichier /etc/apache2/site-enabled/si016php.eof contenant <VirtualHost *:80> ServerName si016php.eof ServerAlias si016php DocumentRoot /mnt/hsubuntu/monjournal/source/projets/si016php </VirtualHost> # Re-dmarrer Apache pour prendre en compte le changement de configuration $ apache2ctl restart # Mettre a jour le fichier /etc/hosts pour tester en local :) ... 127.0.0.0 si016php.eof si016php ... # Ajouter un index.html dans la racine du site (DocumentRoot) Bienvenu sur si016 ! # Tester accs au site depuis le navigateur http://si016php.eof (ou http://si016) # Obetenir lIP de la VM $ /sbin/ifconfig ... 192.168.1.102 ...

# Dans lhte Ubuntu # Mettre a jour le fichier /etc/hosts # en utilisant ladresse IP de la VM ... 192.168.1.102 si016php.eof si016php ... # Tester accs au site depuis le navigateur http://si016php.eof (ou http://si016)

24.3.4. TP Hello World


[Web] Cration dun example :
# index.php <html> <head> <title>si016php - Hello world!</title> </head> <body> <?php echo "Bienvenu au monde !<br />"; # Affiche un message dacceuil :)

866

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)


print_r ($_ENV); phpinfo(); ?> </body> </html> # Affiche les infos denvironement # Affiche la configuration PHP

Note : $_ENV est une variable prdnie conteanant les informations sur lenvironement dexecution. Cest un variable globale accessible depuis tout script. Lors de lexecution du script php dans une page web, elle contient les informations sur lenvironement dxecution Apache.

867

Chapitre 24. Initiation au langage de script (PHP, Python, Perl) Figure 24-1. SI016 PHP : Hello world!

[CLI] Test(s) via la ligne de commande :


$ php -r "print_r (get_defined_constants());" Array ( [E_ERROR] => 1 [E_RECOVERABLE_ERROR] => 4096

868

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)


[E_WARNING] => 2 [E_PARSE] => 4 [E_NOTICE] => 8 [E_STRICT] => 2048 ... $ php -r print_r($_ENV); Array ( [GPG_AGENT_INFO] => /tmp/seahorse-stZiks/S.gpg-agent:2458:1 [SHELL] => /bin/bash [DESKTOP_STARTUP_ID] => [TERM] => xterm ... # -r code : option qui permet dexecuter du code PHP sans les tags <?..?>

Note : Lors de lexecution dun script php dans un terminal, $_ENV contient les informations sur lenvironement dxecution du terminal lui mme. Le contenue de la variable globale $_ENV change donc en fonction de lenvironement dexecution.

$ cp index.php /home/filostene/tmp # copie dans mon repertoire home $ cd /home/filostene/tmp/ $ chmod +x index.php # rend le script executable $ ./index.php ./index.php: line 1: syntax error near unexpected token newline ./index.php: line 1: <html>

a marche pas ! Normal jai pas mis le chabang dans le script :


$ nano index.php #!/usr/bin/php ...

Deuxime ssai :
$ ./index.php <html> <head> <title>si016php - Hello world!</title> </head> <body> Bienvenu au monde !<br />Array ( [GPG_AGENT_INFO] => /tmp/seahorse-stZiks/S.gpg-agent:2458:1 [SHELL] => /bin/bash [DESKTOP_STARTUP_ID] => [TERM] => xterm

869

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)


[GTK_RC_FILES] => /etc/gtk/gtkrc:/home/filostene/.gtkrc-1.2-gnome2 [WINDOWID] => 44084068 ... ) phpinfo() PHP Version => 5.2.6-1+lenny8 System => Linux debstafil4 2.6.26-2-686 #1 SMP Tue Mar 9 17:35:51 UTC 2010 i686 Build Date => Mar 14 2010 08:09:23 Server API => Command Line Interface Virtual Directory Support => disabled Configuration File (php.ini) Path => /etc/php5/cli Loaded Configuration File => /etc/php5/cli/php.ini ... PHP License This program is free software; ... ... </body> </html> #==> OK :)

[CGI] Testons notre premier script CGI :


Note :

Il y a deux diffrences principales entre un programme "rguli" et un programme "CGI" :

Premirement, tout les sorties dun program CGI doivent tre prcdes par une en-tte MIME-type (http://www.iana.org/assignments/media-types/). Ceci est une en-tte HTTP qui indique au client quel sorte de contenu il reoit (an de pouvoir le traiter). La plupart du temps ce sera:
Content-type: text/html

Deuximement: la sortie doit tre en HTML ou tout autre format quun navigateur web est capable dafcher. HTML la plupart du temps, occasionellement vous pouvez crire des programme CGI qui afche une image gif image, ou tout autre contenu non HTML. Appart ces deux points, crire un programme CGI ressemble lcriture de tout autre programme (script). http://httpd.apache.org/docs/2.2/howto/cgi.html#writing

870

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)


# Configuration change on the VM $ nano /etc/apache2/sites-enabled/si016php.eof ... ScriptAlias /cgi-bin/ /mnt/hsubuntu/monjournal/source/projets/si016php/cgi-bin/ </VirtualHost> # Re-dmarrer Apache pour prendre en compte le changement de configuration $ apache2ctl restart # Cration du dossier pour les CGI $ mkdir /mnt/hsubuntu/monjournal/source/projets/si016php/cgi-bin/

# Copie et transformation de mon script .php en CGI $ cp /home/filostene/tmp/index.php /mnt/hsubuntu/monjournal/source/projets/si016php/cgi-bin/ $ nano /mnt/hsubuntu/monjournal/source/projets/si016php/cgi-bin/index.php ... <?php header("Content-type: text/html"); # Si omis, une erreur serveur 500 saffiche !!! ?> <html> ... # Test http://si016php/cgi-bin/index.php

a marche pas !
Erreur reporte: [Tue Apr 20 ...][error] [...] malformed header from script. Bad header=<html>: index.php [Tue Apr 20 ...][error] [...] malformed header from script. Bad header=<html>: index.cgi

Jobtient toujours un serveur erreur 500 du au fait que lentte HTTP nest pas correctement crite dans le chier retourn, en effet la partie de code php correspondante nest pas interprt, la premiere chose qui sort cest le tag <html> (mauvaise en-tte HTTP, tout simplement absente).
Jai tent : de de de de

mettre le cgi dans /var/www/cgi-bin (mais pas configur dans Apache en fait!) mettre le cgi dans /usr/lib/cgi-bin (qui est correctement accessible via localhost/cgirenomer index.php en .cgi modifier la configuration dApache

mais sans succs :(

Suite mes recherche infructueuse sur Internet, nalement la solution sest simple (merci pour laide obtenu sur la liste eof-si1 et la bonne suggestion obtenue) :
## Sous Debian Lenny $ apt-get install php5-cgi $ nano ./cgi-bin/index.php

# Pas install par dfaut... # Editer le script cgi

871

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)

## Remplacer #!/usr/bin/php ... ## par #!/usr/bin/php-cgi ... # Puis tester : http://si016php/cgi-bin/index.php # pointe vers php5-cgi :)

OK a marche, cette fois :)))

872

Chapitre 24. Initiation au langage de script (PHP, Python, Perl) Figure 24-2. SI016 PHP : Hello world! [CGI]

873

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)

24.3.5. Calculatrice PHP


Programme calculatrice en PHP prenant 3 arguments (ou plus) :
- une valeur - un oprateur (+ - / %) - une valeur et calculer le rsultat de lopration.

Note : Pour rcuprer un argument pass en ligne de commande, vous devrez utiliser les variables argc et argv qui contiennent respectivement le nombre darguments passs et un tableau de valeurs des arguments rcuprs.

Grez ensuite le cas de n arguments avec une suite valeur, oprateur, valeur de telle manire que votre calculatrice puisse vous grer plusieurs oprations la fois. Par exemple quil puisse calculer le rsultat de : 3 + 3 / 2. Resultat calculer.php (projets/si016php/calculer.phps) :
## Usage $ php calculer.php $ php calculer.php --help # Alternative $ php calculer.php -h # Alternative $ php calculer.php -? # Alternative -----------no arguments submitted ----HELP---Calculate sum, substraction, multiplication and division of numbers Command ligne requiert options Utilisation : php calculer.php <num> <operand> <num> [<num> <operand> <num> ...] <num> is a number of choice <operand> is to choose among +,-,*,/,x OR php calculer.php <options> <options> --help, -help, -h, or -?, you would get you to this help ## Tests $ php calculer.php 1 + 2

874

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)


Running... 1 + 2 = 3 $ php calculer.php 1 + 2 \* 3 $ php calculer.php 1 + 2 x 3 Running... 1 + 2 x 3 = 7 $ php calculer.php 8 / 2 + 1 Running... 8 / 2 + 1 = 5

# Alternative

Tlcharger larchive .zip regroupant tous les scripts PHP du module : Projet SI016 PHP (Archive .zip) (projets/si016php-v01.zip) Accessible aussi depuis la page Projets/TPs (projets/index.html).

24.3.6. Exponentielle dun entier


Calculer la valeur exponentielle dun entier. En cours...

24.3.7. Tester le type darguments


Crer un script vous permettant de tester le type (numrique, chane, boolen) darguments passs en paramtre. En cours...

24.3.8. Le language PHP - Manuel de Rfrence


Source(s):

OF: SI016-ch04-references_langage.pdf (docs/eof/SI016-ch04-references_langage.pdf)

875

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)

Linarisation: Function de linarisation (serialize/unserialize) (http://php.net/manual/fr/function.serialize.php) Linarisation dobjets (http://www.php.net/manual/fr/language.oop5.serialization.php) Constructeur/Deconstructeur: __construct/__destruct (http://www.php.net/manual/fr/language.oop5.decon.php)

Voir aussi la liste des ressources disponible dans la section Prsentation. Linarisation (serialize/unserialize) : processus permetant denregistrer un objet en mmoire vers un chier pour le sauvegarder, stocker une chaine qui contient : les attributs, le nom de la classe... Du coup, a offre pas mal de possibilit de stockage : sessions, bdd... Certains scripts utilisent mme des objets lineariss en constantes ( ne pas faire daprs Olivier). Prennons un exemple :
## serialize.php <?php class Animal { protected $nom; protected $espece; public function __construct($vars) { $this->nom = $vars["nom"]; $this->espece = $vars["espece"]; } } $milou = new Animal(array( # Cration de lobjet "nom" => "Milou", "espece"=> "Canine", ) ); var_dump($milou); # Affichage de lobjet var_dump(serialize($milou)); # Affichage de lobjet srialis ?>

876

Chapitre 24. Initiation au langage de script (PHP, Python, Perl) Figure 24-3. SI016 PHP : Linarisation

Constructeur/destructeur : sont de methodes (fonction __construct() et __destruct) qui sont appels lors de linstanciation (cration) dun objet et lors de la descrtuction de linstance dobjet. Cela permet de dclencher automatiquement des actions (initialisation/sauvegarde) lors de la cration/destruction de lobjet.
- Le constructeur (mthode __construct()) est lors de la cration de lobjet pour initialiser les proprits de lobjet par example - Le destructeur (mthode __destruct()) est appel avant de dtruire un objet pour linariser et sauvegarder lobjet avant de le dtruire par exemple

Note : cest 2 mthodes sont disponibles mais quil nest pas ncessaire de les implmenter dans chaque classe.

Note : Dtruire "physiquement" une instance dobjet : via un unset ou toute autre action. Il est sous entendu que chaque arrt de script execute galement la mthode desctructeur de tous tes objets instancis (lors dun exit, ou en n de page).

Pour les cas dutilisation, cest assez divers :

877

Chapitre 24. Initiation au langage de script (PHP, Python, Perl) Olivier sen sert pour des messages (log) et la gestion de persistance (sauvegarde). Quand un objet ne sert plus il est prfrable de le dtruire. A la destruction dun objet comme une classe de gestion de bdd, on peut avoir besoin dtre certain que des oprations sont effectus (comme la fermeture de cette connexion).
# QUICK Rfrence # PHP - un language serveur ## Execution de script ### Balises <?php ... ?> <? ... ?> <% ... %> <script language="php"> ... </script> ### Execution dune page web en 4 tapes : - Le client demande lurl - Le serveur lit et interprete le code - Le HTML gnr est envoy au client - Le HTML es interprt et affich par le navigateur ### Attention (Environement, configuration) - la disponibilit et les versions des bibliothques - la configuration dapache et de PHP - la systme dexploitation (mme si PHP fonctionne sur la majorit des OS, il y a souvent quelques diffrences) ### Vrifier - fonction phpinfo() - conformit de la machine de dveloppement et de production.

Note : Une variable scalaire est une variable qui naccepte quun seul TYPE de donnes (string, boolean, integer, oat, etc...)

Note : Les pseudos types sont indroduit pour des raisons de lisibilit...

# -

VARIABLES reprsentes par un signe dollar "$" suivi du nom de la variable nom est sensible la casse Espace de nommage : [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]* 0x7f-0xff sont les octets de 127 255

## Dclaration des variables $i, $asterix, $a, $A

# Quatres variables distinctes :)

878

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)


$this ## Variables dynamiques $a=hello; $$a="tout le monde"; # est une variable spciale, qui ne peut pas tre assigne.

# affectation dun variable classique # dclarer une variable $bonjour avec pour valeur hello

## Assignation par Rfrence $a = &$b; # $a et $b pointent sur le mme contenu # Changer $a change $b aussi et inversement ## Porte des variables (dpend du contexte dans lequel elle est dfinie)

- locale : Toute variable utilise dans une fonction est par dfinition, locale - globale : Une variable dfinie la racine du script sera elle globale. Dans une fonction le mot cl global ou le tableau superglobal $GLOBALS pour lut - static : Une variable statique a une porte locale uniquement, mais elle ne perd pas sa v lorsque le script appelle la fonction. Variable initialise uniquement lors du p appel la fonction. ## Function communes sur les variables : isset($myvar); # vrifier si une variable a dj t dclare empty($myvar); # Dtermine si une variable est considre comme vide. # Retourne TRUE pour: "", 0, "0", NULL, FALSE, array(), var $var unset($myvar); # Dtruit une variable gettype($myvar); # Retourne le type de la variable : "boolean", "integer", "double", "string", "array", "object", "resource", "NULL", "unknown type" settype($var, $type) # Affecte un type $type une variable echo ($myvar); print_r($myvar); var_dump($myvar); var_export($myvar); # Afficher le contenu dune variable scalaire # Affiche des informations lisibles pour une variable # retourne les informations structures dune variable, y compris son type et sa valeur. # Retourne le code PHP utilis pour gnrer une variable

# TYPE de DONNEES ## PHP supporte 8 types basiques (http://fr2.php.net/manual/fr/language.types.intro.php) ### Type scalaire > boolen (boolean, bool) $mybool = true; # Dclaration & Affectation : true, false, TRUE, FALSE # Tout ce qui est diffrent de zro est vrai (TRUE) $mybool = (bool) $myvar; # Conversion de type: modifier $myvar en boolean $mybool = (boolean) $myvar; # Alternative #### Fonctions boolean : is_bool($myvar); ### Type $myint = $myint = $myint =

# vrifier si une variable est de type boolen

scalaire > entier (integer, int) 25; # Dclaration & Affectation (int) $myvar; # Conversion de type: modifier $myvar en integer (integer) $myvar; # Alternative

#### Fonctions integer :

879

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)


is_numeric($myvar); # vrifier si une variable est de type numrique

### Type scalaire > nombre virgule flottante, i.e double (float) $mydouble = 8.25; # Dclaration & Affectation $mynum = (float) $myvar; # Conversion de type: modifier $myvar en float $mynum = (double) $myvar; # Alternative $mynum = (real) $myvar; # Alternative #### Fonction float is_numeric($myvar);

# vrifier si une variable est de type numrique

### Type scalaire > chane de caractre (string) $mystr = "Bonjour"; # Dclaration & Affectation $mystr = (string) $myvar; $binary = (binary) $string; $binary = b"binary string"; $mystr = strval($myval); $b="$a tout le monde"; $c=$a tout le monde; # # # # Conversion de type: modifier $myvar en string Conversion de type: modifier $myvar en string Conversion de type: modifier $myvar en string Rcupre la valeur dune variable, au format chane

# Variable $a interprte # Variable $a non interprte

#### Fonction string : is_string($myvar); # vrifier si une variable est de type chane de caractre ### Type spcial > null $myvar = NULL; $myvar = (unset) $myvar; #### Function NULL: is_null($myvar); ### ### ### ### ###

# Dclaration & Affectation # Conversion de type: modifier $myvar en NULL

# Indique si la variable donne vaut NULL.

Type spcial > ressource Pseudo-types > mixed Pseudo-types > number Pseudo-types > callback Pseudo-variable > $....

### Type compos > tableau (array) $mytab = array ("Bonjour", 25, fruit => "pomme"); # Dclaration & Affectation $mytab = (array) $myvar; # Conversion de type: modifier $myvar en array #### Fonction array : is_array($myvar); # vrifier si une variable est de type tableau

### Type compos > objet (object) - Un object est definit par sa classe - Une classe est une collection de variables et de fonctions qui fonctionnent avec ces varia - On dclare une classe par le mot cl class. - Le constucteur dune classe est une mthode du mme nom que la classe. - On cre un object (cest dire une instance de classe) avec le mot cl new.

880

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)

#### Dfinition de Class dobjet class SampleClass {...} # general abstract class SampleClass {...} # abstract : Il nest pas autoris de crer une instance # dune classe dfinie comme abstraite. Toutes les classes # contenant au moins une mthode abstraite doivent galemen # tre abstraites. # Lors de lhritage depuis une classe abstraite, toutes le # mthodes marques comme abstraites dans la dclaration de # classe parent doivent tre dfinies par lenfant ; final class SampleClass {...} # final : la classe ne pourra pas tre tendue #### Dclaration des membres de Class - static # dclarer des prorits ou des mthodes comme statiques permet # dy accder sans avoir besoin dinstancier la classe. - final # empche les classes filles de surcharger une mthode class SampleClass { public static $class_propery = "foo"; public static class_method() { //code here } } class SampleClass { final public class_method() { //code here } } #### Visibilit proprit/mthode dobjet - public # Les lments dclars publics (public) peuvent tre utiliss # par nimporte quelle partie du programme. - protected # Laccs aux lments protgs (protected) est limit aux classes et # parents hrits (et la classe qui a dfini llment). - private # Laccs aux lments privs (private) est uniquement rserv # la classe qui les a dfinis. class SampleClass { public $class_propery = "foo"; public class_method() { //code here } } class SampleClass { private $class_propery = "foo"; private class_method() { //code here } } class SampleClass { protected $class_propery = "foo";

881

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)


protected class_method() { //code here } }

#### Exemple Dclaration dune classe #### Fichier test.php class Test { var $a=; # dclaration de lattribut a function Test(){ # dclaration du constructeur (initialisation) $this->a=Bonjour!; } function print(){ #dclaration de la mthode print echo $this->a; } } #### Utilisation de class #### Fichier script.php include_once(test.php); $montest = new Test(); # Cration dune instance de lobjet Test $montest->print(); # Appel la mthode Print et affiche a echo $montest->a; # Accs lattribut a dans le corps dun script

#### Function object : $myobj = (object) $myvar; is_object($myvar);

# Conversion de type: modifier $myvar en object # vrifier si une variable est de type objet

#### Mthodes magiques > Constructeurs et destructeurs __construct # Syntaxe dun constructeur en PHP5 # cherchera une fonction constructeur reprsente par le nom de la classe (compatibilit PHP4). __destruct # La syntaxe dun destructeur en PHP5 # Nexiste pas dans les versions prcdentes # Mthode appele durant larrt du script # (en-ttes HTTP ont dj t envoyes)

#### Mthodes magiques > Autres __sleep # fonctions magiques fonctionnent avec les fonctions serialize __wakeup # et unserialize et permettent deffectuer des oprations sur # lobjet son "couch" ou son "rveil".

En plus des mthodes __sleep et __wakeup (PHP4), PHP5 implmente de nouvelles mthodes : __get() Cette mthode est execut lorsquon accde directement un attibut priv, protg ou inex exemple : echo $MonObjetc->monAttribut ;). Elle reoit le nom de lattribut dont on cherch __set() Cette mthode est execut lorsquon affecte directement un attibut priv, protg ou inexi exemple : $MonObjetc->monAttribut=3 ;). Elle reoit le nom de lattribut, et la valeur ds __call()

882

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)

Cette mthode est execut lorsquon appel un mthode priv, protg ou inexistant (par exe $MonObjetc->monAttribut=3 ;). Elle reoit en argument le nom de la mthode et un tableau d ments donns la mthode. __isset() Cette mthode est utilis lorsquon teste lexistance dun attibut (isset($MonObjetc->monA __unset() Cette mthode est utilis lorsquon essaye de supprimer un attibut (unset($MonObjetc->monA __toString La mthode __toString dtermine comment la classe doit ragir lorsquelle est convertie en chane de caractres. __clone() La mthode __clone est appel lors du clonage de lobjet via le mot clef clone. (exemple : $copie_d_objet = clone $objet;)

#### Comparer des objets ( == et ===) En PHP5 if ($obj1 == $obj2) {...} # == les objets sont gaux sils ont les mmes attributs et valeu # et quils sont des instances de la mme classe. if ($obj1 === $obj2) {...} # === les objets sont identiques uniquement sils font rfrence # la mme instance de la mme classe. En PHP4, deux instances sont gales si elles : - ont les mmes attributs et valeurs, - sont de la mme classe. if ($obj1 == $obj2) {...}

#### Hritage et Surcharge include_once(test.php); class TestNew extends Test { # Hritage var $b=; # dclaration de lattribut b, function TestNew(){ $this->a=Bonjour a; # a existe de par la classe parente $this->b=Bonjour b; } function print(){ parent::print(); # surcharge de la mthode Print echo $this->b; } } #### Utilisation de lhritage include_once(testnew.php); $montest2 = new TestNew(); # Cration dune instance de lobjet Test $montest2->print(); # Appel la mthode Print et affiche a ET b echo $montest2->a; # Accs lattribut a dans le corps dun script echo $montest2->b; # Accs lattribut a dans le corps dun script

#### Oprateur de contexte de classe (::) - Utiliser des mthodes de classes qui nont pas encore dobjets crs

883

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)


class A { function example() { echo "fonction originale A::example()."; } } class B extends A { function example() { echo "fonction redfinie B::example()."; A::example(); } } A::example(); $b = new B; $b->example(); # Pas dobjets de classe A. # Cration dun objet de la classe B # Affiche resultat de methode de classe A et B

#### Chargement automatique de class __autoload() appele automatiquement si une classe nest pas encore dfinie au moment de son utilisation. <?php function __autoload( $class_name) { require_once $class_name . .php; } $obj = new MaClasse1(); $obj2 = new MaClasse2(); >>

#### Les Interfaces dobjet - Les interfaces spcifient un squelette dobjet (quelles mthodes et variables une classe doit implmenter). <?php // Declaration de linterface iTemplate interface iTemplate { public function setVariable($name, $var); public function getHtml($template); } // Implmentation de linterface // Ceci va fonctionner class Template implements iTemplate { private $vars = array(); public function setVariable($name, $var) { $this->vars[$name] = $var; } public function getHtml($template) {

884

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)


foreach($this->vars as $name => $value) { $template = str_replace({ . $name . }, $value, $template); } return $template; } } ?>

##### Masques > Usine (Factory) Les masques sont un moyen de dcrire les meilleures pratiques et les bonnes conceptions. Ils proposent une solution flexible aux problmes habituels de programmation. - Une usine permet la fabrication dobjet et de conditionner la cration de celui ci. <?php class Exemple { // La mthode de paramtre dusine public static function factory($type) { if (include_once Drivers/ . $type . .php) { $classname = Driver_ . $type; return new $classname; } else { return false; } } } ?> On pourra ainsi charger un les elements propres lobjet. <?php // Chargement du driver MySQL $mysql = Exemple::factory(MySQL); // Chargement du driver LDAP $sqlite = Example::factory(LDAP); ?>

##### Masques > Usine (Singleton) Les masques sont un moyen de dcrire les meilleures pratiques et les bonnes conceptions. Ils proposent une solution flexible aux problmes habituels de programmation.

- Un singleton est utilis quand on a besoin quil ny ait quune instance unique de la clas (comme une connexion une base de donne, un annuaire ldap). <?php class Example { // instance de la classe private static $instance; // Un constructeur priv ; empche la cration directe dobjet private function __construct() {

885

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)


echo Je suis construit; } // La mthode singleton public static function singleton() { if (!isset(self::$instance)) { $c = __CLASS__; // ici loprateur self dsigne la classe courante self::$instance = new $c; } return self::$instance; } // Prvient les utilisateurs sur le clnage de linstance // lors de lutilisation de la fonction clone sur lobjet, // cette mthode est appel et permet dinterdire la fonctionalit. public function __clone() { trigger_error(Le clnage n\est pas autoris., E_USER_ERROR); } } ?> Ceci autorise une unique instance de la classe Example. <?php // Ceci choue car le constructeur est priv $test = new Example; // Ceci rcupre toujours une seule instance de la classe $test = Example::singleton(); $test->bark(); // Ceci provoque une erreur E_USER_ERROR. $test_clone = clone($test); ?>

# VARIABLES PREDEFINIES - Tableaux superglobaux : $myvar = $_SERVER [PHP_SELF]; # Accder une variable prdfinie

- $GLOBALS : Contient une rfrence sur chaque variable qui est en fait disponible dans lenvironnement dexcution global. Les cls de ce tableau sont les noms des variables globales. - $_SERVER : Les variables fournies par le serveur web, ou bien directement lies lenvironnement dexcution du script courant. * PHP_SELF - nom du fichier du script en cours dexcution, par rapport la racine web * SERVER_ADDR - adresse IP du serveur sous lequel le script est excut * SERVER_NAME - nom du serveur hte qui excute le script * REQUEST_METHOD - Mthode de requte utilise pour accder la page : GET, HEAD, POST, P * QUERY_STRING - chane de requte utilise pour accder la page (si elle existe) * DOCUMENT_ROOT - racine sous laquelle le script est excut (comme dfini dans la configuration du serveur) * HTTP_REFERER - adresse de la page (si elle existe) qui a conduit le client la page cou

886

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)

* REMOTE_ADDR - adresse IP du client qui demande la page courante * SCRIPT_FILENAME - chemin absolu vers le fichier contenant le script en cours dexcution * REQUEST_URI - URI qui a t fourni pour accder cette page. Par exemple /index.html $_GET Les variables fournies au script via la chane de requte URL. $_POST Les variables fournies par le protocole HTTP en mthode POST. $_COOKIE Les variables fournies par le protocole HTTP, dans les cookies. $_FILES Les variables fournies par le protocole HTTP, suite un tlchargement de fichier. * $_FILES[userfile][name] - nom original du fichier, tel que sur la machine du client * $_FILES[userfile][type] - type MIME du fichier, si le navigateur a fourni cette info * $_FILES[userfile][size] - La taille, en octets, du fichier tlcharg * $_FILES[userfile][tmp_name] - Le nom temporaire du fichier qui sera charg sur la ma * $_FILES[userfile][error] - Le code derreur associ au tlchargement de fichier Error codes: : 0 Aucune erreur, le tlchargement est correct. * UPLOAD_ERR_OK UPLOAD_ERR_INI_SIZE : 1 Le fichier tlcharg excde la taille de upload_max_filesiz * configure dans le php.ini. * UPLOAD_ERR_FORM_SIZE : 2 Le fichier tlcharg excde la taille de MAX_FILE_SIZE, qui a t spcifie dans le formulaire HTML. : 3 Le fichier na t que partiellement tlcharg. * UPLOAD_ERR_PARTIAL : 4 Aucun fichier na t tlcharg. * UPLOAD_ERR_NO_FILE * UPLOAD_ERR_NO_TMP_DIR : 6 Un dossier temporaire est manquant (PHP 4.3.10 et 5.0.3) * UPLOAD_ERR_CANT_WRITE : 7 chec de lcriture du fichier sur le disque (PHP 5.1.0) * UPLOAD_ERR_EXTENSION : 8 Une extension PHP a arrt lenvoi de fichier (PHP 5.2.0) $_ENV Les variables fournies par lenvironnement. $_REQUEST Les variables fournies au script par nimporte quel mcanisme dentre et qui ne doit recevoir quune confiance limite. Note : lorsque vous excutez un script en ligne de commande, cette variable ne va pas inclure les variables argv et argc. Elles seront prsentes dans la variable $_SERVER. La prsence et la valeur des entres de ce tableau sont rgles par la directive variables_order. $_SESSION Les variables qui sont en fait enregistres dans la session attache au script. Voir le chapitre sur la gestion des sessions pour plus dinformations.

# CONSTANTES - un identifiant (un nom) qui reprsente une valeur simple. En majuscules (par convention) Les noms de constantes suivent les mmes rgles que nimporte quel nom en PHP. - une valeur qui ne peut jamais tre modifie durant lexcution du script ( lexceptions des constantes magiques) - accessibles de manire globale depuis nimporte o, accessible depuis nimporte quelle fon define("FOO", "hello"); echo FOO; # definition dun constante de nom MYCONST # affichage de la constante

# CONSTANTES PREDEFINIES (implmentes directement par PHP) Constantes magiques qui varient fonction de lendroit o elles sont utiliss :

887

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)


__LINE__ __FILE__

La ligne courante dans le fichier. Le chemin complet et le nom du fichier courant. Si utilis dans un include, le nom du fichier inclus est retourn. __FUNCTION__ Depuis PHP 5, cette constante retourne le nom de la fonction comme il a t dc (sensible la casse). En PHP 4, cette valeur est toujours en minuscule. __CLASS__ Le nom de la classe courante.(en minuscule pour PHP4 et le nom exact pour PHP5) __METHOD__ Le nom de la mthode courante.(en minuscule pour PHP4 et le nom exact pour PHP5

# OPERATEURS ## Oprateurs arithmtiques Exemple Nom Rsultat - $a Negation Oppos de $a. $a + $b Addition Somme de $a et $b. $a - $b Soustraction Diffrence de $a et $b. $a * $b Multiplication Produit de $a et $b. $a / $b Division Quotient de $a et $b. $a % $b Modulo Reste de $a divis par $b. ## Oprateurs de comparaison Exemple Nom $a == $b Egal $a === $b Identique $a != $b Diffrent $a <> $b Diffrent $a !== $b Diffrent $a < $b Plus petit que $a > $b Plus grand $a <= $b Infrieur ou gal $a >= $b Suprieur ou gal ## Oprateurs dincrmentation Exemple Nom ++$a Pre-incrmente $a++ Post-incrmente -$a Pr-dcrmente $aPost-dcrmente ## Oprateurs logiques Exemple Nom !$a NON (Not) $a && $b ET (And) $a || $b OU (Or) ## Oprateurs de chaine $a = "Bonjour "; $b = $a . "Marc"; $b.= " Dupond";

Rsultat TRUE si $a TRUE si $a TRUE si $a TRUE si $a TRUE si $a TRUE si $a TRUE si $a TRUE si $a TRUE si $a

est est est est est est est est est

gal $b. gal $b et quils sont de mme type. diffrent de $b. diffrent de $b. diffrent de $b ou bien quils ne sont pas strictement plus petit que $b. strictement plus grand que $b. plus petit ou gal $b. plus grand ou gal $b.

et dcrmentation Rsultat Incrmente $a de 1, puis retourne $a. Retourne $a, puis lincrmente de 1. Dcrmente $a de 1, puis retourne $a. Retourne $a, puis dcrmente $a de 1.

Rsultat Vrai si $a est faux. Vrai si $a ET $b sont vrais. Vrai si $a OU $b est vrai.

# Concatnation (.) - $b = "Bonjour Marc" # Assignation concatnant (.=) - $b = "Bonjour Marc Dupond"

## Operateur conditionel $min=($a > $b)? $b : $a; # $min vaut $b si ($a > $b) est VRAI, sinon vaut $a

888

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)


# INSTRUCTIONS DE CONTRLE break # if, else et elseif # while # # do-while # #

sortir dune structure for, foreach, while, do-while ou switch. excute linstruction si lexpression de condition est valu com excute linstruction tant que lexpression de la boucle while est value comme TRUE La premire itration de la boucle do-while est toujours excute ce qui nest pas dune boucle while

for ( $i = 1; $i <= 10; $i++) {...} # for pour un boucle finit foreach (array_expr as $value) {...} # moyen simple de passer en revue un tableau foreach (array_expr as $key => $value){...} switch ($i) { case x: ...; break; case ($i>10): ...; break; default: ...; } # Linstruction switch quivaut une srie dinstructions if

# INCLUDES Ces quatres instructions se remplacent elles mme par le contenu du fichier spcifi. include # si le fichier nexiste pas on aura une alerte include_once # si le fichier a dj t inclus prcdement, il ne le sera pas nouveau require # si le fichier nexiste pas il y aura une erreur fatale require_once # si le fichier a dj t inclus prcdement, il ne le sera pas nouveau

==> Il est conseill dutiliser include_once et require_once pour viter des re-dclarations

# FONCTION

## dclaration dune fonction function maFonction($param1, $param2, $paramN="par dfaut") { # $paramN est dclar optione ...; return true; # return permet de retourner une valeur }

Avertissement
Depuis PHP5 le passage de paramtre se fait par rfrence, alors quen PHP4 il faut le spcier un & devant votre variable. Un & en PHP5 gnrera un warning. # LINEARISATION/DELINEARISATION dune variable dans un FICHIER serialize($myvar); # Linariser unserialize($myvar); # Dlinariser (Attention, avant de restaurer un objet, sa classe doit exister) ## Example ### classa.php:

889

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)


... class A { var $one = 1; var $cpt = 0; function print() { echo $this->one; } function __sleep() { echo $this->cpt++; } function __wakeup() { echo $this->cpt; } } ... ### page1.php (LINEARISER) ... include("classa.php"); $a = new A; $s = serialize( $a); // enregistrez $s o la page2.php pourra le trouver. $fp = fopen("store","w"); fputs( $fp, $s); fclose( $fp); ... ### page2.php (DELINEARISER) ... // Ceci est ncessaire pour que unserialize() fonctionne correctement include("classa.php"); $s = implode("", @file("store")); unserialize( $s); // maintenant, utilisez la mthode print de lobjet $a. $a->print(); ...

24.3.9. Dsactiver les guillemets magiques dans php.ini


Source(s):

Web: Dsactiver les guillemets magiques (http://www.php.net/manual/fr/security.magicquotes.disabling.php)

890

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)

Avertissement
La fonctionnalit "magic quote" est OBSOLETE depuis PHP 5.3.0. Il est vivement encourag de ne plus lutiliser.

Dans le chier de conguration php.ini, vrier la valeur magic_quotes_gpc (http://www.php.net/manual/fr/info.conguration.php#ini.magic-quotes-gpc). Une chane de caractre ("Linternet avec "PHP" est trs simple !!" par example) renvoye par un formulaire va safcher :
"Linternet avec \"PHP\" est trs simple !!" si ON "Linternet avec "PHP" est trs simple !!" si OFF

Note : Bien penser redmarrer apache (/etc/init.d/apache2 restart) aprs chaque changement dans le chier php.ini .

24.3.10. TP Formulaire
Source(s):

OF: SI016-ch05-tp_formulaire.pdf (docs/eof/SI016-ch05-tp_formulaire.pdf)

Les scripts PHP sont accessibles via la page de projet ddie si016php (projets/index.html). Resultat en image :

891

Chapitre 24. Initiation au langage de script (PHP, Python, Perl) Figure 24-4. SI016 PHP Travaux Pratique 1/3

892

Chapitre 24. Initiation au langage de script (PHP, Python, Perl) Figure 24-5. SI016 PHP Travaux Pratique 2/3

24.3.11. TP Base de donnes


Source(s):

OF: SI016-ch06-tp_bd.pdf (docs/eof/SI016-ch06-tp_bd.pdf)

Les scripts PHP sont accessibles via la page de projet ddie si016php (projets/index.html). Cration de la base de donnes et de la table via PHPMyAdmin :
CREATE TABLE si016php.users ( id TINYINT( 3 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT firstname VARCHAR( 30 ) NOT NULL COMMENT user last name, lastname VARCHAR( 30 ) NOT NULL COMMENT user first name,

user reference,

893

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)


login VARCHAR( 20 password VARCHAR( info VARCHAR( 255 file VARCHAR( 255 ) ENGINE = MYISAM ) NOT NULL COMMENT user name, 20 ) NOT NULL COMMENT user password, ) NOT NULL COMMENT user info, ) NOT NULL COMMENT user file name

Resultat en image :

894

Chapitre 24. Initiation au langage de script (PHP, Python, Perl) Figure 24-6. SI016 PHP Travaux Pratique 3/3

895

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)

24.3.12. Scurisation des dveloppements PHP


Source(s):

Web: Guide Scurit PHP (http://phpsec.org/projects/guide/fr/index.html) PHP Security Consortium Library - informations sur les mthodes de scurit PHP (http://phpsec.org/library) Google Code : Web Application Exploits and Defenses (http://jarlsberg.appspot.com/) Cross-site scripting (http://fr.wikipedia.org/wiki/Cross-site_scripting) XSS (Cross Site Scripting) Cheat Sheet Esp: for lter evasion (http://ha.ckers.org/xss.html) Attaques Cross-Site Scripting (http://www.commentcamarche.net/contents/attaques/cross-site-scripting.php3) Tester sa conguration serveur avec PHPSecInfo (http://www.journaldunet.com/developpeur/tutoriel/php/061026-php-phpsecinfo-securite.shtml) Scuriser une application Web dveloppe en PHP (http://www.journaldunet.com/developpeur/php/tutoriel-pratique/securiser-une-application-webdeveloppee-en-php.shtml) PHP secure (http://thierrylhomme.developpez.com/php/php_secure/)

Guide Scurit PHP - En bref : Quest-ce que la scurit? - La scurit est une mesure, pas une caractristique. - La scurit doit tre en quilibre avec les dpenses. - La scurit doit tre en quilibre avec lutilisabilit (attention au utilisateurs lgitimes) - La scurit doit faire partie de la conception.

Etapes de base - Pensez aux utilisations illgitimes de votre application. - Instruisez-vous vous-mme : ressources listes dans la bibliothque du Consortium de Scur - Si vous ne faites quune chose, FILTREZ TOUTES LES DONNEES EXTERNES. initialiser les variables et en filtrer toutes les donnes qui proviennent de sources exter vous grerez une majorit de vulnrabilits avec un minimum deffort. ==> Prfrer lapproche par liste blanche (whitelist) = considrer toutes les donnes comme invalides, moins quil soit prouv quelles sont valides. Register Globals - Dsactiver la directive register_globals (par dfaut normalement)

Filtrage des donnes = pierre angulaire de la scurit des applications web, indpendamment du langage/plate-form ==> mcanismes par lesquels dterminer la validit des donnes qui entrent et sortent de la - Sassurer que le filtrage des donnes ne peut tre contourn, - Sassurer que des donnes invalides ne peuvent tre confondues avec des donnes valides, e - Identifier lorigine des donnes.

896

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)


= Mthode de rpartition (Dispatch Method) = Mthode dinclusion (Include Method)

Signalement des erreurs - error_reporting (prfrer dev=E_ALL et prod=E_ALL ==> aide forcer linitialisation de va - display_errors (afficher erreur lecrant : dev=ON prod=OFF) - log_errors (prfrer prod=ON ==>stress disque avec I/O soutenu si bcp derreur) - error_log (fichier de log des erreurs, serveur web doit avoir permission dcrire)

Traitement des formulaires - Falsification des soumission de formulaire - Requtes HTTP falsifies - Cross-Site Scripting (XSS) Caractristiques: * Exploiter la confiance qua un utilisateur envers un site particulier * Impliquent que les sites affichent des donnes externes * Injectent du contenu choisi par lattaquant Solutions: * Filtrez toutes les donnes externes. * Utilisez les fonctions PHP existantes, plus robustes (htmlentities(), strip_tags(), utf8_decode()...) * Utilisez une approche par liste blanche (whitelist) (donne invalide jusqu la preuve du contraire ==> vrifier la longueur, caractres val * Utilisez une convention de nommage stricte (distinguer facilement les donnes filtres des donnes non filtres) - Cross-Site Request Forgeries (CSRF) Caractristiques: * Exploitent la confiance quun site web possde envers un utilisateur * Plus dangereuses, moins populaires * Difficile de sen dfendre * Impliquent que les sites web se basent sur lidentit des utilisateurs * Excutent des requtes HTTP choisies par lattaquant Solutions: * Utilisez POST plutt que GET dans les formulaires * Utilisez $_POST plutt que de vous fier register_globals * Ne vous concentrez pas sur la commodit * Forcez lutilisation de vos propres formulaires (mise en place de token [$token = md5(uniqid(rand(), true));] et vrification via session [$_SESSION[token] = $token;]) Base de donnes et SQL - Autorisations daccs exposes * Fichier daccs la base de donne en dehors de la racine * Utiliser des variables denvironement server (plus sr) - Injection de code SQL * Filtrez vos donnes. * Placez vos donnes entre apostrophes. * Utilisez des squences dchappement pour vos donnes. Sessions - Fixation de session * regnrer un identifiant de session chaque fois que le niveau de privilge change (par exemple, aprs avoir vrifi le nom dutilisateur et le mot de passe)

897

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)

- Dtournement de session * utiliser quelque chose de plus dans la requte HTTP pour une identification supplmentai (User Agent par example - TCP/IP pas fiable)

Htes partags (Shared Hosts) - Donnes de session exposes * Nutilisez pas le mme stockage de session que tous les autres (stockez-le dans une base de donnes dont les autorisations daccs sont propres votre utilisez simplement la fonction session_set_save_handler() pour craser la gestion de session par dfaut de PHP - Naviguer dans le systme de fichiers * stocker les donnes sensibles dans une base de donnes * La meilleure solution est dutiliser un serveur ddi.

24.3.13. Open ID / SSO (Single Sign On)


Source(s):

Web: Yahoo: https://me.yahoo.com/whatever (https://me.yahoo.com/whatever) Google: https://www.google.com/accounts/o8/id (https://www.google.com/accounts/o8/id)

Souvent il nest pas ncessaire de connatre son Google OpenID parce que les sites web fournissent un bouton "Se connecter avec Google"... Si ce nest pas le cas, il suft de taper https://www.google.com/accounts/o8/id dans le champs OpenID. Ceci nest pas votre OpenID mais va permettre au site de vous connecter. En fait, Google dans ce cas, envoi "different" OpenIDs pour vous vers different site web. Finalement, votre URL de prole Google est un OpenID, donc pour les sites web ne fournissant pas un bouton, si cela ne vous derange pas dindiquer votre prole Google, il peut tre utilis comme OpenID pour le site en question. A complter ulterieurement...

24.3.14. TP Authentication
Source(s):

OF: SI016-ch07-authentication.pdf (docs/eof/SI016-ch07-authentication.pdf)

898

Chapitre 24. Initiation au langage de script (PHP, Python, Perl) Tlcharger larchive .zip regroupant tous les scripts PHP du module : Projet SI016 PHP (Archive .zip) (projets/si016php-v02.zip) Accessible aussi depuis la page Projets/TPs (projets/index.html). Les chiers interressants sont :
/session/connexion.php /session/traitement_connexion.php /class/ObjectUser.php (formulaire de connexion) (page de connexion/connecte)

Pour linstant je nai pas encrypte les mots de passe dans la base de donnee ntant pas sr que cela soit requis pour le TP. En temps normal les mots de passe seraient bien evidement encrypts :) Comme mentionn par JP, cela pourrait tre chiffr en base de donne par un algo symtrique, du genre AES. Pour amliorer cela, on peut ensuite travailler sur un systme qui permet de chiffrer/dchiffrer la cl AES pour quelle napparaisse pas en clair dans le code par lintermdiaire de crypto asymtrique, mais l, a devient plus joueur ;) Figure 24-7. SI016 PHP Authentication 1/6

899

Chapitre 24. Initiation au langage de script (PHP, Python, Perl) Figure 24-8. SI016 PHP Authentication 2/6

Figure 24-9. SI016 PHP Authentication 3/6

900

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)

Figure 24-10. SI016 PHP Authentication 4/6

Figure 24-11. SI016 PHP Authentication 5/6

901

Chapitre 24. Initiation au langage de script (PHP, Python, Perl) Figure 24-12. SI016 PHP Authentication 6/6

24.3.15. Gestion derreurs - Logs - Filtrage de donnes


QUESTIONS : Concernant le login et le mot de passe transfers par le formulaire, pour valider les paramtres et conrmer leur source ainsi que ltrer les valeurs non admise, je me demandais quel est la meilleur architecture a adopter ?
Cela doit-il etre implement dans : - la classe ObjectUser ? dans fonction setLogin, setPassword ? ou autre... ou - le scrip traitement_connection.php ?

De faon gnrale il est toujours prfrable de faire en sorte que les choses soient le plus atomiques possible. Ceci facilite leur rutilisation.Sylvain porterais son choix sur une troisime option qui serait par exemple la cration dune classe spcique pour la validation (ltrer les valeurs admises). Elle pourrait par exemple se baser sur les expressions rationnelles. Quel est la diffrence entre les Exceptions et la fonction trigger_error pour gerer erreurs ?

902

Chapitre 24. Initiation au langage de script (PHP, Python, Perl) Ditxit Sylvain, pour simplier les erreurs utilisateur sont la version procdurale et les exceptions sont la version objet. Comment grer des message derreur pour Utilisateur/Administrateur et ceux pour Dveloppeur (debuggage) [Toujours ma grande question :) ] Il ny a pas vraiment de rgles. La plupart des frameworks web grent des environnements dexecution dune application. Les messages de debug napparaissent que dans un environnement de dveloppement ou de test. En production rien nest afch, ils utilisent plutt des chiers de logs. Il est important en production de ne pas donner dinformations qui permettraient dattaquer lapplication. La fonction error_log peut tre utilise pour grer de tel chiers de logs...

24.3.16. Librairies / Framework PHP


Source(s):

OF: SI016-ch08-librairies.pdf (docs/eof/SI016-ch08-librairies.pdf)

Ce document concis et dtaill donne une bonne base pour explorer plus en profondeur les diffrentes librairies et framework PHP disponibles.

24.3.17. Projet PHP : Kring


Source(s):

OF: SI016-ch09-proj-denition_du_projet.pdf (docs/eof/SI016-ch09-proj-denition_du_projet.pdf) SI016-ch09-proj-php-conseils.pdf (docs/eof/SI016-ch09-proj-php-conseils.pdf)

Jimmy, Pierre-Yves et moi mme unissons nos forces pour dvelopper un projet PHP mettant ainsi en pratique un maximum de connaissance acquise ainsi que les mthodes organisationnelles et collaboratives du logiciel libre. Toutes les informations sur le projet sont disponibles sur le site ofciel http://kring.athaliasoft.fr/main (http://kring.athaliasoft.fr/wiki) (SPIP) et sur le wiki ddi mise en place http://kring.athaliasoft.fr/wiki permettant un change et un travail entirement collaboratif sur le dveloppement de Kring (cest le nom de notre application KeyRing crit Kring).

903

Chapitre 24. Initiation au langage de script (PHP, Python, Perl) Cest une application web multi-utilisateurs permettant la sauvegarde dans une base de donnes dinformations de connexion, destination particulirement des webmestres. Kring permet ainsi de disposer dun endroit sr pour stocker ses identiants FTP, HTTP, etc. Lapplication peut-tre test ici : http://kring.athaliasoft.fr/demo Le code source de Kring est accessible via un dpot Git mis disposition. Pour installer Git et dupliquer (cloner) le dpt de Kring voir les tapes pas pas dans la section ddie Git ou sur le wiki du projet dans la section Gestion du dpt git (http://kring.athaliasoft.fr/wiki/index.php/Gestion_du_d%C3%A9p%C3%B4t_git).
Note : Laccs au dpt requiert la prsence dune clef publique SSH (RSA ou DSA) sur le serveur. Attention de bien gnrer la paire de clefs prive/publique sous son compte (et non pas en root).

Jai galement russi rcuprer le dpt depuis NetBeans, laide du plugin nbgit. Mais il semble que les chiers ne soit pas accessible depuis netbeans. Problme de version du plugin (max 6.7) par rapport a ma version de NetBeans (6.8) ?! Je laisse tomb cet aspect. Jutiliserais donc la mthode traditionnelle en ligne de commande pour faire les commits. Localement, mon arborescence de travail se prsente ainsi :

$ tree /path/to/projets/si016php-projet-kring -L 1 .. |-- dev-kring # Code source et dpot local Git cloner partir de kring.git |-- gtest.sh (projets/si016php-projet-kring/gtest.sh) # Script pour gnrer et synchron # le rpertoire de test partir du code source -- test # Repertoire de test paremetr comme DocumentRoot # sur le serveur HTTP pour lhte virtuel de test du projet

Conguration de lenvironement de test :


# Configuration de lhte virtuel sur le serveur HTTP $ cat /etc/apache2/sites-enable/kring.eof # EoF - SI016 PHP Projet Kring <VirtualHost *:80> ServerName kring.eof ServerAlias kring DocumentRoot /mnt/hsubuntu/monjournal/source/projets/si016php-projet-kring/test (...) </Directory> </VirtualHost>

904

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)

# Re-dmarrer le server web pour prendre en compte les changements de configuration $ apache2ctl restart # Mise jour de lenregistrement DNS :) $ cat /etc/hosts (...) 127.0.0.1 kring.eof kring (...)

Aprs avoir cloner le projet dans mon dpt Git local, jexcute mon script de synchronisation ./gtest.sh depuis mon repertoire de travail et je tente daccder lapplication dans mon environement de test (via http://kring) :

905

Chapitre 24. Initiation au langage de script (PHP, Python, Perl) Figure 24-13. SI016 PHP Projet Kring 1/?

906

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)

Pas mal pour un dbut :) Et aussi mes premiers bugs traits :


$ git log --author=richard.leger --oneline d9caf13 Solved bug 2010-06-01-001-Installeur-Undefined index HTTPS 4e7b8da Solved bug 2010-05-28-001-Installeur-Undefined variable $InstallationComplete b343e30 Add project description to README file

24.4. Python
24.4.1. Version 2.x ou 3.x ?
Daprs nos professeurs :),... ... Il me semble important dapprendre la version 2 tout en ayant en tte les principales volutions de la version 3 (pour faciliter une future migration). Dailleurs les dernires version de la srie 2.x, intgrent toutes les volutions de la version 3 qui ne cassent pas lAPI de base. ... Certaines bibliothques de la version 2 mettrons encore du temps passer en version 3 et il est dommage de se passer de certaines dentres elles (je pense notamment scipy).

24.4.2. Installation
Pour la version 2, cest simple, Ubuntu 9.10 est livr avec les paquets ncessaire dj install :) Pour la version 3, si elle est disponible parmi les paquets de la distribution, on peut linstaller (si elle ne lest pas dj) pour y jeter un il... elle ne parasitera pas python 2.x dj prsent. Sinon on peut linstaller depuis les sources, sans trop prendre de risque pour leur babasse, voici les tapes reports par Alix Mascret (je nai pas test !) :
========================== Version courte *** *** ==========================

907

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)


$ cd && mkdir bin

# Download python 3 http://www.python.org/download/ $ wget http://www.python.org/ftp/python/3.1.2/Python-3.1.2.tar.bz2 # Dcompresser larchive $ tar xjf Python-3.1.2.tar.bz2 # Installer les dpendances :) $ sudo apt-get install tk8.5-dev tcl8.5-dev libsqlite3-dev libgdbm-dev libbz2-dev # Compiler depuis le source $ cd Python-3.1.2 $ ./configure && make $ Crer un raccourci "python" $ sudo ln -s /usr/bin/python3 $(pwd)/python # Configuration ================================== vi idle3.py (ceux qui utilisent emacs, passez) ================================== #!/usr/bin/python3 from idlelib.PyShell import main main() ================================== chmod +x idle3.py ln -s idle3.py idle3 export PATH=$PATH:$(pwd) idle3 python3 (...)

# $ $ $

Humour de geek ! apt-get install papier-de-verre huile-de-coude cire coton sh {gratgratte,cire,lustre,ksabrille} mon.peaufinage.machin echo a gaze | mail -s myInstall p3 patch myML@que.jaime

========================= Version longue *** *** ========================= lucky, use the source luck !

908

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)

24.4.3. Executer un programme Python


Python dispose de plusieurs manires dexcuter un programme... Mode interactif :
Ligne de commande interactive : Shell Python $ python Python 2.6.4 (r264:75706, Dec 7 2009, 18:43:55) [GCC 4.4.1] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> print u"Hello World!" Hello World! >>> quit() # exit() ou CTRL+D en alternative

Mode script interactif :


// Script definition monscript.py $ nano monscript.py print u"Hello World!" // Script execution $ python monscript.py Hello World!

Mode script Unix classique :


// Script definition monscript.py $ nano monscript.py #!/usr/bin/python # -*- coding: utf8 -*// Specifier lencodage... print u"Bonjour le monde Unix." // Script execution $ chmod u+x message.py $ ./monscript.py Bonjour le monde Unix.

// Rendre le script executable // Execute le script

909

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)

24.4.4. Obtenir des informations sur le systme


$ python -V $ python -v // Information de version // Affiche un message chaque fois quun module est initialis. // Affiche lemplacement (fichier ou built-in module) dou il est charg. // Affiche un message pour chaque fichier lors de la recherche de modules. // Affiche des informations sur linitialisation de variable systme, et // et le netoyage des module lors de larrt.

$ python -vv

Source: System-specific parameters and functions (http://docs.python.org/library/sys.html) $ python >>> import sys >>> sys.version 2.6.4 (r264:75706, Dec >>> sys.api_version 1013 >>> sys.platform linux2 >>> sys.getdefaultencoding() ascii >>>sys.stdin.encoding UTF-8 >>> sys.stdout.encoding UTF-8

// Import le module systme // Info de version 7 2009, 18:43:55) \n[GCC 4.4.1] // API version

// Identifier la plateforme dexecution : // win32, cygwin, darwin, os2, atheos // Affiche lencodage par dfaut

// Encodage en entre

// Encodage en sortie

>>> sys.path // Liste des chemins dans lesquels les modules [, /usr/lib/python2.6,...] // sont recherchs

>>> sys.modules // Dictionnaire des modules chargs {apt.os: None, _bisect: <module _bisect (built-in)>, email.iterators: <module email.iterators from /usr/lib/python2.6/email/iterators.pyc>, apport.sys: None, functools: <module functools from /usr/lib/python2.6/functools.pyc>, random: <module random from /usr/lib/python2.6/random.pyc>, ...} >>> quit()

Note : getdefaultencoding retourne le codage par dfaut utilis pour les chaines par Python.

910

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)


sys.stdin.encoding et sys.stdout.encoding donnent le codage utilis pour les entres/sorties sur le terminal. Lencodage de Python par dfaut ne devrait-il pas saddapter lenvironement dexecution lorsque quaucun encodage nest prcis ? Eh bien non, ce nest pas une bonne ide de sadapter lenvironnement. En plus dun terminal de sortie, il peux y avoir diverses sources (des bases de donnes, des chiers) avec des codages diffrents et il ny a pas lieu de privilgier lun ou lautre.

24.4.5. IDE pour coder sous Python


Se rfrer la section ddie : Environnement de dveloppement intgr (IDE) Pour ma part, pour les dveloppemet Python requis durant la formation, je nai test que brivement le plugin Python de Netbeans.

24.4.6. Encodage des chiers sources (et codecs)


Source(s):

Web: Python Standard Encodings (http://docs.python.org/library/codecs.html#standard-encodings) codecs Codec registry and base classes (http://docs.python.org/library/codecs.html)

Si aucun encodage nest spci dans un chier source, lencodage par dfaut utilis par dfaut sera ASCII (UTF8 partir de Python 3). Pour dnir lencodage du chier, il faut utiliser un commentaire magique en premire ou deuxime ligne :
Source: pep-0263 (http://www.python.org/dev/peps/pep-0263/) #!/usr/bin/python # -*- coding: <encoding name> -*(...)

Cest lencodage qui sera utilis par dfaut pour les chanes de caractre (ex: s = ma chaine) moins quil ne soit prciser ultrieurement lors de la dclaration/affectation (ex: s = uma chaine)

911

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)


Note : Encodage par dfaut des sources (chier .py), si non spci (Source (http://www.python.org/dev/peps/pep-3120/)) : Python 3 : UTF-8 Python 2.5 : Latin-1, retourne une erreur si caractre non-ASCII rencontr Python 2.x : Latin-1/ASCII, pas derreur si caractre non-ASCII rencontr Python 1.x : Encodage non spci

Par rapport au problme dencodage, le fait est quil faut aussi bien distinguer dans Python 2 : - Unicode lencodage (utf-8 par exemple) ou plutt le codec utiliser pour encoder des chanes des caractres, accessible via le le modules "codecs"... et, - Unicode (ou plutt Unicode String) qui est un objet Python de type "unicode" utiliser pour stocker et manipuler des chanes convertis via la fonction "unicode(chaine, encodage)" (alias u"" utilisant lencodage par dfaut) dun codec lambda vers un codage "unicode"... Le fait que tous (codec, objet, fonction et type) sappelle "unicode" peut prter confusion au dbut !!! En plus le fait davoir deux type dobjets chane, un de type str (Objet String), lautre de type unicode (Objet Unicode String) est aussi un peu mlangeant... Python 3 amliore la situation en utilisant les concepts de texte (text) et donnes (binary) au lieu de Unicode strings et 8-bits strings. Tout texte (text) est Unicode. Toutefois lUnicode encod est reprsent par des donnes binaire (binary) :

// Nouveau dans Python 3 (http://docs.python.org/release/3.0.1/whatsnew/3.0.html#text-vs-dat - str : type utilis pour contenir du texte - bytes : type utilis pour contenir des donnes

Voir aussi les quelques remarques ci-aprs sur lencodage des chanes de caractres.

24.4.7. Premier Pas... avec le language


Source(s):

OF: SI016-ch09-presentation_python_u8.pdf (docs/eof/SI016-ch09-presentation_python_u8.pdf)

912

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)

Boolen: Truth Value Testing (http://docs.python.org/library/stdtypes.html) Why True/False is capitalized in Python? (http://stackoverow.com/questions/521476/why-true-false-is-capitalized-in-python) [Python-3000] Status of True, False, bool type (http://mail.python.org/pipermail/python-3000/2007-January/005293.html) AbstractBaseClasses : Possible Python 3K Class Tree? (http://wiki.python.org/moin/AbstractBaseClasses)

24.4.7.1. lments de base


Quelques lments de base :
// La forme importe // Lespace, la tabulation sont des lments de la grammaire du langage. // Le commentaire (en ligne) >>> # Ceci est un commentaire >>> print "Bonjour" # Affiche un bonjour (un autre commentaire en fin de ligne) // Les retours la ligne "\" // Le caractre en fin de ligne permet de faire courir une instruction // sur plusieurs lignes ( lintrieur dune parenthse, // ce caractre est optionnel) : >>> print u"Affichage dune longue, longue expression qui ncessite un retour \ ... la ligne pour garder un code agrable lire."

24.4.7.2. A propos des variables...


Est-il possible en Python de dclarer un variable sans linitialiser (sans lui affecter de valeur) ? En Python la dclaration et linitialisation se font en mme temps. Cela na pas de sens dautant plus pour ce qui est type immutable. Namoins, pour plus de lisibilit (donc moins de bugs), notamment pour ce qui concerne les attributs en programmation objet, il peut tre intressant de dclarer ceux-ci au dbut (dans la mthode __init__). Tant qu initialiser, il est prfrable de le faire avec la valeur vide du type en question (0, False, u"") pour tre explicite quant au type attendu. En Python, le typage est dynamique et implicite. La valeur determine automatiquement le type dune variable.

913

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)

24.4.7.3. Type de donnes : Toute donne est reprsente par un objet


Le typage des variables est dynamique (le type dune variable est devin ) Le typage est fort (on ne peut additionner une chane de caractre et un entier). Types de base : numriques, chane de caractres, etc. Types volus : listes et dictionnaires Toute donne est reprsente par un objet :

// Cet objet dispose - dun identifiant unique - dun type - dune valeur // Fonctions primitives id() : obtenir lidentifiant type() : obtenir le type

Note : La valeur attribue lobjet peut selon son type tre ou non modiable. Dans le cas des chanes de caractres la valeur ne peut plus tre modie aprs leur cration. Il convient de parler dobjets immuables.

24.4.7.4. Type de donnes : Numriques (Entier, Boolen, Rels, Complexes, Octal, Hexadcimal)
Diffrents types numriques natifs Python :
Type Entier Entier long Boolens Rels Exemple 12; -7 111111111111L; 9999999999999l False; True 1.5; -2.4; 5e10; 4.2E-3; -6e+4

Complexes 1+5j; -7.3J; 2.7-4.1j Entier Octal 023, -012 Entier Hexadcimal 0x1A, -0xCD

// // // // // // // // //

Entier a une taille illimite seule restriction lespace mmoire di Correspondent respectivement 0 et 1 "." sparateur dcimal "E", "e" exposant de 10 ngatif ou po Type complexe natif. Nombre octal (commence par zro "0") Nombre hexadcimal (commence par "0x"

914

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)

Important : Le type Boolen est une sous-classe du type Entier Les valeurs correspondante commencent par une majuscule : T rue (Vrai), F alse (Faux) Les valeurs suivantes sont considre comme Faux (False) : None, False, 0, 0L, 0.0, 0j (numrique), , (), [] (squence vide), {} (dictionnaire vide), instance dune classe dnit par lutilisateur dont les mthodes __nonzero__() ou __len__() retourne lentier zro 0 ou le booleen False. Tous les autres valeurs (et principalement celles qui diffrent de zro) ou objet/type sont Vrai (True) ! Les oprations et functions intgres qui retournent des valeurs boolennes, retournent toujours 0 ou False (Faux) et 1 ou True (Vrai) sauf si explicitement dclar autrement...

24.4.7.5. Type de donnes : Squences (Sting[str], Unicode String[unicode], listes, tuples, bugger, xrange)
Diffrent types squences existent : chanes de caractres (str, unicode), listes, tuples, buffer, xrange.
Note : Les chanes de caractres et les tuples sont des types immuables (ils ne peuvent tre modifs). Quel est lintrt de rendre certains types immuables (de ne pas pouvoir les modier) ? Tel que les String par exemple ? Pour des raisons de performance et dintgrit des donnes. Pour plus dinformation, se rfrer la documentation : Python Design and History FAQ (http://www.python.org/doc//current/faq/design.html) Why are python strings immutable ? (http://www.python.org/doc//current/faq/design.html#why-are-python-strings-immutable)

Note : Quel est lintrt davoir autant de variantes diffrentes de squences ? Liste/Tuple permettent une fonction de retourner plusieurs rsultats :
def mafonction(): return 1,2,3 >>> mafonction() (1, 2, 3)

Note : Quel est lintrt davoir les listes dun ct et les tuples de lautres alors que se sont la mme chose except que lun est immuable et lautre pas ?

915

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)


Les tuples par rapport aux listes permettent de garantir lintgrit des donnes comme ils sont non modiables. Le parcours dun tuple est galement plus rapide que celui dune liste.

Les squences :

// Collections ordonnes et indexes // Source: Sequence Type (http://docs.python.org/library/stdtypes.html#sequence-types-str-un // Si la taille de la squence est n, // lindex varie entre 0 et n-1

// Manipulation de squences (communes tous les types) // Index ngatif : parcourir la liste en partant du dernier lment. s2[-1] // e tuple3[-1] // (tuple, inclus) liste3[-1] // [liste, incluse] // Dcouper une squence masequence[i:j] // lments dont lindex respecte i <= index < j s2[0:11] // Chaine avec s2[-18:] // un retour la ligne

// Fonctions des squences (communes tous les types) - len(object) : nombre dlments (cette mthode fonctionne pour tous les types collection) - max(sequence) : lment le plus grand - min(sequence) : lment le plus petit

// Oprations pour squence/objet (modifiable seulement) Source: Mutable Sequence Type Operations (http://docs.python.org/library/stdtypes.html#mutab s[i] = x // lment i de s est remplac par x s[i:j] = t // morceau de s de i j est remplac par le contenu itrable del s[i:j] // quivaut s[i:j] = [] (suppression) s[i:j:k] = t // les lments de s[i:j:k] sont remplacs par ceux de t del s[i:j:k] // enlve les lments de s[i:j:k] de la liste s.append(x) // quivaut s[len(s):len(s)] = [x] s.extend(x) // quivaut s[len(s):len(s)] = x s.count(x) // retourne nombre de i pour lequel s[i] == x s.index(x[, i[, j]]) // retourne le plus petit k tel que s[k] == x et i <= k < j s.insert(i, x) // quivaut s[i:i] = [x] s.pop([i]) // quivaut x = s[i]; del s[i]; return x s.remove(x) // quivaut del s[s.index(x)] s.reverse() // inverse lordre des lment de s s.sort([cmp[, key[, reverse]]]) // classe les lment de s

// Chanes de caractres

916

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)

// Strings (str) (http://docs.python.org/tutorial/introduction.html#strings) versus Unicode u1 = "Ceci est une chane normale" // Sans prfixe, le type est String (ou str) u2 = u"Ceci est une chane unicode." // Le prfixe "u" indique que le type Unicode est util s1 = uautre chaine sur une ligne // Dclaration via simple quote s2 = u"chaine sur une ligne" // Dclaration via simple quote " s3 = u"""chaine de caracteres // Dclaration via triple double quote """ (multi-lign ... sur "plusieurs" lignes""" s1="chaine avec une \"." s2="Chaine avec \n retour la ligne" >>> print s2 Chaine avec retour la ligne // "\" sert de caractre dchappement

s2=r "Chaine avec \n retour la ligne" // Un chane brut (raw) // les caractres chapps et anti-slash >>> print s2 // ne sont pas interprets Chaine avec \n retour la ligne

// Functions spcifiques aux chanes Source: String Methods (http://docs.python.org/library/stdtypes.html#string-methods) Standard Encodings (http://docs.python.org/library/codecs.html#standard-encodings) - capitalize()/lower() : met tous les caractres en majuscule/minuscule - isupper()/islower() : retourne Vrai si les caractres sont en majuscule/m - count(sub[,start[,end]]) : Retourne nombre dlment dune sous-chane - decode/encode([encoding[, errors]]) : dcode/encode la chane avec le codec encoding: utf_8 (alias utf-8), latin_1, etc... - format(*args, **kwargs) : Formatte la chane - join(iterable) : concatenation dune table iterative en chane - replace(old, new[, count]) : remplace old par new - strip([chars]) : enlve le caractre (chars) de tte et de fin (espace par dfaut)

// Concatenation de chane // 6 mthodes : Performance Concatenation // Voir aussi : FAQ - Why is join() a string method instead of a list or tuple method ? (htt >>> str1 = Bienvenue >>> str2 = Richard >>> str3 = str1 + str2 >>> str3 += ". Comment ca va ?" >>> str3 Bienvenue Richard. Comment ca va ? Privilgier join() au lieu de + Mais attention la systmatique... Remarque dEtienne: Le gain avec join() est assez minime avec les nouvelles versions de Python (comme confirm par diffrente lecture ici et l) aussi en terme de lisibilit il est assez partisan de le rserver la concatnation de listes de chanes existantes (immutables).

917

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)


>>> ", ".join([1,2,4,8,16]) 1, 2, 4, 8, 16 >>> "1, 2, 4, 8, 16".split(, ) [1, 2, 4, 8, 16] >>> import string >>> string.join([1, 2, 4, 8, 16],", ") 1, 2, 4, 8, 16 slist = [some_function(elt) for elt in somelist] s = "".join(slist) // // // // Au lieu de: s = "" for x in list: s += some_function(x) // Exemple dutilisation

out = "<html>%s%s%s%s</html>" % (head, prologue, query, tail)

// Au lieu de: // out = "<html>" + head + pr

out = "<html>%(head)s%(prologue)s%(query)s%(tail)s</html>" % locals()

// Encore mieux, util // la substitution pa // pour un question d

Quelle diffrence entre u"ma chaine avec u" et "ma chaine sans u" ? Dans les deux cas il sagit de chaines de caractres mais Python fournit deux littraux str et unicode. Cela peut tre vri :
- La fonction type() permet de connatre le type dune variable.

type(chaine) >>> <type str> type(uchaine) >>> <type unicode>

// Alternativement chaine = u"Ma chaine" chaine_bis = "Ma chaine" print chaine.__class__ >>> <type unicode> print chaine_bis.__class__ >>> <type str>

918

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)

Si on omet le "u" devant une chane, lencodage utilis pour la chane est :
- celui dfini en dbut de programme par un appel la fonction setdefaultencoding() de la bibliothque de base sys. Attention, on ne peut pas changer de codage en cours de session python. import sys sys.setdefaultencoding(utf-8)

// Attribut non disponible en mode interactif

- celui prcis dans la dclaration au dbut du fichier de script Cest ce quil faut privilgier ! # -*- coding: <encoding-name> -*(...) // En premire ou deuxime ligne obligatoirement

- ou si aucun codage nest prcis, lencodage par dfaut de Python : utf-8 pour Python 3.x ascii pour Python 2.x

Pour plus dinfos, voir la section ddie Encodage des chiers sources
Note : setdefaultencoding ne peut tre appel quune fois et est dornavant utilis par le script dinitialisation site lanc automatiquement. Selon la doc : This function is only intended to be used by the site module implementation and, where needed, by sitecustomize. Once used by the site module, it is removed from the sys modules namespace. Donc mcanique interne, une mthode de dnition du codage oublier.

Avec le u" la chaine devient un objet Unicode mme si lencodage prcis peut tre diffrent. En effet, la notation u"" est un raccourci pour la fonction unicode qui peut notamment accepter comme option le codage utilis. Cela serait un peu idiot mais en thorie, une chane Unicode pourrait tout fait tre code en ascii :
s = unicode(proprit 2, encoding=utf-8) s = u"proprit 2" // Equivalent si et seulement si // lencodage dexecution est utf-8

Par dfaut, cette fonction utilise lencodage dnit, dclar ou par dfaut de Python.

919

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)


Important : Tout ceci nest vrai que pour Python 2. En effet dans Python 3, le type Sting(str) correspond un objet Unicode String(unicode) par dfaut ce qui simplie vraiment la vie :) Il faut ds maintenant travailler comme avec Python 3 c.a.d nutiliser que des chanes de type Unicode String (unicode) Pour ce qui est traitement des chanes de caractre pour viter au maximum le genre de souci (trs courant) auquel jai t confront lors de quelques tests (voir ci-aprs), il faut travailler le plus possible avec des chaines unicode :
- convertir au plus tt les chaines en entre en objet unicode - ne les encoder dans un jeu de caractre adquat que juste avant la sortie

Prfrer lutilisation de chiers source .py (au lieu du mode interactif) o lencodage est bien prcis pour chacun... Pour plus dinformation, voir la documentation : Unicode Strings (unicode) (http://docs.python.org/tutorial/introduction.html#unicode-strings) Strings (http://docs.python.org/release/2.5.2/ref/strings.html)

// Listes // Objets de collection ordonns (squences) // Peuvent contenir des lments de types htrognes // Possible de manipuler leur contenu la diffrence des liste1 = [1, 2, 3] // Liste liste2 = [un, deux, trois] // Liste liste3 = [1, 2, 3,quatre,[liste, incluse]] // Liste // Accder au contenu liste3[0] // 1 liste3[4][1] // incluse // Modifier le contenu liste3[0] = 5

tuples de 3 entiers. de chaines mixte

// Functions spcifiques aux listes - append(object) : ajoute lobjet la fin. - count(value) : compte le nombre doccurrences de "value". - reverse() : inverse les lments. - sort() : trier la liste (personaliser par diffrents paramtres optionnels)

// Tuples // Squence ordonne (ou collection) // partagent le fonctionnement des listes // non-modifiables (ou non-mutables) // gnralement utiliss pour garantir lintgrit de leur contenu tuple1 = (1, 2, 3) ; tuple1 = 1,2,3 // Tuple de 3 entiers. tuple2 = (un, deux, trois) // Tuple de chanes.

920

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)


tuple3 = (1, 2, 3,quatre,(tuple, inclus)) // Accder au contenu par indice // [indice][indice][...] tuple3[0] // 1 tuple3[4][1] // inclus // Accder au contenu par tranche (avec le sparateur ":") // [limitebasse:limitehautenonincluse] // retourne une liste ! tuple3[1:3] // [2, 3] tuple3[:2] // [1, 2] // Omettre le premier nombre signifie, depuis le dbut // Omettre le second nombre signifie jusqu la fin. // Tuple mixte

24.4.7.6. Type de donnes : Mapping (dictionnaire/hachage)


Un type "mapping" (tables de hachage/tableaux associatifs) :
// Tables de hachage (ou tableaux associatifs) // Paire cl => lment (associ la cl qui lidentifie) // lments et cls peuvent tre de tout type // Dictionnaire de 2 lments dictionnaire1 = {cle1 :element 1, cle2 :2} // Dictionnaire avec un lment dictionnaire dictionnaire2 = {cle1 :element 1, cle2 :{cleA :1, cleB :element 2}} // Cre un dictionnaire {"one": 2, "two": 3}: dict(one=2, two=3) // mthode1 dict({one: 2, two: 3}) // mthode2 quivalente dict(zip((one, two), (2, 3))) // mthode3 quivalente dict([[two, 3], [one, 2]]) // mthode4 quivalente // Accder aux lments print dictionnaire1[cle1] print dictionnaire1[cle2] print dictionnaire2[cle2][cleB]

// element 1 // 2 // element 2

// Mthodes spcifiques aux dictionnaires Source: Mapping Type Dict (http://docs.python.org/library/stdtypes.html#mapping-types-dict) - keys() : retourne une liste des diffrentes cls. - values() : retourne une liste des diffrentes valeurs. - has_key(cle) : vrifie si le dictionnaire dispose de la cl.

921

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)

24.4.7.7. Type de donnes : Autres (None, NotImplemented, etc...)


Un type None utilis pour signier labsence de valeur. Un type NotImplemented utilis dans certains cas particuliers pour prciser quune mthode nest pas implmente.

24.4.7.8. Les bloques dinstructions


Pour dlimiter les instructions il suft de revenir la ligne. Les instructions composes tel if ou while ncessitent le caractre : pour indiquer leur n. Chaque instruction lintrieur dune boucle ou dune structure conditionnelle est prcd par une tabulation ou des espaces. Au sein dun mme programme, il ne faut pas mlanger espaces et tabulations. Pour tout nouveau programme, il est recommand dutiliser 4 espaces 1 . La plupart des diteurs de texte permettent daisment faire en sorte que la touche de tabulation produise 4 espaces.

24.4.7.9. Affectation (=) / Afchage (print)


Laffectation dun objet est ralise en utilisant le signe =.
Important : Cette instruction cre une rfrence un objet et non pas une copie.

Il est possible de faire des affectations par paquets laide des tuples ou des listes. Lors dune affectation les noms des variables doivent respecter les rgles suivantes :
Le premier caractre doit tre une lettre ou un underscore. Les caractres suivants doivent tre des lettres, des chiffres ou des underscores. Les noms de variables sont sensibles la casse. Enfin le nom de la variable ne doit pas tre un mot rserv par le langage.

Exemples: var = 1 var1, var2 = u"valeur1", u"valeur2" [var1, var2] = [u"valeur1", u"valeur2"]

// Affectation simple // Affectation multiple

922

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)


var1, var2 = var2, var1 // Trs pratique pour permuter des valeurs

Linstruction print permet dafcher tout objet sous sa forme textuelle :

Source: String Formatting (http://docs.python.org/library/stdtypes.html#string-formatting-op print uchaine 1, uchaine2 // Affichage de multiples elements print u"%s -> %s : %d" % (uchaine 1, uchaine2, 10) // Affichage avec formatage des chain // chaine 1 -> chaine2 : 10 var1, var2, valeur = uchaine 1, uchaine2, 10 // Formatage via dictionnaire print u"%(cle_1)s -> %(cle2)s : %(val)d" % \ {ucle_1:var1, ucle2:var2, uval:valeur} // Masques pour le formatage : - %s chaine (permet laffichage de tout objet) - %c caractre - %d entier dcimal - %o entier octal - %x entier hexadecimal (%X pour avoir les lettres en majuscules) - %e,%f,%g rels - %% chappement du caractre %.

Note : Les dictionnaires acceptent des clefs de diffrents types. Toutefois, dans le cas particulier dutilisation de dictionnaire pour le formattage de chane, les clefs ne peuvent tre que de type chane : String(str) ou Unicode(unicode) !
dct = {ubonjour:ubonjour, 2:umonde, u2:unouveau monde,} print u"%(bonjour)s le %(2)s" % dct >>> bonjour le nouveau monde

%(2)s correspond la cl u2 , sil elle savre manquante dans le dictionnaire, le systme retournera une erreur. De fait la cl 2 ne servira jamais pour le formatage.

Note : Plutt que dessayer dutiliser des indices numrique pour le formatage en transformant %(2)s en autre chose (ce qui est techniquement impossible), le mieux est dutiliser un tuple :
print u"%s le %s" % (ubonjour, umonde)

923

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)

24.4.7.10. Operateurs boolens (and, or, not)


Comme dans tout langage on retrouve dans Python les oprateurs boolens : and (ET logique), or (OU logique), not (Ngation).

24.4.7.11. if/switch : instructions conditionnelles


Important : Lindentation est trs importante puisque cest elle qui xe les limites du bloc li cette instruction.

Note : else est optionel

if
# Structure if test : bloc de code bloc de code continue elif autre test : autre bloc de code else : autre bloc de code # Exemple heure = 10 if heure <= 12: print u"cest le matin" elif 12 < heure < 18: # Cette notation est equivalente print u"cest lapres midi" # heure > 12 and heure < 18 elif 18 <= heure < 24: print u"cest le soir" else: print u"erreur"

Pour linstant, switch nexiste pas nativement en Python. Il y a des propositions pour introduire la syntaxe de dclaration switch, mais il ny a pas encore de concensus sur la question. Pour plus dinformation se rfrer PEP 275 (http://www.python.org/dev/peps/pep-0275) et PEP 3103 (http://www.python.org/dev/peps/pep-3103). En attendant, voici lquivalent :

924

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)


# Source: Switch statements in Python (http://simonwillison.net/2004/May/7/switch/) {option1: function1, option2: function2, option3: function3, option4: function4}[value]() # Exemple (avec lambdas) result = { a: lambda x: x * 5, b: lambda x: x + 7, c: lambda x: x - 2 }[value](x) # Equivalent en switch ($value) case a: $result break; case b: $result break; case c: $result break; } PHP { = $x * 5;

= $x + 7;

= $x - 2;

# Autre exemple: # Source: Alternative to switch, case and default (http://www.wellho.net/resources/ex.php4?i """ There is no switch or case in Python ... because you can do better by using its OO capabilities and a dictionary. """ def doblue (): print "The sea is blue" def dogreen (): print "Grass is green" def doyellow (): print "Sand is yellow" def redflag (): print "Red is the colour of fire" print "do NOT play with fire" def errhandler (): print "Your input has not been recognised" # set up a dictionary of actions takeaction = { "blue": doblue, "green": dogreen, "yellow": doyellow, "red": redflag} // switch equivalent // option par defaut

colour = raw_input("Please enter red blue green or yellow ") takeaction.get(colour,errhandler)() // ici errhandler est loption par d

925

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)

# Uses the get method to allow us to specify a default

24.4.7.12. for/while : instructions itratives


Important : Lindentation est trs importante puisque cest elle qui xe les limites du bloc li ces instructions.

for
# Structure for cible in objet: bloc de code else: autre bloc de test # Exemple for lettre in upython: print lettre, else: print ufin de la chaine for element in [u"chaine", 1, 5.6]: print element for indice in range(2, 8, 2): print indice

Note : Linstruction range permet de gnrer une liste dentiers :


- range(limite suprieure)

: liste dentiers de 0 limite suprieure par palier de 1. - range(limite infrieure, limite suprieure) : liste dentiers de la limite infrieure la limite suprieure par palier de 1. - range(limite infrieure, limite suprieure, palier) : liste dentiers de la limite infrieure la limite suprieure avec le palier dfi

Note : Prcision dEtienne: En passant, pour ce qui est parcours dune suite dentier (dans une boucle for par exemple), xrange est prfrable range. range renvoie une liste dentier qui ensuite

926

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)


est parcourue, xrange renvoie un gnrateur qui se contente renvoie lentier suivant lorsquil est demand. Un gnrateur est une fonction spciale destine tre parcourue dont lexecution peut tre suspendue en cours de route jusqu la prochaine itration. Cest une pythonerie sympatique manipuler. Dans Python 3 la question range/xrange est rsolu puisque les deux types sont fusionns en un seul...

Optimisation et performance :

// Source: PerformanceTips:Loops (http://wiki.python.org/moin/PythonSpeed/PerformanceTips#Lo newlist = (s.upper() for s in oldlist) // Python 2.4 newlist = [s.upper() for s in oldlist] // Python 2.0 newlist = map(str.upper, oldlist) // itration via code C compil // Au lieu de : // newlist = [] // for word in oldlist: // newlist.append(word.upper())

while
# Structure while test: bloc de code else: autre bloc de test # Exemple i = 0 while i < 10: i = i + 1 if i > 5: continue print i else: print u"fin de la boucle" >>>1 2 3 4 5 fin de la boucle i = 0 while i < 10: i = i + 1 if i > 5: break print i else:

927

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)


print u"fin de la boucle" >>>1 2 3 4 5 fin de la boucle

Note : else est optionel. break permet de sortir de la boucle. continue permet de revenir au debut de la boucle.

24.4.7.13. Les Fonctions


La dclaration dune fonction consiste en une ligne dentte commencant par linstruction def suivie dun bloc dinstructions indentes. Dans cette entte se trouve le nom de la fonction et la liste des paramtres (ou arguments) sil y en a. Sil y a plusieurs paramtres ils sont spars par des virgules. Le bloc dinstructions peut contenir linstruction return qui permet de renvoyer un rsultat lappelant.
# Dfinition de fonction def nomFonction (parametre1, parametre2, ..., parametreN): bloc instructions return valeurRetour

# Exemples def helloWorld (nom): print u"bonjour " + nom def faireSomme(nombre1, nombre2): return nombre1 + nombre2 def fonction(x, y):... fonction(a, b) fonction(y=a, x=b) def fontion(x=3,y=1) // 1 paramtre en entre

// 2 paramtres en entre // resultat retourne // Arguments passs par mots-cls // Utilisation // Equivalent // Parametres x et y deviennent // optionel lors de lappel car affect // de valeur par dfaut

928

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)


Important : Les paramtres des fonctions ne sont pas typs. Cest un des principes de base de Python : on manipule des objets sans prsager de leur type mais en fonction de leur capacit : si deux objets sont sommables ils peuvent utiliser la fonction faireSomme. Aussi cette fonction va faire la somme des lments sil sagit de types numriques et dans le cas de chanes de caractres elle va les concatner.

Important : En rgle gnrale les paramtres ont une porte locale et sont dclars uniquement dans lespace de nom de la fonction. Cest du moins le cas pour les objets non modiables comme les types numriques, les chanes de caractres ou les tuples. Dans ce cas on parle de passage par valeur et lobjet pass en paramtre ne sera pas affect par les traitements de la fonction (sauf si lon utilise linstruction global ).
globale1 = "ma valeur" def mafonction(): global globale1 locale1 = 2 (...)

// Variable globale accessible dans la fonction // Variable locale accessible uniquement dans la fonction

Passage par rfrence lorsque les objets modiables comme les listes ou les dictionnaires passs en paramtres peuvent tre affects par les traitements de la fonction.

Note : Il est possible daffecter des valeurs par dfaut aux arguments. Leur dclaration devient alors optionnelle lors de lappel de la fonction.

Nombre darguments variables : Python permet de dclarer un nombre darguments variables avec une utilisation par position (tuple) ou par mots-cls (dictionnaire) :
def fonctionParPosition(*arguments): for valeur in arguments: print valeur def fonctionParMotsCles(**arguments): for cle in arguments.keys(): print cle, " : ", arguments[cle] >>> 1 b 3 >>> y x z fonctionParPosition(1, ub, 3)

fonctionParMotsCles(x=1, y=ub, z=3) : b : 1 : 3

929

Chapitre 24. Initiation au langage de script (PHP, Python, Perl) Manipulation de fonctions : Python fournit des expressions et des fonctions supplmentaires pour les fonctions, les expressions lambda permettent de crer des fonctions anonymes :

somme = lambda x, y: x+y concat = lambda x, y: x+y >>> print somme(1,2) 3 >>> print concat(u"une", u" chaine") une chaine

Il est ainsi possible daffecter la fonction un nom. Lexpression lambda est suivi de 1 plusieurs paramtres suivis de : et dune expression.
Important : Il nest pas possible de lui affecter un bloc mais seulement une expression.

Des rfrences vers des fonctions peuvent tre manipules comme des variables :
def somme(a, b): print a+b def concat(a, b): print a+b argumentsChoisis = (1, 2) fonctionChoisie = somme >>> fonctionChoisie(*argumentsChoisis) 3 # Le choix de la fonction aura pu se fait # en fonction de la nature des arguments, # ici des chiffres donc somme.

Note : Pour passer une liste dargument la fonction, il est ncessaire de faire prcder cette liste par * Pour faire passer des mots cls, on utilise un dictionnaire prcd de **. Sans cela la liste serait comprise comme le premier argument de la fonction

930

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)

24.4.7.14. Les Modules


Le module est llment dorganisation de plus haut niveau et va contenir les autres lments Python. Les modules sont des espaces de noms et les diffrents objets quils dnissent sont leurs attributs. Il prend la forme dun chier. Le nom du module correspond au nom du chier sans son extension ".py" :
Nom du module affichage calcul (...) <--> Fichier module affichage.py calcul.py

Vrier les chemins (PATH) o seront cherchs le modules depuis linterprteur Python :
>>> import sys >>> sys.path (...) // Importer un module // Affichier les chemins...

Note : La variable denvironnement PYTHONPATH va permettre de dnir le rpertoire dans lequel seront placs les chiers de modules.

Note : Chaque rpertoire du sys.path peut contenir des paquetages. Un paquetage est un rpertoire qui contient un chier spcial __init__.py. Chaque module (chier) du paquetage intgrera une fois import les lments dnis dans __init__.py (mais ce chier peut tre laiss vide).

Deux instructions vont nous permettre dutiliser les modules :

- import : obtenir la totalit des attributs du module. - from : se limiter certains attributs.

// Utilisation from calcul import pi, perimetreCercle

// pi, perimetreCercle sont des attributs (variabl // ou fonctions) dfinit dans le module calcul

931

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)


// c.a.d dans le fichier calcul.py // or import calcul // "cacul" est le nom du module //Importe tous les attributs

// et aussi import sys import calcul print sys.modules[calcul].pi print getattr(calcul, pi) // // // //

Importe le module systme Importe le module calcul Accs lattribut pi du module calcul via Alternative getattr(module_name, variable_ou_fo

Re-charger un module modi aprs avoir t import :

reload(calcul)

// Recharge module calcul

Note : La fonction reload prend un module en paramtre mais les attributs rcuprs avec from ne sont pas qualis avec un espace de nom. Aussi reload naurait eu aucun effet sur eux.

Lister les diffrents attributs du module et ceux fournis par Python :

dir(calcul) calcul.__dict__.keys()

// Obtenir la liste des attributs dun module // Alternativement via lattribut __dict__ // dictionnaire dans lequel les espaces de noms des modules so

>>>[__builtins__, __doc__, __file__, __name__, perimetreCercle, pi, surfaceCercle] // On remarque la prsence en plus dattributs intgrs : __builtins__ : __name__ : contient le nom du module lorsquil est import. prend la valeur __main__ dans le cas o le module est excut avec la commande python.

932

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)


Note : Ceci permet une certaine introspection au niveau du module et ainsi de modier son comportement selon lusage que lon souhaite en faire. Il est possible daller encore plus loin dans lintrospection grce au module sys et son attribut modules. Cet attribut est un dictionnaire qui rfrence tous les modules dj chargs avec leur nom en guise de cl.

24.4.7.15. Les Classes


Tout comme les modules, les classes sont lies des espaces de noms et sont dnies avec linstruction class qui va ensuite les affecter un nom. Dans cet espace de noms, les noms qualis constituent les attributs de classe et les fonctions les mthodes. Dclaration dune classe :

// Prototype class MaClasse: def maMethode(self, parametre): self.attribut = parametre

// // // //

Dclar comme une fonction avec premier paramtre obligatoire les proprits sont elles aussi prfixes par self

self : rfrence vers linstance en cours dutilisation __init__ : le constructeur __del__ : le destructeur

// Heritage class SuperClasse: def affectation(self, valeur): self.attribut = valeur def affichage(self): print self.attribut class ClasseFille(SuperClasse): def affichage(self): SuperClasse.affichage(self) print u"valeur hrite de la classe fille : " + self.attribut

933

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)


Note : self en tant quargument pour fournir la classe lle linstance avec laquelle on travaille.

Note : Python permet galement lhritage multiple en passant plusieurs classes entre parenthses, spares par des virgules. Lordre de lecture des super classes se fait de gauche droite. Si 2 super classes ont un mme attribut dont ne dispose pas la sous classe, Python sarrtera celui de la premire super classe.

La surcharge doprateurs permet de donner nos classes un comportement proche de celui des oprateurs intgrs. Les classes doivent implmenter des mthodes avec un nommage spcial :

// Surcharge doprateurs // Exemple avec "*" class Affichage: def __init__(self, valeur): self.element = valeur def __mul__(self, fois): print self.element*fois def affiche(self): print self.element >>> instance = Affichage(u"python") >>> instance * 3 pythonpythonpython >>> instance.affiche() python

// Mthodes spciales permettant de surcharger les oprateurs : Exemples __add__ __mul__ __sub__ __div__ __repr__ __cmp__ __lt__, __le__, __gt__, __ge__ Commentaires Oprateur + Oprateur * Oprateur Oprateur / Mthode appele pour grer laffichage de lobjet Oprateur == Oprateurs <, <=, >, >=

Note : Dautres fonctions spciales lies la surcharge doprateurs existent, se rfrer la documentation Python (http://docs.python.org/reference/datamodel.html#specialnames).

934

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)

24.4.7.16. Les Exceptions


Les exceptions vont nous permettre lorsquelles surviennent de stopper lexcution du programme en cours pour excuter dautres pans de codes ou interrompre le programme. Python propose plusieurs mthodes dinterception des exceptions, permetant de grer celles-ci ou de sassurer quune action soit toujours traite (et ce quune exception intervienne ou non).
// Gestion des exceptions try: bloc_instructions except exceptionType, exceptionData: bloc_instructions else: bloc_instructions

Linstruction except dispose de 2 clauses optionnelles :

- la premire (exceptionType) spcifie un type dexception prendre en compte - la deuxime (exceptionData) correspond des informations passes la leve de lexceptio

Il peut y avoir plusieurs instructions except la suite pour en intercepter plusieurs. Le bloc else est optionnel et sera excut si aucune exception ne survient pendant lexcution du bloc try. Si une exception survient mais nest pas intercepte elle est propage vers un bloc try englobant sinon le programme est interrompu et le message derreur apparat.
// Garantir un traitement try: bloc_instructions finally: bloc_instructions

Le bloc nally sera excut quune exception soit leve ou non. Contrairement linstruction except lexception sera propage vers le haut.
// Exceptions utilisateurs

935

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)


class MonException(Exception): pass try: raise MonException, uvoici la description de mon exception except MonException, info: print MonException.__name__, info >>> MonException voici la description de mon exception

Une exception peut tre leve par le programme avec linstruction raise. Elle autorise 2 clauses :
- la premire est le nom de lexception - la seconde, optionnelle, est un objet pour prciser le contexte de lexception

// Hierarchy des classes dexception intgres Source: Built-In Exceptions (http://docs.python.org/library/exceptions.html#bltin-exceptions BaseException +-- SystemExit +-- KeyboardInterrupt +-- GeneratorExit +-- Exception +-- StopIteration +-- StandardError | +-- BufferError | +-- ArithmeticError | | +-- FloatingPointError | | +-- OverflowError | | +-- ZeroDivisionError | +-- AssertionError | +-- AttributeError | +-- EnvironmentError | | +-- IOError | | +-- OSError | | +-- WindowsError (Windows) | | +-- VMSError (VMS) | +-- EOFError | +-- ImportError | +-- LookupError | | +-- IndexError | | +-- KeyError | +-- MemoryError | +-- NameError | | +-- UnboundLocalError | +-- ReferenceError | +-- RuntimeError | | +-- NotImplementedError | +-- SyntaxError | | +-- IndentationError

936

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)


| | +-- TabError | +-- SystemError | +-- TypeError | +-- ValueError | +-- UnicodeError | +-- UnicodeDecodeError | +-- UnicodeEncodeError | +-- UnicodeTranslateError +-- Warning +-- DeprecationWarning +-- PendingDeprecationWarning +-- RuntimeWarning +-- SyntaxWarning +-- UserWarning +-- FutureWarning +-- ImportWarning +-- UnicodeWarning +-- BytesWarning

24.4.7.17. Quelques tests...


$ python Python 2.6.4 (r264:75706, Dec 7 2009, 18:43:55) [GCC 4.4.1] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> print """Bonjour ... Comment Ca ... Va ... ? ... """ Bonjour Comment Ca Va ? >>> print "Bonjour \n le \ ... monde" Bonjour le monde >>> print u"bonjour le monde" bonjour le monde >>> print u"%s le %s" % (bonjour,monde) bonjour le monde >>> print u"%(bonjour)s le %(2)s" % {ubonjour:ubonjour, 2:umonde} Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: u2

937

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)

>>> print {ubonjour:ubonjour, 2:umonde} {ubonjour: ubonjour, 2: umonde} >>> print {ubonjour:ubonjour, 2:umonde}.values() [ubonjour, umonde] >>> x = {ubonjour:ubonjour, 2:umonde} >>> print x[2] monde >>> x = toto >>> print x toto >>> def mafonction(test): ... print test ... >>> mafonction(x) toto >>> if x == toto: ... print x ... else: ... print no ... toto >>> if x == toti: ... print x ... else: ... print no ... no >>> for i in (1,2,3): ... print i ... 1 2 3 >>> for i in range(3): ... print i ... 0 1 2 >>> for i in range(3, 7): ... print i ... 3 4 5 6

938

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)


>>> for i in range (10, 20, 2): ... print i ... 10 12 14 16 18 >>> i=0 >>> while i<3: ... print i ... i=i+1 ... 0 1 2 >>> x, y = (1,2,3), {4,5,6} File "<stdin>", line 1 x, y = (1,2,3), {4,5,6} ^ SyntaxError: invalid syntax >>> x, y = (1,2,3), [4,5,6] >>> x, y, z = (1,2,3), [4,5,6], {one:1, two:2} >>> print x, y, z (1, 2, 3) [4, 5, 6] {two: 2, one: 1} >>> s2 = "Chaine avec \n retour la ligne" >>> print s2 Chaine avec retour la ligne >>> s2 = r"Chaine avec \n retour la ligne" >>> print s2 Chaine avec \n retour la ligne >>> dict(one=1, two=2) {two: 2, one: 1} >>> dict({two: 2, one: 1}) {two: 2, one: 1} >>> dict(zip((one,two),(1,2))) {two: 2, one: 1} >>> dict(zip((two,one),(2,1))) {two: 2, one: 1} >>> print dict([[one,1],[two,2]]) {two: 2, one: 1} >>> print dict([[two,2],[one,1]]) {two: 2, one: 1} >>> def doblue(): print "blue" >>> def dogreen(): print "green" >>> def default(): print "default"

939

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)


>>> action= {b:doblue(), g:dogreen()} blue green >>> a = b >>> action.get(a,default) >>> action.get(a,default)() Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: NoneType object is not callable >>> action.get(a,default())() default Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: NoneType object is not callable >>> print a b >>> >>> print action {b: None, g: None} >>> action= {b:doblue, g:dogreen} >>> print action {b: <function doblue at 0x17b1848>, g: <function dogreen at 0x17b2de8>} >>> action.get(a,default)() blue >>> a = g >>> action.get(a,default)() green >>> a = r >>> action.get(a,default)() default >>> class MaClasse(): ... prop1 = "ceci est ma classe" ... >>> t = MaClasse() >>> t.prop1 ceci est ma classe >>> class MaClasse(): ... prop1 = "ceci est ma classe" ... def __init__(self, text): ... self.prop2 = text ... def pprint(self): ... print self.prop1 ... print self.prop2 ... >>> t = MaClasse() Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: __init__() takes exactly 2 arguments (1 given) >>> t = MaClasse(proprit 2)

940

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)

>>> t.pprint <bound method MaClasse.pprint of <__main__.MaClasse instance at 0x17acc20>> >>> t.pprint() ceci est ma classe proprit 2 >>> t.prop1 ceci est ma classe >>> t.prop2 propri\xc3\xa9t\xc3\xa9 2 >>> t.prop2.decode() Traceback (most recent call last): File "<stdin>", line 1, in <module> UnicodeDecodeError: ascii codec cant decode byte 0xc3 in position 6: ordinal not in range >>> t.prop2.decode(unicode) Traceback (most recent call last): File "<stdin>", line 1, in <module> LookupError: unknown encoding: unicode >>> t.prop2.decode(utf-8) upropri\xe9t\xe9 2 >>> t.prop2.decode(latin_1) upropri\xc3\xa9t\xc3\xa9 2 >>> sys.getdefaultencoding() ascii >>> t.prop2.decode(ascii) Traceback (most recent call last): File "<stdin>", line 1, in <module> UnicodeDecodeError: ascii codec cant decode byte 0xc3 in position 6: ordinal not in range >>> t = MaClasse(uproprit 2) >>> t.pprint() ceci est ma classe proprit 2 >>> t.prop1 ceci est ma classe >>> t.prop2 upropri\xe9t\xe9 2 >>> t.prop2.decode(utf-8) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/lib/python2.6/encodings/utf_8.py", line 16, in decode return codecs.utf_8_decode(input, errors, True) UnicodeEncodeError: ascii codec cant encode character u\xe9 in position 6: ordinal not in range(128)

Cette erreur est lie au mode interactif En utilisant des chiers et en prcisant bien lencodage, elle disparat :) Lors de la deuxime instanciation une chane unicode est cr avec un codage ascii (le codage par dfaut) en mettant une chane accentue. Cest un objet un peu boiteux qui se manipule mal...

941

Chapitre 24. Initiation au langage de script (PHP, Python, Perl) Un peu mieux (si le codage par dfaut nest pas appropri) :
t = MaClasse(unicode(proprit 2, encoding=utf-8))

Contrairement print linterprteur Python fait un afchage brut de la chane sans prendre en compte le codage et donc il est normal que lon aie ces caractres bizarres. Sinon ces problmes dmontrent bien la ncessit dutiliser de le type unicode et un codage adapt de type utf-8 ;) Pour plus dinformation, voir les sections ddies : Encodage des chiers sources Encodage des chanes de caractres.

942

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)

24.4.8. Rsum du language (Cheatsheet)


Figure 24-14. SI016 Python Cheatsheet 1/2

943

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)

Source: Apprendre programmer avec Python 2 (http://inforef.be/swi/download/apprendre_python.pdf) de Grard Swinnen (P.78)

944

Chapitre 24. Initiation au langage de script (PHP, Python, Perl) Figure 24-15. SI016 Python Cheatsheet 1/2

945

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)

Source: Apprendre programmer avec Python 2 (http://inforef.be/swi/download/apprendre_python.pdf) de Grard Swinnen (P.179)

24.4.9. Coder en Python avec du Style !


Source(s):

Web: PEP 8 -- Style Guide for Python Code (http://www.python.org/dev/peps/pep-0008) PEP 257 -Docstring Conventions (http://www.python.org/dev/peps/pep-0257) Python coding style guide for Mailman (http://barry.warsaw.us/software/STYLEGUIDE.txt) CamelCase/medial capitals (Nom de variable) (http://en.wikipedia.org/wiki/CamelCase) [Python-ideas] 80 character line width vs. something wider (http://markmail.org/message/g275nvrghtnyllwt)

Les documents rfrencs ci-dessus sont synthtiques et regorge dinformation utile pour formatter convenablement son code Python, notament sur les conventions de nommage. Selon Etienne, il est prfrable de toujours essayer de suivre au maximum la PEP 8. Cela fait parti des rigidits de la programmation Python qui dplaisent certains mais il trouve cela trs confortable car en pratique cest agrable de se sentir comme chez soi dans des codes que lon dcouvre. Au passage, dans la PEP8 il est prconis davoir maximum 79 caractres par ligne (et non 80) ;-) Dans le TD Python Persistence de donne, il y a le code suivant...
// Extrait du document PDF de lof (...) self.curseur.execute("INSERT INTO modules (nom, description, volumeHoraire, responsable) VALUES (%s, %s,%s,%s)" % (nom, description, volumeHoraire, responsable)) (...)

Jimagine trs bien que ce soit le style de codage Python du au fait quil se base sur le formatage du texte pour rprer les blocs dinstructions... toutefois ca me perturbe un peu dindenter convenablement le texte puis davoir soudainement allign des lignes tout gauche en dcallage complet de mon bloc dinstruction !!! Cest pas tres homogne je trouve pour la lecture du code...

946

Chapitre 24. Initiation au langage de script (PHP, Python, Perl) De la meme facon, tout mettre sur la meme ligne est aussi hors de question en terme de visibilit... Cest toutefois le choix de Sylvain qui me conrme que dans le chier source, ce bloc dinstruction est sur une ligne et non trois comme formatter automatiquement dans le document PDF. Jen suis toutefois parvenu trouver une solution et formatter mon code de cette facon :
(...)

query = "INSERT INTO modules (nom, description, volumeHoraire, responsab + "VALUES (%s,%s,%s,%s)" \ % (nom, description, volumeHoraire, responsable) self.curseur.execute(query) (...) # autre alternative ci-aprs...

Ceci permet de garder un alignement total du bloc de code mais linconvnient cest que du coup on perd en performance (pas beaucoup, je pense, mais un peu tout de meme :) du fait de lajot dune concatenation. Sylvain suggre dutiliser la chaine de caractres multilignes (ce quoi javais dj pens) :
"""Ma chaine sur plusieurs lignes %s """ %(une autre chaine)

Cependant dans le cas de la requte a ne fonctionne simplement pas. En effet, linconvnient de la chane mulitligne, cest justement que si le code en deuxieme ligne est indent (pour laligner au reste du bloc) tous les espaces dindentation se retrouve dans la chane enregistre bien videment :) Pas vraiment ce que lon cherche obtenir. Cest certainement ce que je considrerait comme "un petit dfaut" de Python de part lutilisation dun formatage par indentation (ce qui est positif en soit) on amne un petit effet secondaire qui va nalement lencontre de lobjectif initial : assurer la lisibilit du code... Finalement, une autre alternative qui est peut-tre plus proche du style de codage Python (si on veut pas tout sur une ligne) :
(...)

query = ["INSERT INTO modules (nom, description, volumeHoraire, responsable)" "VALUES (%s,%s,%s,%s)" % # Loprateur qui (nom, description, volumeHoraire, responsable)] # la mme ligne p self.curseur.execute(" ".join(query)) # Explication ici

947

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)


(...)

Voir aussi Performance Concatenation

24.4.10. Documentation du code


Voir aussi la section prcdente : Coder en Python avec du Style ! Python dispose nativement dlments de documentation pour les fonctions, les modules ou les classes. Il sagit des chanes de documentation qui sont des chanes places en dbut de module ou aprs les instructions def et class. Ces chanes de documentation (docstring)sont disponibles mme lorsque lon excute un programme grce lattribut __doc__.
u""" Documentation multilignes sur le module documentation. Il comprend : - une classe "ClasseDocumentee", - une fonction "FonctionDocumentee".""" class ClasseDocumentee: u"Documentation sur une seule ligne de la classe : ClasseDocumentee." def methode(self): u"Documentation de la mthode : methode" print u"python" def FonctionDocumentee(): u"Documentation de la fonction : FonctionDocumentee." print u"fonction documente" >>> import documentation >>> print documentation.__doc__ (...) // Gnration de documentation

Plusieurs outils de gnration de documentation sont disponibles pour Python. Le module pydoc est intgr de base dans python. Plusieurs options disponibles :
- pydoc element : va afficher les informations sur llment passer en paramtre de faon identique au man. - pydoc -w element : enregistrer les informations sur llment dans un fichier HTML du nom de llment.

948

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)

Dautres options sont disponibles notamment pour obtenir la documentation des lments accessibles au travers dun serveur HTTP. La documentation actuelle de python est gnre avec Sphinx (http://sphinx.pocoo.org).

24.4.11. Performance (Conseils, Concatenation, etc...)


Source(s):

Web: Python Speed Performance Tips : (http://wiki.python.org/moin/PythonSpeed/PerformanceTips) Loops (http://wiki.python.org/moin/PythonSpeed/PerformanceTips#Loops), StringConcatenation (http://wiki.python.org/moin/PythonSpeed/PerformanceTips#StringConcatenation) Efcient String Concatenation in Python (http://www.skymind.com/~ocrow/python_string) Efcient string concatenation methods (Forum) (http://markmail.org/message/gvgd5gpm5l3pdyqb#query:+page:1+mid:rpsqfnqacuwvu5+state:results) FAQ - Why is join() a string method instead of a list or tuple method ? (http://www.python.org/doc//current/faq/design.html#why-is-join-a-string-method-instead-of-a-listor-tuple-method)

La premire chose faire est de bien identier ce que lon entends par performance. Pour les uns cela peut tre la vitesse dexecution (indpendament des ressources utiliss), pour dautres cela peut tre de minimiser les ressources (mmoire, procesus) au dtriment de la vitesse, et pour dautres encore cela peut tre un obtenir un ratio vitesse/performance le plus adquate ou acceptable possible. Les performances dpendent directement du type dopration que lon souhaite effectuer, et de lalgorithme (ou fonction intgr) choisit pour leffectuer. Il faut donc faire le bon choix en fonction des performances que lon souhaite obtenir. Prenons lexemple de la concatenation de chane... Daprs cet article (http://www.skymind.com/~ocrow/python_string) (qui date un peu et donc se rfre une version de Python antrieur 2.4), la mthode suivante serait la plus efciente (rapport ressource/vitesse) :
Method 5: Ecrire dans un pseudo fichier: def method5(): from cStringIO import StringIO file_str = StringIO()

949

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)


for num in xrange(loop_count): file_str.write(num) return file_str.getvalue()

cStringIO est un module qui fournit la classe StringIO qui fonctionne comme un chier, mais stoque les donnes sous forme de chane. Pour ajouter au chier il suft simplement dcrire dedans. Linsertion et la suppresion de sous-chane est aussi possible. La mthode la plus rapide serait :
Method 6: List comprehensions def method6(): return .join([num for num in xrange(loop_count)])

Toutefois, daprs ce message de forum (http://markmail.org/message/5edftu3kjdk2zpx5), les conversions binaire vers chane dcimale (binary-to-decimal-string) tel que num sont relativement expensive! En gnrant les chanes lavance et en les mettants dans une liste globale le rsultat de la mthode 6 pourrait tre amlior de 20% 30% apparement... Quelque chose du genre...

def method6a(): out_str = .join([NUMS[num] for num in xrange(loop_count)]) ps_stats() retur loop_count = 500000 NUMS = [n for n in xrange(0,loop_count)] ...

// [0,1,2,...,500000]

En il est important de noter que dune version lautre de Python les performances des oprations peuvent varier. Ainsi dans ce message de forum (http://markmail.org/message/5edftu3kjdk2zpx5#query:+page:1+mid:gvgd5gpm5l3pdyqb+state:results) il est dit : " ...The relative speed of list.append() and list comprehensions versus other approaches will improve dramatically in Py2.4. IOW, the rankings are version specic. Also, append works faster if you precompute the attribute lookup before the loop: build = str_list.append..."

950

Chapitre 24. Initiation au langage de script (PHP, Python, Perl) A chacun dy voir midi sa porte... "choice is yours !"
Note : Larticle prsent est assez vieux, et il semble que les choses ce soit amlior depuis et que dans Python 2.5 la concatnation de chane est assez rapide.

24.4.12. Persistance des donnes : Les chiers


Source(s):

OF: SI016-ch10-tdpersistance.pdf (docs/eof/SI016-ch10-tdpersistance.pdf)

24.4.12.1. Objet Fichier


Des fonctions spciques permettent de lire/crire un chier :

// Retourne un objet fichier // File Object (http://docs.python.org/library/stdtypes.html#bltin-file-objects) / Fonctions open(fichier, [mode,[ bufsize]]) // Alternativement on peut utiliser file(fichier, [mode,[ bufsize]]) // la fonction Constructeur dun objet fichier fichier : indique le chemin vers le fichier considr mode : prcise le mode dutilisation du fichier, mode daccs, r : lecture (mode par dfaut) w : criture (tronque le fichier si existe) a : Tous les lments placs en fin de fichier r+,w+,a+ : mise jour (mode mixte) w+ (tronque le fichier)

bufsize : taille du buffer (celui-ci est gnralement omis)

Note : Dans la documentation Python, il est indiqu dutiliser de prfrence la fonction open() plutt que dappeler directement le constructeur le(). le est plutt utilis pour tester le type, par exemple : isinstance(f, le).

// Principales mthodes de lobjet fichier (File Object (http://docs.python.org/library/stdt read([size]) : Lit le nombre doctets prciss. Si rien nest prcis retourne tout le fichier. readline([size]) : Lit une ligne entire (jusquau premier caractre de fin de ligne). Si une taille est prcise la ligne ne pourra dpasser ce nombre doctets. write(chaine) : Ecrit la chaine dans le fichier.

951

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)


close() : Ferme le fichier.

Je cre mon premier script Python :


// monFichier.py # -*- coding: utf-8 -*# # # # # # # # # # # # # # # #

Document Created on Author Licence

: : : :

monFichier.py 17 June 2010 Richard Lger GPLv3

Description: of Formation CP2LL SI016 Python TD Mon premier script ! Enregistre une information dans un fichier Lit linformation depuis le fichier et laffiche lcran

contenu = "" fpath = "monFichier.log" info = "Texte crit via Python\n" fichier = file(fpath, w+) fichier.write(info) fichier.close() fichier = file(fpath) contenu = fichier.read() fichier.close() print contenu

Puis je teste :)
$ python si016python/monFichier.py Texte crit via Python $ ls -l monFichier.log -rw-r--r-- 1 filostene filostene 23 2010-06-17 20:24 monFichier.log

952

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)


$ cat monFichier.log Texte crit via Python

Note : Il est remarqu que, par dfaut, le chier rsultant (monFichier.log) est cr dans le rpertoire courant depuis lequel le script est excut, et non dans le rpertoire dans lequel le script est enregistr.

Je modie mon script de facon pouvoir lexcuter directement :


$ nano monFichier.py #!/usr/bin/python # -*- coding: utf-8 -*(...)

// Je rajoute un shabang // avant la ligne dencodage

$ cd si016python/ $ ls -l -rw-r--r-- 1 filostene filostene 607 2010-06-17 20:48 monFichier.py $ chmod u+x monFichier.py // Je rends le script executable $ ./monFichier.py // Je lexecute Texte crit via Python // Ok ca fonctionne :)

24.4.12.2. Module Pickle


Le module Pickle est intressant pour les dveloppements qui font appel lutilisation dobjets. Il permet de srialiser un objet, cest dire quil transforme un objet en un ux doctets. Il sera ensuite possible de lenregistrer dans un chier ou de le transmettre au travers dun rseau. La srialisation peut prendre plusieurs formes, deux support :
- Une forme lisible (XML) comme celui de SOAP - Une forme binaire comme dans le cas de CORBA

Crer le script suivant :


// personne.py

953

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)


#!/usr/bin/python # -*- coding: utf-8 -*# # # # # # # # # # # # # # # #

Document Created on Author Licence

: : : :

personne.py 17 June 2010 Richard Lger GPLv3

Description: of Formation CP2LL SI016 Python TD Mon deuxime script ! Enregistre les information dune personne dans un fichier Lit les informations depuis le fichier et les affiche lcran

import pickle class Personne: def __init__(self, nom, prenom): self.nom = nom self.prenom = prenom def presentation(self): print "%s %s"%(self.prenom, self.nom) fpath = "personne.sav" moi = Personne("Lger","Richard") moi.presentation() fichier = file(fpath, "w") fichier1 = file(fpath+"1", "w") fichier2 = file(fpath+"2", "w") pickle.dump(moi,fichier) pickle.dump(moi,fichier1, 1) pickle.dump(moi,fichier2, 2) fichier.close() fichier1.close() fichier2.close() fichier = file(fpath, "r") unAutreMoi = pickle.load(fichier) unAutreMoi.presentation() // Protocole 0 // Protocole 1 // Protocole 2

954

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)


$ chmod u+x personne.py $ ./personne.py Richard Lger Richard Lger $ cat personne.sav (i__main__ Personne p0 (dp1 Snom p2 SL\xc3\xa9ger p3 sSprenom p4 SRichard p5 // Rendre le script executable // Executer le script

// Fichier resultant

$ hexdump personne.sav1 // Fichier binaire 1 0000000 6328 5f5f 616d 6e69 5f5f 500a 7265 6f73 (...) $ hexdump personne.sav2 // Fichier binaire 2 0000000 0280 6328 5f5f 616d 6e69 5f5f 500a 7265 (...)

Il existe 3 protocoles (source: PEP 307 (http://www.python.org/dev/peps/pep-0307)) :


- version 0 texte ASCII, - version 1 binaire, versions de Python < 2.3, - version 2 binaire, partir de la version 2.3 de Python.

Le module Pickle dispose aussi des classes Pickler et Unpickler dont des classes utilisateur peuvent hriter.

24.4.13. Persistance des donnes : Base de donnes


Source(s):

OF: SI016-ch10-tdpersistance.pdf (docs/eof/SI016-ch10-tdpersistance.pdf)

955

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)


Note : Tlcharger larchive .zip regroupant tous les scripts de ce TD : SI016 Python (Archive .zip) Version 01 (projets/si016python-v01.zip) Accessibles aussi depuis la page Projets/TPs (projets/index.html).

Python dispose de plusieurs modules pour se connecter diffrentes bases de donnes : MySQL, PostgreSQL, Oracle, Sqlite. Il existe une spcication dAPI que doivent respecter les modules qui permettent de se connecter une base de donnes. Cette spcication est dcrite dans une PEP (Python Enhancement Proposal 1) (http://www.python.org/dev/peps/) qui est Python ce que les RFC sont lInternet. Ceci permet pour les modules qui la respectent de garantir la portabilit de code.

24.4.13.1. Mysql
$ mysql -u root -p (...) (root@localhost) [(none)]> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | bibliotheque | | epl | | kring | | mysql | | si016php | | spiptpbase | | sr009 | | tp_chat | | videotheque | +--------------------+ 10 rows in set (0.80 sec) (root@localhost) [(none)]> create database eof; Query OK, 1 row affected (0.04 sec) (root@localhost) [(none)]> grant all privileges on eof.* to rlr@localhost identified by Query OK, 0 rows affected (0.16 sec) (root@localhost) [(none)]> quit $ mysql -u rlr -p (...) (rlr@localhost) [(none)]> use eof

956

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)


Database changed (rlr@localhost) [eof]>

(rlr@localhost) [eof]> show grants for rlr@localhost; +------------------------------------------------------------------------------------------| Grants for rlr@localhost +------------------------------------------------------------------------------------------| GRANT USAGE ON *.* TO rlr@localhost IDENTIFIED BY PASSWORD *F83365F1EDD6D5B45C390EBD9 | GRANT ALL PRIVILEGES ON eof.* TO rlr@localhost +------------------------------------------------------------------------------------------2 rows in set (0.00 sec)

24.4.13.2. Module mysql-python (MySQLdb)


Source(s):

Web: MySQLdb (http://mysql-python.sourceforge.net/MySQLdb.html#mysqldb)

// Vrifier la disponibilit du module spcifique MySQL pour Python. $ python Python 2.5.2 (r252:60911, Jan 24 2010, 14:53:14) (...) >>> import MySQLdb Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: No module named MySQLdb

Note : Ce procd peut tre coupl une gestion dexception (try ... except ) pour vrier la prsence du module lors de lexcution de scripts.

// Installer le module $ apt-get install python-mysqldb

// Test le module $ python Python 2.5.2 (r252:60911, Jan 24 2010, 14:53:14) (...) >>> import MySQLdb >>> connexion = MySQLdb.connect("localhost", "rlr", "123456") >>> curseur = connexion.cursor() >>> curseur.execute("show databases") 2L >>> print curseur.fetchall() ((information_schema,), (eof,))

// Version de Python su

// Charger le module // Activer connection

// Afficher les bases e // 2 Lignes de rsultat // Afficher le rsultat

957

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)

>>> connexion.select_db("eof") // Selectionner la base >>> curseur.execute("create table test (id int, texte varchar(50))") // Crer une table tes 0L >>> curseur.execute("show tables") // Afficher les tables 1L // 1 Ligne de rsultat >>> print curseur.fetchall() // Afficher le rsultat ((test,),) // OK ca fonctionne...

24.4.13.3. Mise en application


Pour mettre en application lutilisation nous allons imaginer une formation dcoupe en modules. Chaque module dispose dun identiant unique, dune description, dun volume horaire et dun formateur.

// Cration dune table module pour lapplication formation >>> curseur.execute("create table modules (nom varchar(50) primary key, description text, volumeHoraire int, responsable varchar(50))") // Cration 0L >>> curseur.execute("show tables") 2L >>> print curseur.fetchall() ((modules,), (test,)) >>> curseur.execute("describe modules") 4L >>> print curseur.fetchall() // Vrification ((nom, varchar(50), NO, PRI, None, ), (description, text, YES, , None, ), (volumeHoraire, int(11), YES, , None, ), (responsable, varchar(50), YES, , No

24.4.13.4. Module cmd


Utilisons le module cmd (documentation (http://docs.python.org/library/cmd.html)) : mini framework pour applications en ligne de commande. Principe simple : un prxe est associ aux mthodes pour dterminer sil sagit de commandes ou daides :

- Les mthodes commandes : prfixes par do_, prennent 2 paramtres self et linformatio - Les mthodes aide en ligne : fournie pour les commandes, prfixes par help_, prennent sel

958

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)

24.4.13.5. Mise en application


Pour grer les modules de notre formation nous devons pouvoir ajouter, supprimer et lister lensemble de ceux disponibles. Je cr le script suivant :
// formation.py #!/usr/bin/python # -*- coding: utf-8 -*# # # # # # # # # # #

Document Created on Author Licence

: : : :

formation.py 18 June 2010 Richard Lger GPLv3

Description: of Formation CP2LL SI016 Python TD

""" Gestion de modules de formation """ # Charger les dpendences import cmd, sys, MySQLdb # Classe(s) dfinition class GestionModules (cmd.Cmd): # Cration dune sous-classe "Ajouter, Supprimer, Lister des modules de formation" def __init__(self): "Initialiser lobjet..." # Appel constructeur de la classe parente cmd.Cmd.__init__(self) # Fixe le label de linvite de commande self.prompt = "Action raliser > " # Etablit la connection vers la base de donne self.connexion = MySQLdb.connect("localhost", "rlr", "123456", "eof") self.curseur = self.connexion.cursor() def do_ajout(self, nom): "Ajouter un module"

959

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)


# Obtenir info du module if nom =="": nom = raw_input("Nom du module : ") description = raw_input("Description : ") volumeHoraire = raw_input("Volume horaire : ") responsable = raw_input("Responsable : ") # Ajouter module query = "INSERT INTO modules (nom, description, volumeHoraire, responsable) " \ + "VALUES (%s,%s,%s,%s)" \ % (nom, description, volumeHoraire, responsable) print query self.curseur.execute(query)

def help_ajout(self): "Affiche laide pour ajouter un module" print """Permet dajouter un module. Le nom du module peut-etre pass directement en paramtre.""" def do_liste(self, nom): "Lister les modules existants" # Format nom if nom == "": nom = "%" else: nom = "%"+nom+"%" # Rechercher les modules correspondant query = "SELECT * FROM modules WHERE nom LIKE %s" % (nom) print query self.curseur.execute(query) # Afficher le resultat de recherche print self.curseur.fetchall() def help_liste(self): "Affiche laide pour lister les modules" print """Permet dobtenir la liste complete des modules ou ceux qui contiennent en partie le nom indiqu.""" def do_supprime(self, nom): "Supprimer un module" # Obtenir le nom du module if nom =="": nom = raw_input("Nom du module : ") # Supprime module partir du nom query = "DELETE FROM modules WHERE nom = %s" % (nom) print query

960

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)


self.curseur.execute(query) def help_supprime(self): "Affiche laide pour supprimer un module" print """Supprime le module dont le nom est pass en paramtre.""" def do_quitte(self, param): "Quitter lapplication" sys.exit() def help_quitte(self): "Affiche laide pour quitter lapplication" print """Quitte lapplication.""" # Principal if __name__ == "__main__": gestionnaire = GestionModules() gestionnaire.cmdloop()

# Si ce script est directement execut # Initialise lapplication # Execute lapplication

Je joue un peu avec puis je teste :


$ chmod u+x formation.py $ ./formation.py Action raliser > help Documented commands (type help <topic>): ======================================== ajout liste quitte supprime Undocumented commands: ====================== help Action raliser > help ajout // Teste laide en ligne Permet dajouter un module. Le nom du module peut-etre pass directement en paramtre. Action raliser > help liste Permet dobtenir la liste complete des modules ou ceux qui contiennent en partie le nom indiqu. Action raliser > help quitte Quitte lapplication. Action raliser > help supprime Supprime le module dont le nom est pass en paramtre. Action raliser > ajout // Teste ajout // Rendre le script executable // Executer le script

961

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)

Nom du module : python Description : language informatique Volume horaire : 16 Responsable : Sylvain INSERT INTO modules (nom, description, volumeHoraire, responsable) VALUES (python,languag Action raliser > liste // Teste liste SELECT * FROM modules WHERE nom LIKE % ((python, language informatique, 16L, Sylvain),)

Action raliser > ajout Nom du module : php Description : language info Volume horaire : 12 Responsable : Sylvain INSERT INTO modules (nom, description, volumeHoraire, responsable) VALUES (php,language i

Action raliser > liste SELECT * FROM modules WHERE nom LIKE % ((python, language informatique, 16L, Sylvain), (php, language info, 12L, Sylvain Action raliser > supprime Nom du module : php DELETE FROM modules WHERE nom = php // Teste suppression

Action raliser > liste SELECT * FROM modules WHERE nom LIKE % ((python, language informatique, 16L, Sylvain),) Action raliser > supprime python DELETE FROM modules WHERE nom = python Action raliser > liste SELECT * FROM modules WHERE nom LIKE % () Action raliser > quitte // La liste est vide !

// Terminer

Si on cre deux modules avec le mme nom ou si un problme de connection apparat avec la base de donne, on obtient une exception. Pour amliorer lapplication je cre une nouvelle version du script mais en introduisant la gestion derreur :
// formation-v02.py (...) # Etablit la connection vers la base de donne try:

962

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)


self.connexion = MySQLdb.connect("localhost", "rlr", "qazxsw", "eof") self.curseur = self.connexion.cursor() except MySQLdb.Error, e: erreur = "La connection la base ne peut tre tablit\n" \ + "pour les raisons suivantes :\n%s" \ % e.args[1] print erreur (...)

# Ajouter module try: query = "INSERT INTO modules (nom, description, volumeHoraire, responsable) " \ + "VALUES (%s,%s,%s,%s)" \ % (nom, description, volumeHoraire, responsable) print query self.curseur.execute(query) except MySQLdb.Error, e: erreur = "Lajout de ce module na pu tre ffectu\n" \ + "pour les raisons suivantes :\n%s" \ % e.args[1] print erreur (...)

Teste lajout dun module de mme nom sans gestion derreur, puis avec :
// AVANT $ ./formation-v01.py

Action raliser > ajout python Description : language info Volume horaire : 16 Responsable : Sylvain INSERT INTO modules (nom, description, volumeHoraire, responsable) VALUES (python,languag

Action raliser > ajout python Description : language info Volume horaire : 12 Responsable : JP INSERT INTO modules (nom, description, volumeHoraire, responsable) VALUES (python,languag Traceback (most recent call last): File "./formation-v01.py", line 113, in <module> gestionnaire.cmdloop() # Execute lapplication File "/usr/lib/python2.5/cmd.py", line 142, in cmdloop stop = self.onecmd(line) File "/usr/lib/python2.5/cmd.py", line 219, in onecmd return func(arg) File "./formation-v01.py", line 55, in do_ajout self.curseur.execute(query)

963

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)

File "/var/lib/python-support/python2.5/MySQLdb/cursors.py", line 166, in execute self.errorhandler(self, exc, value) File "/var/lib/python-support/python2.5/MySQLdb/connections.py", line 35, in defaulterrorh raise errorclass, errorvalue _mysql_exceptions.IntegrityError: (1062, "Duplicata du champ python pour la clef 1")

// APRS $ ./formation-v02.py Action raliser > liste SELECT * FROM modules WHERE nom LIKE % ((python, language info, 16L, Sylvain),)

Action raliser > ajout python Description : language informatique Volume horaire : 12 Responsable : JP INSERT INTO modules (nom, description, volumeHoraire, responsable) VALUES (python,languag Lajout de ce module na pu tre ffectu pour les raisons suivantes : Duplicata du champ python pour la clef 1

Teste la connection vers la base de donne sans gestion derreur, puis avec :
// AVANT

$ ./formation-v01.py Traceback (most recent call last): File "./formation.py", line 112, in <module> gestionnaire = GestionModules() # Initialise lapplication File "./formation.py", line 37, in __init__ self.connexion = MySQLdb.connect("localhost", "rlr", "123456", "eof") File "/var/lib/python-support/python2.5/MySQLdb/__init__.py", line 74, in Connect return Connection(*args, **kwargs) File "/var/lib/python-support/python2.5/MySQLdb/connections.py", line 170, in __init__ super(Connection, self).__init__(*args, **kwargs2) _mysql_exceptions.OperationalError: (1045, "Acc\xe8s refus\xe9 pour lutilisateur: rlr@@l

// APRES $ ./formation-v02.py La connectin la base ne peut tre tablit pour les raisons suivantes : Accs refus pour lutilisateur: rlr@@localhost (mot de passe: OUI)

964

Chapitre 24. Initiation au langage de script (PHP, Python, Perl) La commande liste retourne un tuple des diffrents enregistrements (caractristique de la mthode fetchall() qui renvoie tous les enregistrements en mme temps). Le curseur par dfaut dispose de deux autres mthodes de rcupration :

- fetchone() :retourne un seul enregistrement la fois, - fetchmany(n) :retourne un nombre n fini denregistrements.

Note : Pour connatre le prototype de ces deux fonctions se reporter :

- la PEP 249 (http ://www.python.org/dev/peps/pep-0249) qui spcifie lAPI daccs aux bases de do - la documentation du module (http://mysql-python.sourceforge.net/MySQLdb.html#mysqldb).

Je cre une nouvelle version de mon script dans laquelle je modie la mthode liste pour quelle liste les diffrents modules avec la mthode fetchone()...

// formation-v03.py (...) # Afficher le resultat de recherche module = self.curseur.fetchone() while module: print "%s: %s/%d/%s" % module module = self.curseur.fetchone() (...)

// Rsultat $ ./formation-v03.py Action raliser > liste SELECT * FROM modules WHERE nom LIKE % python: language info/16/Sylvain PHP: Lang/12/Martin

... et je cre une nouvelle mthode listeFixe qui limite lafchage un nombre donn denregistrements...

965

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)


// formation-v03.py (...) def __init__(self): "Initialiser lobjet..." (...) # Fix le nombre limit denregistrement afficher # -1 pour afficher tous les enregistrements self.recordlimit = -1

// Ajout dun parametre // dinitialisation la classe

(...) def do_liste(self, nom): "Lister les modules existants" (...) # Afficher le resultat de recherche if (self.recordlimit >= 0): // Si la limite existe en tenir modules = self.curseur.fetchmany(self.recordlimit) for m in modules: print "%s: %s|%d|%s" % m else: // Sinon tout afficher module = self.curseur.fetchone() while module: print "%s: %s/%d/%s" % module module = self.curseur.fetchone() (...) def do_listeFix(self, n): // Fixer la limite daffichage "Limite laffichage N, un nombre donn denregistrements..." if n =="": n = raw_input("Nombre maximum denregistrement afficher : ") self.recordlimit = int(n) // Proprit de la classe

def help_listeFix(self): "Affiche laide pour limiter le nombre denregistrement afficher" print """Permet de limiter la liste des modules nombre maximum (N) denregistrement. Entrer -1 pour tous les afficher""" (...)

// Rsultat $ ./formation-v03.py Action raliser > help Documented commands (type help <topic>): ======================================== ajout liste listeFix quitte supprime Undocumented commands: ====================== help

966

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)

Action raliser > help listeFix Permet de limiter la liste des modules nombre maximum (N) denregistrement. Entrer -1 pour Action raliser > liste // Par dfaut affiche tous les enregistrements SELECT * FROM modules WHERE nom LIKE % python: language info/16/Sylvain PHP: Lang/12/Martin test: test/29/test qqq: qqq/33/qqq Action raliser > listeFix 2 // Fixe limite 2 enregistrements // Affiche 2 enregistrements

Action raliser > liste SELECT * FROM modules WHERE nom LIKE % python: language info|16|Sylvain PHP: Lang|12|Martin Action raliser > listeFix 0 // Fixe limite zro

Action raliser > liste SELECT * FROM modules WHERE nom LIKE % python: language info|16|Sylvain // Mais affiche au moins un enregistrement :) // fetchmany(0) renvoie le premier enregistrement Action raliser > listeFix -1 // Enlve la limite Action raliser > liste SELECT * FROM modules WHERE nom LIKE % python: language info/16/Sylvain PHP: Lang/12/Martin test: test/29/test qqq: qqq/33/qqq Action raliser > listeFix 100 Action raliser > liste SELECT * FROM modules WHERE nom LIKE % python: language info|16|Sylvain PHP: Lang|12|Martin test: test|29|test qqq: qqq|33|qqq

En saisissant une description ou un nom de module avec une apostrophe je nobtiens pas le rsultat attendu...

Action raliser > ajout Nom du module : Lapostrophe Description : Lincroyble nouveaut

967

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)

Volume horaire : 10 Responsable : Richard INSERT INTO modules (nom, description, volumeHoraire, responsable) VALUES (Lapostrophe,L Lajout de ce module na pu tre ffectu pour les raisons suivantes : Erreur de syntaxe prs de apostrophe,Lincroyble nouveaut,10,Richard) la ligne 1

Pour corriger cela le module MySQLdb met disposition une mthode escape_string() qui permet dchapper les chanes. Je modie comme suit :

// formation-v03.py (...) def do_ajout(self, nom): (...) # Ajoute un module (...) % (MySQLdb.escape_string(nom), MySQLdb.escape_string(description), MySQLdb.escape_string(volumeHoraire), MySQLdb.escape_string(responsable)) (...)

Je teste de nouveau et ca marche...

Action raliser > ajout Nom du module : Lapostrophe Description : Lincroyable est arriv, a marche ! Volume horaire : 3 Responsable : Richard INSERT INTO modules (nom, description, volumeHoraire, responsable) VALUES (L\apostrophe,L\incroyable est arriv, a marche !,3,Richard) Action raliser > liste SELECT * FROM modules WHERE nom LIKE % python: language info/16/Sylvain PHP: Lang/12/Martin test: test/29/test qqq: qqq/33/qqq Lapostrophe: Lincroyable est arriv, a marche !/3/Richard

Je cr une nouvelle version du script dans laquelle je rajoute une mthode de modication pour permettre de modier la description de plusieurs enregistrements la fois.

968

Chapitre 24. Initiation au langage de script (PHP, Python, Perl) On utilise un dictionnaire dont la cl est le nom du module et la valeur associe cette cl la nouvelle valeur de la description :

// formation-v04.py (...) def do_modifieDescription(self, commande): "Modifier la description dun ou plusieurs modules" modules=[] dict_modules = eval(commande) for cle in dict_modules: modules.append((dict_modules[cle],cle)) try:

self.curseur.executemany("UPDATE modules SET description=%s WHERE nom = %s", (mo except MySQLdb.Error, e: erreur = "La modification na pu tre ffectu\n" \ + "pour les raisons suivantes :\n%s" \ % e.args[1] print erreur def help_modifieDescription(self): "Affiche laide pour modifier la description dun ou plusieurs modules" print """Modifier la descritpion dun ou plusieurs module. Syntaxe: modifieDescription {moduleName1:Description1, moduleName2:Description2, ...}.""" (...)

// Rsultat $ ./formation-v04.py Action raliser > help Documented commands (type help <topic>): ======================================== ajout liste listeFix modifieDescription Undocumented commands: ====================== help Action raliser > help modifieDescription Modifier la descritpion dun ou plusieurs module. Syntaxe: modifieDescription {moduleName1:Description1, moduleName2:Description2, ...}. Action raliser > liste SELECT * FROM modules WHERE nom LIKE % python: language info/16/Sylvain PHP: Lang/12/Martin

quitte

supprime

969

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)


test: test/29/test qqq: qqq /33/qqq Lapostrophe: Lincroyable est arriv, a marche !/3/Richard Action raliser > modifieDescription {qqq:Syteme d\information,test:Scurit} Action raliser > liste SELECT * FROM modules WHERE nom LIKE % python: language info/16/Sylvain PHP: Lang/12/Martin test: Scurit/29/test qqq: Syteme dinformation/33/qqq Lapostrophe: Lincroyable est arriv, a marche !/3/Richard

24.4.14. Utilisation pour le Web (Script CGI)


Source(s):

OF: SI016-ch11-tdweb.pdf (docs/eof/SI016-ch11-tdweb.pdf)

Plusieurs solutions sont possibles pour grer des pages dynamiques en Python dont les scripts CGI.

24.4.14.1. VirtualHost ddi :)


Pour travailler sur Python et tester le language, je cre un site web ddi (VirtualHost) dans la machine virtuelle (contenant la conguration LAMP) en le rendant accessible depuis lhte Ubuntu :
# Configuration VirtualBox depuis lhte 0. 1. 2. 3. 4. 5. 6. Sassurer que la VM est teinte Executer "VirtualBox" Selection la VM Aller dans "Preference > Rseau" Configurer le mode accs rseau "Accs par pont" Valider Dmarrer la VM

# Dans la machine virtuelle (VM) dmarre, crer un fichier de configuration $ nano /etc/apache2/site-enabled/si016python.eof # EoF - SI016 PYTHON <VirtualHost *:80>

970

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)


ServerName si016python.eof ServerAlias si016python DocumentRoot /mnt/hsubuntu/monjournal/source/projets/si016python/ ScriptAlias /cgi-bin/ /mnt/hsubuntu/monjournal/source/projets/si016python/cgi-$ <Directory /mnt/hsubuntu/monjournal/source/projets/si016python/cgi-bin/ > SetHandler cgi-script Options ExecCGI </Directory> </VirtualHost> # Re-dmarrer Apache pour prendre en compte le changement de configuration $ apache2ctl restart # Mettre a jour le fichier /etc/hosts pour tester en local :) ... 127.0.0.0 si016python.eof si016python ... # Ajouter un index.html dans la racine du site (DocumentRoot) Bienvenu sur si016 ! # Tester accs au site depuis le navigateur http://si016python.eof (ou http://si016python) # Obetenir lIP de la VM $ /sbin/ifconfig ... 192.168.1.102 ...

# Dans lhte Ubuntu # Mettre a jour le fichier /etc/hosts # en utilisant ladresse IP de la VM ... 192.168.1.102 si016python.eof si016python ... # Tester accs au site depuis le navigateur http://si016python.eof (ou http://si016python)

24.4.14.2. CGI
Le rpertoire pour les CGI sera /mnt/hsubuntu/monjournal/source/projets/si016python/cgi-bin/ dans lequel je place le scipt suivant pour tester la conguration :
#!/usr/bin/python # -*- coding: utf8 -*# index.py

971

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)


print "Content-Type: text/html" print print """ <html> <body> <h1>La configuration est correcte.</h1> </body> </html> """

Je teste mon premier script web en Python :) Figure 24-16. SI016 Python CGI 1/16

Je cre ensuite le formulaire HTML :

<-- contact.html --> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xh <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <title>of CP2LL 2010 - rlr - SI016 Python - Formulaire de contact</title> </head>

972

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)


<body> <form action="/cgi-bin/reponse.py" method="post"> <fieldset><legend> Coordonnes </legend> <label for="nom">Nom</label>:<br/> <input type="text" name="nom" id="nom" /><br/> <label for="prenom">Prnom</label>:<br/> <input type="text" name="prenom" id="prenom" /><br/> <label for="email">E-mail</label>:<br/> <input type="text" name="email" id="email" /><br/> </fieldset> <fieldset><legend> Information </legend> <label for="objet">Objet de votre demande</label>:<br/> <input type="text" name="objet" id="objet" /><br/> <label for="message">Message</label>:<br/> <textarea name="message" id="message"></textarea> </fieldset> <br/> <input type="submit" value="envoyer" /> </form> </body> </html>

Puis le script Python qui permet de visualiser le contenu saisi par lutilisateur :
#!/usr/bin/python # -*- coding: utf8 -*# reponse.py print "Content-Type: text/html" print import cgi form=cgi.FieldStorage() prenom nom email objet message = = = = = form.getvalue("prenom") form.getvalue("nom") form.getvalue("email") form.getvalue("objet") form.getvalue("message")

# # # #

prciser dans lentte HTTP le format du docu sert clturer les enttes HTTP et ce qui suit va constituer notre document. charger le module CGI de python

# La classe Fieldstorage permet de rcuprer # les donnes transmises

msg = """%s %s,<br/> %s<br/> objet de la demande : %s<br/> %s""" % (prenom, nom, email, objet, message) # Formatter la rponse print msg # Afficher le rsultat

973

Chapitre 24. Initiation au langage de script (PHP, Python, Perl) Puis je teste... Figure 24-17. SI016 Python CGI 2/16

974

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)

Figure 24-18. SI016 Python CGI 3/16

975

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)

Note : En changeant la mthode dappel pour utiliser la mthode get la place de post, le rsultat serait le mme.

La classe Fieldstorage permet de rcuprer les donnes transmises. Elle dispose des mthodes has_key(), keys() et len() que lon trouve dans les dictionnaires. Cette classe dispose de mthodes supplmentaires, dont :
- getvalue(cl, valeur_par_dfaut) : rcuprer la valeur transmise ou de lui substituer une valeur. Ce second paramtre est optionnel. - getlist() : rcuprer les valeurs dans le cas o plusieurs champs portent le mme nom.

Important : La classe FieldStorage ne peut tre utilise quune seule fois pour rcuprer les informations postes.

Je cre une nouvelle version pour chaque chier en modiant comme suit...
<-- contact-v02.html --> (...) <form action="/cgi-bin/reponse-v02.py?nom=surcharge" method="post"> (...) <fieldset><legend> Horaires </legend> A quelles heures pouvons nous vous recontacter ?<br/> <input type="checkbox" name="heure" id="16" value="16" <label for="16">16 h</label> <input type="checkbox" name="heure" id="17" value="17" <label for="17">17 h</label> <input type="checkbox" name="heure" id="18" value="18" <label for="18">18 h</label> <input type="checkbox" name="heure" id="19" value="19" <label for="19">19 h</label> </fieldset> (...)

/> /> /> />

# response-v02.py (...) import cgitb; cgitb.enable() (...)

# charger le module de gestion derreur et en activer l

976

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)


horaire = form.getlist("heure") # obtenir un tuple des horaires selectionns horaires = ",".join(horaire) # formater le tuple horaire en chane (...) # Concatenation de chane msg = """%s %s,<br/> %s<br/> objet de la demande : %s<br/> %s <br/> heures : %s<br/> """ % (prenom, nom, email, objet, message, horaire) (...)

Puis je teste...

977

Chapitre 24. Initiation au langage de script (PHP, Python, Perl) Figure 24-19. SI016 Python CGI 4/16

978

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)

979

Chapitre 24. Initiation au langage de script (PHP, Python, Perl) Figure 24-20. SI016 Python CGI 5/16

980

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)

24.4.14.3. Debug des scripts CGI


Source(s):

Web: cgi Common Gateway Interface support (http://docs.python.org/library/cgi.html) cgitb Traceback manager for CGI scripts (http://docs.python.org/library/cgitb.html)

Les erreurs qui peuvent survenir lors de lexcution des scripts ne sont pas afches par dfaut. Pendant la phase dveloppement, le module cgitb permet de grer et dafcher les messages derreur. Pour activer la gestion derreurs il suft dappeler la fonction enable(). Voici un exemple dafchage derreur :
#!/usr/bin/python print "Content-Type: text:html" print import cgitb;cgitb.enable() print variableNonDefinie

981

Chapitre 24. Initiation au langage de script (PHP, Python, Perl) Figure 24-21. SI016 Python CGI (Erreur) 6/16

982

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)

Note : Il est aussi possible de sauvegarder le rapport derreur dans un chier au lieu de lafcher :
cgitb.enable(display=0, logdir="/tmp")

Le module cgi fournit galement des fonctions permettant dobtenir divers informations sur le script et son environnement, dont :
// Source: Functions du module CGI (http://docs.python.org/library/cgi.html#functions) print_form(form) : Affiche les diffrents champs du formulaire et leur contenu. print_directory() : Affiche le rpertoire de travail (celui du script pas de la page HTML). print_environ() : Affiche diffrentes variables denvironnement en rapport au script. Ces variables sont accessibles dans vos scripts avec la fonction getenv(nomVariable[,valeurAlternative]) du module os. Ex: os.getenv("HTTP_REFERER","") pour connatre la page appelante. test()

: renvoie toutes les informations prcdentes et permet donc de valider le (NB : les enttes HTTP sont directement gres par la fonction, pas beso

Voici des exemples dafchage dinformation :


#!/usr/bin/python # -*- coding: utf8 -*# pyinfo.py import cgi cgi.test()

983

Chapitre 24. Initiation au langage de script (PHP, Python, Perl) Figure 24-22. SI016 Python CGI (Info) 7/16

984

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)

(...) cgi.print_directory() cgi.print_environ() (...)

Figure 24-23. SI016 Python CGI (Info) 13/16

(...) cgi.print_form(form)

985

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)


(...)

Figure 24-24. SI016 Python CGI (Info) 14/16

986

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)

24.4.14.4. Tlchargement de chier (Upload)


Imaginons un formulaire denvoi de CV simple...
Important : La valeur donne lattribut enctype est primordiale pour le transfert des chiers.

Page HTML :

<-- envoi_cv.html --> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xh <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <title>of CP2LL 2010 - rlr - SI016 Python - Envoi de CV</title> </head> <body> <form action="/cgi-bin/envoi_cv.py" method="post" enctype="multipart/form-data"> <fieldset><legend> Coordonnes </legend> <label for="nom">Nom</label><br/> <input type="text" name="nom" id="nom" /><br/> <label for="prenom">Prnom</label><br/> <input type="text" name="prenom" id="prenom" /> </fieldset> <fieldset><legend> Information </legend> <label for="cv">C.V.</label><br/> <input type="file" name="cv" id="cv" /> </fieldset> <br/> <input type="submit" value="envoyer" /> </form> </body> </html>

Script CGI Python :


#!/usr/bin/python # -*- coding: utf8 -*# envoi_cv.py print "Content-Type: text/html" print import cgi import cgitb; cgitb.enable() form=cgi.FieldStorage()

# # # # #

prciser dans lentte HTTP le format du docu sert clturer les enttes HTTP et ce qui suit va constituer notre document. charger le module CGI de python charger le module de gestion derreur et en a

# La classe Fieldstorage permet de rcuprer # les donnes transmises

987

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)


filename type content = form["cv"].filename = form["cv"].type = form["cv"].file.read()

msg = """Nom du fichier : %s type MIME : %s contenu : %s"""%(filename, type, content) print msg

# Formatter la rponse # Afficher le rsultat

Pour les diffrents champs rcuprs la classe FieldStorage fournit un certains nombres dattributs dont certains donnent des informations sur les chiers : lename donne le nom du chier transmis, type donne le type MIME et le donne accs un objet chier dont sa mthode read() permet den afcher le contenu. Je teste...

988

Chapitre 24. Initiation au langage de script (PHP, Python, Perl) Figure 24-25. SI016 Python CGI (Tlcharger Fichier) 8/16

989

Chapitre 24. Initiation au langage de script (PHP, Python, Perl) Figure 24-26. SI016 Python CGI (Tlcharger Fichier) 9/16

990

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)

En plus de pouvoir visualiser le chier, on peut lenregistrer dans un rpertoire cv par exemple (surlequel Apache a les droits en criture), jajoute le code suivant dans mon script existant, la suite :
(...) # envoi_cv.py (...) import sys storePath = ../cv/ storeFilePath = storePath+filename try: storedFile = open (storeFilePath, w) storedFile.write(content) print <br/><a href="%s">Tlcharger : %s</a> % (storeFilePath, filename) storedFile.close() except: print "Erreur inattendue:", sys.exc_info()[0] raise

Lajot dune gestion dexception ma permis de rapidement corriger mes erreurs de codage : nom de variable mal orthographi, chemin du rpertoire cv inexistant (je lai cr manuellement), etc... Un lien apparat maintenant en bas de page pour tlcharger le chier sauvegard, rsultat en image :

991

Chapitre 24. Initiation au langage de script (PHP, Python, Perl) Figure 24-27. SI016 Python CGI (Tlcharger Fichier) 10/16

Le chier est bien prsent dans le rpertoire de stockage...

992

Chapitre 24. Initiation au langage de script (PHP, Python, Perl) Figure 24-28. SI016 Python CGI (Tlcharger Fichier) 11/16

24.4.14.5. Traitement dimages: Bibliothque Python Imaging Library (PIL)


Source(s):

OF: Python Imaging Library (http ://www.pythonware.com/products/pil/index.htm)

Cette bibliothque permet diverses manipulations sur tout type dimage mais nous allons nous intresser plus particulirement un problme classique dans la gestion de contenu Web, le retaillage dimages. En effet pour des questions de mise en page il faut gnralement sassurer quune image fournie pour un contenu ne dpasse pas certaines dimensions. Ceci permet de contrler les images fournies par un rdacteur sans que celui-ci ait sen soucier. PIL se dcompose en plusieurs modules dont le module Image. Nous aurons loccasion de voir le module ImageTk lorsque nous aborderons Tkinter. Elle est prsente dans la plus part des distributions...
// Charger le module >>> import Image // Version disponible >>> Image.VERSION 1.1.6

// Si le module nest pas install, cette action retourne u

// Dans Ubuntu 9.10 and dans Debian 5.0

993

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)

Note : Dans le cas ou le module Image ne serait pas disponible, il suft dinstaller la bibliothque PIL avant dutiliser Python :
$ sudo apt-get install python-imaging

Je cre le formulaire HTML suivant :

<-- image.html --> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xh <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <title>of CP2LL 2010 - rlr - SI016 Python - Image Transformation</title> </head> <body> <form action="/cgi-bin/image.py" method="post" enctype="multipart/form-data"> <fieldset><legend> Fichier Source </legend> <label for="pathFichierOriginal">Chemin</label> : <br/> <input type="text" name="pathFichierOriginal" id="pathFichierOriginal" /> </fieldset> <fieldset><legend> Fichier Destination </legend> <label for="pathFichierCree">Chemin</label> : <br/> <input type="text" name="pathFichierCree" id="pathFichierCree" /> </fieldset> <fieldset><legend> Redimension </legend> <label for="largeur">Largeur</label><br/> <input type="text" name="largeur" id="largeur" /><br/> <label for="hauteur">Hauteur</label><br/> <input type="text" name="hauteur" id="hauteur" /> </fieldset> <br/> <input type="submit" value="envoyer" /> <input type="hidden" name="pageRedirection" value="/cgi-bin/image-result.py" /> </form> </body> </html>

Je cre le script de transformation dimage suivant :

994

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)


#!/usr/bin/python # -*- coding: utf8 -*# image.py import cgi, cgitb, Image, os, sys # Gestion derreur cgitb.enable() #Recuperation des informations form = cgi.FieldStorage() cheminFichierOriginal = form.getvalue("pathFichierOriginal") cheminFichierCree = form.getvalue("pathFichierCree") largeur = form.getvalue("largeur") hauteur = form.getvalue("hauteur") pageDeRedirection = form.getvalue("pageRedirection") if (pageDeRedirection is None): pageDeRedirection = os.environ[HTTP_REFERER] #retaillage de limage try: im = Image.open(cheminFichierOriginal) out = im.resize((int(largeur),int(hauteur))) out.save(cheminFichierCree) except: print "Erreur inattendue:", sys.exc_info()[0] raise #renvoi vers le referer - Redirection par entte HTTP print "Location: %s?pathFichierOriginal=%s&pathFichierCree=%s" % \ (pageDeRedirection, cheminFichierOriginal, cheminFichierCree) print

#!/usr/bin/python # -*- coding: utf8 -*# image-result.py print "Content-Type: text/html" print import cgi, cgitb, os # Gestion derreur cgitb.enable() #Recuperation des informations form = cgi.FieldStorage()

# prciser dans lentte HTTP le format du docu # fin den-tte

995

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)


fichierOriginal = os.path.basename(form.getvalue("pathFichierOriginal")) fichierCree = os.path.basename(form.getvalue("pathFichierCree")) #Affiche resultat print """<h2>Transformed</h2><img src="../img/%s" /> <h2>Original</h2><img src="../img/%s" />""" % \ (fichierCree, fichierOriginal)

Puis je teste...

996

Chapitre 24. Initiation au langage de script (PHP, Python, Perl) Figure 24-29. SI016 Python CGI (PIL) 15/16

997

Chapitre 24. Initiation au langage de script (PHP, Python, Perl) Figure 24-30. SI016 Python CGI (PIL) 16/16

998

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)

24.4.15. Interface Graphique (GUI avec Tkinter)


Source(s):

Web: An Introduction to Tkinter (http://www.pythonware.com/library/tkinter/introduction)

Plusieurs botes outils (toolkits) permettent laccs diffrentes interfaces graphiques. Les plus communes sous Python sont :

- Tkinter -- Python interface to Tcl/Tk (http://docs.python.org/library/tkinter.html) : - PyQt (http://www.riverbankcomputing.co.uk/software/pyqt/)/PyKDE 1 (http://www.riverbankcom tudier avec soin selon la plateforme. - PyGTK 2 (http://www.pygtk.org) : celui-ci repose sur GTK (Gimp Toolkit), Python GTK+ - wxPython 3 (http://wxpython.org) : bas sur le toolkit wxWindow.

Tkinter est intgr Python cest pourquoi nous lutilisons dans le cadre de cette formation. Le module Tkinter contient tout ce qui est ncessaire pour utiliser le toolkit Tk : crer la fentre principale de lapplication, mettre disposition des widgets de base...

24.4.15.1. Installation du module


Sur Ubuntu 9.10, le module nest pas install par dfaut, on peut procd manuellement comme suit :
$ sudo apt-get install python-tk

24.4.15.2. Le constructeur Tk
Le constructeur va crer la fentre principale (root widget) qui servira de rfrence toutes les autres :
// Mode interactive $ python

999

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)


(...) >>> import Tkinter >>> Tkinter.Tk()

// Mode script Unix $ nano tkinter.py #!/usr/bin/python # -*- coding: utf8 -*# tkinter.py import Tkinter from Tkinter import * root = Tk() root.mainloop() // Execution $ chmod u+x tkinter.py $./tkinter.py

Figure 24-31. SI016 Python Tkinter 1/

Note : Lutilisation de :
from Tkinter import *

1000

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)

au lieu de
import Tkinter

permet dutiliser directement les attributs du module sans les prxer avec le nom du module Tkinter. (ou tout autre prxe personalis lors de limport avec linstruction as).

Dans le script, la mthode mainloop() permet de dclencher lafchage de la fentre au moment choisi et le programme attend alors des vnements : clic de souris, appui sur une touche, etc... Ce type de fonctionnement est appel programmation vnementielle et consiste associer une fonctionnalit un vnement. Des fonctionnalits sont dj prsentes comme par exemple la fermeture de la fentre principale.

24.4.15.3. Les classes Widgets


Les classes widget disposent de mthodes et de paramtres de conguration appels options. Ces options sont accessibles en utilisant linstance du widget comme un dictionnaire ou en les passant au constructeur sous forme de mots cls. Les widgets partagent un certain nombre de mthodes lies au positionnement ou aux vnements mais ils disposent galement de spcicits.

24.4.15.4. widget Button


Source(s):

Web: options et mthodes des boutons (http://www.pythonware.com/library/tkinter/introduction/button.htm)

Associer une commande (fonctionnalit) un simple bouton au travers dune option spcique :
#!/usr/bin/python # -*- coding: utf8 -*# tkinter-01-button.py from Tkinter import * root = Tk() # Charger le module dinterface GUI # Crer un objet fentre principale

1001

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)

bouton = Button(root, text="bip") def action(): bouton.bell() bouton.flash() bouton[text]="refaire bib" bouton[command] = action

# Label du bouton pass en option

# bip sonore (fonction commune aux widgets) # Flash rapidement (fonction des boutons) # Change le label du bouton # Associer une fonction au bouton # Fonction de callback executer lors de lactivation du

bouton.pack()

# Ajuster les dimension du bouton la taille de son lab # rendre le bouton visible # Activer et afficher la fentre principale

root.mainloop()

Figure 24-32. SI016 Python Tkinter 2/

Figure 24-33. SI016 Python Tkinter 3/

24.4.15.5. widget Label


Afcher du texte (non modiable) ou une image (mthodes propre non disponibles, communes aux widgets disponibles) :
#!/usr/bin/python # -*- coding: utf8 -*# tkinter-02-label.py

1002

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)

from Tkinter import * root = Tk()

# Charger le module dinterface GUI # Crer un objet fentre principale

zoneTexte = Label(root, text="""texte de prsentation sur plusieurs lignes""") zoneTexte.pack() root.mainloop() # Activer et afficher la fentre principale

Figure 24-34. SI016 Python Tkinter 4/

Il est possible dutiliser le widget label avec une image. Jinstalle le module ImageTk pour la gestion du chier image...
$ sudo apt-get install python-imaging-tk

Puis je cre le script suivant :


#!/usr/bin/python # -*- coding: utf8 -*# tkinter-02-label-image.py from Tkinter import * from PIL import Image, ImageTk root = Tk() image = Image.open("../img/test.jpg") photo = ImageTk.PhotoImage(image) label = Label(root, image=photo) label.pack() # Charger le module dinterface GUI # Charger le module de gestion dimage # Crer un objet fentre principale # Charger le fichier image # Formatter image pour laffichage

# Crer un label image et lattacher la fentre pri # Auto dimensionner et positionner

1003

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)

root.mainloop()

# Activer et afficher la fentre principale

Figure 24-35. SI016 Python Tkinter 5/

Loption image reoit un objet de type Image. Tkinter dispose de deux classes drives PhotoImage pour les gifs et BitmapImage pour les Bitmaps. Pour les autres types dimages (jpg, etc...) nous recourrons la librairie PIL ou plus exactement son module ImageTk qui dispose de deux classes PhotoImage et BitmapImage qui assureront la conversion.

24.4.15.6. widget Message


Il permet dafcher du texte comme label mais il gre tout seul les retours la ligne. Lutilisation de loption width permet den dnir la largeur et ainsi de conditionner les retours la ligne :
#!/usr/bin/python # -*- coding: utf8 -*# tkinter-02-label-image.py

1004

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)

from Tkinter import * root = Tk()

# Charger le module dinterface GUI # Crer un objet fentre principale

msg = Message(root, width="100", text="Un texte suffisament long pour tre affich sur plusieurs lignes.") msg.pack() root.mainloop() # Activer et afficher la fentre principale

Figure 24-36. SI016 Python Tkinter 6/

En changeant la taille 200, jobtiens... Figure 24-37. SI016 Python Tkinter 7/

1005

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)

24.4.15.7. widget Checkbutton


Une simple case cocher laquelle on associe une classe Variable de Tkinter. Les classes drives qui peuvent tre utilises sont IntVar, BoleanVar, DoubleVar et StringVar. La mthode get() permet de rcuprer les valeurs associes. Exemple :
#!/usr/bin/python # -*- coding: utf8 -*# tkinter-04-checkbutton.py from Tkinter import * root = Tk() variable = IntVar() def verifieEtat(): etat[text] = variable.get() # Charger le module dinterface GUI # Crer un objet fentre principale # Cration dun objet de classe # Dfinition de la fonction associe # Change le libl du label etat # avec le contenu de la variable checkbox

checkbox = Checkbutton(root, variable=variable, # Associer une variable la checkbox text=checkbox, # Libl de la checkbox command=verifieEtat) # Fonction associe etat = Label(root) checkbox.pack() etat.pack() root.mainloop()

# Cre un label pour afficher ltat du choix mu # Auto-dimensionner et positionner la checkbox # Auto-dimensionner et positionner le label # Activer et afficher la fentre principale

Par dfaut, la bote choix multiple est dcoche : Figure 24-38. SI016 Python Tkinter 8/

1006

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)

Je la coche, et le label est mis jour (variable=1) : Figure 24-39. SI016 Python Tkinter 9/

Je la dcoche, et le label est mis jour (variable=0) : Figure 24-40. SI016 Python Tkinter 10/

Les deux valeurs prises par le widget peuvent tre prcises :


(...) variable = String Var() (...) checkbox = Checkbutton(root, variable=variable, onvalue=vrai, # Valeur si coch offvalue=faux, # Valeur si dcoch text=checkbox, command=verifieEtat) (...)

1007

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)

Figure 24-41. SI016 Python Tkinter 11/

Figure 24-42. SI016 Python Tkinter 12/

24.4.15.8. widget Radiobutton


Ce widget (simlaire CheckButton) permet de choisir une valeur parmi plusieurs. Ce widget na pas de sens sil est utilis seul. Loption variable est l aussi de type Variable et loption value prcise la valeur associe.
Important : La valeur doit correspondre au type de variable (Int, String, etc...) sinon une exception apparat !

#!/usr/bin/python # -*- coding: utf8 -*# tkinter-05-radiobutton.py from Tkinter import * # Charger le module dinterface GUI

1008

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)

root = Tk() texte = StringVar() def selection(): affichage[text] = texte.get()

# Crer un objet fentre principale # Cration dun objet de classe # Dfinition de la fonction associe # Change le libl du label affichage # avec le contenu de la variable radiobutton # # # # # Cration dun 1er bouton radio Libl du bouton Associer une variable au bouton radio Valeur si coch Fonction associe

choix1 = Radiobutton(root, text=choix 1, variable=texte, value=premier choix, command=selection) choix2 = Radiobutton(root, text=choix 2, variable=texte, value=second choix, command=selection)

# Cration dun 2nd bouton radio

choix3 = Radiobutton(root, # Cration dun 3me bouton radio text=choix 3, variable=texte, value=troisime choix, command=selection) affichage = Label(root) choix1.pack() choix2.pack() choix3.pack() affichage.pack() root.mainloop()

# Cre un label pour afficher ltat du choix mu

# Auto-dimensionner et positionner les radio bou

# Auto-dimensionner et positionner le label # Activer et afficher la fentre principale

Par dfaut, les radios boutons sont dcochs :

1009

Chapitre 24. Initiation au langage de script (PHP, Python, Perl) Figure 24-43. SI016 Python Tkinter 13/

Je la coche le premier : Figure 24-44. SI016 Python Tkinter 14/

Puis le deuxime :

1010

Chapitre 24. Initiation au langage de script (PHP, Python, Perl) Figure 24-45. SI016 Python Tkinter 15/

Enn le troisime (la taille de la fentre sajuste automatiquement) : Figure 24-46. SI016 Python Tkinter 16/

24.4.15.9. widget Entry


Un champ de saisie auquel est associ une variable (gnralement StringVar).
Important : Pour ce widget loption qui permet lassociation dune variable est textvariable.

Saisir un texte puis lafcher dans un Label:

1011

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)


#!/usr/bin/python # -*- coding: utf8 -*# tkinter-06-entry.py from Tkinter import * root = Tk() texte = StringVar() texte.set(Saisissez un texte) def valider(): affichage[text] = texte.get() # Charger le module dinterface GUI # Crer un objet fentre principale # Cration dun objet de classe # Libl du champs dentre # Dfinition de la fonction associe # Change le libl du label affichage

inputText = Entry(root, textvariable=texte) # Cration du champ dentre inputText

affichage = Label(root) validation = Button(root, text=valider, command=valider) inputText.pack() affichage.pack() validation.pack() root.mainloop()

# Cre un label pour afficher ltat de lentre # Cre un bouton pour la validation

# Auto-dimensionner et positionner les lments

# Activer et afficher la fentre principale

Par dfaut, on est invit saisir un texte : Figure 24-47. SI016 Python Tkinter 17/

1012

Chapitre 24. Initiation au langage de script (PHP, Python, Perl) Puis je rentre un premier texte et je valide : Figure 24-48. SI016 Python Tkinter 18/

Le mme traduit en francais :) Figure 24-49. SI016 Python Tkinter 19/

24.4.15.10. widget Text


Source(s):

Web: Concepts (http://www.pythonware.com/library/tkinter/introduction/x7883-concepts.htm) Methods (http://www.pythonware.com/library/tkinter/introduction/x8369-methods.htm)

Une zone de texte qui permet de saisir du texte sur plusieurs lignes.

1013

Chapitre 24. Initiation au langage de script (PHP, Python, Perl) Elle permet des fonctionalits beaucoup plus complexes que celles de Entry
Note : Ldition peut tre dsactiv avec loption DISABLED

La mthode insert() qui permet de prciser o inserer le texte :


#!/usr/bin/python # -*- coding: utf8 -*# tkinter-07-text.py from Tkinter import * root = Tk() def valider(): affichage[text] = texte.get(1.0, END) # Charger le module dinterface GUI # Crer un objet fentre principale # # # # Dfinition de la fonction associe Change le libl du label affichage avec le contenu dune sous-chane extraite du get (position_start, position_stop)

texte = Text(root) texte.insert(END,"Saisissez votre texte.") affichage = Label(root) validation = Button(root, text=valider, command=valider) texte.pack() affichage.pack() validation.pack() root.mainloop()

# Cration du champ dentre Text # Valeur par dfaut du champ # Cre un label pour afficher ltat du text # Cre un bouton pour la validation

# Auto-dimensionner et positionner les lments

# Activer et afficher la fentre principale

Par dfaut, on est invit saisir un texte :

1014

Chapitre 24. Initiation au langage de script (PHP, Python, Perl) Figure 24-50. SI016 Python Tkinter 20/

Puis je rentre un premier texte et je valide :

1015

Chapitre 24. Initiation au langage de script (PHP, Python, Perl) Figure 24-51. SI016 Python Tkinter 21/

Le mme traduit en francais :)

1016

Chapitre 24. Initiation au langage de script (PHP, Python, Perl) Figure 24-52. SI016 Python Tkinter 22/

1017

Chapitre 24. Initiation au langage de script (PHP, Python, Perl) Pour insrer le texte o se trouve le curseur il faut utiliser la marque INSERT :
(...) def ajouter(): texte.insert(INSERT, "Texte supplmentaire ") (...) ajout = Button(root, text=ajouter, command=ajouter) (...) ajout.pack() (...)

Puis je test linsertion en milieu de texte :

1018

Chapitre 24. Initiation au langage de script (PHP, Python, Perl) Figure 24-53. SI016 Python Tkinter 23/

1019

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)

24.4.15.11. widget Listbox


Une liste droulante, il est possible de choisir o lon ajoute llment (comme pour Text). END correspond la n de liste et ACTIVE llment slectionn. Les informations sur la slection sont rcupres avec la mthode curselection qui nous renvoie les indexes des lments concerns :
#!/usr/bin/python # -*- coding: utf8 -*# tkinter-08-listbox.py from Tkinter import * root = Tk() def selectionner(): affichage[text] = # Charger le module dinterface GUI # Crer un objet fentre principale

# Dfinition de la fonction associe liste.curselection() # Change le libl du label affichage # avec llment selectionn dans la list # Cration liste de selection

liste = Listbox(root, selectmode=EXTENDED)

for element in (premier choix, second choix, troisieme choix): liste.insert(END, element) # Insertion dlment dans la liste affichage = Label(root) liste.pack() # Cre un label pour afficher ltat du text # Auto-dimensionner et positionner la liste

selection = Button(root, # Cre un bouton pour la validation text=Voir la selection, command=selectionner) affichage.pack() selection.pack() root.mainloop()

# Auto-dimensionner et positionner le label et l

# Activer et afficher la fentre principale

Rsultat en image... :

1020

Chapitre 24. Initiation au langage de script (PHP, Python, Perl) Figure 24-54. SI016 Python Tkinter 24/

Figure 24-55. SI016 Python Tkinter 25/

1021

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)

Figure 24-56. SI016 Python Tkinter 26/

1022

Chapitre 24. Initiation au langage de script (PHP, Python, Perl) Figure 24-57. SI016 Python Tkinter 27/

24.4.15.12. widget Menu


Permet de grer les menus systme dune application. Crons un menu avec 3 niveaux dentres :
#!/usr/bin/python # -*- coding: utf8 -*# tkinter-09-menu.py from Tkinter import * root = Tk() menu = Menu(root) def commande1(): affichage[text] = "commande 1" def commande2(): # Charger le module dinterface GUI # Crer un objet fentre principale # Crer un menu principal # Cration dune action de menu

1023

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)


affichage[text] = "commande 2" sousmenu = Menu(menu) soussousmenu = Menu(sousmenu)

# Cration dun sous-menu # Cration dun autre sous-menu dans le sous-men

affichage = Label(root, # Cration dun label text="choisissez votre commande") menu.add_cascade(label=sous menu, menu=sousmenu) # sousmenu.add_command(label="commande 1",command=commande1) # sousmenu.add_cascade(label=sous menu, menu=soussousmenu) # soussousmenu.add_command(label="commande 2",command=commande2)# root[menu]=menu affichage.pack()

Show sous-menu dans menu Ajoute une action dans le so Show sous-menu dans sous-men Ajoute une action dans le so

# Lobjet menu est accroch la fentre principale # Auto-dimensionner et positionner le label et le bouton

root.mainloop()

# Activer et afficher la fentre principale

Je choisi la deuxime commande dans le menu... : Figure 24-58. SI016 Python Tkinter 28/

1024

Chapitre 24. Initiation au langage de script (PHP, Python, Perl) Figure 24-59. SI016 Python Tkinter 29/

Figure 24-60. SI016 Python Tkinter 30/

Note : Les diffrents sous menus sont rattachs leur parent lors de la cration mais pour quils soient visibles nous les dclarons dans le menu parent laide de la commande add_cascade, la mthode add_command va nous permettre dassocier directement une commande notre menu. Loption menu de lobjet Tk utilise pour associer un menu.

24.4.15.13. widget Canvas


Source(s):

Web: The Canevas Widget (http://www.pythonware.com/library/tkinter/introduction/canvas.htm)

1025

Chapitre 24. Initiation au langage de script (PHP, Python, Perl) Permet de dessiner des formes gomtriques simples et de leur associer du texte et des images.

#!/usr/bin/python # -*- coding: utf8 -*# tkinter-10-canvas.py from Tkinter import * root = Tk() ZoneDessin = Canvas(root) ZoneDessin.create_rectangle(10,10,200,100) ZoneDessin.pack() root.mainloop() # Charger le module dinterface GUI # Crer un objet fentre principale # Crer un objet Canvas # Dimension de lespace de dessin # Auto-dimensionner et positionner le canvas # Activer et afficher la fentre principale

Figure 24-61. SI016 Python Tkinter 31/

1026

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)

24.4.15.14. widget Scale


Permet de fournir une chelle de valeurs dont il sera possible de rcuprer la valeur :
#!/usr/bin/python # -*- coding: utf8 -*# tkinter-11-scale.py from Tkinter import * root = Tk() Regle = Scale(from_=0, to=250) Regle.pack() root.mainloop() # Charger le module dinterface GUI # Crer un objet fentre principale # Crer un objet Regle # Auto-dimensionner et positionner la Regle # Activer et afficher la fentre principale

Figure 24-62. SI016 Python Tkinter 32/

Note : La mthode get() permet de rcuprer la valeur.

24.4.15.15. widget Frame


Il joue le rle dun conteneur et il sert regrouper de faon logique dautres widgets. Nous verrons son utilisation dans le positionnement des lments.

1027

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)

24.4.15.16. widget Toplevel


Source(s):

Web: TopLevel Window Methods (http://www.pythonware.com/library/tkinter/introduction/toplevel-window-methods.htm)

Ce widget joue galement le rle dun conteneur mais il se traduit par lafchage dune nouvelle fentre. Il est pass comme premier paramtre tous ses widgets (enfants) comme pour la fentre principale. La mthode destroy() permet de fermer la fentre :
#!/usr/bin/python # -*- coding: utf8 -*# tkinter-12-frame.py from Tkinter import * root = Tk() fenetre = None age = StringVar() def creeFenetre(): global fenetre fenetre = Toplevel(root) # Charger le module dinterface GUI # Crer un objet fentre principale # Dfinition de variables :)

# Crer une fentre # Rcupration dun variable globale # Crer un objet de premier niveau

question = Label(fenetre, text="Quel est votre nom ?") # Cre un label dans reponse = Entry(fenetre, textvariable=age) # Cre une entre validation = Button(fenetre, text="valider", command=repondre) # Cre un bouton question.pack() reponse.pack() validation.pack() def repondre(): affichage[text] = age.get() fenetre.destroy()

# Assemble les lemen

# Afficher lage # Detruire la fentre

ouverture = Button(root, text="question", command=creeFenetre) affichage = Label(root, width=30) ouverture.pack() affichage.pack() root.mainloop()

# Crer un bouton douvertur # Label daffichage pour la

# Auto-dimensionner et positionner les lments

# Activer et afficher la fentre principale

1028

Chapitre 24. Initiation au langage de script (PHP, Python, Perl) Figure 24-63. SI016 Python Tkinter 33/

Figure 24-64. SI016 Python Tkinter 34/

Figure 24-65. SI016 Python Tkinter 35/

1029

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)

24.4.15.17. Positionnement des lments


Tkinter permet de positionner les widgets de 3 faons diffrentes :
- Le positionnement sur une grille (Grid Manager) - Le positionnement de gographique (Pack Manager) - Le positionnement absolu ou relatif (Place Manager)

Considrons une interface dans laquelle nous avons une zone de texte (Text non modiable) pour afcher les messages que nous avons saisis dans un champ texte (Entry) et valids laide dun bouton "ajouter"...

24.4.15.18. Positionnement: Grid Manager

#!/usr/bin/python # -*- coding: utf8 -*# tkinter-13-gridmanager.py from Tkinter import * root = Tk() # Charger le module dinterface GUI # Crer un objet fentre principale

# Ajouter une zone de texte [mthode grid()]. # Aucune information sur la ligne et colonne du tableau nest fournie. # Par consquent, il sera plac dans la premire colonne de la premire ligne libre. Text(root, state=DISABLED, height=5, width=20).grid(rowspan=2)

# loption rowspan=2 pour in # le widget stendra sur 2

# Le champ texte de saisie est le second lment que nous plaons sur la grille. # Les options passes la mthode grid() indique quil sera plac dans # la deuxime colonne de la premire ligne. Entry(root).grid(row=0,column=1) # Ajouter un bouton [mthode grid()] sur la ligne du dessous. # Le widget est par dfaut plac au centre de la cellule. Button(root, text="Ajouter").grid(row=1,column=1,sticky=NW)

# Loption sticky=NW va nous # de laligner en haut gauc

root.mainloop()

# Activer et afficher la fentre principale

1030

Chapitre 24. Initiation au langage de script (PHP, Python, Perl) Figure 24-66. SI016 Python Tkinter 36/

24.4.15.19. Positionnement: Pack manager


Le fonctionnement de ce gestionnaire permet de placer des widgets en fonction de leur conteneur. On indique simplement de quel ct ils seront ajouts.
Important : Attention il ne faut pas pour un mme conteneur mlanger le Pack manager et le Grid manager.

#!/usr/bin/python # -*- coding: utf8 -*# tkinter-14-packmanager.py from Tkinter import * root = Tk() # Charger le module dinterface GUI # Crer un objet fentre principale

Text(root, state=DISABLED, height=5, width=20).pack(side=LEFT) # # # # Pour placer le champ de texte et le bouton "Valider" lun en dessous de lautre, nous utilisons une Frame. La mthode pack() va permettre de placer le champ texte et le bouton droite mais lun cot de lautre.

frame = Frame(root) frame.pack(side=LEFT) # Avec la Frame nous plaons celle-ci droite et nous pouvons ensuite placer # les lments quelle contient lun en dessous de lautre.

1031

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)

Entry(frame).pack() Button(frame, text="Ajouter").pack() root.mainloop() # Activer et afficher la fentre principale

Figure 24-67. SI016 Python Tkinter 37/

Note : Loption ll peut aussi tre passe la mthode pack() et permet de prciser que le widget doit occuper lespace disponible. Les valeurs possibles sont :
NONE X Y BOTH : : : : par dfaut, de faon horizontale, de faon verticale, les deux.

24.4.15.20. Positionnement: Place manager

#!/usr/bin/python # -*- coding: utf8 -*# tkinter-15-placemanager.py from Tkinter import * root = Tk() # Charger le module dinterface GUI # Crer un objet fentre principale

1032

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)

# Le premier widget (Text) est plac de faon absolu dans le conteneur [option x et y] # Loption anchor qui indique le point du conteneur qui va nous servir de rfrence. # Valeur cardinal possible: N,NE,E,SE,S,SW,W,NW et CENTER. Text(root, state=DISABLED, height=5, width=20).place(anchor=NW, x=0, y=0) # Les options x et y nous indiquent que lobjet Text sera plac 0 pixel # de ce point en hauteur et en largeur. # Les deux autres widgets sont placs de faon relative par rapport ce mme point. # Les valeurs des options relx et rely varient entre 0.0 et 1.0. # 0.0 positionne lobjet gauche pour relx et en haut pour rely. # linverse 1.0 le place droite pour relx et en bas pour rely. Entry(root).place(anchor=NW, relx=0.5, rely=0.0) Button(root, text="Ajouter").place(anchor=NW, relx=0.5, rely=0.2) # La mthode config() permet de modifier les options dun objet, # dans notre cas la taille de la fentre de travail. root.config(height=100,width=300) root.mainloop() # Activer et afficher la fentre principale

# NW = Coin supr

Figure 24-68. SI016 Python Tkinter 38/

1033

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)

24.4.15.21. Les vnements...


Toutes les actions que lutilisateur peut effectuer sur linterface vont produire des vnements. Tous les widgets disposent dune mthode bind() qui permet dassocier une commande un vnement. Le prototype de la fonction est le suivant :
widget.bind(event, callback)

La fonction de callback recevra en paramtre un objet qui dcrit lvnement. Le modle dvnement est de la forme suivante :
<MODIFIER-MODIFIER-TYPE-DETAIL>

Note : Aucun des champs MODIFIER, TYPE ou DETAIL nest obligatoire et la dnition des vnements se limite gnralement au seul TYPE.

// MODIFIER // Appuie sur une touche(Code) ou un bouton de la souris (Bn) alt (Alt), control(Control) shift(Shift) B1 - bouton gauche B2 - bouton milieu B3 - bouton droit

Sil sagit dun double ou dun triple clic il faut utiliser: DOUBLE ou TRIPLE.

// TYPE // Type dvnement Enter Leave FocusIn FocusOut Configure Button ou ButtonPress : : : : : : la la Le le la un souris entre dans le widget souris sort du widget focus est pass au widget widget perd le focus taille du widget change. bouton est enfonc

1034

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)


- ButtonRelease - Key : un bouton de souris est relch : une touche est enfonce

Un certain nombre de touches spciales du clavier disposent galement dun code associ : BackSpace Tab Return Pause Caps_Lock Escape Prior (Page Up) Next (Page Down) End Home Print Insert Delete Num_Lock Scroll_Lock

Mais aussi les fleches directionnelles : - Left - Up - Right - Down et les touches fonctions - F1 - F2 ... - F12

// DETAIL // Information supplmentaire // (spcifier le bouton de souris auquel on veut associer un vnement, etc...) <Button-1> : vnement qui traduit que le bouton 1 de la souris est enfonc.

// Lobjet event // Lorsquun vnement est intercept un objet de ce type est pass la fonction de callbac Attributs: (renseigns que sils ont un sens par rapport lvnement) -

widget : donne lidentifiant de linstance du widget concern par lvnement. x, y : position courante de la souris, elle est donne en pixels. x_root, y_root : position relative de la souris par rapport au coin suprieur gauche. char : Chaine qui correspond au code caractre (seulement pour les vnements li keysym : symbole de la touche (seulement pour les vnements lis au clavier).

1035

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)


- keycode - num - width, height - type : code de la touche (seulement pour les : chiffre correspondant au bouton de la (seulement pour les vnements lis : nouvelles dimensions de la fentre (seulement dans le cas de lvnement : type de lvnement. vnements lis au clavier). souris utilis la souris). Configure).

Important : Pour des raisons de portabilit, il est conseill de se limiter : char, height, width, x, y, x_root, y_root, et widget moins de savoir exactement ce que lon fait :))

Pour illustrer notre propos voici un script qui va intercepter les vnements clavier, souris (bouton gauche) et redimensionnement de fentre:
#!/usr/bin/python # -*- coding: utf8 -*# tkinter-16-events.py from Tkinter import * root = Tk() # Charger le module dinterface GUI # Crer un objet fentre principale

def callback(event): infosEvt = "char : " + str(event.char) +"\n" infosEvt += "keysym : " + str(event.keysym) +"\n" infosEvt += "keycode : " + str(event.keycode) +"\n" infosEvt += "num : " + str(event.num) +"\n" infosEvt += "type : " + str(event.type) +"\n" infosEvt += "widget : " + str(event.widget) +"\n" infosEvt += "width,height : " + str(event.width) + "," + str(event.height) +"\n" infosEvt += "x,y : " + str(event.x) + "," + str(event.y) +"\n" infosEvt += "x_root, y_root : " + str(event.x_root) + "," + str(event.y_root) affichage[text] = infosEvt root.bind("<Key>", callback) root.bind("<Button-1>", callback) root.bind("<Configure>", callback) affichage = Label(root) affichage.pack() root.mainloop() # Activer et afficher la fentre principale

# Affiche les informations dvment dans un lab # vnements clavier # vnements souris (bouton gauche) # vnements redimensionnement de fentre

Cette vido (images/SI016-ch11-tkinter-39.ogv) permet davoir un apercu du rsultat :)

1036

Chapitre 24. Initiation au langage de script (PHP, Python, Perl)

24.5. Lua
Source(s):

Web: The Programming Language Lua (http://www.lua.org) Programming in Lua (rst edition) (http://www.lua.org/pil/index.html) Lua on cell phones (http://lua-users.org/lists/lua-l/2007-11/msg00248.html)

Lua est un language de script embarqu, puissant, rapide et lger :) Idal pour le monde de lembarqu... Utilis dans plusieurs applications industrielles (ex: Adobes Photoshop Lightroom), met laccent sur les systmes embarqus (ex: the Ginga TV digital au Brzil) et les jeux (ex: World of Warcraft). Lua est le language de script leader dans les jeux vidos. Il est aussi utilis pour crire des extensions pour VLC Media Player

1037

Chapitre 25. SI020 - Utilisation avance dun gestionnaire de contenu


25.1. SPIP
25.1.1. Cours
Source(s):

OF: SI020-ch01-cours-index.pdf (docs/eof/si020-ch01-cours-index.pdf)

SPIP est un Systme de Publication pour lInternet, on parle galement de Systme de gestion de contenu plus souvent appel Content Management System (CMS). Il sagit dun ensemble de chiers, installs sur votre compte Web, qui vous permettent de bncier dun certain nombre de fonctionnalits :
grer un site plusieurs mettre en page vos articles sans avoir taper de HTML modifier trs facilement la structure de votre site bnficier dun workflow de publication

Via un navigateur web, SPIP permet de fabriquer et de tenir un site web jour, grce une interface trs simple dutilisation. SPIP est souple, et orient vers la cration dun site structur comme un magazine (c.a.d avec des rubriques, sous-rubriques, etc..., dans lesquelles sont insrs des articles et des brves qui peuvent tre complts de forums de discussions. SPIP offre un rapport souplesse/simplicit trs intressant. Dautres systmes de publication existent ; chacun prsente ses spcicits :
: il impose une structure assez rigide pour le site, sous forme de portail muni de courts articles. Typo3 ou Plone : solutions plus puissantes mais aussi plus complexes. phpNuke

1038

Chapitre 25. SI020 - Utilisation avance dun gestionnaire de contenu

25.1.2. TP Installation
Source(s):

OF: si020-ch02-tp_install_spip.pdf (docs/eof/si020-ch02-tp_install_spip.pdf)

25.1.2.1. Pre-requis Apache et PHP


Pour hberger un site, il faut un serveur web. Cest lui qui interprtera le code PHP de SPIP et renverra le rsultat sous forme de page HTML. Au lieu de crer un compte spcic pour SPIP et dutiliser le rpertoire public_htlm, je cre un hte virtuel ddi pour ce TP sur mon server Apache :

# Dans la machine virutelle $ mkdir /mnt/hsubuntu/monjournal/source/projets/si020spip # crer repertoire du site $ nano /etc/apache2/sites-enabled/si020spip.eof # crer la configuration virtuell ... <VirtualHost *:80> ServerName si020spip.eof ServerAlias si020spip DocumentRoot /mnt/hsubuntu/monjournal/source/projets/si020spip ... </VirtualHost> $ /etc/init.d/apache2 restart # redmarrer le serveur HTTP

$ nano /etc/hosts ... 127.0.0.1 si020spip.eof si020spip # ajoute lenregistrement pour la rsolution de nom ... # Dans la machine hte $ nano /etc/hosts ... 192.168.1.102 si020spip.eof si020spip # ajoute lenregistrement pour la rsolution de nom ...

Suite aux differents TP prcdant, Apache est dj congur avec le support PHP (les chiers .php sont pris en compte). Vrions quil prend en charge les chier dextension .php3 :
# Cration dun fichier de test $ nano /mnt/hsubuntu/monjournal/source/projets/si020spip/info.php3 <?php phpinfo(); ?>

1039

Chapitre 25. SI020 - Utilisation avance dun gestionnaire de contenu


# Testons http://si020spip/info.php3 ==> Ok a marche...

Figure 25-1. SI020 SPIP Test .php3

25.1.2.2. Pre-requis MySql


Pour fonctionner SPIP galement besoin dune base de donnes (Mysql). Il est donc ncessaire de vriez que Mysql est dmarr :
Note : Suite un exercise prcdent, jai dsactiv mysql au dmarrage, je vais donc ractiver le service mysqld en suivant la mme mthode...

# Ouvrir le gestionnaire de service $ rcconf # puis selectionner mysql ...

1040

Chapitre 25. SI020 - Utilisation avance dun gestionnaire de contenu


(*) mysql ... # Appuyer sur la barre espace pour activer le service (astrisque prsente)

# puis valider par ... <OK> ...

Il est conseill de crer avant linstallation la base de donnes qui sera utilise par SPIP. On peut limiter les accs aux connections venant de "localhost" puisque le serveur web sera sur la mme machine :
$ mysql -h localhost -u root -p # Accder en tant que root Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 265 Server version: 5.0.51a-24+lenny3 (Debian) (...) mysql> create database spiptpbase -> ; Query OK, 1 row affected (0.04 sec) # Cration de la base de donne

mysql> grant all privileges on spiptpbase.* to spiptpuser@localhost identified byspiptppass Query OK, 0 rows affected (0.00 sec) # Cration des droits daccs mysql> flush privileges; Query OK, 0 rows affected (0.00 sec) mysql>quit # mysql -h localhost -u spiptpuser -p ... # Ne marche pas sous le prompt root !!! # Cest normal parce que le my.cfn redirige # vers la bd mysql pour laquelle lutilisateur # spiptpuser na aucun privilge. # Librer la mmoire cache

$ mysql -h localhost -u spiptpuser -p # Accs mysql sous un prompt standard Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 261 Server version: 5.0.51a-24+lenny3 (Debian) (...) (spiptpuser@localhost) [(none)]> use spiptpbase; Database changed (spiptpuser@localhost) [spiptpbase]> quit

1041

Chapitre 25. SI020 - Utilisation avance dun gestionnaire de contenu Tout est maintenant prt pour linstallation de SPIP.

25.1.2.3. Installer SPIP en local (mthode manuel)


Source(s):

OF: SPIP Tlchargement (http://www.spip.net/fr_download) SPIP Guide dinstallation (http://www.spip.net/fr_article402.html)

Pour commencer il faut tlchargez la dernire version de SPIP. Deux types dinstallation sont disponible :
- Installation normale : cest celle que nous utiliserons - Installation automatique : installation dun seul fichier qui se charge du tlchargement des fichiers ncessaires

Tlchargement de SPIP :
# Allez dans le rpertoire ou lon souhaite hberger le site $ cd /mnt/hsubuntu/monjournal/source/projets/si020spip # tlchargez le fichiers zip ou tar.gz $ wget http://files.spip.org/spip/stable/spip.zip --2010-04-27 09:50:24-- http://files.spip.org/spip/stable/spip.zip Rsolution de files.spip.org... 87.98.130.109 Connexion vers files.spip.org|87.98.130.109|:80...connect. requte HTTP transmise, en attente de la rponse...200 OK Longueur: 4534479 (4,3M) [application/zip] Saving to: spip.zip 100%[======================================>] 4 534 479 117K/s in 56s

2010-04-27 09:51:22 (78,5 KB/s) - spip.zip sauvegard [4534479/4534479] # puis dcompresser le $ unzip spip.zip # dcompresser de larchive .zip (...) inflating: spip/COPYING.txt inflating: spip/htaccess.txt extracting: spip/index.php inflating: spip/svn.revision

1042

Chapitre 25. SI020 - Utilisation avance dun gestionnaire de contenu

# deplacer les fichier ./spip/* la racine du site $ mv ./spip/* . $ rmdir ./spip # Effacer le repertoire vide

Maintenant que SPIP est install on peut lappeler travers un navigateur pour naliser la conguration. Il faut se connecter linterface dadministration : http://si020spip/ecrire Figure 25-2. SI020 SPIP Installation 1/7

1043

Chapitre 25. SI020 - Utilisation avance dun gestionnaire de contenu Figure 25-3. SI020 SPIP Installation 1/7

Il ne reste plus qu suivre les diffrentes instructions.

1044

Chapitre 25. SI020 - Utilisation avance dun gestionnaire de contenu Figure 25-4. SI020 SPIP Installation 3/7

Tout dabord SPIP besoin de pouvoir crire dans certains rpertoires, il faudra donc donner le droit crire lutilisateur Apache sur ces rpertoires.

1045

Chapitre 25. SI020 - Utilisation avance dun gestionnaire de contenu

Avertissement
Par souci de simplicit (pour accder facilement au donnes depuis lhte et la VM, et le garder centraliser sur lhte pour la sauvegarde), les sites web sont stocker dans un dossier de mon repertoire personnel sous lhte Ubuntu. Ce dossier est accessible par la VM via un partage VirtualBox. De ce fait, les permissions par dfaut sont celles du partage et non celles du repertoire personnel de lhte.

Dans lidal, les donnees devrait tre stockes directement dans la VM (le serveur) et le propritaire et groupe devrait tre le server HTTP (www-data). Un accs FTP devrait tre mis en place pour accder ces donnes. Dans le cadre de mes exercises, cela ne mai pas ncessaire.

Selon toute hypothse si les donnes tait enregistres directement sur le server, il faudrait vrier les permissions sur les chiers et accorder le droit dcriture au compte utilisateur systeme Apache (www-data), ce qui devrait tre le cas par dfaut sur Debian pour /var/www (DOCUMENT ROOT par dfaut). Si cela ntait pas le cas, les commandes suivantes devraient faire laffaire :)
# Changer le groupe sur les fichiers concerns $ sudo chgrp -Rv www-data IMG/ tmp/ local/ config/ [sudo] password for filostene: Changement de groupe de IMG/remove.txt vers www-data Changement de groupe de IMG/ vers www-data (...) # Donner un droit daccs en criture au groupe www-data (serveur web) $ sudo chmod g+w -Rv IMG/ tmp/ local/ config/ Le mode daccs de IMG/ a t modifi 0775 (rwxrwxr-x). Le mode daccs de IMG/remove.txt qui a t conserv est: 0664 (rw-rw-r--). (...)

Avertissement
Toutefois dans mon cas particulier cela ne fonctionne pas. En effet, les donnes sont sur un partage virtualbox qui est mont au dmarrage de la machine virtuelle avec UID et GID propre (root par dfaut). Il nest pas possible de changer les paramtres de scurit avec chmod/chown/chgrp sur un tel partage une fois que le repertoire est mont.

1046

Chapitre 25. SI020 - Utilisation avance dun gestionnaire de contenu Il faut donc que je modie les options du point de montage de faon avoir le compte Apache (www-data) propritaire des donnes, et mon groupe dutilisateur comme groupe sur les chier monts :

# Sur la machine virtuelle # modifier la configuration du montage de partage virtualbox $ nano /etc/fstab (...) #vmdebian /mnt/hsubuntu vboxsf rw,uid=1000... # Commenter ancienne configura vmdebian /mnt/hsubuntu vboxsf rw,uid=33,gid=1000,dmode=0772,fmode=0772... # Insre (...) ## 33 est le UID du compte www-data ## 1000 est le GID du groupe filostene (correpondant au mme compte)

## dmode=0772 donne les droits drwxrwxr-- tous les repertoires (lors du montage) ## fmode=0772 donne les droits -rwxrwxr-- tous les fichiers (lors du montage) ==> Ces deux dernires options sont requises pour pouvoir gnrer le journal sans erreur dep # Vrification $ ls -l -rw-r--r-- 1 www-data drwxrwxr-x 1 www-data -rw-r--r-- 1 www-data drwxr-xr-x 1 www-data (...)

filostene filostene filostene filostene

34329 4096 35147 4096

avr 9 22:30 CHANGELOG.txt avr 27 12:43 config avr 9 22:30 COPYING.txt avr 27 12:43 ecrire

Avertissement
Cette solution est bien entendu viter pour un systme en production, ceci nest mis en place que pour travailler localement entre mon hte et ma machine virtuelle dans le cadre uniquement du TP de lEoF.

Je clique sur le bouton Recharger la page pour vrier que les repertoires SPIP sont bien accessible en criture comme requis... et a fonctionne, je passe ltape suivante... :)

1047

Chapitre 25. SI020 - Utilisation avance dun gestionnaire de contenu Figure 25-5. SI020 SPIP Installation 4/7

1048

Chapitre 25. SI020 - Utilisation avance dun gestionnaire de contenu

Il faut ensuite prciser la base de donnes que peut utiliser SPIP et enn entrer les identiants de ladministrateur du site.

1049

Chapitre 25. SI020 - Utilisation avance dun gestionnaire de contenu Figure 25-6. SI020 SPIP Installation 5/7

1050

Chapitre 25. SI020 - Utilisation avance dun gestionnaire de contenu

1051

Chapitre 25. SI020 - Utilisation avance dun gestionnaire de contenu Figure 25-7. SI020 SPIP Installation 6/7

1052

Chapitre 25. SI020 - Utilisation avance dun gestionnaire de contenu

Figure 25-8. SI020 SPIP Installation 7/7

1053

Chapitre 25. SI020 - Utilisation avance dun gestionnaire de contenu Enn jaccde lespace priv : Figure 25-9. SI020 SPIP Espace Priv

Jaccde lespace public cr par dfaut :

1054

Chapitre 25. SI020 - Utilisation avance dun gestionnaire de contenu Figure 25-10. SI020 SPIP Public (par dfaut)

Voila, SPIP est install, il ne reste plus qu jouer avec !

1055

Chapitre 25. SI020 - Utilisation avance dun gestionnaire de contenu Figure 25-11. SI020 SPIP Public 1re Rubrique

1056

Chapitre 25. SI020 - Utilisation avance dun gestionnaire de contenu Figure 25-12. SI020 SPIP Public 1er Article

1057

Chapitre 25. SI020 - Utilisation avance dun gestionnaire de contenu

Figure 25-13. SI020 SPIP Public (mise jour)

1058

Chapitre 25. SI020 - Utilisation avance dun gestionnaire de contenu Figure 25-14. SI020 SPIP Sauvegarde 1/2

1059

Chapitre 25. SI020 - Utilisation avance dun gestionnaire de contenu

1060

Chapitre 25. SI020 - Utilisation avance dun gestionnaire de contenu Figure 25-15. SI020 SPIP Sauvegarde 2/2

1061

Chapitre 25. SI020 - Utilisation avance dun gestionnaire de contenu

Exemple de chier de sauvegarde : Ricardo_20100427.xml.gz (docs/si020spip-Ricardo_20100427.xml.gz)

25.1.2.4. Installer SPIP chez un hebergeur web (mthode automatique spip_loader )


Source(s):

web: Installation automatique ( spip_loader ) (http://www.spip.net/fr_article402.html)

Le pralable linstallation de SPIP chez un hbergeur Web, cest davoir un espace web disponible sur Internet ! Pour les tapes de cration dun espace web, voir la section ddie Hbergement de site Web sur Internet. Jinstallerais donc SPIP sur mon espace web accessible via http://ermansion.toile-libre.org. La procdure la plus facile et la plus rapide est linstallation automatique avec spip_loader . Ce petit chier va tlcharger SPIP et linstaller lui-mme chez lhbergeur.

1062

Chapitre 25. SI020 - Utilisation avance dun gestionnaire de contenu Figure 25-16. SI020 SPIP Installation Automatique

Avertissement
Cette procdure ne fonctionne pas sur tous les serveurs. Si elle ne fonctionne pas (vous vous en rendrez compte immdiatement), passez directement lautre mthode.

# Rcuprez le fichier spip_loader.php (http://www.spip.net/fr_article2670.html#spip_loader) $ cd /tmp $ wget http://www.spip.net/spip-dev/INSTALL/spip_loader.php (...) Connexion vers www.spip.net|217.24.84.2|:80... connect. (...)

1063

Chapitre 25. SI020 - Utilisation avance dun gestionnaire de contenu


100%[======================================>] 21 004 40,2K/s in 0,5s

2010-04-30 11:15:49 (40,2 KB/s) - spip_loader.php sauvegard [21004/21004] # Dposez ce fichier dans lespace dhbergement (par FTP ou par tout autre moyen propos par lhbergeur) $ ftp ftp.toile-libre.org Connected to ftp.toile-libre.org. (...) ftp>cd /ermansion/ermansion.toile-libre.org-web/htdocs ftp> put spip_loader.php local: spip_loader.php remote: spip_loader.php (...) 226-File successfully transferred ftp>quit # Visite de mon site avec via le navigateur habituel et affiche le fichier dpos http://ermansion.toile-libre.org/spip_loader.php # et suivre les indications...

1064

Chapitre 25. SI020 - Utilisation avance dun gestionnaire de contenu Figure 25-17. SI020 SPIP Installation Automatique 2

1065

Chapitre 25. SI020 - Utilisation avance dun gestionnaire de contenu Bon ben comme a marche pas, je passe par la mthode manuel :
# Allez dans le rpertoire temporaire $ cd /tmp # tlchargez le fichiers zip ou tar.gz $ wget http://files.spip.org/spip/stable/spip.zip # dcompresser de larchive .zip $ unzip spip.zip # renommer dossier dcompress $ mv spip eofsi020spip # Dposez le dossier dans lespace dhbergement sur Internet (par FTP ou par tout autre moyen propos par lhbergeur) $ apt-get install filezilla $ filezilla &

Note : La commande ftp ne permet pas un transfert ais de repertoire et sous-rpertoire. De ce fait, je moriente vers un autre outil pour le transfert des chiers SPIP vers mon espace web. Filezilla (http://www.lezilla.fr) est une rfrence en matire de client FTP rapide, scuris, multi-plateforme et gratuit. Pour la conguration, se reporter au tutorial (http://www.lezilla.fr/lezilla-tuto-cnet.html ) disponible en ligne.

Je congure Filezilla :

1066

Chapitre 25. SI020 - Utilisation avance dun gestionnaire de contenu Figure 25-18. SI020 SPIP Filezilla 1

Puis je me connecte mon espace web et procde au transfert du dossier SPIP :

1067

Chapitre 25. SI020 - Utilisation avance dun gestionnaire de contenu Figure 25-19. SI020 SPIP Filezilla 2

1068

Chapitre 25. SI020 - Utilisation avance dun gestionnaire de contenu

Une fois le transfert complt, jaccde ensuite lespace de conguration SPIP sur mon site Internet http://ermansion.toile-libre.org/eofsi020spip/ecrire... ...et je suis les instructions dinstallation...
Note : Cette procdure dj t dcrite en dtail dans une section prcdente : Installer SPIP en local (mthode manuel).

Les dossiers sont accessibles en criture par le serveur web par dfaut. Pour laccs la base de donnes, jindique :
Serveur : sql.toile-libre.org Nom : nom_de_la_base Mot de passe : password_utilis_pour_crer_la_base

Tout cest bien droul sauf la n :((( Figure 25-20. SI020 SPIP Monsite Erreur

1069

Chapitre 25. SI020 - Utilisation avance dun gestionnaire de contenu

Pour rsoudre ce problme jai tent ce qui suit :

1. Dplacer monsite/htdocs/eofsi020spip/config/connect.php dans monsite/php-include/eofsi020 2. Copier monsite/htdocs/eofsi020spip/config vers monsite/php-include/eofsi020spip/tmp 3. Crer un fichier monsite/htdocs/eofsi020spip/config/mes_options.php contenant :

<?php // Chemin vers le dossier contenant les paramtres de connexion la base de donnes (connec define ("_DIR_CONNECT", realpath(dirname(__FILE__)."/../../php-include/eofsi020spip/config/" // Chemin vers le dossier temporaire des donnes cachs et sensibles define ("_DIR_TMP", realpath(dirname(__FILE__)."/../../php-include/eofsi020spip/tmp/")."/"); ?>

Cela a bien supprimer lerreur afcher par contre il reste impossible de se connecter, le systme revenant systmatiquement la page de login, indiquant une erreur dauthentication... avec un bouton [log out] ce qui est plutt trange. Javais pens aussi une incompatibilit entre SPIP et toile-libre.org du fait que le serveur utilis nest pas Apache mais Lighthttpd. Toutefois je nai trouv aucun conrmation que SPIP ne fonctionne quavec Apache et pas avec dautre server web. Aprs avoir essayer de r-installer plusieurs fois la racine du site, sans modication aucune, il savre que cela ne marche toujours pas. Il me semble donc quil y a soit un problme dauthentication dans la dernire version stable SPIP, soit un rel problme de compatibilit dont je ne trouve pas la cause ni dinfo dans les logs. Le communication semblant assez lente, il se peut que cela provienne dun timeout... mais cest difcile dire tant donn que SPIP afche la page de login. Du coup, je retente lexperience avec la version stable prcdente juste pour voir et cette fois a marche !

1070

Chapitre 25. SI020 - Utilisation avance dun gestionnaire de contenu Figure 25-21. SI020 SPIP Monsite Prive

1071

Chapitre 25. SI020 - Utilisation avance dun gestionnaire de contenu Figure 25-22. SI020 SPIP Monsite Public

Voil cest install... prt pour la suite ! Vraiment des fois mieux vaut ne pas installer la toute dernire version dun logiciel parce que cela peut vite tourner en arrachage de cheveux et une perte de temps considrable !!!

25.1.3. TP Prise en main


Source(s):

OF: SI020-ch03-035spip_priseenmain_v2_tp.pdf (docs/eof/si020-ch03-035spip_priseenmain_v2_tp.pdf)

Crer des rubriques et des articles en passant par linterface dadministration... Comprendre quelles interactions existent entre la partie publique et prive...

1072

Chapitre 25. SI020 - Utilisation avance dun gestionnaire de contenu Utiliser le workow intgr SPIP... Jai cr une rubrique Projets ainsi quune sous rubrique of et jai crer un article ctif pour chacun avec insertion dun logo, et dune image dans le texte... Jai test quelques une des options diponibles dans lditeur de texte Porte Plume... Jai test le passage de lespace prive lepsace publique et vice versa... ainsi que la cration/suppression dauteurs, modication de leur paramtres et autres... Jai test les changements dinterface, couleur, langue, petit/grand ecran... Jai test la sauvegarde (dans la section prcdente)...

25.1.4. TP Installation de Squelettes


Source(s):

OF: si020-ch04-tp_squelettes.pdf (docs/eof/si020-ch04-tp_squelettes.pdf) Web: SPIP-Contrib (http://www.spip-contrib.net) SPIP Squelettes (http://www.spip-contrib.net/Squelettes) SPIP Squelette Evaweb (http://www.spip-contrib.net/Eva-web-4-0)

Lafchage dun site sous SPIP est mis en forme par un jeu de squelettes. Un squelette ce nest rien de plus quun ensemble de chiers HTML, contenant du code HTML, des slecteurs CSS/JS, et des boucles SPIP. Il va dnir la structure mais aussi le fonctionnement du site. Des squelettes sont mis disposition par la communaut sur le site SPIP-Contrib (http://www.spip-contrib.net). Testong le squelette Evaweb. Installation & Tlchargement du squelette : EVA-WEB 4.0 stable (http://eva-web.edres74.net/spip.php?rubrique18). Linstallation seffectue comme un simple plugin dans le rpertoire /plugins/auto de prfrence.

1073

Chapitre 25. SI020 - Utilisation avance dun gestionnaire de contenu Dans SPIP, je me rends donc dans Conguration > Gestion des Plugins > Ajouter des plugins qui donne quelques instructions :

1074

Chapitre 25. SI020 - Utilisation avance dun gestionnaire de contenu Figure 25-23. SI020 SPIP Ajouter des plugins 1/6

1075

Chapitre 25. SI020 - Utilisation avance dun gestionnaire de contenu

# Dans la machine virtuelle # Crer un repertoire plugins la racine $ mkdir /mnt/hsubuntu/monjournal/source/projets/si020spip/plugins # Configuration des droits daccs $ ls -l (...) drwxrwxr-x 1 www-data filostene 4096 mai (...)

4 14:54 plugins

Je rafrachis la page dajout des plugins dans SPIP...


Note : Lors du rafraichissement de la page, jobserve que SPIP a cr lui mme le repertoire ./plugins/auto requis.

Un formulaire apparat maintenant permettant dindiquer des dpts de plugin SPIP... je tente lexperience avec les deux proposs...

1076

Chapitre 25. SI020 - Utilisation avance dun gestionnaire de contenu Figure 25-24. SI020 SPIP Ajouter des plugins 2/6

Aprs validation, une liste de plugin disponible linstallation apparat...

1077

Chapitre 25. SI020 - Utilisation avance dun gestionnaire de contenu Figure 25-25. SI020 SPIP Ajouter des plugins 3/6

1078

Chapitre 25. SI020 - Utilisation avance dun gestionnaire de contenu

Curieusement le squelette EvaWeb napparat pas dans la liste, nous allons donc linstaller un peu plus manuellement...
# Tlcharger le squelette dans plugins/ $ cd /mnt/hsubuntu/monjournal/source/projets/si020spip/plugins $ wget http://files.spip.org/spip-zone/eva_squelettes_pour_spip_2_0.zip (...) Saving to: eva_squelettes_pour_spip_2_0.zip 100%[======================================>] 842 692 116K/s in 10s

2010-05-04 14:52:44 (79,9 KB/s) - eva_squelettes_pour_spip_2_0.zip sauvegard ... # Dcompression $ unzip eva_squelettes_pour_spip_2_0.zip

Note : Ici jutilise wget car jai un accs direct au repertoire des donnes du site, pour un accs distant, il faudrait simplement dezipper en local puis transfrer le contenu dcompress dans le repertoire /plugins distant via FTP par example.

Maintenant je retourne dans SPIP, je me rends Conguration > Gestion des plugins > Liste des plugins.

1079

Chapitre 25. SI020 - Utilisation avance dun gestionnaire de contenu Figure 25-26. SI020 SPIP Ajouter des plugins 4/6

Jactive mon nouveau plugin install (cocher la case et en appyer sur le bouton Enregistrer)...

1080

Chapitre 25. SI020 - Utilisation avance dun gestionnaire de contenu Le nouveau plugin semble maintenant actif : Figure 25-27. SI020 SPIP Ajouter des plugins 5/6

Maintenant lafchage est compltement diffrent de la partie publique de mon site SPIP, il est dpendant du squelette install...

1081

Chapitre 25. SI020 - Utilisation avance dun gestionnaire de contenu Figure 25-28. SI020 SPIP Ajouter des plugins 6/6

1082

Chapitre 25. SI020 - Utilisation avance dun gestionnaire de contenu

Note : Les nouveaux squelettes Evaweb sont dans : /spip/plugins/auto/eva_squelettes_pour_spip_2_0. Si on le souhaite on peut changer les styles CSS ainsi que le code HTML de rubrique.html ou article.html (il est prfrable de faire une sauvegarde au pralable).

25.1.5. Ralisation dun squelette SPIP


Source(s):

OF: si020-ch05-050spip_squelettesimple.pdf (docs/eof/si020-ch05-050spip_squelettesimple.pdf) Ressources SPIP: Boucle ARTICLES (http://www.spip.net/fr_article902.html) Boucle RUBRIQUES (http://www.spip.net/fr_article904.html) Boucle FORUMS (http://www.spip.net/fr_article908.html) Boucle DOCUMENTS (http://www.spip.net/fr_article1823.html) Critres communs toutes les boucles (http://www.spip.net/fr_article900.html) Boucles rcursives (http://www.spip.net/fr_article914.html) Boucles de recherche (http://www.spip.net/fr_article903.html) popularit des articles (http://www.spip.net/fr_article1846.html) Filtres de SPIP (http://www.spip.net/fr_article901.html) Gestion des dates (http://www.spip.net/fr_article1971.html)

Un site est un ensemble de rpertoires, reprsentant larchitecture du site, et contenant des pages web :
Les rubriques correspondent aux rpertoires et peuvent contenir des pages Les articles correspondent aux pages

Dans SPIP lensemble des informations sont contenues dans une base de donnes et non pysiquement directement sur un disque. An de les extraire, SPIP propose en ensemble de fonctionnalits dont :
la mise en page du site est effectue au moyen de pages HTML nommes squelettes contenant des instructions simplifies permettant dindiquer o, et comment, se placent les informations tires de la base de donnes dans la page

un systme de cache permet de stocker chaque page, et ainsi dviter de provoquer des appels la base de donnes chaque visite. Non seulement la charge sur le serveur est rduite, la vitesse trs largement acclre, mais de plus, un site sous SPIP, reste consultable mme lorsque la base MYSQL est "plante

1083

Chapitre 25. SI020 - Utilisation avance dun gestionnaire de contenu

Un chier squelette contient deux informations il indique :


la dure durant laquelle la page est conserve dans le cache. quelles sont les informations afficher.

Une autre information importante est contenue dans le nom du squelette :


article.html pour les articles (par dfaut) rubrique.html pour les rubriques (par dfaut) article=25.html appliqu aux articles dans la rubrique 25 rubrique=25.html appliqu la rubrique 25 article-25.html prcis pour les rubriques et sous-rubriques rubrique-25.html

Le cache SPIP : les pages sont calcules en cache du ct serveur an de ne pas utiliser des ressources inutilement. Voici le fonctionnement du cache :

1. lutilisateur appelle une page 2. SPIP regarde si la page est en cache 2a. si le fichier existe et que son ge est infrieur lge maximum dclar dans le fichie alors il est affich 2b. sinon, le fichier est calcul en fonction du fichier .html correspondant 3. le fichier est envoy lutilisateur et stock en cache

Syntaxe SPIP dans un squelette (peut tre mix avec du code HTML) :
### Afficher une information : #TITRE #DESCRIPTIF #TEXTE [<span class="titre">(#TITRE )</span><br/>] [<span class="descriptif">(#DESCRIPTIF )</span><br/>] [(#TEXTE )]

1084

Chapitre 25. SI020 - Utilisation avance dun gestionnaire de contenu

# Informations entre crochets ne sont affiches que si le contenu entre parenthse # retourne une chane de caractre non null.

### Filtres = rcuprer une chane de caractres aprs lui avoir appliquer un certain nombre [<span class="date">(#DATE|affdate)</span><br/>] # possible de cumuler plusieurs filtres les uns la suite des autres. # Un filtre peut tre nimporte quelle fonction du type : function($str){ //tous plein de trucs sympas en php echo $newstr; } ### Boucles <B_lstRubrique> <ul>

# Debut boucle conditionnelle # Afficher une fois # si boulce retourne con <BOUCLE_lstRubrique(RUBRIQUES)> # Debut boucle de contenu <li><a href="#URL_ARTICLE">#TITRE</a></li> # Affiche recursivement contenu si existe </BOUCLE_lstRubrique> # Fin boucle contenu </ul> # Afficher une fois # si boucle retourne con </B_lstRubrique> # Fin intermediaire boucle con Aucune rubrique dans le site # Afficher une fois # si boucle retourne rie <//B_lstRubrique> # Fin boucle conditionelle ### Critres de slections communs {par critre_de_classement} : exemple : {par titre} / {par date} {par hasard} {inverse} : ordre inverse {titre==^[aA]} : article commenant par A ou a {age<30} : publi depuis moins de 30 jours {", "} : affiche , entre chaque rsultat ### Critres spcifis "en dur" id_rubrique=1 : pour forcer lid de rubrique 1 {id_rubrique} : laisss vierges. (valeur passe en paramtre ou de contexte) # Exemple : <BOUCLE_AffIdRubrique(RUBRIQUES){id_rubrique}> lid de rubrique est #ID_RUBRIQUE </BOUCLE_AffIdRubrique> # Resultat lid de rubrique est 1 lid de rubrique est 3

# pour spip.php?rubrique1 # pour spip.php?rubrique3

1085

Chapitre 25. SI020 - Utilisation avance dun gestionnaire de contenu

25.1.6. TP : introduction la cration de squelettes SPIP


Source(s):

OF: si020-ch06-055spip_squelettesimple_tp.pdf (docs/eof/si020-ch06-055spip_squelettesimple_tp.pdf)

25.1.7. TP : cration avanc de squelettes SPIP


Source(s):

OF: si020-ch07-065spip_squeletteavances_tp.pdf (docs/eof/si020-ch07-065spip_squeletteavances_tp.pdf)

25.1.8. Projet SPIP - Ralisation dun site complet


Source(s):

OF: si020-ch09-tp_realiser_un_site_complet.pdf (docs/eof/si020-ch09-tp_realiser_un_site_complet.pdf)

Organisation projet...

1086

Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL
26.1. XML/XSL
26.1.1. Prsentation XML
Source(s):

OF: SI022-ch01-presentationxml_u8.pdf (docs/eof/SI022-ch01-presentationxml_u8.pdf) Web: XML Schema (W3C) (http://www.w3schools.com/schema/schema_intro.asp) Introduction to DTD (W3C) (http://www.w3schools.com/dtd/dtd_intro.asp) Tutorial: XML Schema Tutorial (http://www.w3schools.com/w3c/w3c_schema.asp) An XSD Example - How to write an XML Schema (different way) (http://www.w3schools.com/schema/schema_example.asp)

Les DTDs (.dtd) et Schemas XML (.xsd) permettent de dcrire et valider le contenu dun document XML. Les Schemas XML sont les successeurs des DTDs et sont destins les remplacer pour les raisons suivantes :
* * * * * XML XML XML XML XML Schemas Schemas Schemas Schemas Schemas sont extensible pour de future ajouts sont plus riches et plus puissants que les DTDs sont cris en XML (ce qui nest pas le cas des DTDs) supportent les types de donnes supportent les espaces de noms

Les espaces de noms permettent de mlanger diffrente syntaxe XML au sain dun mme document. Exemple de dclaration et dutilisation dun espace de nom qui associe le prxe despace de nom edi avec lespace de nom http://ecommerce.org/schema :
<x xmlns:edi=http://ecommerce.org/schema> <!-- the "edi" prefix is bound to http://ecommerce.org/schema for the "x" element and contents -->

1087

Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL

<!-- the price elements namespace is http://ecommerce.org/schema --> <edi:price units=Euro>32.18</edi:price> <!-- the taxClass attributes namespace is http://ecommerce.org/schema --> <lineItem edi:taxClass="exempt">Baby food</lineItem> </x>

Autres clarications (XSD Questions) (docs/XSD-Questions-vj.html) intressantes sur la notion despace de nom et de schema XML. Les lments complexType sont de type complexe parce quils contiennent dautres lments (noeuds enfants) - Exemple : <P></P> Les lments simpleType sont de type simple (string, integer, oat, date) parce quils ne contiennent pas dautres lments (pas de noeuds enfant) - Exemple : <HR /> Un document XML a une rfrence soit vers,
<-- une DTD --> <?xml version="1.0"?> <!DOCTYPE note SYSTEM "http://www.w3schools.com/dtd/note.dtd"> (...)

soit vers
<-- un Schema XML --> <note xmlns="http://www.w3schools.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3schools.com note.xsd"> (...) </note>

Note : Ici note est un nom arbitraire, il reprsente le noeud racine (root node) du document XML.

Important : Par convention le prxe de lespace de noms dun Schema XML est xs ou xsd .

1088

Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL Processeurs XML : Tout logiciel qui traite le XML est quali de processeur XML. Les navigateurs Web, les diteurs XML ou encore les validateurs sont quelques exemples de processeurs XML. Parseur XML : Le parseur XML est un processeur XML qui ralise lanalyse syntaxique dun document XML. Il va dcomposer les donnes selon des rgles tablies. APIs daccs aux donnes : - DOM (Document Object Model) [Lire & crire][Est une recommandation du W3C] : DOM est une API qui permet daccder et de manipuler le contenu et la structure de documents XML. - SAX (Simple API for XML) [Lire seulement][Nest pas une recommandation du W3C] : LAPI SAX est dite vnementielle, cest dire que lors du parcours du document XML le programme va ragir aux informations rencontres. Par exemple, une action particulire va tre effectue chaque fois quune balise est rencontre. Les traitements avec SAX sont faits au fur et mesure de la lecture du document. Le document nest pas conserv en mmoire ce qui limite SAX un travail de lecture. Pour manipuler (modier) un document il faudra utiliser linterface DOM.

26.1.2. TD - XML
Source(s):

OF: SI022-ch02-tdxml.pdf (docs/eof/SI022-ch02-tdxml.pdf)

Tlcharger larchive .zip regroupant tous les scripts du module XML : SI022 XML (Archive .zip) (projets/si022xml-v01.zip) Accessible aussi depuis la page Projets/TPs (projets/index.html). exemple1-original.xml :

<exemple1> <baliseSeule>cet lment na pas de balise de fin. <elementVideIncorrect parametre="1"> <element parametreIncorrect=test>la dclaration du paramtre est incorrect</element> <element1>imbrication<element2> incorrecte de ces deux lments</element1></element2 <element>lment qui dispose dune entit caractre prdfinie non chappe &.</elem <balise avec des caractres interdit/> </exemple1>

1089

Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL Resultat :

1090

Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL Figure 26-1. SI022 TP XML 1/14

1091

Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL

exemple1.xml corrig :

<exemple1> <baliseSeule>Cet lment na pas de balise de fin.</baliseSeule> <elementVideIncorrect parametre="1"/> <element parametreIncorrect="test">la dclaration du paramtre est incorrect</elemen <element1>imbrication<element2> incorrecte de ces deux lments</element2></element1 <element><![CDATA[lment qui dispose dune entit caractre prdfinie non chappe <balise_avec.des-caractres-interdit/> </exemple1>

Note : Deux possibilits pour chapper une entit caractre prdnie :


- Soit chapper chaque "<", ">" ou "&" par leurs entits XML "&lt;", "&gt;" ou "&amp;" respectivement - Soit chapper tout le contenu de <element> dans un CDATA. Il est peut-tre plus simple et plus flexible de faire a car on est sr dchapper tous le contenu du tag <element> sans risquer que le texte soit interprt en XML.

Resultat : Figure 26-2. SI022 TP XML 2/14

1092

Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL

Je rajoute dans mon script PHP:


header("Content-type: text/xml");

Et voil...

1093

Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL Figure 26-3. SI022 TP XML 3/14

1094

Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL

exemple1.php complet :
header(Content-type: text/xml); $document = new DOMDocument(); //$document->load(exemple1-original.xml); $document->load(exemple1.xml); echo $document->saveXML();

// fichier avec erreur XML // fichier corrig

Puis je passe au livre :


<!-- livre.dtd --> <!ELEMENT livre (titre, auteur, type, description?, commentaire*)> <!ATTLIST livre ISBN CDATA #REQUIRED> <!ELEMENT titre (#PCDATA)> <!ELEMENT auteur (#PCDATA)> <!ELEMENT type (#PCDATA)> <!ELEMENT description (#PCDATA)> <!ELEMENT commentaire (#PCDATA)>

<!-- livre.xml --> <livre ISBN="2-9999-123-4"> <titre>Le XML rapide</titre> <auteur>Arnauld</auteur> <type>Documentation technique</type> <description>Cet ouvrage explique les fondements du XML.</description> <commentaire>Bon rapport qualit prix.</commentaire> <commentaire>Bonne explication des bases.</commentaire> </livre>

// livre.php error_reporting(E_ALL); // To avoid E_STRICT error with static loading below... $document = DOMDocument::load(livre.xml); echo ($document->validate())? "Le document est valide." : "Le document nest pas valide";

Note : La ligne de code,


$document = DOMDocument::load(livre.xml); // Appel statique de la fonction au lieu de passer // par un objet instanci via "new"

1095

Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL
provoque lerreur suivante,
Strict Standards: Non-static method DOMDocument::load() should not be called statically in /mnt/hsubuntu/monjournal/source/projets/si022xml/livre.php on line 11

si le niveau du rapport derreur est E_STRICT. Daprs la documentation PHP (http://www.php.net/manual/fr/domdocument.loadxml.php) et ce post (http://bugs.php.net/bug.php?id=39057), il semblerait que cette erreur soit normal en mode rapport derreur E_STRICT :
(A propos de DOMDocument::load et DOMDocument::loadXML) "... Si appel statiquement, retourne un DOMDocument mais une alerte de type E_STRICT sera mise. ..."

Cet avertissement survient parce que daprs http://bugs.php.net/bug.php?id=41398, cette mthode statique est contraire aux standards. Elle peut-tre utilise, elle fonctionne, mais ce nest pas recommand do lerreur Strict Standards reporte. Deux solutions :

- Ajouter error_reporting(E_ALL); en dbut du script PHP pour "contourner" lerreur - Utiliser la mthode en passant par un objet instanci via "new" au lieu de lappeler en mode sta

Important : Pour le TP, je choisi dlibrement de contourner le message derreur, mais dans un cas rel il est plus que prfrable de suivre les recommandations PHP et donc dinstancier lobjet comme dans la premire partie ci-avant.

Resultat : Figure 26-4. SI022 TP XML 4/14

1096

Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL

Je supprime llment description et jactualise la page livre.php : Figure 26-5. SI022 TP XML 5/14

Jobtiens bien lerreur attendue... Jaddapte la DTD en consquence, en plaons le symbole ? derrire llment description :
(...) <!ELEMENT livre (titre, auteur, type, description?, commentaire*)> (...)

Lerreur disparat une fois la page recharge... la cardinalit du document est donc correct de nouveau... Je modie le chier XML de faon placer llment auteur avant llment titre :

1097

Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL
<livre ISBN="2-9999-123-4"> <auteur>Arnauld</auteur> <titre>Le XML rapide</titre> <type>Documentation technique</type> <!--<description>Cet ouvrage explique les fondements du XML.</description>--> <commentaire>Bon rapport qualit prix.</commentaire> <commentaire>Bonne explication des bases.</commentaire> </livre>

Resultat : Figure 26-6. SI022 TP XML 6/14

Lerreur attendue apparat au grand jour ! Jinverse mes derniers changement pour la corriger... Puis je fais voluer le modle en remplacant :
<!-- livre.dtd --> (...)

1098

Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL
<!ELEMENT description (#PCDATA)> (...)

par
(...) <!ELEMENT description (#PCDATA|epoque|resume)*> <!ELEMENT epoque (#PCDATA)> <!ELEMENT resume (#PCDATA)> (...)

et
<!-- livre.xml --> (...) <description>Cet ouvrage explique les fondements du XML.</description> (...)

par
(...) <description>Description du livre, <epoque>de nos jours</epoque> <resume>Rsum du roman</resume> </description> (...)

Note : Ne pas oubli lastrisque dans la DTD pour la description du contenu mixte...!

Resultat :

1099

Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL Figure 26-7. SI022 TP XML 7/14

1100

Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL

Je modie le document XML pour rajouter une entit :


<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE livre SYSTEM "livre.dtd" [ <!ENTITY titreLivre "Le XML rapide"> ]> <livre ISBN="2-9999-123-4"> <titre>&titreLivre;</titre> <auteur>Arnauld</auteur> <type>Documentation technique</type> <description>&titreLivre; explique les fondements du XML, <epoque>de nos jours</epoque> <resume>Rsum du roman</resume> </description> <commentaire>Bonne explication des bases.</commentaire> </livre>

Resultat :

1101

Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL Figure 26-8. SI022 TP XML 8/14

1102

Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL

Passons au livre dans sa validation par schema XML :

<!-- livre.xsd --> <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="livre" type="livreType"/> <xs:complexType name="livreType"> <xs:sequence> <xs:element name="titre" type="xs:string"/> <xs:element name="auteur" type="xs:string"/> <xs:element name="type" type="xs:string"/> <xs:element name="description" type="xs:string"/> <xs:element name="commentaire" type="xs:string" minOccurs="0" maxOccurs="unbound </xs:sequence> <xs:attribute name="ISBN" type="xs:string"/> </xs:complexType> </xs:schema>

<!-- livrexsd.xml --> <?xml version="1.0" encoding="UTF-8"?> <livre xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="livre.xsd" ISBN="2-9999-123-4" > <titre>Le XML rapide</titre> <auteur>Arnauld</auteur> <type>Documentation technique</type> <description>Cet ouvrage explique les fondements du XML.</description> <commentaire>Un bon rapport qualit prix.</commentaire> <commentaire>Bonne explication des bases.</commentaire> </livre>

// livrexsd.php $document = new DOMDocument(); $document->load(livrexsd.xml); echo ($document->schemaValidate(livre.xsd))? "Le document est valide." : "Le document nes

Note : Dans le schema XML, la valeur unbounded correspond ne pas xer de limite

Resultat :

1103

Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL Figure 26-9. SI022 TP XML 9/14 [XSD]

Je supprime llment description et jactualise la page livrexsd.php : Figure 26-10. SI022 TP XML 10/14 [XSD]

Jobtiens une erreur... Jaddapte le schema XML en consquence, en ajoutant lattribut minOccurs (valeur 1 par dfaut) pour llment description :

1104

Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL
(...) <xs:element name="description" type="xs:string" minOccurs="0"/> (...)

Lerreur disparat une fois la page recharge... la cardinalit du document est donc correct de nouveau... Jenrichis maintenant llment description dans le document XML en lui donnant un contenu mixte en remplacant :
<!-- livrexsd.xml --> (...) <description>Cet ouvrage explique les fondements du XML.</description> (...)

par
(...) <description> Description du livre, <epoque>de nos jours</epoque> <resume>Rsum du roman</resume> </description> (...)

Resultat :

1105

Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL Figure 26-11. SI022 TP XML 11/14 [XSD]

Jobtiens bien lerreur attendue... Jaddapte le schema XML pour corriger lerreur en remplacant :
<!-- livre.xsd --> (...) <xsd:element name="description" type="xsd:string" minOccurs="0"/> (...)

par
(...) <xs:element name="description" minOccurs="0"> <xs:complexType mixed="true"> <xs:sequence> <xs:element name="epoque" type="xs:string" minOccurs="0"/> <xs:element name="resume" type="xs:string" minOccurs="0"/> </xs:sequence> </xs:complexType> </xs:element> (...)

1106

Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL Lerreur disparat une fois la page recharge... le document est donc de nouveau valide...
Note : Lattribut mixed="true" indique que llment a un contenu mixte. Cela signie que comme dans le cas des DTD, le contenu mixte est un contenu qui peut contenir du texte et/ou des sous lments. Dans notre cas description contient du texte et des sous lments :
<description> description du livre, <epoque>de nos jours</epoque> <resume>Resum du roman</resume> </description>

par dfaut mixed="false" , ce qui signie quun lment ne peut contenir que du texte OU des sous lments...

Resultat : Figure 26-12. SI022 TP XML 12/14 [XSD]

Passons maintenant un document XML formation :


<!-- formation.xml --> <?xml version="1.0" encoding="UTF-8"?> <formation> <session nom="01-2006"> <apprenants> <apprenant identifiant="jdupond" password="jean"> <nom>dupond</nom>

1107

Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL
<prenom>jean</prenom> <groupes>reseau information</groupes> </apprenant> <apprenant identifiant="mdurant" password="marie"> <nom>durant</nom> <prenom>marie</prenom> <groupes>information developpement</groupes> </apprenant> <apprenant identifiant="pdujardin" password="pierre"> <nom>dujardin</nom> <prenom>pierre</prenom> <groupes>reseau information</groupes> </apprenant> <apprenant identifiant="elamarche" password="eric"> <nom>lamarche</nom> <prenom>eric</prenom> <groupes>developpement scurit</groupes> </apprenant> </apprenants> </session> </formation>

Constuire la DTD du document XML formation :


<!-- formation.dtd --> <!ELEMENT formation (session)> <!ELEMENT session (apprenants)> <!ATTLIST session nom CDATA #REQUIRED> <!ELEMENT apprenants (apprenant)+> <!ELEMENT apprenant (nom, prenom, groupes)> <!ATTLIST apprenant identifiant ID #REQUIRED> <!ATTLIST apprenant password CDATA #REQUIRED> <!ELEMENT nom (#PCDATA)> <!ELEMENT prenom (#PCDATA)> <!ELEMENT groupes (#PCDATA)>

Important : Comment faire dans une DTD pour quil ny ait que 3 apprenants au min et 10 au max ? Cest une bonne question... ma connaissance pas possible... (conrm par Sylvain) ... Les seuls choix possible pour DTD sont : 0, 0..N, 1 ou 1..N

...et je modie len-tte du document XML comme suit :


<!-- formation.xml -->

1108

Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE formation SYSTEM "formation.dtd">

Puis je teste :
<?php // formation.php header(Content-type: text/xml); $document = new DOMDocument(); $document->load(formation.xml); if ($document->validate()){ echo $document->saveXML(); }else{ echo "Le document nest pas valide"; } ?>

1109

Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL Figure 26-13. SI022 TP XML 13/14 [DTD Formation]

1110

Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL

Constuire le schema XML du document XML formation (on peut saider de ce trs bon example (http://www.w3schools.com/schema/schema_example.asp)) :
<!-- formation.xsd --> <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <!-- Define Person --> <xs:group name="persongroup"> <xs:sequence> <xs:element name="nom" type="xs:string"/> <xs:element name="prenom" type="xs:string"/> </xs:sequence> </xs:group> <!-- Define Apprenant --> <xs:complexType name="apprenantType"> <xs:sequence> <xs:group ref="persongroup"/> <xs:element name="groupes" type="xs:string"/> </xs:sequence> <xs:attribute name="identifiant" type="xs:string"/> <xs:attribute name="password" type="xs:string"/> </xs:complexType> <!-- Define Apprenants List --> <xs:complexType name="apprenantsType"> <xs:sequence> <xs:element name="apprenant" type="apprenantType" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> <!-- Define Session --> <xs:complexType name="sessionType"> <xs:choice> <xs:element name="apprenants" type="apprenantsType"/> </xs:choice> <xs:attribute name="nom" type="xs:string"/> </xs:complexType> <!-- Define Formation --> <xs:complexType name="formationType"> <xs:choice> <xs:element name="session" type="sessionType"/> </xs:choice> </xs:complexType> <!-- Root node -->

1111

Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL
<xs:element name="formation" type="formationType"/> </xs:schema>

...et je modie le noeud racine du document XML comme suit :


<!-- formationxsd.xml --> <formation xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="formation.xsd"<

Puis je teste :
<?php // formationxsd.php header(Content-type: text/xml); $document = new DOMDocument(); $document->load(formationxsd.xml); if ($document->schemaValidate(formation.xsd)){ echo $document->saveXML(); }else{ echo "Le document nest pas valide"; } ?>

1112

Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL Figure 26-14. SI022 TP XML 14/14 [XSD Formation]

1113

Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL

Note : Bon nalement aprs plusieurs essais, de multiple erreurs, et du tappage de crane au mur, jai nalement russi crer un schema XSD pour le document formation.xml !!! Ouf! Pas facile cette affaire (enn pour moi)... la DTD cest bcp plus simple :)

La bonne dmarche suivre de mon point de vu suite cette nouvelle experience :

- Comme en programmation, il faut y aller pas pas... - Commencer par les lments les plus simples (souvent les noeuds enfants de bas niveau), construire les types simples, tester, et seulement ensuite les types complexes... - Attention par dfaut lattribut "maxOccurs" dun lment est paramtr "1", ce qui veut dire que pour avoir un noeud avec plus dun enfant dans le document XML, il faut bien prciser maxOccurs="unbounded" (et pas "unbunded" ou autre version mal orthogra comme attribut de llment dclar dans le schmema XML. - Commencer par dclarer les lments seulement en laissant de cot les attributs dans un pr Une fois que tout fonctionne, on passe la dclaration dattributs. - Commenter les noeuds et les attributs dans le documents XML et dans le document XSD (en pa - Utiliser un IDE ou un diteur XML (tel que XML Copy Editor , merci Christelle pour cette excellente suggestion !) permettant lauto-completion de sch

Pyt rencontre lui mme des erreurs et je lui envoie quelques uns de mes conseils pour laider et je tente de mettre en pratique mon experience pour trouver ce qui cloche dans son chier XSD... toujours sans XML Copy Editor (ben oui je lai pas encore compil !!!). INCORRECT :

<-- pyt.xsd --> <?xml version="1.0" encoding="UTF-8"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="formation" type="formationType"/> <xsd:complexType name="formationType"> <xsd:element name="session" type="sessionType"/> <xsd:complexType name="sessionType"> <xsd:attribute name="nom" type="xs:string"/> <xsd:element name="apprenants" type="apprenantsType"/> <xsd:complexType name="apprenantsType"> <xsd:element name="apprenant" type="apprenantType"/> <xsd:complexType name="apprenantType" minOccurs="3" maxOccurs= <xsd:attribute name="identifiant" type="xs:string"/> <xsd:attribute name="password" type="xs:string"/> <xsd:sequence> <xsd:element name="nom" type="xsd:string"/> <xsd:element name="prenom" type="xsd:string"/>

1114

Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL
<xsd:element name="groupes" type="xsd:string"/> </xsd:sequence> </xsd:complexType> </xsd:complexType> </xsd:complexType> </xsd:complexType> </xsd:schema>

CORRECTIONS appliques:
- Remplacer : <xsd:element name="formation" type="formationType"/> <xsd:complexType name="formationType"> par: <xsd:element name="formation"> <xsd:complexType> ... </xsd:element> // Suppression de type="..." et du "/" en fin de tag // Suppression de name="..."

// Ajout dun tag de fermeture pour chaque lment modifi

En effet, lors dune imbrication mulitple, il nest pas possible dutiliser lattribut "type" pour les lments moins dexternaliser la dclaration de "complexType" associ, ce qui revient finalement faire ce que jai fait. (voir mon rsultat de lexercice ci-avant). - Ajout de <xsd:sequence>...</xsd:sequence> comme attendu par les lments "complexType" (indiqu dans le message derreur) - Sassurer que "xsd:attribute" est dclar aprs llment "xsd:sequence"... sinon cela provoque une erreur ! - Sassurer que lespace de nom dclar est utilis de facon homogne dans tout le document : Remplacer "xs:string" par "xsd:string" (Attention au copier/coller !) - Ajouter lattribut "maxOccurs=unbounded" dans llment "apprenant". En effet, par dfaut "maxOccurs=1" donc le processeur sattend un seul noeuds et non plusieurs comme cest le cas dans le document XML

1115

Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL CORRECT:
<-- pyt-corrig-par-rlr.xsd --> <?xml version="1.0" encoding="UTF-8"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="formation"> <xsd:complexType> <xsd:sequence> <xsd:element name="session"> <xsd:complexType> <xsd:sequence> <xsd:element name="apprenants"> <xsd:complexType> <xsd:sequence> <xsd:element name="apprenant" maxOccurs="unbounded"> <xsd:complexType> <xsd:sequence> <xsd:element name="nom" type="xsd:string"/> <xsd:element name="prenom" type="xsd:string"/> <xsd:element name="groupes" type="xsd:string"/> </xsd:sequence> <xsd:attribute name="identifiant" type="xsd:string"/> <xsd:attribute name="password" type="xsd:string"/> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:sequence> <xsd:attribute name="nom" type="xsd:string"/> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema>

Note : Cette version est bien diffrente de la mienne et pourtant permet daboutir au mme rsultat... le choix reste donc entirement libre au dveloppeur... toutefois je trouve ma premire version plus lisible car elle limite la verbosit et permet une r-utilisation du code (factorisation)...

1116

Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL

26.1.3. TD - XSL
Source(s):

OF: SI022-ch03-tdxsl.pdf (docs/eof/SI022-ch03-tdxsl.pdf)

Tlcharger larchive .zip regroupant tous les scripts du module XML [XSL] : SI022 XML (Archive .zip) (projets/si022xml-v02.zip) Accessible aussi depuis la page Projets/TPs (projets/index.html). Language XSLT, quelques points essentiels :
<!-- DCLARATION DOCUMENT XSLT - STRUCTURE DE BASE --> <?xml version="1.0" encoding="utf-8" ?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="text"/> <!-- output est optionel et peut tre omis --> <!-Ici je dfinit lapect de mon document transform... --> </xsl:stylesheet>

<!-- LEMENTS DE HAUT NIVEAU --> xsl:stylesheet lment racine dun document XSLT xsl:output Prcise le format du document rsultat - method : Correspond au format souhait. XML par dfaut. 3 valeurs possibles : xml | html | text

- version : prcise celle que lon souhaite associer aux documents xml ou html - indent : permet dindenter le code lorsquil sagit de sorties xml ou html (ex: indent - encoding : prcise lencodage que lon souhaite utiliser dans le document rsultat

xsl:template "Rgle modle" qui sappliquera au noeud dfini laide de son attribut "match" - match : motif ou pattern indiquant les noeuds auxquels sapplique la rgle - name : nom de la rgle. Pour lappeler via "xsl:call-template" - mode : dfinir la catgorie de la rgle - priority : priorit de la rgle. Plus la valeur est grande et plus la rgle est priorita "0" par dfaut - Valeur ngative possible. Rgle implicite : en cas dabsence de rgles utilisateurs, le processeur XSLT va afficher le contenu des diffrents lments.

1117

Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL
xsl:apply-templates Prcise pour un ensemble de noeuds, le modle appliquer - select : expression XPath. Une fois value elle donne lensemble de noeuds concerns. Par dfaut correspond tous les noeuds enfants lexception des attributs. - mode : dfinit la catgorie de la rgle. xsl:call-template Appeler des rgles dfinies avec llment "xsl:template" et son attribut "name"

<!-- LES INSTRUCTIONS - LEMENTS DE BAS NIVEAU --> xsl:if Raliser un test Pas dinstruction "else" in XSLT, utiliser "xsl:choose" - test : expression XPath. Lexpression est value puis convertie sous forme dun boolen

xsl:choose Proposer plusieurs valuations successives et si aucune ne correspond den proposer une pa - xsl:when : valuera lexpresion XPath de son attribut test. Cet lment doit au moins tre prsent une fois. - xsl:otherwise : qui sera appel si aucune des valuations na abouti. Note: Ds quune des expressions XPath est vrifie alors le processus est interrompu et ce mme si plusieurs dentre elles correspondaient. xsl:for-each Faire des itrations en fonction dune expression XPath. - select : expression XPath. xsl:value-of valuer une expression XPath et afficher son rsultat. - select : expression XPath. xsl:attribute Insrer un attribut dans un lment du document rsultat. - name : nom de lattribut dans le document final. xsl:element Cette instruction va permettre de crer un lment. Elle sert principalement quand le nom de llment crer nest pas connu lavance. xsl:copy Copie dun lment (tel quil apparat dans le document XML source) Uniquement llement lui mme et pas ses descendants xsl:copy-of Copie en profondeur dun lment, soit llment lui-mme et ses descendants - select : expression XPath xsl:sort Les lments "xsl:apply-template" et "xsl:for-each" disposent de cet lment pour effectuer un tri sur leur rsultat. Important que llment "xsl:sort" soit plac immdiatement aprs lun deux.

1118

Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL

- select : expression XPath sur laquelle seffectue le tri. - data-type : nature de la donne sur laquelle seffectue le tri (number, text [Par dfaut - order : pour prciser si le tri est croissant ou dcroissant (ascending ou descendin

Note: Il est possible dimbriquer plusieurs lments de ce type. Dans ce cas les tris suivants c ceux dj effectus.

xsl:param Passer un paramtre si le processeur XSLT le supporte. - name : nom du paramtre pass et qui sera utilis dans la feuille de style. - select : passer une valeur par dfaut, prise en compte si le paramtre nest pas dfini. Lappel se fait de la mme faon quen PHP, $nom_parametre.

Note : Pour les exercises qui suivent, jai utilis Netbeans pour ldition du code et PHP pour les tests et le dbuggage. XML Copy Editor ntant pas directement accessible on Ubuntu 9.10 amd64 sans compilation manuel depuis les sources, je remets cette option pour plus tard... pour me concentrer sur lessentiel :)

Prenons lexemple du document RSS suivant :


<!-- feed.xml --> <?xml version="1.0" encoding="UTF-8"?> <rss version="2.0"> <channel> <link>http://eof.eu.org/</link> <description>Lcole ouverte francophone</description> <language>fr-FR</language> <pubDate>Wed, 28 Sep 2005 20:00:00 GMT</pubDate> <lastBuildDate>Wed, 21 Sep 2005 09:41:01 GMT</lastBuildDate> <docs>http://blogs.law.harvard.edu/tech/rss</docs> <generator>Un generateur</generator> <managingEditor>info@eof.eu.org</managingEditor> <webMaster>info@eof.eu.org</webMaster> <item> <title>Inauguration de lOF</title> <description>LEcole Ouverte Francophone (OF) a t fonde en 2003 afin de crer un programme de formation sur les logiciels libres, dbouchant sur une certification professionnelle. Elle sera officiellement inaugure par Monsieur le Prsident du Conseil Rgional du Limousin le mardi 27 septembre 2005, Ester Technopole.</description> <pubDate>Wed, 21 Sep 2005 09:39:21 GMT</pubDate> <guid>http://eof.eu.org/article.php3?id_article=92</guid> </item>

1119

Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL
<item> <title>Une liste de diffusion EOF est cre... inscrivez-vous !</title> <link>http://eof.eu.org/rubrique.php3?id_rubrique=7</link> <description>La liste eof-annonce@eof.eu.org est cre, elle vous permettra de recevoir toutes les news de lEOF, mais aussi de poser vos questions et de recevoir rapidement des rponses.</description> <pubDate>Mon, 18 Jul 2005 15:25:56 GMT</pubDate> <guid>http://eof.eu.org/article.php3?id_article=86</guid> </item> <item> <title>FAQ en ligne</title> <link>http://eof.eu.org/rubrique.php3?id_rubrique=9</link> <description> Vous avez des questions ? Vrifiez dans la FAQ avant de nous interroger, vous y trouverez peut-tre des rponses.</description> <pubDate>Fri, 08 Jul 2005 10:38:18 GMT</pubDate> <guid>http://eof.eu.org/article.php3?id_article=77</guid> </item> <item> <title>LEOF est une ralit... attention au dpart... prt... partez...</title> <description>LEOF prend forme, sa vie commence, le dispositif de formation distance est en place et la plateforme de formation Amarante avance grands pas.</description> <pubDate>Mon, 27 Jun 2005 14:27:45 GMT</pubDate> <guid>http://eof.eu.org/article.php3?id_article=67</guid> </item> </channel> </rss>

Transformons le partir du chier XSL suivant :


<!-- feed.xsl --> <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/rss/channel"> <html> <head> <title>Actualits de lof</title> </head> <body> <xsl:for-each select="item"> <h1><xsl:value-of select="title"/></h1> <p><xsl:value-of select="description"/></p> </xsl:for-each> </body> </html> </xsl:template> </xsl:stylesheet>

1120

Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL

Pour illustrer les exemples on utilise lobjet XSLTProcessor dans un script PHP :
// xslproc.php <?php // Variables $feedXML = new DOMDocument(); $feedXSLT = new DOMDocument(); $processeurXSLT = new XSLTProcessor();

// XML document // XSL document // XSL proc

// Initiatlisation $feedXML->load($_GET["xml"]); // Get XML data $feedXSLT->load($_GET["xslt"]); // Get XSL data $processeurXSLT->importStyleSheet($feedXSLT); // Init XSL proc // Main $result = $processeurXSLT->transformToXml($feedXML); // Show result echo $result; ?>

// Transform XML data with XSL layout

Puis on appelle le script via :


http://mondomaine/xslproc.php?xml=feed.xml&xslt=feed.xsl xml : fichier XML source xslt: fichier XSL pour la transformation

Resultat:

1121

Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL Figure 26-15. SI022 TP XSL 1/11

1122

Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL

Maintenant que lenvironement de test est en place, on peut samuser un peu... Je change le document XSL :
<!-- feed_1.xsl --> <?xml version="1.0" encoding="utf-8" ?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> </xsl:template> </xsl:stylesheet>

Resultat : Figure 26-16. SI022 TP XSL 2/11

1123

Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL Le resultat est vide, cest normal puisque le noeud selectionn est le noeud racine ("/") qui ne contient que dautres noeuds mais aucun contenu texte. Si je remplace dans le document XSLT :
<!-- feed_1.xsl --> (...) <xsl:template match="/"> (...)

par
<!-- feed_1.xsl --> (...) <xsl:template match="/item"> (...)

la rgle implicite sapplique et le rsultat est donc diffrent... Resultat :

1124

Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL Figure 26-17. SI022 TP XSL 3/11

... et un rapide apercu du chier source correspondant...

1125

Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL Figure 26-18. SI022 TP XSL 3-bis/11

1126

Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL

Cest comme si le document XML avait t r-crit mais sans les TAGs et leurs attributs ! Puis je test :
<!-- feed_2.xsl --> <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <head><title>TD XSL</title></head> <body> <h1>Exemple de contenu</h1> <p>Contenu statique produit sans ternir compte du contenu du document initial.</p> </body> </html> </xsl:template> </xsl:stylesheet>

Resultat : Figure 26-19. SI022 TP XSL 4/

1127

Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL

Puis je test aussi :


<!-- feed_3.xsl --> <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <head><title>TD XSL</title></head> <body> <h1>Les actualits de lEOF</h1> <xsl:apply-templates/> </body> </html> </xsl:template> </xsl:stylesheet>

Resultat :

1128

Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL Figure 26-20. SI022 TP XSL 5/11

1129

Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL

Je continue avec une construction toujours plus volutive :


<!-- feed_4.xsl --> <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <head><title>TD XSL</title></head> <body> <h1>Les actualits de lEOF</h1> <xsl:apply-templates select="//item"/> </body> </html> </xsl:template> <xsl:template match="item"> <xsl:apply-templates select="title"/> <br/> </xsl:template> </xsl:stylesheet>

Resultat :

1130

Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL Figure 26-21. SI022 TP XSL 6/

Je structure toujours un peu plus...

1131

Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL
<!-- feed_5.xsl --> <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <head><title>TD XSL</title></head> <body> <h1>Les actualits de lEOF</h1> <xsl:apply-templates select="//item"/> </body> </html> </xsl:template> <xsl:template match="item"> <xsl:apply-templates/> </xsl:template> <xsl:template match="title"> <h2><xsl:call-template name="affichage"/></h2> </xsl:template> <xsl:template match="description"> <xsl:call-template name="affichage"/> </xsl:template> <xsl:template match="link|pubDate|guid"/> <xsl:template name="affichage"> <xsl:apply-templates/><br/> </xsl:template> </xsl:stylesheet>

Note : Dans cet exemple la mthode dafchage des lments "title" et "description" a t factorise. On note la faon dappliquer plusieurs motifs une mme rgle en les sparant par le caractre "|" . Cette rgle est prsente dans notre programme uniquement pour sassurer que les lments link, pubDate et guid ne safcheront pas.

Resultat :

1132

Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL Figure 26-22. SI022 TP XSL 7/11

1133

Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL

Jajoute un lment "xsl:output" pour formatter le document de sortie... Sortie TEXT :


<!-- feed_5.xsl --> <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="text"/> <xsl:template match="/"> (...)

Resultat :

1134

Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL Figure 26-23. SI022 TP XSL 8/11

1135

Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL

Sortie XML :
<!-- feed_5.xsl --> <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml"/> <xsl:template match="/"> (...)

Resultat : Figure 26-24. SI022 TP XSL 9/11

Sortie HTML (tends devenir obsolte...) :


<!-- feed_5.xsl --> <?xml version="1.0" encoding="UTF-8"?>

1136

Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html"/> <xsl:template match="/"> (...)

Resultat : Figure 26-25. SI022 TP XSL 10/11

Ces quelques tests donnent une bonne ide du fonctionnement dune transformation XSLT. Pour lutilisation des instructions (if, choose, for-each, sort, etc...) se rfrer au cours de lof qui donne un apercu trs claire et dtaill du code ncessaire...

1137

Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL Passons lexercice du MENU :
<!-- menu.xml --> <?xml version="1.0" encoding="UTF-8"?> <navigation> <menu titre="menu1"> <sous-menu titre="sous menu 1"> <lien url="http://www.google.fr">Google</lien> <lien url="http://www.yahoo.fr">Yahoo</lien> </sous-menu> <sous-menu titre="sous menu 2"> <lien url="http://www.wikipedia.org">Wikipdia</lien> <lien url="http://fr.wikipedia.org">Wikipdia France</lien> </sous-menu> </menu> <menu titre="menu2"> <lien url="http://www.linuxfr.org">Linux FR</lien> </menu> <menu titre="menu3"> <lien url="http://eof.eu.org/">Lcole ouverte francophone</lien> </menu> </navigation>

<!-- menu.xsl --> <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" indent="yes" version="1.0" encoding="utf-8"/> <xsl:template match="/"> <html> <head> <title>Menu</title> </head> <body> <h1>of Formation CP2LL</h1> <h2>SI022 XML/XSL TP</h2> <xsl:apply-templates/> </body> </html> </xsl:template> <xsl:template match="navigation"> <ul class="menu"> <xsl:apply-templates/> </ul> </xsl:template> <xsl:template match="menu|sous-menu"> <li><xsl:value-of select="@titre"/><ul> <xsl:apply-templates/> </ul></li> </xsl:template>

1138

Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL
<xsl:template match="lien"> <a href="{@url}"><xsl:value-of select="."/></a> </xsl:template> </xsl:stylesheet>

Resultat :

1139

Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL Figure 26-26. SI022 TP XSL 11/11

1140

Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL

Note : Dautres variantes dun chier XSLT sont possibles pouvant amener au mme rsultat, ci-dessous, la version dveloppe par Christelle Copin (http://ferry.eof.eu.org/~ccn) une camarade de classe :)
Source original (http://ferry.eof.eu.org/~ccn/x3685.html#AEN3840) <?xml version="1.0" encoding="UTF-8" ?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html" encoding="UTF-8" doctype-public="-//W3C//DTD HTML 4.01//EN" doctype-system="http://www.w3.org/TR/html4/strict.dtd" indent="yes" /> <xsl:template match="/"> <html> <head><title>Menu</title></head> <body> <ul> <xsl:apply-templates/> </ul> </body></html> </xsl:template> <xsl:template match="menu"> <li> <xsl:value-of select="@titre"/> <ul> <xsl:apply-templates select="sous-menu"/> <xsl:apply-templates select="lien"/> </ul> </li> </xsl:template> <xsl:template match="sous-menu"> <li><xsl:value-of select="@titre"/> <ul> <xsl:apply-templates select="lien"/> </ul> </li> </xsl:template> <xsl:template match="lien"> <li> <a> <xsl:attribute name="href"> <xsl:value-of select="@url"/> </xsl:attribute> <xsl:value-of select="."/> </a> </li> </xsl:template> </xsl:stylesheet>

1141

Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL Pour le TP, jai voulu piment un peu la sauce... je me suis tent lutilisation dun <xsl:sort> comme suit :
<!-- menu.xsl --> <?xml version="1.0" encoding="UTF-8"?> (...) <xsl:template match="menu|sous-menu"> <xsl:for-each select="."> <xsl:sort select="starts-with(@titre,sous menu)" order="descending"/> <li><xsl:value-of select="@titre"/><ul> <xsl:apply-templates/> </ul></li> </xsl:for-each> </xsl:template> (...)

Lide cest que les menu et sous-menu sont formats de la mme facon mais que tout les menus dont le titre commence par "sous menu" soit list en ordre inverse... (oui je sais cest un peu tir par les cheveux mais je voulais me tenter lutilisation dune fonction faisant un test sur lattribut...) Le problme cest que soit lexpression XPath est fausse (erreur du parseur) soit elle parat correcte mais ne fonctionne pas... Jai essay plusieurs chose genre :
.@titre //@titre .::@titre etc... Et aussi...dutiliser dans le corps principal <xsl:if> ou <xsl:choose>

Mais rien ne fait... :(( Sylvain mapporte nalement un peu daide et de clart :
"... Alors Il y a plusieurs causes ton problme : 1. Dans le "select" de ton "xsl:sort" tu utilises lexpression XPath "startswith(@titre,sous menu)" or cette fonction retourne un boolen. Pour effectuer ton tri une fonction comme "substring" serait plus adapte, elle

1142

Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL
permettrait de ne conserver que lindice par exemple. 2. Ensuite le tri est fait avec un for-each select="." or cet expression XPath ne traite quun seul lment. Le "." signifie le noeud courant, donc tu tries ton sous-menu tout seul et non avec ses frres. Par consquent le tri fonctionne mais na aucune incidence. 3. Enfin le xsl:sort nest adapt que pour les sous menus aussi jaurais plutt fait 2 rgles. ..."

Il me joint une solution possible :


<!-- menu2.xsl --> <?xml version="1.0" encoding="UTF-8"?> (...) <xsl:template match="menu"> <xsl:for-each select="."> <li><xsl:value-of select="@titre"/><ul> <xsl:apply-templates select="sous-menu"> <xsl:sort elect="substring(@titre,11)" order="descending"/> </xsl:apply-templates> </ul></li> </xsl:for-each> </xsl:template> <xsl:template match="sous-menu"> <li><xsl:value-of select="@titre"/><ul> <xsl:apply-templates/> </ul></li> </xsl:template> (...)

Bien entendu je mempresse de tester :)) Resultat (Ca marche !) :

1143

Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL Figure 26-27. SI022 TP XSL 11-bis/11

26.1.4. Projet XML/XSL Livres : Application dchange (XML)


Source(s):

OF: SI022-ch04-projet_u8.pdf (docs/eof/SI022-ch04-projet_u8.pdf) Web: Tri dynamique avec XSLT (http://xmlfr.org/documentations/faq/010118-0003) XSLT Restriction by Enumeration (http://www.w3.org/TR/xmlschema-2/#rf-enumeration)

1144

Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL

Tlcharger larchive .zip regroupant tous les scripts du module XML [XSL] : SI022 XML (Archive .zip) (projets/si022xml-v03.zip) Tlcharger larchive .zip regroupant tous les scripts du projet uniquement : livres.zip (projets/si022xml/livres-v03.zip) Accessibles aussi depuis la page Projets/TPs (projets/index.html). Le principe de la librairie est simple, un serveur fournit une liste de livres sous forme dun document XML. Un client transforme alors ce document en pages HTML. On doit tout dabord crer un modle de document (XSD) pour les changes, puis raliser le service (livres.php) qui fournit le document XML et enn implmenter le client (client.php) qui gre la transformation avec XSLT. Malgr quelques recherches sur Internet (semic.eu (http://www.semic.eu), etc...), je nai pu trouv de standard ou spcication existante permettant une gestion simple dune liste de livres. Pour ce projet, je propose donc tous les tudiants de construire la DTD ou Schema XML correspondant au chier XML (liste de livres) suivant, que lon pourrait tous utiliser comme modle et rfrence :
<!-- livres.xml --< <?xml version="1.0" encoding="UTF-8"?> <livres xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="livres.xsd"> <livre isbn="2-9999-123-4"> <titre>Le XML rapide</titre> <auteur>Arnauld</auteur> <resume>...</resume> <prix reduction="20" devise="EUR">50</prix> <categorie>Informatique</categorie> <photo url="http://mondomaine/photo.jpg"/> </livre> ... </livres>

Par la suite, je propose un Schema XML correspondant :


<-- livres.xsd --> <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

1145

Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL

<xs:element name="livres" type="livresType"/> <xs:complexType name="livresType"> <xs:sequence> <xs:element name="livre" type="livreType" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> <xs:complexType name="livreType"> <xs:sequence> <xs:element name="titre" type="xs:string"/> <xs:element name="auteur" type="xs:string"/> <xs:element name="resume" type="xs:string"/> <xs:element name="prix" type="prixType"/> <xs:element name="categorie" type="xs:string"/> <xs:element name="photo" type="photoType"/> </xs:sequence> <xs:attribute name="isbn" type="xs:string"/> </xs:complexType> <xs:complexType name="prixType" mixed="true"> <xs:attribute name="reduction" type="pourcentageType"/> <xs:attribute name="devise" type="deviseType"/> </xs:complexType> <xs:simpleType name="pourcentageType"> <xs:restriction base=xs:integer> <xs:minInclusive value="0"/> <xs:maxInclusive value="100"/> </xs:restriction> </xs:simpleType> <xs:simpleType name="deviseType"> <xs:restriction base=xs:string> <xs:length value="3"/> <!--<xs:pattern value="[A-Z]{3}"/>--> <xs:enumeration value=EUR> <xs:annotation> <xs:documentation>Euro(s)</xs:documentation> </xs:annotation> </xs:enumeration> <xs:enumeration value=USD> <xs:annotation> <xs:documentation>US Dollar(s)</xs:documentation> </xs:annotation> </xs:enumeration> </xs:restriction> </xs:simpleType> <xs:complexType name="photoType"> <xs:attribute name="url" type="xs:string"/> </xs:complexType>

1146

Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL

</xs:schema>

Je demande lavis des autres tudiants pour obtenir un concensus... notement pour lattribut devise, je me demande quelle est la meilleure mthode de restriction : enumeration ou pattern (cette option est commente ci-dessus pour le moment... Jai test et sa valide (ou invalide) correctement...). Le choix est libre... En attendant leur avis, je continue sur ma lanc, et je cre une premire version du service serveur qui gnre une liste de livres au format XML partir dune source (ctive) :
- livres.php (projets/si022xml/livres/livres-v01.phps) // Le service serveur - livres.xml (projets/si022xml/livres/livres-generated-sample01) // Le document gnr

Note : Le document XML gnr est valid par le service au regard du schema XML avant dtre retourn lutilisateur.

Resultat en image :

1147

Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL Figure 26-28. SI022 Projet XML/XSL 1/

1148

Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL

Dans lattente de contributions dautres tudiants (toujours aucune rponses :), je continue les dveloppements en solo et je complte avec la partie client Web (client.html). Je corrige lerreur de la variable encoding dans le script PHP. Lafchage du rsultat se fait via Javascript par transformation des donnes XML, obtenu partir du script PHP (livres.php), avec un chier XSLT (livres.xsl) que jai cr. Une fonction de tri en javascript permet de modier la feuille de style (changer la rubrique et lordre si la rubrique est la mme) et de rapliquer le resultat la vol. Par dfaut, le rsultat se classe par la rubrique titre et par ordre croissant, rsultat en image (Test uniquement sous Firefox 3.5.9) :

1149

Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL Figure 26-29. SI022 Projet XML/XSL 2/

1150

Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL En cliquant sur len-tte de colonne titre, lordre de tri sinverse : Figure 26-30. SI022 Projet XML/XSL 3/

1151

Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL

En cliquant sur une autre colonne, Categorie par exemple, le tri seffectue selon la colonne selectionne :

1152

Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL Figure 26-31. SI022 Projet XML/XSL 4/

1153

Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL

Comme dhabitude, ca ma pris un temps fou pour dbuguer le javascript (Firebug et la fonction console.debug() mont t fort utile... je dirais mme indispensable!) et comprendre que ma version de Firefox utilise de nouvelles fonctions DOM pour accder aux lments des documents... dont jai eu beaucoup de mal comprendre le fonctionnement... par manque de connaissance et dexperience certainement !!! Mais cest trs interressant... Cest loin dtre parfait mais ca fonctionne :)
Note : A moins dutiliser un framework Javascript, il serait peut-tre plus simple (et mieux en cas de javascript dsactiv ct client) de procder la transformation via PHP (voir ci-aprs) mais je trouvais interressant de tenter de le faire via Javascript sans framework.

Voici quelques remarques pertinantes de Sylvain sur le projet... et mes rponses...


*XSD* Rem1: - Pour "livresType" le minOccurs pourrait tre plac 1 car sans livre il y a peu dintrt. (...) <xs:element name="livre" type="livreType" minOccurs="0" maxOccurs="unbounded"/> (...) Rep1: Jy ai pens, mais aprs coup je me suis dit quil fallait mieux le laisser zro, car je pars du principe que cest un service et que la liste peut-tre considr comme le rsultat dune recherche (ou apparent un magasin) qui peut retourner un rsultat null (magasin momentanment vide). Ce qui doit tre gr par lapplication cliente Sans livre peu dintrt certe mais cest tout de mme un cas prendre comme possible mon avis... Rem2: - Pour "prixType" il est possible avec ton schma de mettre "aa". Jaurai fait en sorte de naccepter que des rels. (...) <xs:complexType name="prixType" mixed="true"> <xs:simpleContent> <xs:extension base="xs:float"> <xs:attribute name="reduction" type="pourcentageType"/> <xs:attribute name="devise" type="deviseType"/> </xs:extension> </xs:simpleContent> </xs:complexType> (...)

1154

Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL

Rep2: Oui jy ai pens puis ca mest sortie de la tte lors du dveloppement... cest bien entendu implmenter :) *XSL* Rem3: - Tu pourrais faire la fiche de dtail et crer la navigation entre les fiches (ceci permet de tester les axes). Rep3: Oui tout fait, en mme temps je suis cours de temps et la bourre pour Python... donc je fais une petite pause sur ce projet pour le moment... libre dautres tudiants de prendre le pas ;-) Si jai le temps par la suite, jy reviendrais... Rem4: Cest un trs bon projet et la partie en AJAX est une trs bonne ide. Rep4: Merci, dire vrai si jai eu lide de la transformation via Ajax, je me suis largement inspir dun tuto que jai trouv sur Internet pour la mise en place technique... toutefois jai bien caval avec ces histoire dAPI Dom... du fait que limplmentation du tuto ne correspondait pas du tout mon environement... beaucoup daddaptation personnelle, mais trs enrichissant... :)

26.1.5. Transfert de paramtres XSL via PHP


Source(s):

Web: XSL (manuel PHP) (http://php.net/manual/en/book.xsl.php) DomXsltStylesheet->process (http://php.net/manual/en/function.domxsltstylesheet-process.php) Tutorial: XSL et PHP at work :) (http://www.dotvoid.com/2002/08/putting-xsl-and-php-to-work)

Les feuilles de styles XSLT acceptent les paramtres (xsl:param) qui sont passs lors de lexcution de la transformation. Dans le cadre du projet XML/XSL (ci-avant), je me demande quelle est la meilleure mthode pour modier le chier XSLT via PHP et transmettre des paramtres ? En fait, PHP dispose de fonctionnalits permettant de le faire simplement...
# Exemple trivial <?php $document = new DOMDocument(/path/to/xmldata);

1155

Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL
// Unfortunately theres no such method for DomXsltStylesheet $stylesheet = domxml_xslt_stylesheet_file(/path/to/stylesheet); $params = array( param1 => value1 ... , paramN => valueN ); $result = $stylesheet->process($document, $params); ?>

Donc pour le proojet on pourrait faire quelque chose du genre :

// PHP (...) $params = array(rubrique => titre, order => ascending); $xml = new DOMDocument(); $xml -> loadXML(livres.php); $xsl = domxml_xslt_stylesheet_file(livres.xsl); $result = $xsl->process($xml, $params); (...)

avec dans le chier XSL

<!-- XSL --> (...) <xsl:param name="rubrique">titre</xsl:param> <xsl:param name="order">ascending</xsl:param> (...) <xsl:sort select="$titre" order="$order" /> (...)

Je nai pas test mais ca donne dj un bon ordre dide...

1156

Chapitre 27. ANNEXES


27.1. Liste de commandes
Liste de commande GNU/Linux (docs/Annexe01-Liste-de-commandes-Unix-Linux.pdf)

27.2. Ressources Bibliographique


27.2.1. Les coulisses de lInternet par Olivier Ricou (Geopolitique) [prsent]
En Ligne (http://www.ricou.eu.org/e-politique.html)

27.2.2. The Cathedral and the Bazaar


The Cathedral and the Bazaar (http://www.catb.org/~esr/writings/cathedral-bazaar/cathedral-bazaar/index.html)

27.2.3. Linux aux petits oignons


Linux aux petits oignons (Texte intgral en ligne) (http://www.microlinux.fr/linux_aux_petits_oignons/avant-propos/avant-propos.html) Utilisation de GNU/Linux au quotidien. Recette simple et pas pas pour apprendre matriser en douceur.
Saddresse aux : - utilisateurs Windows qui cherchent une alternative conviviale, libre et gratuite. - amateurs de logiciel libre et adeptes de Linux souhaitant matriser leur systme - tudiants et professionnels devant passer Linux rapidement et sans peine

1157

Chapitre 27. ANNEXES

27.2.4. Richard Stallman et la rvolution du logiciel libre Une biographie autorise

En Franais (http://www.framabook.org/stallman.html) En Anglais (Original) (http://www.jus.uio.no/sisu/free_as_in_freedom.richard_stallman_crusade_for_free_software.sam_williams/sisu_manifest.h

27.2.5. Richard Stallman : Lavenir du logiciel libre dpend de vous tous


Source (http://www.01net.com/editorial/511892/richard-stallman-l-avenir-du-logiciel-libre-depend-devous-tous/ ) "... Le libre va-t-il devenir une alternative aux grands diteurs qui prservent jalousement leur code ? Je ne connais pas lavenir. Il dpend de vous tous. Si tu exiges la libert et si tu luttes pour elle, nous pouvons construire ensemble un futur libre. Si tu penses commodit court terme, tu seras victime de la colonisation numrique. ... Quel peut tre le modle pour nancer les artistes aujourdhui ? Le systme actuel, fond sur le droit dauteur, ne rtribue pas de faon quitable la plupart des artistes, seulement les stars... les entreprises... ...deux options... Lune est fonde sur un systme de paiements volontaires. Les amateurs dart aiment nancer les artistes, mais avec les moyens actuels cest peu commode. Je propose donc que chaque individu qui reproduit une uvre ait un bouton sur lequel il pourra appuyer an denvoyer ses crateurs 1 euro (ou une somme correspondant au pays). Lautre solution serait un impt diviser entre les artistes, et uniquement les artistes, en fonction de leur succs, mais pas de faon linaire. Je propose que largent peru par chaque artiste augmente moins vite que son succs, linverse dun impt progressif. Ainsi, chaque star reoit plus que les autres, mais pas dans les proportions du systme actuel. Il pourrait donc nancer plus dartistes que le systme qui prvaut en ce moment, avec moins dargent. Francis Muguet [un chercheur franais, NDLR] a propos un systme qui reprend ce genre dides et qui fonctionne selon les relations juridiques actuelles. Cest le mcnat global (mecenat-global.org).

1158

Chapitre 27. ANNEXES ..."

27.2.6. Mise en place dune solution de ressources rparties et scurises composes de logiciels libres au sein dune info-structure par Jean-Philippe Gaulier [2007]
En-Ligne (http://jp.gaulier.info/cnam/inge/memoire.pdf) Hors-Ligne (docs/eof/annexe-memoire-JP-Gaulier.pdf)

27.2.7. Rvolution, linformatique devient votre sixime sens


Pranav Mistry: The thrilling potential of SixthSense technology (EN) (http://www.ted.com/talks/pranav_mistry_the_thrilling_potential_of_sixthsense_technology.html) Source Agoravox (FR) (http://mobile.agoravox.fr/actualites/technologies/article/revolution-l-informatique-devient-69252).
Note : Ormis la dcouverte elle mme (mais dont lutilit reste encore prouver), ce que jai trouv dintrressant cest la volont de lauteur de rendre le code de sa dcouverte "Open Source" pour la faire partager tous dici un deux mois... on peut presque imaginer que le logiciel sera sous licence GPL ce qui serait norme tout de mme (enn je trouve)... mais cela reste voir... les apptits conomiques seront une fois de plus peut-tre plus fort...

a colle avec lenvironnent dans lequel nous baignons lof... libre et partage... :-)

27.2.8. Analyse des algorithmes nalistes concourant pour le futur standard AES par Jean-Philippe Gaulier
En Ligne (http://jp.gaulier.info/rapport.pdf) Hors Ligne (docs/eof/sr010-ch01-doc-extern-analyse-desalgorithmes-nalistes-concourant-pour-le-futur-standard-AES-rapport.pdf)

27.3. Linux HOWTO


http://www.freenix.org/unix/linux/HOWTO/Liste-des-HOWTO.html Cours: Le guide de ladministration de la couche IP avec Linux (http://linux-ip.net)

1159

Chapitre 27. ANNEXES http://www.yourwebexperts.com

27.4. Modles Economique du Libre


conomie du logiciel libre par Franois Elie (http://www.eyrolles.com/Informatique/Livre/economie-du-logiciel-libre-9782212124637) Description (AFUL) (http://aful.org/nouvelles/economie-logiciel-libre-par-francois-elie) Dossier: Modles conomiques lis aux logiciels libres (AFUL) (http://linux-ip.net) Comment nancer le dveloppement dun logiciel libre (http://aful.org/professionnels/modeles-economiques-logiciels-libres/nancement) Livre blanc des modles conomiques du Logiciel Libre (APRIL - 12/2007) : HTML (http://www.april.org/fr/Livre-Blanc-des-Mod%C3%A8les-%C3%89conomiques-du-Logiciel-Libre) PDF En Ligne (http://www.april.org/les/documents/200712-modeles-economiques.pdf) PDF Hors-Ligne (docs/Annexe04-APRIL-2007-12-modeles-economiques-livre-blanc-april.pdf) Autres Formats (http://www.april.org/fr/articles/livres-blancs/modeles-economiques-logiciel-libre) Logiciels libres et viables (http://www.sudouest.fr/2010/06/18/logiciels-libres-et-viables-120065-2780.php) : Lconomie du logiciel libre est rentable. Lide fait lobjet dune confrence la CUB.

1160

S-ar putea să vă placă și