Documente Academic
Documente Profesional
Documente Cultură
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).
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
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)
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/).
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).
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.
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...
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)
...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...
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.
12
* * * * * * *
High Performance Ease of Use Attractive Appearance Reliability Adaptability Interoperability Mobility
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)
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...
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.
18
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
20
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).
21
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
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
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.
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
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
Web: Enqute sur la formation distance (http://enquete.keepin.eu) Rsultats de lenqute (opportunit et attentes) (http://enquete.keepin.eu/study.html)
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.
27
5.1.1. LInternet
Les coulisses de lInternet par Olivier Ricou (Geopolitique) (http://www.ricou.eu.org/e-politique.html)
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
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 ;)
29
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
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
31
: 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
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.
33
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...
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
...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
...
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
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.
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
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.
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.
40
Avertissement
!!!Attention!!! BACKUP YOUR DATA !!!
Avertissement
Assurez vous quil fonctionne avant de continuer ! Le menu de boot doit apparatre au dmarrage.
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
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
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
$ $ $ $ $ $ $
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
## 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
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
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).
Il est souvent ncessaire de connatre des informations dtailles sur le matriel composant son ordinateur. lshw est la commande magique pour cette tche :)
46
// 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
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
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
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
51
52
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
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
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
56
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
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
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
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.
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
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
-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
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
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
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
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
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
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
68
2.cc Ajusting the date, time and time zone correctly... Voir Section Ajuster la date Ajuster le fuseau horaire
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
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
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 :)
73
...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
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).
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...).
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
$ 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
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
80
$ 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...
Web: Twinkle - SIP softphone for Linux (http://www.xs4all.nl/~mfnboer/twinkle) Protocole SIP: VoIP : Le protocole sip
81
$ 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"
82
en
GRUB_CMDLINE_LINUX_DEFAULT=ipv6.disable=1 quiet splash
83
Si cette commande ne retourne aucune ligne, cest que IPv6 est bien dsactiv.
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
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
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)
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
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
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
/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
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
Se refferer au Dictionnaire de Commande que jai cr... Pour chaque commande vous pouvez utiliser laide des manuels avec la commande man.
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.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
-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
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
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
Redirection entres/sorties :
$ ls >resultat_ls # Rediriger la sortie standard, fichier cras
94
$ 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 -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
95
"... 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.
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.
96
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
## 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
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)
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.
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.
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.
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.
## 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
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
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)
103
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
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
## 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
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
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
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.
# 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
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
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
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
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
#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
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.
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.
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
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
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)
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
#Enleve le chemin vers le fichie #Enleve lextension (en plus du #Enleve plus que lextension :)
117
#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
#Nombre de chiffre dans lensemble dur nombre #Nombre de chiffre aprs la virgule
#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
###### ## 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
#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
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
7.5.2.6. du & df
Source(s):
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
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)
7.5.2.8. diff
Source(s):
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
125
7.5.2.9. nd
Source(s):
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
# 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
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
# # # #
###### ## 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
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
129
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
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
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)
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
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
mlx)
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
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
# autorise sudo more /etc/sudoers # lutilisateur std # sans mot de passe # Active la journalisation dans # dans le fichier /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
7.5.2.26. tar
Source(s):
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
###### ## 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
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
137
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
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
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.
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
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).
. (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
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.
143
144
# 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
146
147
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
# - 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
150
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>"
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
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
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
153
# 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
# 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
7.5.6. Editeur en mode graphique : Gedit, Kate, Quanta+, Bluesh, Notepad++, etc...
...
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
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
# 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
# Spare par des ;(points virgule) # Spare par des nouvelle ligne
# 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
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
# 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
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
# 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
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
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
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
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
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
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:
$enf1 $enf2
$enf1
173
line 32:
$enf2
$enf3 $enf2
line 69:
$enf1
line 69:
$enf2
$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 !
174
175
### # 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 ]
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
1. Dans quels rpertoires sont stocks les scripts qui activent les serveurs (deamons) ?
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)
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
177
# 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
178
179
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):
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
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.
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)
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 ...
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
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
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 ...
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"
## 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
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.
###==> 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+
-f -f -f -f
### 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
### 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).
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
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
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)
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)
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>
- 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)
Choisir un bon mot de passe, cest--dire dau moins huit caractres, et contenant des majuscules, minuscules et au moins un chiffre.
En local :
$ man mysql
Au promt serveur :
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)
## 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
## Dmarrer le service de BD ## Essaie de dterminer les options correctes avant de lancer mysqld
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
## ignorant toute modification ultrieure. ## Afficher les variables/valeurs courantes du serve ## Afficher les options des groupes [client] et [mys
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)
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)
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 !!!).
[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
= = = = = = = =
## ## ## ##
Utilisateur par dfaut si non spcifi sur la lign Fichier didentifiant du processus Prise de communication Port dcoute 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
## 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
## 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)
## 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]>\_
### 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
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.
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.
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
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)
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)
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)
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)
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
## 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
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
## Alternative
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
RESTAURER: Utiliser mysqlhotcopy (ou ibbackup pour InnoDB) pour copier en retour les tables dans le repertoire dorigine
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
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) ...
$ 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
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
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 :)
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
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
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
$ 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
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)
open_basedir rpertoire
include_path rpertoire
magic_quotes_gpc on|off
magic_quotes_runtime on|off
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
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
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 !!!
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
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
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
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.
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
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/)
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
24 24 24 24 3 24
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
$ diff /etc/apache2/conf.d/phpmyadmin.conf /etc/phpmyadmin/apache.conf ## Aucune diffrence. Le premier est celui effectivement utilis par Apache...
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. ...
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
235
Chapitre 10. SR009 Interfacer Apache avec un langage de script et un serveur de base de donnes
- 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.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;
## 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 );
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):
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.
## 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
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>
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 ;
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
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
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.
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):
Cest loin dtre parfait... mais dans lensemble cela devrait rpondre au cahier des charges...
253
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
SIZE 61588
INTERFACES
# Arrter la machine virtuelle depuis lhte des machines $ vhalt pc1 Halting virtual machine "pc1" (PID 4486) owned by filostene [.....
# 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
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.
255
## 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
# 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
# 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.
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
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.
258
Note : La conguration DHCP requiert linstallation dun client DHCP : paquet pump (http://packages.debian.org/search?suite=default§ion=all&arch=any&searchon=names&keywords=pump) ou dhcp-client (http://packages.debian.org/search?keywords=dhcp-client).
259
Flags U UG
MSS Window 0 0 0 0
# 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
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
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)
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
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)
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)
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.
267
- 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
- 10.0.1.5 - 167772421
268
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
Question: Pourquoi sur ma machine, la commande hostname nafche pas la mme chose que la commande cat ? Voir commande hostname pour lexplication...
269
# 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
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
# Par dfaut, rechercher rsoudre le nom "blabla.foo.bar" # si uniquement le nom hte "blabla" est indiqu
270
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
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§ion=all&arch=any&searchon=names&keywords=pump) ou dhcp-client (http://packages.debian.org/search?keywords=dhcp-client).
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
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
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):
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
## 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
275
# - 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
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
# Ceci ne doit pas tre confondu avec la commande qui suit, qui relance explicitement tous l /etc/init.d/networking restart
Flags Mask C C
$ 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
# 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
###### ## 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
Flags 0U U UG
Metric 0 0 0
Ref 0 0 0
## 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
280
: 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).
281
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)
## 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
$ 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 ...
######-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
@/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
######-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
######-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 :
Genmask 255.255.255.0
284
$ 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
TX-OK 89 210
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):
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
$ 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
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
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
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
# 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
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
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
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
# 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
--- 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%
294
--- 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">
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)
296
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">
11.2.7.18. iftop
Source(s):
297
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
###### ## 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
-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
$ 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
301
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)
S : Initialiser le systme au dmarrage 0 : Arrter le systme 1 : Mode mono-utilisateur 2 5 : Diffrents modes multi-utilisateurs 6 : Redmarrer le systme
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
/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:
303
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.
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
/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.
/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.
/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
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
Web: How to let normal users shut down the computer in Linux (http://www.spencerstirling.com/computergeek/shutdown.html)
# $ # $ # $ # $
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]
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
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
# # # #
Liste services et leur status (+PID) Liste status du service gdm Arrter le service gdm Dmarrer le service gdm
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
###### ## 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
RPONSE2: Lisons le contenu du script..., humm! Il semble que le script utilise les commande
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
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
313
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
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
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
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.
/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.
316
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.
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.
317
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
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.
319
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.
320
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
322
## 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
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
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
325
326
Chapitre 11. SR004 Interconnecter un rseau TCP/IP Figure 11-6. Wireshark : Ouvrir chier .pcap (format libpcap)
327
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
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.
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
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.
# 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
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
## 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.
334
335
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.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... :)
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
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
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)
339
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.
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
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)
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.
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
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
[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 .
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.
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
# 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
$ 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
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
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
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"
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
;; 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). ----
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.
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
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
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).
### dig # Le "Domain Information Groper" (dig) est la plus complte et flexible des commandes de dia
355
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]]]
### 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
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... :)
357
$ /etc/init.d/bind9 reload
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)
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
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
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
359
### 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"; }; };
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
$ 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.
IN IN IN
NS NS NS
## La SECTION DAUTORIT quels serveurs DNS peuvent ## fournir une rponse autoritaire la question.
361
IN IN IN
A A AAAA
## 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
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
$ 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
IN
NS
IN IN IN IN IN IN
NS NS NS NS NS NS
259200
IN
AAAA
2a01:e35:8b50:2c40::4
364
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".
# 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
; <<>> DiG 9.6.1-P2 <<>> mx free.fr ;; global options: +cmd ;; Got answer:
365
# 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
; <<>> 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
$ 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
367
$ 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
; <<>> -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
# 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
370
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
; <<>> 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.
### +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.
372
IN IN IN IN
MX NS NS A
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.
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
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
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
## 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
## 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
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)
ns0.agence1.entreprise.int. hostmaster.agence1.entreprise.int. (
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
## 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
## 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
## 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
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
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
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)
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
named.conf.local (docs/sr005ch04-tp2mercure-nameconf-local.txt)
agenceX.entreprise.int ns0
named.conf.options (docs/sr005ch04-tp2x-namedconfoptions.txt)
named.conf.local (docs/sr005ch04-tp2x-namedconflocal.txt)
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)
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
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"; ...
# 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 :)
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.
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.
385
# # # #
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 :
# 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.
386
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
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)
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...
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
389
# # # # #
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
390
# # # # #
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.
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
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
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
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.
# 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
- 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
- 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
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
- 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)
SOA
admin.monagence.magrosseboite.fr. (
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
398
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
## 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...
## 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
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
$ 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
$ 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.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
## 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
## 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
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
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
407
- 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
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
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 :)
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.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)
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):
416
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
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.
418
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
Avertissement
Attention, au disposition clavier (anglais, lituanien, etc), certains caractres apparatront/disparatront ;)
## 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
## 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
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
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.
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 ?
- 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...
424
Et voil, vous avez un beau mot de passe difcilement reconaissable mais mmorisable.
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
$ 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
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++.
428
(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)
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 ?
430
# 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
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
Dplacez-le dans un support que vous pouvez cacher ; si Mallory a accs ce certificat il peut lutiliser pour
432
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.
$ cat richardascii.gpg -----BEGIN PGP PUBLIC KEY BLOCK----Version: GnuPG v1.4.9 (GNU/Linux) mQGiBEuPqfwRBACmyPhwyJKuBgXV1BtTgtoskpmSNZypTsu+tdNVSZQzvDKHXezC (...) ly4Zory5OLACpSMm9AvYcwRw2A== =P8fQ
433
## 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
Voir aussi ci-aprs comment importer une clef publique depuis un serveur de clefs
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
## En la signant, vous certifiez que cest une cl valide. ## Aprs avoir vrifi lempreinte Command> sign ## Vrfifier Command> check
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
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.
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.
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
# # # # # # # #
un drapeau indiquant si la cl prive est disponible suivit des informations sur chaque composant de la cl
pub sub
1024D/26B6AAE1 2048g/0CF8CB7A
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.
## 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
438
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)
439
## 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
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
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
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
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
447
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
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...
- 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 ?
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
## 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
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)
## Traffic sortant du rseau interne (LAN) vers lInternet # OK pour: http https # A Justifier pour: (en terme de besoin)
452
## 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 ?)
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
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.
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
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, ...)
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
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)
457
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
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
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
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
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
## 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
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
## 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
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 ...
"...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...)
## 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)
## 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
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
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
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
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
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
# # # #
471
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.2. Chiffrement de systme virtuel de chier (fuse, loop device) : chier/repertoire, partition, container, etc...
Source(s):
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
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
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.
475
## 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
- 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
## 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 ...
477
/tmp/orbit-filostene/linc-...
actives (sans serveurs) Adresse locale Adresse distante localhost:ldap localhost:48385 localhost:48385 localhost:ldap
$ 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 *:*
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
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
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:
479
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
480
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
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
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
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.
484
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
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 ...
##==> la seule chose que nous pourrons obtenir est le changement de racine pour un utilisateur, de par son propre chef.
# # # # #
UID 1001 & GID 1001 Home directory shell = script qui autorise lemprisonnement de lutilisateur son arrive
487
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...).
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
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)...
490
# 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
# 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
# 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)
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...
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
503
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
# 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
# IP de la machine distante
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
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).
506
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
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
508
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
# 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
$ 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 ?
510
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....
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
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
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.
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)
514
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.
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.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
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...
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
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
- PERLCODE
# 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
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
15.10. Examen
Source(s):
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.
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
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)
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.
Si vous avez besoin de travailler sur des serveurs, privilgiez un fonctionnement en localhost et parlez-en votre rewall.
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
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).
526
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).
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
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
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
## 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
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
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
> 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
# 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
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
532
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
# 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
# # # # # # #
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
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 :)
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.
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).
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
537
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.
$ 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
538
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
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
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...
542
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
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
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
544
# 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):
545
Chapitre 16. SR011 Dployer un routeur, un pare-feu et un serveur mandataire Figure 16-3. TP Pare-Feu : Architecture rseau
## 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)
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
4. Lancez le service rseau sur R " /etc/rc.d/init.d/network restart ", relevez les routes :
547
Flags U U U UG
Metric 0 0 0 0
Ref 0 0 0 0
Use 0 0 0 0
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
Genmask 255.255.0.0
## 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)
549
# 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
## 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
# 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
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
8. Vriez avec une commande " ping " que les deux interfaces de R sont bien visibles partir de C :
551
# 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
destination
destination
destination
destination
552
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
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:
## 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
# Interdit uniquement
553
IP IP IP IP
## ## ## ##
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
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:
# 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:
$ 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:
## 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
##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 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:
## 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
##==> 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
## 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 >
## C $ ping 192.168.90.1
## R
557
##==> 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, ...
558
## 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
# 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
559
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, ...
# 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
## 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
$ 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
# 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
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
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
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
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
# $ $ $
# 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
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
565
16.2.2. SQUID
Source(s):
566
OF: Aniscartujo.com Security & Developing Services (https://aniscartujo.com) Aniscartujo Secure Encrypted Web Proxy (https://aniscartujo.com/webproxy)
567
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
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
569
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.
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):
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
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
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.
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
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
575
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
[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
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
578
579
## 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
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
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).
582
583
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
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
6 6 6 6
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
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)
Il est dsormais possible de se connecter au partage [donnees] avec les utilisateurs appartenant au group sambausers.
587
## 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
## 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
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
$ 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
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
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.
- 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
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.
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
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.
## Ajouter /etc/samba/smb.conf ... [printers] path = /usr/spool/public guest ok = yes printable = yes browseable = yes
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
594
Chapitre 17. SAMBA & OpenLDAP Figure 17-4. Samba : Imprimante partag depuis Windows accessibe depuis machine Unix
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
## 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
598
599
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)
- 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
601
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
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
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
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
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.
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.
607
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.
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.
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
610
611
612
## 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
# %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
browseable = no
614
# 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
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
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
617
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).
## 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.
Redmarrage de Samba :
$ /etc/init.d/samba restart * Stopping Samba daemons * Starting Samba daemons
[ OK ] [ OK ]
618
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.
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
-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
Set debug level Use alternate configuration file Base name for log files Print version
\\ubuntu\martymac\profile UBUNTU
seconds since the Epoch seconds since the Epoch 15:30:38 GMT 15:30:38 GMT
620
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 ;-)
621
## 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
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)
## De mme on aurait pu avoir aussi net groupmap add rid=512 unixgroup=admin ntgroup="Domain Administrators"
622
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
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.
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
624
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
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
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.
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: ...
628
629
Chapitre 17. SAMBA & OpenLDAP Figure 17-7. Samba : Workstation jointe au domaine avec succs
630
Nous pouvons dsormais tester notre compte martymac sur la machine Windows.
631
Chapitre 17. SAMBA & OpenLDAP Figure 17-8. Samba : Connexion utilisateur au domaine
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]
634
ntuser.ini
635
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.
636
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
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.
637
$ tail -f /var/log/samba/machine.log
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)
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
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...
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 ! .
640
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.
- 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
17.8.4. Documentation
Toute les directives de conguration sont dcrites dans le manuel du chier de conguration :
$ man 5 slapd.conf
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.
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 ;-)
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 .
644
Ceci permet de ne pas stocker en clair le mot de passe dans le chier de conguration !
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
## 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
647
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.
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 ...
648
## 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)
650
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
651
Chapitre 17. SAMBA & OpenLDAP Sinon les outils grapiques : phpldapadmin, etc...
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
# 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
## 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
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
655
/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
657
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
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
660
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.
661
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
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"
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".
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
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
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 :
665
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
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
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" !
669
Ajoutons ensuite :
## la fin des "include" dans le fichier /etc/ldap/slapd.conf : include /etc/ldap/schema/samba.schema
670
# 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
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
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
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
672
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).
673
## 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...
674
18.1. Systme de gestion de version (Version Control Systems - VCS/SCM Source Control Management)
Source(s):
675
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..."
676
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
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)
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
18.3.1.2. Interoprabilit
Interoprabilit avec les autres gestionnaires de version CVS, SVN, Arch...
679
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
$ 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
682
$ 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.
# 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
683
$ git log --author=Jimmy Rudolf --oneline 93ebb69 Sources initiales 0976248 Initialisation du dpot kring
# # $ # $
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...
$ git commit -m "Add project description to README file" # Je commit :) # c.a.d que japplique les modifica
684
# 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
# 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
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
Note : git am permet dappliquer les patchs reus dans sa boite aux lettres (mbox).
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
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 .
687
$ 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
$ $ # # # # # # # # # # #
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
689
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... :)
- 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
- 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_
Pour plus de dtail sur linstallation se rfrer la section Git ddie Installation/Conguration.
691
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 :)
# Cest mon depot Git public de not # il est expliqu ci-apres comment # pour que je puisse rcuperer ses
# 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] *~
692
# 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
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
# 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
694
# Voir lhistorique des changements publi sur son dpt public $ git log # pour effacer notre test :) $ rm -r chat/
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.6. darcs
Source(s):
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)
...
...
...
697
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
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.
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.
# 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
700
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.
Les scalaires sont le type de donnes atomique (donne atome). Cela signie que la granularit de donnes ne va pas au del.
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
# 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"
Note : Les variables non dclarer ont la valeur par dfaut : undef (non-dni)
# Equivaut : $x=undef; undef($x); # Alternative
702
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.
# contient les variables denvironnement du programme # contient le path # nom du rpertoire personnel de lutilisateur qui excute le programme
703
use constant WEEKDAYS => qw( Sunday Monday Tuesday Wednesday Thursday Friday Saturday ); print "Today is ", (WEEKDAYS)[ (localtime)[WDAY] ], ".\n";
$x=$x."bla" $x=$xx2
704
# 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
705
# Ngation Boolenne
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.
706
# 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)
Saut de boucles :
707
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
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
# 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 !!!
709
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
@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
# 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);
# 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
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
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
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.
712
#### ## 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:
Une fonction est un ensemble dinstructions regroupes de manire tre utilises plusieurs fois sans avoir dupliquer du code.
713
# 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;
@s = fonction(...); # rcuprer une liste retourne par la fonction ($j,$k) = fonction(...); # rcuprer une liste retourne par la fonction
# deux arguments attendus # $m, $x et $z are variable locale # retourne une liste
714
## 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>"
715
716
# 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
# 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)
# Attention !!! Pas de parenthses, ni de # $_ variable spciale contenant les valeu # les tests seront effectus
# 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
@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;
@s @p @s @s
= = = =
{ { { {
# # # #
@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
718
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 ...
719
Note : Attention de toujour bien dclarer les variables de la boucle foreach et de toujours mettre entre parenthse la variable de liste qui suit.
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
721
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 dune table de hachage un tableau # renvoie une liste des clefs et des valeurs,
722
# 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
## 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
724
my %h = ("Paul", "01.23.45.67.89", "Virginie", "06.06.06.06.06", "Pierre", "heu ..."); my %quidonc = reverse %h; # Annuaire invers !
# 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.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
-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;
#!/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
# 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
# Ligne par ligne (contexte scalaire) # Toutes les lignes restantes (contexte liste) # Iteration sur les lignes du fichier
# Si la variable spciale omni-prsente $_ est utilis, la construction while( defined( $_ = <FIC> ) ) # quivaut while( <FIC> )
# 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
728
# 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
# pour rcuprer le rsultat de la commande dans $re # si il y a plusieurs lignes, je les place dans un t
## 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
# Vrifier que $v comporte deux fois de suite # un mme nombre (spares par un signe # dopration mathmatique).
730
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/
## 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
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
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}/
# (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
# 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.
733
734
735
736
737
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.
738
739
# 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
# $v vaut 0 # Equivalent
# Affecte rfrence
740
# $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]
$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.
# Accs la valeur
741
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
## 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
$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
## 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];
744
Avertissement
Une valeur de rfrence anonyme est une constante, il est impossible de modier la valeur pointe par la rfrence
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
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...
746
Le but de ce TD est de continuer lapprentissage du langage Perl par des exemples dutilisation des rfrences appliqus ladministration systme.
747
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.
748
$ ./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)
749
# 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.
750
Chapitre 20. Le langage Perl appliqu ladministration systme Figure 20-4. Schma de structure de donnes pour stockage de passwd
751
752
753
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.
754
==> 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
- 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
==> 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
- 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
759
760
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.
761
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
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
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...
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
#### ## 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
768
769
[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
771
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
- 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]
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
Possibilit de commander en ligne : Ajout de produit au panier depuis liste ou che produit dtaille
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
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 la qualit des produits [Optionel] Mettre en avant les services
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
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]
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]
Total Tableau 21-2. Section partenaires / Espace Client Besoins Espace Client : Gestion prol utilisateur
...
Gestion information personnel (nom, prenom, addresse courriel, password, etc) avec double conrmation par courriel.
776
Chapitre 21. Mthodologie de conception des sites Web et interfaces Besoins Espace Client : Gestion des commandes Fonctionalits
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
Module de gestion dincident/requte cliente (tickets) li la FAQ Lien vers laide en ligne/FAQ
Authentication Gestion information personnel (nom, prenom, addresse courriel, password, etc) avec double conrmation par courriel.
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 ...
Monitoring
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
Aide la navigation (l dariane, point dtape afch, etc...) Image visuel pour naviguer dans le site (catgories produits, etc...)
778
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.
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.
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.
780
781
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)
782
... 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.
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
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.
- 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).
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
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)
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
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
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
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
788
Chapitre 21. Mthodologie de conception des sites Web et interfaces Figure 21-2. SI001 : Ergonomie/Maquette (QT4-Designer) 1/7
789
790
Chapitre 21. Mthodologie de conception des sites Web et interfaces Figure 21-3. SI001 : Ergonomie/Maquette (QT4-Designer) 2/7
791
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
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
796
Chapitre 21. Mthodologie de conception des sites Web et interfaces Figure 21-6. SI001 : Ergonomie/Maquette (QT4-Designer) 5/7
797
798
Chapitre 21. Mthodologie de conception des sites Web et interfaces Figure 21-7. SI001 : Ergonomie/Maquette (QT4-Designer) 6/7
799
800
Chapitre 21. Mthodologie de conception des sites Web et interfaces Figure 21-8. SI001 : Ergonomie/Maquette (QT4-Designer) 7/7
801
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
804
Chapitre 21. Mthodologie de conception des sites Web et interfaces Figure 21-10. SI001 : Ergonomie/Maquette (Pencil) 2/2
805
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
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):
807
Chapitre 21. Mthodologie de conception des sites Web et interfaces Figure 21-11. SI001 : Ergonomie/Maquette (GIMP) 1/1
808
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...
809
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
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.
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
"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
"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
814
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
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
816
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
# 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
# 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
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.
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" /> <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 ? ...
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
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.
826
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
829
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
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
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
834
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
/> /> 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 "@". 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".
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).
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.
(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
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".
On pourrait contre argumenter avec des design aux fond trs colors :
839
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
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
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/)
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
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)
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
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
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)
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
Exemple :
{"menu": { "id": "file", "value": "File", "popup": { "menuitem": [ {"value": "New", "onclick": "CreateNewDoc()"}, {"value": "Open", "onclick": "OpenDoc()"}, {"value": "Close", "onclick": "CloseDoc()"} ] } }}
846
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):
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...
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
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
# 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);
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
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.
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
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
En partant du cahiers des charges on voit rapidement que lon a besoin de deux parametres principaux pour toutes les oprations: $user : utilistateur
856
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 }
- 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
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)
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
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/)
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
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.
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) :
864
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):
Pour linsatallation et le conguration de PHP, se rfrer la section SR009 - PHP installation et conguration.
865
# 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)
866
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!
868
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>
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
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
# 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
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
871
## Remplacer #!/usr/bin/php ... ## par #!/usr/bin/php-cgi ... # Puis tester : http://si016php/cgi-bin/index.php # pointe vers php5-cgi :)
872
Chapitre 24. Initiation au langage de script (PHP, Python, Perl) Figure 24-2. SI016 PHP : Hello world! [CGI]
873
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
# 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).
875
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).
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
878
# 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 =
scalaire > entier (integer, int) 25; # Dclaration & Affectation (int) $myvar; # Conversion de type: modifier $myvar en integer (integer) $myvar; # Alternative
879
### 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);
### 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
#### 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); ### ### ### ### ###
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
#### 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
#### 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
# 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
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
#### 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
##### 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
# 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
* 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
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
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
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
890
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):
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
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
Resultat en image :
894
Chapitre 24. Initiation au langage de script (PHP, Python, Perl) Figure 24-6. SI016 PHP Travaux Pratique 3/3
895
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
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
- 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.
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):
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
900
901
Chapitre 24. Initiation au langage de script (PHP, Python, Perl) Figure 24-12. SI016 PHP Authentication 6/6
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...
Ce document concis et dtaill donne une bonne base pour explorer plus en profondeur les diffrentes librairies et framework PHP disponibles.
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
904
# 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
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
# 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
909
$ 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
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
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.
912
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)
913
// 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
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
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
// 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
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.
// Alternativement chaine = u"Ma chaine" chaine_bis = "Ma chaine" print chaine.__class__ >>> <type unicode> print chaine_bis.__class__ >>> <type str>
918
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)
- 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
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
// 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
// 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
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"]
922
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
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
= $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
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
: 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
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
Note : else est optionel. break permet de sortir de la boucle. continue permet de revenir au debut de la boucle.
# 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
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)
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
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).
- import : obtenir la totalit des attributs du module. - from : se limiter certains attributs.
// pi, perimetreCercle sont des attributs (variabl // ou fonctions) dfinit dans le module calcul
931
// 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
reload(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.
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
// // // //
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
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
- 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
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
937
>>> 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
939
940
>>> 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
943
944
Chapitre 24. Initiation au langage de script (PHP, Python, Perl) Figure 24-15. SI016 Python Cheatsheet 1/2
945
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
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
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).
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
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.
// 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)
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
: : : :
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
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.
$ 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 :)
953
: : : :
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
// 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 (...)
Le module Pickle dispose aussi des classes Pickler et Unpickler dont des classes utilisateur peuvent hriter.
955
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
(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)
// 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.
// 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
957
>>> 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...
// 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
- 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
: : : :
""" 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
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
961
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
# 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
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.
- 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
(...) 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
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
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)) (...)
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
Plusieurs solutions sont possibles pour grer des pages dynamiques en Python dont les scripts CGI.
# Dans la machine virtuelle (VM) dmarre, crer un fichier de configuration $ nano /etc/apache2/site-enabled/si016python.eof # EoF - SI016 PYTHON <VirtualHost *:80>
970
# 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
Je teste mon premier script web en Python :) Figure 24-16. SI016 Python CGI 1/16
<-- 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
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
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
975
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> (...)
976
Puis je teste...
977
Chapitre 24. Initiation au langage de script (PHP, Python, Perl) Figure 24-19. SI016 Python CGI 4/16
978
979
Chapitre 24. Initiation au langage de script (PHP, Python, Perl) Figure 24-20. SI016 Python CGI 5/16
980
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
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
983
Chapitre 24. Initiation au langage de script (PHP, Python, Perl) Figure 24-22. SI016 Python CGI (Info) 7/16
984
(...) cgi.print_form(form)
985
986
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>
# # # # #
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
987
msg = """Nom du fichier : %s type MIME : %s contenu : %s"""%(filename, type, content) print msg
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
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
992
Chapitre 24. Initiation au langage de script (PHP, Python, Perl) Figure 24-28. SI016 Python CGI (Tlcharger Fichier) 11/16
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
993
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
<-- 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>
994
#!/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()
995
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
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.2. Le constructeur Tk
Le constructeur va crer la fentre principale (root widget) qui servira de rfrence toutes les autres :
// Mode interactive $ python
999
// 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
Note : Lutilisation de :
from Tkinter import *
1000
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.
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
bouton = Button(root, text="bip") def action(): bouton.bell() bouton.flash() bouton[text]="refaire bib" bouton[command] = action
# 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()
1002
zoneTexte = Label(root, text="""texte de prsentation sur plusieurs lignes""") zoneTexte.pack() root.mainloop() # Activer et afficher la fentre principale
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
1003
root.mainloop()
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.
1004
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
1005
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
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/
1007
#!/usr/bin/python # -*- coding: utf8 -*# tkinter-05-radiobutton.py from Tkinter import * # Charger le module dinterface GUI
1008
# 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)
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()
1009
Chapitre 24. Initiation au langage de script (PHP, Python, Perl) Figure 24-43. SI016 Python Tkinter 13/
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/
1011
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
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/
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
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
1014
Chapitre 24. Initiation au langage de script (PHP, Python, Perl) Figure 24-50. SI016 Python Tkinter 20/
1015
Chapitre 24. Initiation au langage de script (PHP, Python, Perl) Figure 24-51. SI016 Python Tkinter 21/
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() (...)
1018
Chapitre 24. Initiation au langage de script (PHP, Python, Perl) Figure 24-53. SI016 Python Tkinter 23/
1019
# Dfinition de la fonction associe liste.curselection() # Change le libl du label affichage # avec llment selectionn dans la list # Cration liste de selection
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()
Rsultat en image... :
1020
Chapitre 24. Initiation au langage de script (PHP, Python, Perl) Figure 24-54. SI016 Python Tkinter 24/
1021
1022
Chapitre 24. Initiation au langage de script (PHP, Python, Perl) Figure 24-57. SI016 Python Tkinter 27/
1023
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()
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/
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.
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
1026
1027
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()
ouverture = Button(root, text="question", command=creeFenetre) affichage = Label(root, width=30) ouverture.pack() affichage.pack() root.mainloop()
1028
Chapitre 24. Initiation au langage de script (PHP, Python, Perl) Figure 24-63. SI016 Python Tkinter 33/
1029
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"...
#!/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)
# 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)
root.mainloop()
1030
Chapitre 24. Initiation au langage de script (PHP, Python, Perl) Figure 24-66. SI016 Python Tkinter 36/
#!/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
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.
#!/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
# 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
1033
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
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
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
1036
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
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
25.1.2. TP Installation
Source(s):
# 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
1040
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.
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
# 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
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
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 (...)
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
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
1051
Chapitre 25. SI020 - Utilisation avance dun gestionnaire de contenu Figure 25-7. SI020 SPIP Installation 6/7
1052
1053
Chapitre 25. SI020 - Utilisation avance dun gestionnaire de contenu Enn jaccde lespace priv : Figure 25-9. SI020 SPIP Espace Priv
1054
Chapitre 25. SI020 - Utilisation avance dun gestionnaire de contenu Figure 25-10. SI020 SPIP Public (par dfaut)
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
1058
Chapitre 25. SI020 - Utilisation avance dun gestionnaire de contenu Figure 25-14. SI020 SPIP Sauvegarde 1/2
1059
1060
Chapitre 25. SI020 - Utilisation avance dun gestionnaire de contenu Figure 25-15. SI020 SPIP Sauvegarde 2/2
1061
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
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
1067
Chapitre 25. SI020 - Utilisation avance dun gestionnaire de contenu Figure 25-19. SI020 SPIP Filezilla 2
1068
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
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 !!!
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)...
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
# 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
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
1077
Chapitre 25. SI020 - Utilisation avance dun gestionnaire de contenu Figure 25-25. SI020 SPIP Ajouter des plugins 3/6
1078
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
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).
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
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
# 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
1085
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):
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>
1092
Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL
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();
<!-- 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";
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.
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>
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
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
<!-- 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...
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>
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
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>
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 :)
- 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="..."
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):
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 :)
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>
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();
// 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; ?>
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>
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"> (...)
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
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>
1127
Chapitre 26. SI022 - Dnir et utiliser son propre langage de balises avec XML et ses feuilles de styles XSL
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
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/
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
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="/"> (...)
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="/"> (...)
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. ..."
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
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>
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.
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... :)
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); ?>
// 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); (...)
<!-- XSL --> (...) <xsl:param name="rubrique">titre</xsl:param> <xsl:param name="order">ascending</xsl:param> (...) <xsl:sort select="$titre" order="$order" /> (...)
1156
1157
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]
En-Ligne (http://jp.gaulier.info/cnam/inge/memoire.pdf) Hors-Ligne (docs/eof/annexe-memoire-JP-Gaulier.pdf)
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)
1159
1160