Les services
Transcription
Les services
Les Services Mémoire sur la pratique du shell Bash sous Gnu Linux 1. La console 2. Les services 3. Le networking Par Patrick Hautrive http://hautrive.free.fr !© Les services par Patrick Hautrive !;~) 2010 1 La table des matières DEVICE........................3PRINT.........................60DEB...........................116NIS.............................156 DISK............................11KERNEL.....................67TARBALL.................121APACHE...................157 FLOPPY......................13VMLINUZ...................72XWINDOW...............124MESSAGE................165 FSTAB.........................16PROC...........................78GNOME....................129POSTFIX...................168 INODE.........................21SYSLOGD...................80KDE...........................130IPTABLES................170 EXT2...........................30STOP...........................88BACKUP...................131MYSQL.....................185 REISERFS...................34USER...........................89VIM...........................133PHP............................188 RAID...........................35GROUP.......................94EMACS.....................137CMS...........................190 LVM............................37QUOTA.......................95TEXTE......................138FTP............................194 SWAP..........................39CRONTAB..................97IMAGE......................139IRC............................197 MOUNT......................41MAKE.......................103SOUND.....................140SSH............................200 OSI...............................44GCC...........................105VIDEO.......................142BOOKS.....................203 TCP/IP.........................48LIBRARY.................109SAMBA.....................143 NETWORK.................53MODULE..................112JAVA.........................151 FIREWALL.................57RPM...........................114NFS............................153 !© Les services par Patrick Hautrive !;~) 2010 2 DEVICE Les périphériques Les périphériques représentent tous les matériels (hardware) connectés à la carte mère et qui font d'un ordinateur (computer) un tout fonctionnel. Il existe de nombreux types de périphériques et de nombreux types de connexions. Les disques durs et les lecteurs de CDROM sont des périphériques (devices) de types IDEATAPI, SATA ou SCSI. Les autres matériels sont en général classés selon leur fonction (imprimante, scanner, tablettes, disques externes, routeurs, écrans, projecteurs, appareils photographiques, carte d'acquisition vidéo, modem, etc.) ou sont classés selon le type de leur connexion (SERIE, PARALLEL, USB, FIREWIRE, FLASH, VGA, DVI). Les types de connexion correspondent à un type de voix de communication (bus) sur la carte mère, et sont également appelées des ports (ports). Les périphériques sont des fichiers spéciaux qui sont localisés dans le répertoire “/dev/*” et qui parfois sont des liens génériques qui conduisent aux périphériques. Les périphériques (devices) /dev/console /dev/mouse /dev/psaux /dev/modem /dev/ppp /dev/cdrom /dev/lp0 /dev/hd /dev/sd /dev/sg /dev/fd /dev/st /dev/tty /dev/pty /dev/cua /dev/stdin /stdout /dev/stderr /dev/full /dev/null /dev/zero /dev/random Le lien vers la console maitresse (premier terminal virtuel) Le lien vers la sourie (link) Le périphérique vers la sourie (round connector type) Le lien vers périphérique modem (series connector type) Le périphérique pour les connections avec le protocol PPP Le lien vers le lecteur de CDROM (link) Le périphérique pour l'imprimante (first parallel port) Les périphériques de type IDE (hard disk) Les périphériques de type SCSI et USB (scsi disk) Les périphériques FIREWIRE Les périphériques lecteurs de disquettes (floppy disk) Les périphériques lecteurs de bandes pour les sauvegardes (streamer) Les terminaux virtuels (teletype) Les pseudo terminaux pour l'interface graphique (pseudo type) Les modems (modulateur démodulateur) Le speudo périphérique d'entrée standard d'un processus Le speudo périphérique de sortie standard d'un processus Le speudo périphérique de sortie standard des erreurs d'un processus Le speudo périphérique qui simule un périphérique saturé (la saturation) Le pseudo périphérique qui fait office de poubelle (le grand vide) Le pseudo périphérique qui envoi un flux de bit à zéro (l'uniforme) Le pseudo périphérique qui donne un nombre aléatoire du noyau (le hasard) !© Les services par Patrick Hautrive !;~) 2010 3 L'architecture des bus de la carte mère L'architecture des bus de la carte mère est constituée en général d'un bus local qui permet au processeur (cpu) et à la mémoire vive (ram) de communiquer, et d'un bus auxiliaire qui permet aux périphériques de communiquer (USB, ETHERNET, AGP, ISA, SCSI, IDE, EXTENDED CARD). Les périphériques d'entrées Les périphériques d'entrées sont les périphériques qui permettent de communiquer avec le système et d'envoyer des informations ou des commandes. Les périphériques d'entrées sont le clavier (keyboard) et la souris (mouse). La souris est un périphérique de pointage qui fonctionne avec l'interface graphique(xserver). Les périphériques de pointage sont configurés dans le fichier de configuration de l'interface graphique (“/etc/X11R6/XF86Config4” avec le serveur graphique Xfree86 et “/etc/xorg.conf” avec le serveur XORG). Dans Debian, la configuration de l'affichage graphique s'effectue avec la commande «dpkgreconfigure xserverxorg». Les types de connexions Les périphériques représentent tous les matériels qui peuvent être connectés directement ou indirectement sur la carte mère (mother board). Les connexions directes sont réalisées par des branchements sur les contrôleurs intégrés (controler), tandis que les connexions indirectes sont réalisées par l'intermédiaire des connecteurs (connectors) ou des cartes filles (extension card). Ainsi, les cartes mères intègrent de plus en plus de puces (chipset) dédiées à certaines tâches. Par exemple, les disques durs (hard disks) et les lecteurs (drives) sont branchés et alimentés (power) à l'intérieur de l'unité centrale (central processing unit) sur les embranchements des contrôleurs de disque. De même les cartes réseaux Ethernet (network interfaces) sont branchées sur des emplacements (RJ45) qui sont le plus souvent déjà intégrées à la carte mère. Les emplacements (slots) pour les cartes d'extension (ISA, PCI, AGP, PCX) peuvent recevoir d'autres cartes réseaux ou d'autres cartes contrôleurs. Les connecteurs (SERIE, PARALLEL, USB, FIREWIRE, FLASH, VGA, DVI) peuvent recevoir des disques externes, des scanners, des tablettes, des appareils photographiques ou des imprimantes, ou tout autre type de matériel qui est pourvu de connecteurs. Les types de connexions (mother board) Controlers FLOPPY IDE SATA SCSI Wifi Interface Video Slots (cards) ISA PCI PCX SCSI RAM Eth0 AGP Connectors Series Parallel Usb Firewire Flash RJ45 VGA DVI !© Les services par Patrick Hautrive !;~) 2010 4 Les spécifications des périphériques Le transfert de données sur un périphérique est plus ou moins rapide (bits per seconds) selon la technologie et selon le type de connexion. Les fichiers spéciaux Les fichiers spéciaux sont des fichiers qui servent pour le transfert de données entre le système et des processus ou entre le système et des périphériques. Les transferts des données s'effectuent par l'intermédiaire des fichiers descripteurs (descriptors files) qui représentent les moyens de communication des processus (stdin, stdout, stderr) et qui assurent les redirections entre processus (IPC). Les entrées (In) et les sorties (Out) des processus sont numérotées zéro pour l'entrée, et de un à quatre pour les sorties. Les fichiers spéciaux peuvent être des sockets réseaux (s), des tubes nommés (p) pour les redirections FIFO (First In First Out), des fichiers de gestion appelés des pseudo périphériques (“/dev/null”, “dev/zero” ou “/dev/random”), ou des périphériques de type caractère (c) ou de type bloc (b). Les types de périphériques Les fichiers spéciaux des périphériques représentent des périphériques physiques (device) pour le système et sont tous définis dans le répertoire des périphériques (“/dev/*”). Les fichiers spéciaux des périphériques servent pour le transfert de données depuis et vers le périphérique. Les fichiers spéciaux des périphériques peuvent être de type caractère (caracter) ou de type bloc (bloc). Le type de fichier spécial qui convient à un périphérique va dépendre de son type d'interface (controler) ou de son type de connexion (connector). Les disques sont toujours des périphériques de type bloc. Les terminaux virtuels sont des périphériques de type caractère. Les fichiers spéciaux se caractérisent par leurs numéros (Major, Minor). Les modes de transfert Les modes de transfert des fichiers périphériques sont de type bloc ou de type caractère. Le mode bloc se caractérise par un accès aléatoire, c'estàdire que les enregistrements et les consultations peuvent survenir à n'importe quel moment. Le mode bloc est le mode privilégié pour tous les périphériques de grande capacité et les transferts s'effectuent par bloc entier de données (Disks, Drives, Floppy, Loop, Ramdisk, Streamers, Data Base, Swap,...). Le mode caractère se caractérise par un accès séquentiel, c'estàdire qu'une connexion est établie avec le périphérique, et pendant toute la durée de la connexion, le périphérique est en attente de transfert, et les échanges se font dans les deux sens et les caractères sont transmis les uns après les autres (octet par !© Les services par Patrick Hautrive !;~) 2010 5 octet). Le mode caractère est le mode privilégié pour les périphériques qui exigent des réponses rapides et qui établissent des échanges dans les deux sens (Terminals, Printers). Les imprimantes sont des périphériques de type caractère, mais qui utilisent le port parallèle pour démultiplier les canaux de transferts de données. Les périphériques caractères Les fichiers spéciaux des périphériques de type caractère permettent de transférer des données, caractère par caractère (caracter). Les périphériques blocs Les fichiers spéciaux des périphériques de type bloc utilisent des tampons de données (buffers) qui permettent de transférer des données par bloc entier (bloc). Par exemple, un bloc peut contenir 512 Octets, quand le tampon est rempli, son contenu est transféré par un flux de données. Les périphériques de type bloc possèdent également une interface en mode caractère, qualifiée de brute (raw). Les numéros Majeur et Mineur Les numéros Majeurs (major device number) et Mineurs (minor device number) sont pour le système les identifiants des fichiers de périphériques. Le numéro Major correspond au pilote (device driver) qui va gérer les transferts de données pour le périphérique. Le numéro Minor correspond au périphérique (device) lui même et constitue un argument pour le pilote. Plusieurs périphériques peuvent partager le même numéro Major, parce qu'ils sont gérés par le même pilote, mais chaque périphérique possèdent son propre numéro Minor qui permet de l'identifier. La commande “mknod” permet de créer les fichiers spéciaux pour les périphériques avec leurs numéros Majeurs et Mineurs. Le script “/dev/MAKEDEV” permet également de générer les fichiers spéciaux. Les noms des périphériques Les noms des fichiers spéciaux sont très précis et correspondent au type de périphériques qu'ils représentent. Toutefois, des liens génériques peuvent être créés dans le répertoire “/dev/*” afin de faciliter la configuration. Par exemple, le lien “/dev/cdrom” conduit vers le périphérique “/dev/hdc”, ou le lien “/dev/mouse” conduit vers le périphérique “/dev/ttyS0”. La commande «hotplug» permet de générer les fichiers spéciaux pour un périphérique USB branché à chaud (sans arrêter, ni rebooter le système). !© Les services par Patrick Hautrive !;~) 2010 6 La configuration des périphériques La configuration des périphériques s'adapte aux circonstances et emploi selon les situations des commandes différentes. La configuration des périphériques Commands hotplug mount umount fdisk mkfs fsck losetup mknod MAKEDEV ln ls dmesg mkdir make modprobe man mount Files lspci lsusb lsmod usbmodules sanefindscanner saneusb updateusbids /dev/* /etc/fstab /etc/X11R6/XF86Config4 /etc/xorg.conf /proc/mounts /proc/bus/pci/devices /proc/bus/usb/devices /proc/ide /proc/scsi/device_info /proc/tty/drivers Les fichiers périphériques Les fichiers spéciaux des périphériques sont créés, soit automatiquement par le système, soit manuellement par l'administrateur, avec la commande “mknod” et le script “/dev/MAKEDEV”. Les périphériques (devices) Le disque dur IDE maitre (master) de la première nappe La première partition La deuxième partition Le disque dur IDE esclave (slave) de la première nappe Le disque dur IDE maitre (master) de la deuxième nappe Le disque dur IDE esclave (slave) de la deuxième nappe Le périphérique SCSI en tête de la chaine La première partition La deuxième partition Le périphérique SCSI en second de la chaine Le lecteur de disquette 3 pouces ¼ La première carte réseau La deuxième carte réseau !© Les services par Patrick Hautrive !;~) 2010 7 /dev/hda /de/hda1 /dev/hda2 /dev/hdb /dev/hdc /dev/hdd /dev/sda /de/sda1 /dev/sda2 /dev/sdb /dev/fd0 eth0 eth1 Les paramètres des périphériques Les paramètres des périphériques sont les identifiants des interruptions et les adresses en mémoire pour communiquer directement avec le périphérique (hexadecimal). Les interruptions IRQ (Interrupt Request) permettent de signaler au système qu'un évènement s'est produit (souris, clavier). Les paramètres des périphériques IRQ (Interruption Request) Chanel DMA (direct Access Memory) Address I/O (Input Output) Address shared Memory Les ports des périphériques Les ports représentent les types de connexion des périphériques. Chaque port possède ses propres caractéristiques techniques de transfert et est géré par un pilote spécifique. Par exemple, le port série (serial) peut être utilisé avec une sourie ou un modem. Le port parallèle (parallel) est généralement employé pour une imprimante. Souvent les identifiants numériques pour le système commencent à partir de zéro, tandis que les noms usuels commencent à partir de l'unité. Les ports des périphériques Port Series ttyS0 ttyS1 ttys2 ttys3 = = = = COM1 COM2 COM3 COM4 Port Parallel lp0 lp1 = = LPT1 LPT2 Devices fd0 fd1 hda sda sga = = = = = FLOPPY1 (A:\) FLOPPY2 (B:\) IDE (master one) SCSI (one) FIREWIRE (ieee1394) Les périphériques USB Les périphériques USB se caractérisent par le port USB. Les périphériques USB sont considérés par le noyau comme des périphériques SCSI (émulation SCSI). Les périphériques USB peuvent être montés avec le système de fichiers “usbdevfs” ou plus récemment “usbfs”. Les périphériques SCSI peuvent être de plusieurs types (SCSI, SCSI GENERIC, SCSI DISK et USB MASS STORAGE). Plusieurs types de contrôleurs USB se sont succédés, correspondant à plusieurs normes ou à plusieurs puces (chipset) différentes (EHCI, OHCI, UHCI). !© Les services par Patrick Hautrive !;~) 2010 8 Les périphériques USB EHCI OHCI UHCI (USB 2.0) (Sis, Ali chipset, Power Book, Imacs, Compaq) (Intel, Via) Un exemple de compilation USB La compilation du noyau (kernel) permet d'intégrer dans le système ou par l'intermédiaire de modules la gestion des périphériques USB et le chargement des pilotes USB. Un exemple de compilation du noyau avec le pilote USB Installation du package “pcutils” Compilation d'un noyau Chargement des modules USB urpmi pciutils lspci lsusb hotplug cd /usr/src/linux make menuconfig make modules make modules_install modprobe usbcore modprobe usbmouse dmesg | grep USB modprobe sd_mod modprobe usb_storage mkdir /mnt/usb mount t vfat /dev/sda1 /mnt/usb Les exemples de device ls l /dev/hda7 ls l /dev/ide/host0/bus1/target0/lun0/part7 mount o loop http://public/install.iso /public/distro loseup mknod m 0664 /dev/exemple b 42 0 ln s /de/sda1 /dev/usb ln s /de/ttys0 /dev/modem echo “AT” > /dev/modem less /dev/MAKEDEV ls l /dev/pl0 mkdir /mnt/cdrom ; mount t iso9660 /dev/cdrom /mnt/cdrom o ro with devfs rpm i pciutils lspci v ; cat /proc/pci mount t usbdevfs none /proc/bus/usb vi /etc/fstab /none /proc/bus/usb usbdevfs defaults 0 0 vi /etc/X11R6/XF86Config4 Section Input Device !© Les services par Patrick Hautrive !;~) 2010 9 identifier driver option option option cdrecord scanbus “Mouse 0” “mouse” “Protocol” “IMPS/2” “ZAx is Mapping” “4 5” “Device” “/dev/input/misc” !© Les services par Patrick Hautrive !;~) 2010 10 DISK Les disques Les performances des disques durs (IDE, SCSI, SATA, USB, FIREWIRE, FLASH) se sont améliorés au fil du temps. Les BIOS (Basic Input Output System) qui supporte le LBA (Large Bloc Addressing) permettent un adressage au boot qui va audelà du 1024ième cylindre. L'indice MTBF (Mean Time Between Failure) permet de mesurer la durée de vie moyenne d'un disque qui se situe aux environs de 50 000 heures d'usage. La ZBR (Zone Bit Recording) désigne les disques dont les pistes externes contiennent plus de blocs. Les spécifications des disques Les spécifications des disques Les permissions POSIX Les libelles (label) Les attributs Les quotas Les ACL (Access Control List) Les logiciels de restauration La taille des blocs logiques La taille d'un bloc logique sur le disque peut varier de 512 Octets à 4096 Octets. La taille optimum dépend naturellement de la taille estimée des fichiers. Les petits blocs sont plus adaptés aux petits fichiers. La taille moyenne des fichiers peut être évaluée avec le rapport “%bloc/Nombre d'inodes”. La configuration des disques La configuration des disques Commands df du kdiskfree dd mkdir quota ulimit lsattr chattr ddrescue Files fdisk mount umount mkfs fsck /etc/fstab /mnt/* !© Les services par Patrick Hautrive !;~) 2010 11 L'installation d'un disque L'installation d'un disque dans le système présuppose que son installation matérielle est conforme (nappe, cavalier, alimentation) et que le fichier spécial de périphérique qui lui correspond existe avec les bons paramètres (Major, Minor). L'installation va consister à créer le répertoire (mkdir) pour le point de montage du disque dans l'arborescence racine, à créer la partition (fdisk), à installer le système de fichier (mkfs), à monter le nouveau système de fichiers (mount), et enfin à renseigner le fichier de configuration des systèmes de fichiers (“/etc/fstab”) pour monter automatiquement le nouveau système de fichier lors du prochain redémarrage (reboot). Un exemple d'installation d'un disque IDE mkdir /HDB1 fdisk /dev/hdb mke2fs c /dev/hdb1 echo “/dev/hdb1 /HDB1 ext2 default 0 1” >> /etc/fstab mount t ext2 /dev/hdb1 /HDB1 shutdown Rf now Les exemples de disque df hm du ach fdisk l df hT umount /dev/hdb e2fsck /dev/ dd if=/dev/hda of=/dev/hdb conv=noerror, sync ddrescue v ddrescue –maxretries=1 /dev/hda /dev/hdb umount /dev/hdb e2fsck /dev/hdb !© Les services par Patrick Hautrive !;~) 2010 12 FLOPPY Les disquettes Une disquette (floppy disk) est un support de stockage qui contient 1,44 Mo. Les disquettes sont principalement utilisées pour le transfert manuel ou géographique de fichiers d'un système à un autre. Les disquettes sont également utilisées pour le dépannage du système. Les disquettes de dépannage s'appèlent communément des disquettes de boot. Les disquettes de boot furent longtemps indispensables pour amorcer, démarrer ou dépanner un système. Aujourd'hui, les CDROM live sont aussi rapides et plus consistants, puisqu'ils peuvent proposer au boot, un noyau avec un shell et les outils qui conviennent pour réparer un système. Les types de disquettes La disquette d'amorçage permet d'amorcer le système en place, parce qu'elle contient un secteur de boot, une copie de la table des partitions et un chargeur de démarrage qui pointe vers la partition racine du système déjà installé. La disquette de démarrage permet de charger une image d'un noyau avec, par exemple, quelques outils de partitionnement et des pilotes pour la carte réseau lesquels permettront de lancer une installation. La disquette de dépannage contient également un mini noyau et le maximum d'outils (tools) pour l'administrateur (root). Le formatage d'une disquette Le formatage d'une disquette (comme le formatage d'une clef USB) peut bien sûr utiliser un système de fichiers natifs de Gnu Linux, comme ext2 par exemple. Toutefois, les autres systèmes que Gnu Linux ne sont pas toujours compatibles, et pour des raisons de portabilité, il est souvent nécessaire de formater les disquettes avec le système de fichier VFAT afin de pouvoir transférer des fichiers d'un système à l'autre. Le système Gnu Linux est compatible avec tous les systèmes de fichiers et est capable de lire et d'écrire sous d'autres formats que le sien. Le formatage d'une disquette consiste à installer un système de fichier sur le support. Le système de fichier choisit est indiqué en option de la commande “mkfs”. !© Les services par Patrick Hautrive !;~) 2010 13 Le formatage et le montage d'une disquette Gnu Linux (floppy disk1,44 Mo) fdformat /dev/fd0h1440 mke2fs /dev/fd0 mkdir /floppy mount t ext2 /dev/fd0 /floppy cat /etc/mtab echo “/dev/fd0 /floppy auto user 0 0” >> /etc/fstab umoumt /floppy ; mount /floppy La disquette de boot La disquette de boot dd if=/boot/vmlinuz of=/dev/fd0 bs=8192 dd if=/mnt/cdrom/images/bootdisk.img of=/dev/fd0 mkbootdisk $(uname r) mkboot fdformat /dev/fd0 mformat superformat La disquette root Cette disquette root doit contenir les outils compilés avec des liens statiques, qui inclus dans les binaires, les bibliothèques nécessaires (libraries). Une disquette root comporte un noyau (vmlinuz), la copie des principaux fichiers de configuration (/etc*), les outils d'administration pour le système de fichiers et pour les modules, un éditeur et un shell. La disquette root dd if=/mnt/cdrom/images/root.img of=/dev/fd0 dd if=/mnt/cdrom/images/rescue.img of=/dev/fd0 Le noyau Gnu Linux: /boot/vmlinuz Les principaux fichiers de configuration : /etc/* Les outils compilés avec des liens statiques: rdev mount umount mkfs fsck fdisk lsmod insmod lspci tar gunzip gzip bash vi Les exemples de floppy X:>\dosutils\rawrite.exe X:\images\bootdisk.img rawrite.exe f \images\boot.img d A: /sbin/hdparm c1 /dev/hda (32 bits, bus PCI) /sbin/hdparm d1 /dev/hda (DMA) !© Les services par Patrick Hautrive !;~) 2010 14 /sbin/hdparm d1 X11 /dev/hda (Ultra DMA) vi /etc/rc.d/rc.local mke2fs /mnt/floppy mkfs t ext2 c m 0 b 2048 /dev/fd0 1444 fdformat /dev/fdOH1440 mformat h 2 s 18 t 80 A: drakfloppy GFFloppy !© Les services par Patrick Hautrive !;~) 2010 15 FSTAB Les systèmes de fichiers Les systèmes de fichiers (file system) structurent l'organisation des fichiers dans une partition. Le système de fichier correspond au formatage d'une partition. C'est le format d'enregistrement des fichiers sur le support de stockage. Le système de fichier peut être intégré au noyau (kernel) ou comme modules. Le montage d'un système de fichiers (mount) est l'opération qui permet de déclarer un système de fichier et de le positionner au sein de l'arborescence générale dans un point de montage (mounting point). Les systèmes de fichiers et les points de montage d'un système Gnu Linux sont déclarés dans le fichier “/etc/fstab”. L'ordre d'apparition de chacune des lignes est important parce qu'il conditionne le lancement des commandes fsck, mount et umount qui lisent séquentiellement ce fichier. Le montage d'un système de fichier dans un répertoire non vide va cacher son contenu, mais les fichiers ne seront pas écrasés, et réapparaitrons après le démontage. Les commandes “man 5 fstab” et “man mount” décrivent le montage des systèmes de fichiers. La vérification des systèmes de fichiers En général, la procédure de vérification (fsck) d'un système de fichiers s'effectue celuici démonté. Le démontage d'un système de fichier (umount) est indispensable avant le retrait d'un périphérique amovible (usb key), parce que des écritures peuvent attendre dans un fichier tampon (buffer), et la déconnexion à chaud du périphérique pourrait endommager des fichiers. Les caractéristiques d'un système de fichiers Les systèmes de fichiers se différencient par certains attributs appliqués aux fichiers, à leur vitesse d'écriture et de lecture, par la taille maximale des fichiers et la capacité maximale d'un volume (outre le fait que certains sont propriétaires et payants). Par exemple, le système Reiserfs est particulièrement performant pour le stockage d'une multitude de petits fichiers, comme il en existe souvent sur les sites internet. Les caractéristiques d'un système de fichiers dépendent amplement de la taille des unités de base de stockage (blocks), de la gestion des inodes dans la table des inodes (inodes table) et du type des informations de gestion qui sont enregistrées pour chaque fichier (bloc inode). !© Les services par Patrick Hautrive !;~) 2010 16 Les gestionnaires de volumes Les gestionnaires de volumes permettent de faire abstraction des contraintes physiques liées à l'organisation des disques et des partitions. Les gestionnaires de volumes constituent une couche supplémentaire pour la gestion des systèmes de fichiers. Le système de fichier LVM (Logical Volume Manager) permet de virtualiser les disques et les partitions physiques. Les systèmes de fichiers virtuels Les systèmes de fichiers virtuels permettent de simuler la présence d'un périphérique et de présenter dans l'arborescence les donnés qu'ils contiennent. Par exemple, l'image instantanée de la mémoire vive est présentée dans le pseudo système de fichiers /proc. Des fichiers peuvent être montés virtuellement comme des périphériques virtuels (loop device). Le système de fichiers VFS (Virtual File System) est un système de fichiers virtualisé. Les types de système de fichiers Les systèmes de fichiers Ext2 et Ext3 (Ext2 avec en plus la journalisation des écritures sur le disque) sont avec Reiserfs les systèmes les plus utilisés. Cependant, un système Gnu Linux reconnait tous les autres systèmes de fichiers, et par conséquent est capable de monter dans son arborescence, n'importe quel autres types pourvu qu'il soit compilé directement à l'intérieur du noyau, soit comme module. Les types de systèmes de fichiers (/etc/fstab) Unices SYSV UFS JFS XFS XIAF VXFS ADFS GPFS OpenBSD FFS EXT EXT2 EXT3 REISERFS LVM (Unix™) (Bsd Solaris) (AIX d'IBM) (Inix) (HPHUX) (True 64) (Open BSD) (BSD) (Gnu Linux) (Gnu Linux) (Gnu Linux) Others MINIX HFS HPFS NCPFS NCP BEFS AFFS UMSDOS MSDOS VFAT NTFS CVSFAT AUTOFS EFS GNX4 (Apple) (Macintosh) (Novell) (Netware) (BeOS) (Amiga) (setuid, posix) (Fat16) (Fat 32) (Windows™) Cdrom Network ISO9600 NFS ROCKRIDGE SMBFS JOLEIT (Unicode) UDF HIGHSIERRA USBFS !© Les services par Patrick Hautrive !;~) 2010 17 Virtual VFS PROC SYSFS ROOTFS TMPFS SOCKFS PIPEFS BDEV DEVFS DEVPTS MQUEUE RAMFS ROMFS CRAMFS COHERENT SWAP (82) CODA La configuration fstab Les commandes d'administration des systèmes de fichiers sont nombreuses et diversifiées, puisqu'elles concernent le partitionnement (fdisk), la création des fichiers spéciaux de périphériques (mknod), l'installation d'un système de fichier sur une partition (mkfs), le paramétrage (tune2fs), la vérification (fsck), la synchronisation des écritures (sync), le montage (mount) et le démontage (umount) des systèmes de fichiers, la recherche des blocs physiques défectueux du disque (badblocks) ou la copie (dd). Le fichier “/procfilesystems” permet de connaitre les différents systèmes de fichiers compilés et reconnus par le noyau. Les noms des options de la commande “mount” sont les même que pour le fichier “/etc/fstab”, puisque la commande se réfèrent aux mêmes caractéristiques, et que sa tâche est de lire le fichier de configuration. La configuration des systèmes de fichiers avec le fichier “/etc/fstab” permet de procéder à une automatisation des montages et des démontages, et de ne se référer qu'à un seul des critères de montage, le périphérique (device) ou le point de montage (mounting point). Les gestionnaires de volumes, comme LVM disposent de leurs propres jeux de commandes. La configuration des systèmes de fichiers Commands fdisk mount umount fsck e2fsck mkfs mkfs.ext2 reiserfsck mkreiserfs mkswap swapon swapoff tune2fs mknod exports mountd losetup testdisk sync rdev fuser lsof lsattr chattr man 5 fstab man 8 mount man 5 fs man 5 nfs man rpc.nfsd Files debugfs badblocks dumpfs kfstab e2label e2image xfs_admin df du dd dump sum resize2fs blkid /etc/fstab /etc/mtab /etc/lvmtab /etc/filesystems /etc/crontab /etc/anacrontab /proc/filesystems /proc/partitions !© Les services par Patrick Hautrive !;~) 2010 18 Les champs du fichier fstab Le fichier /etc/fstab se compose de plusieurs champs séparés par un espace ou une tabulation. Le champ DEVICE caractérise le périphérique à monter localement ou via le réseau. Le champ POINT indique le point de montage dans l'arborescence. Le champ TYPE stipule le type de système de fichiers, le champ OPTIONS marque les options retenues pour le montage. Les deux derniers champs sont des drapeaux (flags) qui peuvent prendre les valeurs numériques zéro, un ou deux. Le champ DUMP est utilisé pour savoir si le système de fichier doit être sauvegardé. Le drapeau DUMP à zéro indique à la commande “dump” que le système de fichiers n'a pas besoin d'être sauvegardé. Le champ FSCK est utilisé pour ordonner les priorités de lancement des vérifications des systèmes de fichiers (pass number). Les vérifications automatiques de l'état du système de fichiers sont effectuées régulièrement au démarrage et dépendent du nombre de fois que le système de fichiers a été monté. Le drapeau FSCK du système de fichier racine (root) doit toujours être à un pour indiquer la priorité de la vérification, les autres partions étant vérifiées après et positionnées à deux. Les champs du fichier /etc/fstab et les options génériques (man 8 mount) DEVICE POINT TYPE OPTIONS DUMP FSCK Les options fstab Les options du fichier “/etc/fstab” sont les même que pour la commande “mount” qui en lit le contenu. Certaines options sont génériques et rassemblent en une seule expression, plusieurs options habituelles. De nombreuses options possèdent leur contraire. Une option générique peut être suivie d'une option contraire sans contradiction. Les options sont séparées par une virgule. Toutes les options sont détaillées dans la page man de la commande “man mount”. Par exemple, l'option none indique qu'il n'y a pas de périphérique à monter pour la swap. L'option default rassemble les options qui sont généralement utilisées. L'option auto permet le montage de tous les systèmes de fichiers avec la commande “mount a” au démarrage du système d'exploitation. L'option sync demande la synchronisation immédiate des écritures sur le système de fichiers. L'option user autorise les utilisateurs à monter le système de fichiers. L'option noexec empêche l'exécution de binaire à partir du système de fichiers. Le drapeau FSCK peut être positionné à zéro (clean bit) pour les systèmes de fichiers journalisés comme Ext3 ou Reiserfs. Les points de montage contenant des espaces doivent être échappés avec la séquence “\040”. L'option pri=32767 indique la plus haute des priorités et une parallélisation des !© Les services par Patrick Hautrive !;~) 2010 19 swap sur plusieurs partitions. Les options des champs du fichier /etc/fstab et les options génériques (man 8 mount) DEVICE POINT TYPE /dev/hda1 / server:/path /home ignore none ext2 ext3 swap auto OPTIONS user (noexec, nosuid, nodev) defaults (rw, suid, dev, exec, auto, nouser, async) sw supermount, pri, remount, umask=002, owner comment conv= (auto, binary, text) atime noatime auto noauto dev nodev exec noexec suid nosuid user nouser sync async ro rw uid=501 gid=501 usrquota grpquota resuid resgid DUMP FSCK 0 1 1 2 Un exemple de fstab Un exemple de fichier /etc/fstab proc /proc proc /dev/hda3 / ext3 /dev/hda6 /home ext3 /dev/hda2 none swap /dev/hdc /media/cdrom0 udf,iso9660 /dev/fd0 /media/floppy0 auto server:/usr /nfs/tools nfs mailserver:/var/spool/mail /var/spool/mail nfs /dev/sda2 none swap /dev/sda3 none swap /dev/sda4 none swap defaults defaults,errors=remountro defaults sw ro,user,noauto rw,user,noauto defaults timeo=20, intr sw,pri=3 sw,pri=3 sw,pri=1 !© Les services par Patrick Hautrive !;~) 2010 20 0 0 0 0 0 0 0 0 0 0 0 0 1 2 0 0 0 2 0 0 0 0 INODE Les noms des fichiers Toutes les informations concernant un fichier sont stockées dans la table des inodes (inode table), sauf le nom du fichier, qui lui est enregistré dans le répertoire qui le contient, avec le numéro d'inode qui lui correspond. Un répertoire est un fichier dont le contenu est constitué des noms des fichiers qu'il contient et des numéros des inodes qui leur correspondent. Pour aller chercher un fichier, l'utilisateur utilise le nom du fichier, le système recherche dans le répertoire du fichier, l'inode qui lui est associée, puis le système recherche dans la table des inodes les adresses physiques des blocs où sont enregistrés les données du fichier sur le disque. Le noyau à la poursuite d'un fichier NAME > DIRECTORY > FILESYSTEM > DEVICE > INODE > @BLOCK > DATA Les numéros d'inodes Le numéro d'inodes (index nodes) constituent en quelque sorte la référence d'un fichier pour le système de fichiers (file system). Les numéros des inodes (inodes number) sont des entiers numériques positifs qui identifient chaque fichier présent physiquement sur le disque. Les numéros d'inodes sont uniques et sont attribuées dans l'ordre de création des fichiers. Le Super Bloc (super block) du disque pointe vers la prochaine inode libre (block inode) et vers le prochain bloc de données libre (block data). Le bloc de contrôle d'un cylindre (control bloc) conserve les adresses physiques (adresses) sur le périphérique (device) de toutes les inodes et de tous les blocs de données, ainsi que la liste des numéros des inodes libres et occupées (ilist). Les informations de gestions des fichiers sont enregistrées dans 128 Octets et regroupées par huit dans un bloc logique de 1024 Octets. Ces blocs d'enregistrement des informations de gestion des fichiers (block inode) constitue avec la liste des inodes (ilist) ce qui est couramment appelé la table des inodes. La commande «stat /etc/passwd» montre les attributs d'un fichier figurant dans la table d'inode. !© Les services par Patrick Hautrive !;~) 2010 21 La correspondance entre le nom du fichier, son numéro d'inode et l'adresse physique du bloc File System (root) Inode Table (ilist > bloc inode) Name Inode Inode 1 @ Block file.txt Name 1234 > 1234 Inode Inode big.tgz 6789 > 6789 12 @ Data Informations 1001 to 1012 5622 15 @ Block Device (blocks on the disk) @ Block Block Data (@ Block) > 5622 @ Block Raw Data Block Data (@ Block) > 1001 to 1012 Raw Data (128 Octets) 3 @ Indirection @ BlockSimple > 1013 @ BlockDouble > 1014 @ BlockTriple > 1015 256 @ Block 256*256 @ Block 256*256*256 @ Block La taille des disques Tout d'abord, il faut savoir que les tailles des disques sont fausses, parce que les tailles affichées sont calculées en divisant le nombre d'octets disponibles par une approximation de mille et non par 1024. Ainsi par exemple, une clef vendue pour 65 Méga Octets, et qui contient exactement 65 208 320 Octets, ne contient en réalité que 63 680 Kilo Octets (65 208 320 Octets divisés par 1024), ce qui ne fait que 62,1875 Méga Octets ( 63 680 Kilo Octets divisés par 1024). Certains vous diront que c'est la part des anges, et d'autres encore, vous diront que les anges ne sont, ni des menteurs, ni des voleurs, mais, c'est sans doute que les anges n'y sont pour rien... Les équivalences des unités 8 bits 1024 Octets 1024 Kilo Octets 1024 Méga Octets 1024 Giga Octets 1024 Tera Octets sont équivalents à sont équivalents à sont équivalents à sont équivalents à sont équivalents à sont équivalents à un Octet un Kilo Octet un Méga Octet un Giga Octet un Tera Octet un Péta Octet (Byte) (Ko) (Mo) (Go) (To) (Po) La géométrie du disque Un disque est constitué de plateaux et les plateaux sont fait de blocs physiques (blocks). Chacun des plateaux est muni d'au moins une tête de lecture (heads), et sur chaque plateau, les blocs physiques sont répartis en cercles concentriques qui ressemblent à des pistes. Le premier cercle est celui qui est le plus éloigné du centre, et le dernier cercle est celui qui en est le plus rapproché. Ces blocs physiques constituent la plus petite unité physique de stockage du disque. La taille d'un bloc physique dépend du modèle et du constructeur du périphérique. En général, la taille d'un bloc physique est de 512 Octets. !© Les services par Patrick Hautrive !;~) 2010 22 Lors du formatage de bas niveau, l'espace du disque est organisé en blocs logiques et en cylindres. Les disques sont vendus avec un formatage de bas niveau. La taille d'un bloc logique peut être égale à la taille d'un bloc physique (512 Octets) ou être supérieure. En général, les disques de petites capacités conservent la même unité (512 Octets), tandis que les disques de grande capacité passent à une unité double, c'estàdire que la taille de leur bloc logique est de 1024 Octets, ce qui correspond bien à deux blocs physiques de 512 Octets chacun. Dans le processus de partitionnement, le disque est divisé en partitions (fdisk). Les partitions sont composées d'un certain nombre de cylindres. Les partitions commencent par l'adresse physique de début d'un cylindre, et se terminent avec l'adresse physique de fin d'un cylindre. Une partition pourrait être constituée d'un seul cylindre. Les partitions peuvent être primaires (4), dont une peut être étendue (1) et contenir des partitions logiques (63). A l'intérieur d'une partition, l'espace est composé de cylindres qui rassemblent un certain nombre de blocs logiques. Le bloc logique va constituer la plus petite unité logique de stockage. La géométrie d'un disque Partition > Cylinders > Tracks (Heads) (per cylinder) x Sectors (per tracks) x Blocks Block Size (per sector) (in bytes) Les cercles concentriques de chaque plateau du disque forment des pistes (tracks), lesquelles sont de plus en plus courtes au fur et à mesure que l'on se rapproche du centre. Chacune des pistes d'un même plateau est divisée en toutes petites parties égales pour former des petits arcs de cercles. Chacun de ces petits arcs de cercles est composé du même nombre de bloc. Les petits arcs de cercles contigus de l'intérieur vers l'extérieur du disque, forment un ensemble de parties convexes qui constitue un secteur (sector). Un secteur est composé de blocs logiques (blocks). Tous les secteurs d'un disque ont la même taille et rassemblent tous le même nombre de blocs logiques. A chaque étage, les secteurs de chaque plateau se superposent et forment un ensemble superposé qui est appelé un cylindre (cylinder). Le cylindre est l'unité logique qui sert à choisir la taille des partitions. Comme les bras des têtes de lecture sont placés les uns audessus des autres, les secteurs de toutes les plateaux d'un même cylindre peuvent être lus en même temps par le contrôleur de disque (controler). Toutefois, la géométrie physique des disques a évoluée avec le progrès technologique. De nos jours, la géométrie logique, qui apparait avec la commande «fdisk l», de reflète plus la géométrie physique, qui est gérée indépendamment par le contrôleur de disque. C'est pourquoi, il peut apparaitre un nombre élevé de tête de lecture, par exemple. Ainsi, en multipliant la taille d'un block logique (512 bytes sector size) par le nombre de secteur par pistes (63 sectors per track), puis par le nombre logique de têtes de lecture (255 heads), et enfin par le nombre de cylindre (9733 cylinders), l'on obtient un total de 80 056 650 240 bytes pour le disque, ce qui est proche de celui qui est affiché: 80 060 424 192 bytes. La différence entre ces deux totaux correspond à un certain nombre de blocs réservés par le contrôleur de disque: La somme du MBR (512 bytes), à laquelle il faut ajouter un certain nombre de blocs secteurs répartis sur le disque, et réservés par le contrôleur, lequel dépend du nombre de partitions installées et !© Les services par Patrick Hautrive !;~) 2010 23 de la façon dont le contrôleur gère le disque. Un exemple de géométrie Pour résumer, la taille des blocs logiques d'un disque est décidée lors du partitionnement de bas niveau du disque, et le disque est divisé en cylindres (cylinders). Les cylindres constituent l'unité logique qui composent les partitions. Chacun de ces cylindres peut avoir plusieurs niveaux selon le nombre de plateaux. A chaque niveau se trouve un secteur (sectors) qui est composés de plusieurs pistes (tracks) ayant toutes le même nombre de blocs logiques (blocks). Par exemple, un disque possède un seul niveau (un seul plateau) et le disque est conditionné avec une seule partition prenant tout l'espace. L'unique partition regroupe donc tous les cylindres du disque. Les cylindres sont numérotés de 1 à 1010 et il y a donc 1010 cylindres différents (1010 cylinders). Chaque cylindre est composé de 3 pistes (3 tracks) avec pour chacune d'entre elle 3 têtes de lecture (3 heads). Les 3 pistes de chaque cylindre forment un secteur (1 sector). Chaque piste contient 42 blocs, et un bloc est égale à 512 Octets. Donc, pour retrouver la taille réelle d'un disque, il faut multiplier la taille d'un bloc logique (512 Octets) par le nombre de blocs par pistes (42), puis par le nombre de pistes par secteur (3) et enfin par le nombre de cylindres (1010), reste alors le nombre de blocs réservés pour la gestion (les superblocs, les blocs de contrôle et les blocs inodes). Exemple de la géométrie d'un disque de 65 Mo Disk /dev/sda: 65 MB, 65 208 320 bytes 3 heads, 42 sectors/track, 1010 cylinders Units = cylinders of 126 * 512 = 64 512 bytes Device Boot Start End Blocks Id System /dev/sda1 * 1 1010 63 609 b W95FAT32 Block = 512 Octets Sector = 42 blocks Number of Heads = 3 Tracks (3x42=126) Number of Cylinders = 1010 Super Blocks & Block control = 51200Octets (512 Octets)x(42 Blocks per Tracks)x(3 Tracks per sector)x(1010 Cylinders)=65 157 120 Octets Block Size x Sectors x Tracks x Cylinders + Super Blocks = Device Size Les cinq structures Cinq structures composent les disques, les partitions et les cylindres: le Superbloc (SUPERBLOCK), les blocs de contrôle (BLOCKCONTROL), les blocs inodes (BLOCKINODE), les blocs contenants des adresses d'indirection (BLOCKADRESSES) et les blocs de données (BLOCKDATA). Le Superbloc se trouve en début de partition (ensemble de cylindres) et les autres blocs se placent à la suite du superbloc. Le superbloc liste les adresses physiques de début et de fin des partitions. Des copies du superbloc sont réparties dans la partition. Par exemple, une copie du superbloc peut se retrouver tous les 8 Méga Octets (8192=8*1024). Le premier superbloc est à l'adresse 1 (1=1), le !© Les services par Patrick Hautrive !;~) 2010 24 deuxième superbloc est à l'adresse 8193 (8192+1), le troisième superblock est à l'adresse 16 385 ((2*8192)+1), le quatrième superbloc est à l'adresse 24 577 ((3*8192)+1), et ainsi de suite. Le bloc de contrôle d'un cylindre contient les adresses physiques des blocs de toutes les inodes (BLOCKINODE) et de tous les blocs de données (BLOCKDATA), ainsi que la liste des numéros des inodes libres et occupées (ilist). La liste des inodes rassemble les numéros et les adresses de toutes les inodes, et permet ainsi, de connaître les blocs qui sont allouées et les adresses des blocs libres (bit map). Les blocs d'inodes enregistrent les informations de gestion des fichiers dans 128 Octets. Les blocs d'inodes et la liste des inodes (ilist) constituent la table des inodes. Les indirections à l'intérieur d'un enregistrement d'inode peuvent être simples, doubles ou triples. Une indirection pointe sur un bloc du disque, mais ce bloc contient d'autres adresses de blocs (BLOCKADRESSES), plutôt que des données (BLOCKDATA). Les blocs de données contiennent les informations brutes d'un fichier (raw data). Généralement, le système de fichier effectue automatiquement et régulièrement une copie de la table d'allocation des fichiers sur le disque. Ainsi, estil possible de récupérer un système de fichier qui a été endomagé avec la commande «dd» (pourvu que l'on sache le numéro du bloc qui contient la copie) ou l'utilitaire «dd_rescue». Des CDROM spécialisés dans la récupération ou la restauration d'un disque existe, comme Trinity Rescue Kit ou System Rescue CD. Les fabricants de disque proposent également des utilitaires spécifiques pour leurs matériels. !© Les services par Patrick Hautrive !;~) 2010 25 Les structures du disque, des partitions et des cylindres Master boot Record (MBR) (block 0) La table de partition du disque Le code du chargeur de démarrage Le Magic Number Super Bloc (SUPERBLOCK) (block 1) La table du système de fichier (file allocation table) La taille des blocs La taille du système de fichiers Le nombre de montage Un pointeur vers la racine du système de fichiers Un pointeur vers la prochaine inode libre Un pointeur vers le prochain bloc de données libres Blocs de contrôle (BLOCKCONTROL) (blocks 2 to n) La table des inodes Les adresses de tous les blocs d'inodes (ilist) Les adresses de tous les blocs de données Liste des blocs allouées Liste des blocs libres Blocs d'inodes (BLOCKINODE) (blocks n+1 to p) Les enregistrements des informations de gestion des fichiers Une inode (128 Octets), huit inodes pour un block logique (1024 Octets) Le type de fichier, les permissions, le nombre de hardlink L'identité du propriétaire (UID) et du groupe propriétaire (GID) Les 15 adresses des blocs: 12 @BLOCKDATA (contenant des données) 3 @ BLOCKADRESSES (contenant des adresses d'indirection) Blocs de données (BLOCKDATA) (p+1 to z) Les informations brutes du fichier Blocs d'indirection (BLOCKADRESSES) Les adresses de blocs d'indirection (BLOCKADRESSES) ou de données (BLOCKDATA) Le nombre des inodes Le nombre d'inodes occupés et le nombre d'inodes disponibles sont plutôt des indices de la gestion du disque que de l'occupation du disque. En effet, s'il n'y a plus d'inode de disponible pour un nouveau fichier, alors celuici ne peut pas être référencé dans la table d'inodes, et aucun bloc inode ne peut donc lui être alloué pour enregistrer ses informations de gestion, alors qu'il peut très bien encore rester de l'espace vierge sur le disque. Inversement, il peut rester des inodes de libre, alors que l'espace de stockage est rempli. !© Les services par Patrick Hautrive !;~) 2010 26 Le nombre maximal d'inodes d'un système de fichiers dépend de l'unité de stockage minimale (block), de la taille globale du système de fichiers (partition) et du nombre de bits utilisés pour l'adressage (address). L'ajout de disques et de partitions, et le montage de système de fichiers dans l'arborescence racine permettent de faire croitre l'espace adressable et l'espace de stockage disponible. La taille des fichiers Un fichier occupe au moins un bloc, même s'il est vide, et au moins un bloc inode lui est alloué (128 Octets). Inversement, un fichier peut occuper plusieurs blocs. Quand les 12 adresses qui pointent vers des blocs de données dans l'enregistrement des informations de gestion du bloc inode ne suffisent pas pour stocker le fichier, alors le mécanisme des indirections est mise en place. Les trois adresses d'indirection pointent vers des blocs qui contiennent d'autres adresses de blocs. Les systèmes Gnu Linux utilisent une triple indirection. C'estàdire, que trois blocs successifs peuvent servir à pointer des adresses d'autres blocks pour le stockage du fichier. La copie des blocs avec la commande «dd» permet de sauvegarder un disque en entier, mais avec l'inconvénient de recopier aussi les blocs vides ou défectueux. La triple indirection Prenons un exemple, avec comme unité logique de stockage, un bloc logique de 1 Kilo Octet (1024 Octets). Les fichiers occupent au moins un bloc de données et leur taille est au minimum de un Kilo Octets. La taille maximale d'un fichier dépend de la taille d'un bloc logique (1 Kilo Octet), du nombre de niveaux d'indirection (simple, double ou triple) et du nombre d'adresses physiques que peut contenir un bloc d'indirection (256 @). Le mécanisme d'indirection s'appelle également l'adressage indirect. Trois niveaux d'indirection peuvent se succéder. Dans une indirection simple, l'adresse du bloc d'indirection pointe vers un bloc qui contient d'autres adresses (BLOCKADRESSES), et chacune des ces adresses (256) pointent vers un bloc de données (BLOCKDATA). Dans un indirection double, chacune de ces adresses pointent vers des blocs qui contiennent eux aussi d'autres adresses (256*256), lesquelles pointent enfin vers des blocs de données (BLOCKDATA). Dans une indirection triple, trois niveaux d'adresses se succèdent (256*256*256), avant de pointer vers des blocs de données (BLOCKDATA). La taille maximale d'un fichier est donc de (12+(256*256*256))*1024 = 17179881472 Octets =16 Go. La taille maximale d'un fichier est donc de (12+(126*126*126))*4096 = 8193589248 Octets =7,63 Go. !© Les services par Patrick Hautrive !;~) 2010 27 La triple indirection des adresses physiques vers des blocs d'adresses et des blocs de données 12 @ de bloc de données 1 @ de bloc de première indirection Pointant vers 256 @ de blocs de données 1 @ de bloc de double indirection Pointant vers 256 @ de bloc de première indirection Pointant vers 256 @ de bloc de données 1 @ de bloc de triple indirection Pointant vers 256 @ de bloc de première indirection Pointant vers 256 @ de bloc de double indirection Pointant vers 256 @ de bloc de données 12*1 Ko = 12 Ko 256*1 Ko = 256 Ko 256*1 Ko = 256 Ko 256*256*1 Ko= 64 Mo 256*1 Ko = 256 Ko 256*256*1 Ko= 64 Mo 256*64 Mo = 15,625 Go La table des inodes La table des inodes est stricto sensu la liste des inodes (ilist) qui se trouve dans le bloc de contrôle du cylindre (control block). Par contre, toutes les informations d'un fichier sont contenues dans le bloc inode qui lui est alloué. Ces informations sont appelées les informations de gestion des fichiers. L'enregistrement des informations de gestion d'un fichier occupe 128 Octets. Ainsi, la déclaration de 8 inodes occupe un bloc logique de 1024 Octets. La table des inodes au sens large est constituée de la liste des inode (ilist) et de tous ces blocs inodes qui sont utilisés pour enregistrer les informations des fichiers, lesquels pointent vers des blocs d'indirection ou vers des blocs de données. Comme le bloc zéro d'un disque est occupé par le MBR (Master Boot Record), et que le bloc un est occupé par l'enregistrement du Superbloc de la partition, la table des inodes commence à partir du bloc deux jusqu'à N (pour une liste de N1 inodes). Les blocs suivant, de N+1 à Z, sont consacrés à l'enregistrement des données brutes des fichiers (ou des adresses d'indirection). Les informations d'une inode Les données de gestion comprennent le type de fichier ( d b c l p s), les permissions du fichier (rwsrwSrwT), le nombre de liens physiques (hard links), c'estàdire le nombre de fichier portant de noms différents, mais pointant vers la même inode, le numéro d'identifiant du propriétaire (UID), le numéro d'identifiant du groupe propriétaire (GID), les adresses de 15 blocs physiques sur le disque, la taille du fichier (en octets), et les dates du fichier. Les adresses de blocs physiques sont au nombre de 15 au total. Les 12 premières peuvent contenir des données (12 @ DATABLOCK), tandis que les 3 dernières sont réservées pour une éventuelle redirection, si la taille du fichier l'impose, et contiennent les adresses de trois blocs physiques pour les indirections (3 @ INDIRECTION). La première adresse pointe vers un bloc pour une simple indirection, la deuxième adresse pointe vers un bloc pour une double indirection et la troisième adresse !© Les services par Patrick Hautrive !;~) 2010 28 pointe vers un bloc pour une triple indirection. Les dates du fichier sont la date de création, de déplacement ou de changement de nom (ctime), la date de la dernière modification (mtime) et la date du dernier accès en lecture (atime). Les données de gestion des fichiers dans la table des inodes (128 Octets) TYPE PERMISSIONS HARDLINKS UID GID @BLOCKS d b c l p s rwsrwSrwT Same inode 501 501 12 @ DATA Different names 3 @ INDIRECTION @ simple @ double @ triple Les exemples d'inodes ls li e2fsck f b 8193 /dev/hda2 /sbin/dump2fs /dev/hda | more readlink dd if=/dev/sda1 of=/home/pat/bloc1 bs=512 count=1 hd bloc1 man 8 sfdisk stat file.txt !© Les services par Patrick Hautrive !;~) 2010 29 SIZE DATES 1024 ctime mtime atime EXT2 La fragmentation La fragmentation d'un système de fichiers signifie qu'avec le temps, les blocs d'enregistrement des fichiers sont de plus en plus éparpillés. L'éparpillement des blocs pour un même fichier implique un accroissement des déplacements des têtes de lecture du disque, et donc à terme une usure plus importante des mécaniques, mais aussi des supports. L'idéal pour un fichier est d'avoir des blocs continus afin d'accélérer la lecture, mais aussi l'écriture. L'arborescence Les arborescences des systèmes de fichier ne sont pas toutes les même. L'arborescence d'un système de fichier dépend de l'organisation des fichiers et de la façon dont l'index est structuré pour conduire jusqu'au fichier. Par exemple une liste linéaire est simple, mais requière de lire à chaque fois toute la liste pour trouver le bon fichier. Les listes linéaires peuvent devenir rapidement déséquilibrée quand les fichiers sont majoritairement enregistrés toujours au mêmes endroits. La journalisation La journalisation d'un système de fichier consiste à faire passer toutes les écritures sur le disque par l'intermédiaire d'un journal. Dans un premier temps, les écritures sont enregistrées dans un journal, puis dans un deuxième temps, elles sont réalisées sur le disque, enfin, dans un troisième temps, quand l'écriture sur le disque s'est bien passée, elles sont supprimées du journal. Ainsi, les écritures peuvent être asynchrones et elles sont plus sécurisées par le journal qui évite, quand une écriture sur le disque s'est mal passée, de perdre des données. Enfin, en cas d'arrêt brutal du système, les écritures peuvent être poursuivies après le redémarrage du système. La journalisation accroit l'utilisation du temps processeur pour les écritures sur disques, mais c'est la contrepartie nécessaire pour obtenir un système de fichier plus sûr. La journalisation consiste en l'écriture d'un journal. A l'intérieur de ce journal sont enregistrées des informations qui peuvent être les méta data (meta data), l'ordre des écritures (ordered) et éventuellement les données elles même (data). En général, la journalisation consiste en l'écriture des méta data seulement. Parfois, ce sont les méta data et les données qui sont enregistrées (metadata + data). La journalisation pour Gnu Linux est disponible depuis les noyaux 2.4.16. !© Les services par Patrick Hautrive !;~) 2010 30 Les fichiers orphelins Les fichiers orphelins sont des noms de fichiers qui sont référencés dans l'arborescence du système de fichier, mais qui n'existe plus sur le disque dur. Par exemple, un lien symbolique est créé à partir d'un fichier. Quand l'utilisateur pointe sur le lien, celuici le conduit jusqu'au fichier source. Mais si le fichier source disparait, parce qu'il est supprimé ou parce qu'il est déplacé, alors, le lien est brisé et il ne pointe plus sur rien. Les spécifications de Ext2 Ext2 fait suite à Ext. Ext2 est aujourd'hui le système de fichier de référence sous Gnu Linux. Le système de fichiers Ext3 en est la version journalisée. Les spécifications de Ext2 représentent un compromis entre souplesse et rapidité. Le système de fichiers Ext2 correspond bien aux cas général, où la taille des fichiers est incertaine, quand elle varie mais restent dans une moyenne, quand les fichiers ne sont pas tous très petits, ni tous très gros, et que l'accès aux fichiers est diversifiés, quand ce n'est pas toujours les même qui sont lus, ni modifiés. Les spécifications de Ext2 Une fragmentation peu sensible Une arborescence en listes linéaires peu équilibrées Une racine de 32 To au maximum Des partitions de 4 To au maximum Des blocs logiques de un, de deux ou de 4 Kilo Octets Des tailles de fichiers de 4 Go au maximum Des noms de fichier long pouvant aller jusqu'à 256 caractères (un octet) Des inodes qui réservent 8 blocs continus La synchronisation des écritures La réservation d'une zone à l'usage de l'administrateur (root) La journalisation avec Ext3 La gestion des orphelin dans le répertoire /lost+found Le paquetage e3fsprogs requis pour son installation La disponibilité à partir du noyau 2.0.0 Un accès direct avec 12 blocs logiques pointant vers des blocs de données Une triple redirection (adressage indirect) La vérification du système de fichiers La vérification du système de fichiers est aussi importante que peuvent l'être les sauvegardes régulières. Le système de fichiers Ext2 est vérifié automatiquement après un certain nombre de montage. Le nombre de fois que le système de fichiers est monté, est enregistré dans le Superblock. !© Les services par Patrick Hautrive !;~) 2010 31 La commande “fsck” permet de vérifier un système de fichiers. Comme la commande “mkfs” qui permet de créer un système de fichiers, la commande “fsck” est un front end, c'estàdire que ces commandes font appel à d'autres commandes en fonction des situations, en l'occurrence, en fonction du type de système de fichier dont il est question. Par exemple, pour le système de fichiers ext2, les commandes spécialisées sont respectivement “fsck.ext2” et “e2fsck” pour la vérification et “mkfs.ext2” et “mke2fs” pour la création. Le démontage du système de fichiers est fortement préconisé, voire indispensable avant de lancer une vérification de son intégrité, parce que des écritures peuvent être lancées en même temps et causer des pertes, voire des dégâts irréparables. Ainsi le contrôle de la racine du système de fichier doit être réalisée au boot, ou avec une disquette de boot. Les fronts end pour Ext2 fsck mkfs > > fsck.ext2 mkfs.ext2 > e2fsck > mke2fs La configuration de Ext2 La configuration de Ext2 fait appel à de nombreuses commandes. La configuration de Ext2 Commands fsck fsck.ext2 e2fsck fsck.ext3 e3fsck reiserfs mkfs mkfs.ext2 mke2fs mkfs.ext3 mke3fs lsattr chattr df du dd Files tune2fs badblocks debugfs dump2fs e2image e2label resize2fs testdisk !© Les services par Patrick Hautrive !;~) 2010 32 Les exemples Ext2 Les exemples de Ext2 mkfs t ext2 options c v /dev/hda1 mke2fs b 1024 i 4096 c /dev/hda1 mke2fs j /dev/hda1 tune2fs j /dev/hda1 umount /dev/hda1 init 1 fsck /dev/hda1 fsck A fsck t ext2 fsck /mnt/partition3 e2fsck f b 8193 /dev/hda1 mkfs.xls /dev/hda6 mkfs.xfs jfs /dev/hda6 badblocks sv /dev/hda !© Les services par Patrick Hautrive !;~) 2010 33 REISERFS Les spécifications de reiserfs Les spécifications de reiserfs La disponibilité à partir du noyau 2.4.18 L'arborescence équilibrée La rapidité d'accès La journalisation des méta data La variabilité importante des échelles de grandeur (scalability) L'utilisation de l'algorithme de recherche et de trie performant (Btree) La taille des fichiers très grande (very large file) La taille minimum des fichiers de 4 Ko (very small file) Le nombre important de fichiers dans un même répertoire (lots of file) La non gestion des quotas Le nombre illimité des inodes La configuration de reiserfs La configuration de reiserfs Commands Files mkreiserfs reiserfsck fsck.reiserfs resize_reiserfs debugreiserfs !© Les services par Patrick Hautrive !;~) 2010 34 RAID Le RAID Le RAID (Redundant Array of Inexpensive Disks) consiste en un agrégat de partitions (type 0xFD). C'estàdire que plusieurs partitions seront traitées conjointement (Matrice) ou rassemblées pour ne former qu'un seul espace (Volume). Le RAID permet de créer une performance ou une tolérance de panne à l'aide d'une redondance dans la gestion des fichiers sur un disque. Ainsi, les données sont accélérées ou protégées. Quand elles sont protégées, les données sont susceptibles d'être éventuellement récupérées en cas de panne. Les RAIDS qui proposent une redondance des données permettent une maintenance des disques durs à chaud (hotplug), c'estàdire sans éteindre la machine, et sans interrompre le service (hors le temps nécessaire pour reconstituer les données). Le RAID peut être matériel ou logiciel. Le RAID matériel signifie qu'il existe un dispositif dédié comme une carte RAID. Le RAID logiciel signifie que les fonctions RAIDS sont compilées dans le noyau et que les procédures d'enregistrement sont effectuées par le contrôleur de disques de la carte mère. Le RAID logiciel est moins rapide et moins couteux. Le Volume Set est un RAID linéaire qui consiste à concaténer deux disques pour n'en former qu'un seul. Rappelons que la question n'est pas de savoir si un disque tombera en panne ou non, mais bien quand cela se produira. Les avantages du RAID Les avantages du RAID peuvent être de plusieurs sortes, en fonction du type de RAID. La duplication consiste en une double écriture (duplexing) des mêmes données simultanément sur deux disques différents (MIRRORING). Ainsi, si l'un des disques tombe en panne, l'autre est immédiatement opérationnel pour assurer la continuité de service. La duplication exige deux disques rigoureusement identique, même constructeur, même modèle, même capacité pour permettre l'échange instantané. Quand les disques sont placés sur des nappes différentes, avec des contrôleurs de disques différents, alors les enregistrements et les consultations bénéficient du parallélisme des contrôleurs. Le parallélisme des contrôleurs de disque permet l'accélération des lectures et des écritures sur plusieurs disques appartenants à des nappes différentes. L'écriture des données sur plusieurs bandes consiste en une répartition de la charge (STRIPPING). Dans ce cas de figure, il n'y a pas de redondance des données, seulement une recherche de performance. La tolérance de panne signifie qu'il y a une redondance dans les procédures d'écriture, à l'aide de bits de parité qui permettent de reconstituer les données réparties sur plusieurs bandes (PARITY). La tolérance de panne doit être répartie sur au minimum trois bandes différentes, dont l'une servira à enregistrer le bit de parité qui est calculé en fonction de la valeur des bits des autres bandes. Le bit de parité peut être enregistré toujours sur la même bande ou alterner avec les autres bandes, l'on parle alors !© Les services par Patrick Hautrive !;~) 2010 35 d'entrelacement de la parité (SHAKING). Certains RAIDS proposent également l'enregistrement d'une redondance dans la parité (DOUBLE PARITY), tandis que d'autres n'effectuent qu'une vérification de celleci (Parity check ECC et test XOR). Les trois bandes seront idéalement placées sur trois disques différents. L'une des meilleures solutions consiste à utiliser deux types de RAID en même temps. Un MIRRORING (raid 1) pour la partition système, qui doit toujours être en bon état de fonctionnement, et une PARITY (raid 5) pour la partition des données qui sont ainsi protégées efficacement contre le risque de panne, pour un cout tolérable. Les types de RAID Les principaux types du RAID Volume Set VOLUME (raid linéaire) RAID 0 STRIPPING (parallélisme et performance) RAID 1 MIRRORING (duplication ou duplexing) RAID 5 STRIPPING + PARITY (redondance de parité) RAID 6 STRIPPING + PARITY + SHAKING (entrelacement) RAID 10 STRIPPING + MIRRORING + PARITY + SHAKING A B A C A B A C E A C P A A B B C C La configuration du RAID La configuration d'un RAID requiert de préférence des disques identiques. La configuration du RAID Commands raidstart a raiddev man 5 raidtab mkraid raidtools Files /etc/raidtab /proc/mdstat !© Les services par Patrick Hautrive !;~) 2010 36 C D B D A B B D F B P E U W P P P P P D F V P Y P X Z LVM La gestion des volumes La gestion des volumes permet de s'abstraire des contraintes physiques des disques et des partitions. L'espace de stockage est géré par une couche logique supplémentaire (un niveau d'abstraction supérieur) qui permet de modifier les tailles à la volée de l'espace fonctionnel, mais sans procéder à un redimensionnement à chaud des partitions elle même. Le package LVM (Logical Volume Manager) est l'outil de gestion des volumes sous Gnu Linux, et il dispose de ses propres commandes pour l'administrer. Une fois décidée, la taille des blocs logiques ne peut plus être changé sur les disques, mais l'extension de l'espace par l'adjonction de disques est parfaitement géré. La version LVM2 introduit une nouvelle façon d'enregistrer les méta data qui est plus performante. Les concepts et l'organisation LVM Les concepts et l'organisation des volumes LVM PV (Physical Volume) VG (Volume Group) PE (Physical Extent) LV (Logical Volume) Les partitions réelles ou les disques entiers (type 0x8E). Les disques virtuels pouvant regrouper plusieurs partitions et disques. L'unité de stockage physique d'un VG (blocs logiques de 4 Mo). Les partitions virtuelles à l'intérieur d'un VG. La configuration de LVM La configuration de LVM Commands man 8 lvm man 8 pvcreate man 8 vgcreate clvmd readline vgcfgbackup pvcreate pvmove pvremove pvdisplay pvdata pvchange pvscan pvs vgchange vgck vgconvert vgcreate vgdisplay vgextend vgexport vgimport vgmerge vgmknodes vgreduce vgremove vgrename vgs vgscan vgsplit Files lvchange lvcreate lvdisplay lvextend lvmchange lvmdiskscan lvreduce lvremove lvrename lvresize lvs lvscan !© Les services par Patrick Hautrive !;~) 2010 37 man 5 lvm.conf /etc/lvm/lvm.conf $HOME/.lvm_histo ry Les exemples de LVM pvcreate /dev/hdb2 vgcreate VG0 /dev/hdb2 lvcreate L 2500 n LV0 VG0 pvdisplay vgdisplay lvdisplay /dev/VG0/LV0 !© Les services par Patrick Hautrive !;~) 2010 38 SWAP La pagination La pagination est le mécanisme qui permet d'accroitre la mémoire vive en recopiant des pages de celle ci dans un espace réservé sur le disque dur. Les pages inactives sont transférées dans l'espace d'échange pour libérer de la mémoire pour les processus en activité. La swap est une mémoire virtuelle d'appoint, et constitue une extension de la mémoire physique. Les pages des processus passent de la mémoire au disque, et vice versa, selon les besoins. La pagination peut être réalisée dans une partition dédiée ou dans un fichier. Les partitions de swap peuvent être parallélisées sur plusieurs contrôleurs de disques afin d'accélérer les entrées (écriture) et les sorties (lecture). L'espace adressable Pour les processeurs Intel (i 386) des ordinateurs compatibles IBM PC, les pages de mémoire sont de 4096 Octets. Un système de fichiers peut contenir jusqu'à 32 zones de swap différentes allant jusqu'à 4 Go d'espace de pagination. La PAE (Physical Adresse Extension) permet d'agrandir l'espace adressable afin de faire croitre l'espace de pagination (jusqu'à 64Mo pour les Pentium Pro du fondeur Intel). L'usage de la mémoire Le cache unifié représente une anté mémoire, c'estàdire que le système anticipe les besoins futurs des processus en chargeant en mémoire les pages adjacentes à celle qui est demandée, parce que statistiquement, s'y trouvent souvent des données qui seront également demandées, ainsi, cellesci sont déjà présentes en mémoire, prêtes à servir, ce qui accélère les traitements. Ainsi, la mémoire vive semble toujours utilisée à saturation avec la commande “free”, mais en réalité, c'est souvent le cache qui la remplie. Par contre, quand l'espace de la swap est comblée, c'est peut être le signe qu'il faille agrandir la swap, en attendant d'augmenter la mémoire physique, c'estàdire la RAM (Random Access Memory). La répartition entre la mémoire Ram et la Swap %use %total Kernel Processus Cache Disk Processus Physical Memory !© Les services par Patrick Hautrive !;~) 2010 39 Unused Swap La configuration de la swap La configuration de la swap Commands free sync Files mkswap swapon a swapoff s /etc/fstab /proc/swaps Un exemple de partition swap Un exemple de partition swap fdisk /dev/hda mkswap /dev/hda2 sync swapon /dev/hda2 free cat /proc/swaps echo “/dev/hda2 swap swap defaults,pri=2 0 0” >> /etc/fstab Un exemple de fichier swap Un exemple de fichier swap touch /swap dd if=/dev/zero of=/swap bs=1024 count=10240 dd if=/dev/zero of=/swap bs=1024 count=32768 dd if=/dev/zero of=/swap bs=1024 count=65536 mkswap /swap chmod 600 /swap sync swapon /swap echo “/swap none swap sw 0 0” >> /etc/fstab swapoff rm /swap Les exemples de swap swapon a ; swapoff s swapon p2 /swap mkswap c 32768 ; rm Rf /swap !© Les services par Patrick Hautrive !;~) 2010 40 MOUNT Le montage Les systèmes de fichiers doivent être montés (mount) dans l'arborescence racine pour être accessibles. Inversement, ils doivent être inutilisés afin de pouvoir être démontés (umount). Les systèmes de fichiers montés peuvent être locaux, ou distant via le réseau. Le système de fichier racine est monté en lecture seule par le chargeur de démarrage (initrd) et en lecture et écriture (read and write) par le noyau (kernel) lors de la procédure d'initialisation du système. En général, les autres systèmes de fichiers sont montés automatiquement (sysinit) pour le niveau d'initialisation graphique (runlevel 5). Les autres types de systèmes de fichier doivent être reconnus par le noyau, c'estàdire que le noyau doit être compilé avec les fonctionnalités (module) correspondant aux systèmes de fichiers requis. La commande “mount a” lit le fichier de configuration “/etc/fstab” où sont répertoriés tous les systèmes de fichiers à monter. Les points de montage Les systèmes de fichiers sont montés dans l'arborescence sur des points de montage qui sont des répertoires. Ces répertoires doivent avoir les droits qui conviennent pour l'utilisateur qui s'en servir pour monter un système de fichiers. La commande “mountpoint” permet de connaitre si un répertoire est un répertoire actuel de montage. L'auto montage L'auto montage est un mécanisme qui permet de monter automatiquement tous les systèmes de fichiers qui se trouve dans le fichier “/etc/fstab”. Ainsi l'utilisateur qui n'a pas les droits root peut accéder aux fichiers dès sa connexion. Il existe trois mécanismes d'auto montage (AMD, AUTOFS et SUPERMOUNT). L'auto montage permet également de monter automatiquement les périphériques amovibles comme un lecteur de CDROM ou une clef USB. L'auto montage “supermount” est script Perl qui requiert que le langage interprété Perl soit installé. La configuration de mount Le montage d'un système de fichier doit prendre en compte le point de montage, le type de système de !© Les services par Patrick Hautrive !;~) 2010 41 fichier, qui doit être reconnu par le noyau (module) et les attributs de montage. La configuration de mount Commands mount umount disklabel exportfs cryptdir mountpoint autofs supermount sync fdisk growfs fsck debugfs man 8 mount /dev/MAKEDEV man MAKEDEV mknod dumpfs tune2fs e2label Files /etc/fstab /etc/mtab /proc/mounts /proc/filesystems /proc/ide /proc/swap Un exemple autofs Un exemple d'auto montage avec autofs urpmi autofs /usr/lib/autofs man 5 autofs man 8 automount cd /usr/libautofs cp sample/auto.master /etc cp sample/auto.misc /etc cp sample/rc.autofs /etc/rc.d/init.d/ echo “/automount /etc/auto.misc –timeout=60” >> /etc/auto.master vi /etc/auto.misc net fstype=nfs,rw,nosuid poste:/net cdrom fstype=iso9660,ro,nosuid,nodev :/devcdrom floppy fstype=auto :/dev/fd0 sources fstype=nfs,soft server:/sourcesnfs /etc/rc.d/init.d/autofs status /etc/rc.d/init.d/autofs restart modprobe autofs modprobe autofs4 ps aux | grep automount ls /automount/cdrom vi /sbin/init.d/boot.local vi /etc/rc.d/rc.local modeprobe autofs autofs !© Les services par Patrick Hautrive !;~) 2010 42 Les exemples de mount fdisk l ; cat /proc/mounts /dev/MAKEDEV v audio ext2rsize /dev/fd0 500000 fuser vm /dev/hda5 mount o check=strict t msdos /dev/hda5 /dos mount t ext2 /dev/hda3 /disk mount o conv=auto t vfat /dev/fd0 /floppy mount o ro t iso9660 /dev/cdrom /cdrom fsck c ext2 /dev/hda3 mount t nfs o timeo=20,intr server:/share /nfsshare mount t reiserfs /dev/hda6 /mnt/hda6 mount /mnt/hda6 o remount,rw supermount enable supermount disable echo “/dev/floppy /mnt/floppy supermount fs=vfat,dev=/dev/fd0” >> /etc/fstab ls al /dev/.devfsd !© Les services par Patrick Hautrive !;~) 2010 43 OSI L'architecture OSI Le modèle OSI (Open Systems Interconnection) l'organisme de normalisation ISO (International Standard Organisation) est un modèle théorique qui présente une méthode générale pour l’interconnexion des systèmes ouverts. Selon le modèle OSI, le processus de transmission des données sur un réseau est décomposé en plusieurs étapes, dans un ordre bien déterminé. Le modèle OSI distingue 7 étapes fondamentales, et décompose le processus de transmission des données en 7 couches. Le modèle IEEE 802, en date de février 1980, est une version améliorée du modèle OSI. En 1984, l’ISO publia une mise à jour du modèle OSI qui devint dès lors une norme internationale. Chaque couche a une fonction bien précise dans le processus de transmission des données. A chacune de ces couches correspond la réalisation d’une ou de plusieurs tâches, et plusieurs cas de figure sont envisageable. Soit, une tâche est réalisée par un seul protocole, soit, toutes les tâches d’une couche OSI sont réalisées par un seul protocole, soit, plusieurs tâches appartenants à différentes couches OSI sont réalisées par un seul protocole, soit, toutes les tâches de plusieurs couches OSI sont réalisées par un seul protocole. Ainsi, les spécifications du modèle OSI sont respectées, mais la délimitation de chaque couche ne l’est pas forcément. Dans le processus de transmission, les données «traversent» la pile de protocoles, mais le nombre de protocoles constituants la pile n’est pas obligatoirement égale au nombre de couches du modèle OSI. La théorie ne correspond pas exactement à la réalité. Les couches du modèle OSI correspondent plus ou moins aux couches d’une pile de protocoles. Les couches basses (1 & 2) spécifient la manière dont les matériels sont connectés, tandis que les couches hautes (7 à 3) énoncent les règles de communication. Les opérations des couches hautes sont plus complexes que celles des couches basses. Le modèle OSI Layers 7. APPLICATION Fonctions Informations pour initier ou accepter une requête réseau (affichage) 6. PRESENTATION Informations de formatage, de conversion, de cryptage (structure) 5. SESSION Informations de connexion de départ d’un paquet (synchronisation) 4. TRANSPORT Informations de segmentation, ordre, réception des paquets (fragmentation) 3. RESEAU Informations d’adressage au paquet (routage) 2. LIAISON Informations de contrôle d’erreurs des trames (CRC) et queue (empaquetage) 1. PHYSIQUE Missions des trames sur le réseau en forme de flux de bits bruts (impulsion) !© Les services par Patrick Hautrive !;~) 2010 44 La comparaison des piles de protocoles La comparaison des piles de protocoles permet de se faire une vue d'ensemble de l'architecture réseau des différents protagonistes. Les recommandations du modèle OSI et les sept couches ne sont pas toujours respectées. Toutefois, le modèle OSI reste le canevas théorique qui peut servir d'exemple et d'échelle de comparaison. La pile de protocole Tcpip (tcpip stack) est universellement reconnue par les différentes architectures, parce que c'est une implémentation libre et éprouvée, et parce que c'est l'architecture du réseau internet. La comparaison des piles de protocoles Modèle OSI TCPIP Windows™ NT Application NFS FTP SNMP Redirecteur Presentation XDR SMTP RIP ARP POP3 OSPF Session PPP IMAT ICMP Transport TCP Network IP Pilotes LAN Couche MAC Liaison Apple Serveur NetWare AppleShare TDI NCP AFP Tube NetBIOS NWLink NBT DLC ASP ADSP ZIP PAP ATP NBP AEP RTMP SPX TCP NDIS 4.0 DDP IPX Pilotes LAN Pilotes LAN IP Wrapper Local Token Ether Couche NDIS ODI NDIS Talk Ring Talk MAC Physique La carte réseau La communication client serveur La communication client serveur est un échange entre deux ordinateurs, l'un joue le rôle du client et l'autre joue le rôle du serveur. Parfois les rôles s'intervertissent. La communication client serveur Client connect receive (ack) send (request) receive (response) disconnect Network 1 4 5 8 9 > < > < > Server 2 3 6 7 10 !© Les services par Patrick Hautrive !;~) 2010 45 listen send (ack) receive (request) send (response) close connexion Les RFC Les RFC (Request For Comments) sont des documents techniques qui décrivent les mécanismes des technologies utilisés sur internet et dans les réseaux en général. Ce sont des documents qui explicitent en détail le fonctionnement d'un protocole ou d'une norme et qui font référence pour les constructeurs de matériels, les opérateurs, les administrateurs et les professionnels des réseaux et de l'industrie informatique. Les RFC sont numérotés dans leur ordre historique d'apparition, de la plus anciennes à la plus récentes. Des sites spécialisés proposent la consultation en ligne de ces documents. Les RFC (Request For Comments) RFC 768 UDP RFC 791 DARPA RFC 792 ICMP RFC 793 TCP RFC 821 SMTP RFC 822 MAIL RFC 950 SUBNET RFC 977 NNTP RFC 1058 ROUTING IP RFC 1178 DOMAIN NAME RFC 1180 TEACHING TCPIP RFC 1208 GLOSSARY RFC 1219 ADDRESSING RFC 1234 ROUTING IPX RFC 2196 SECURITY RFC 1597 PRIVATE NETWORK Les environnements réseaux hétérogènes L’hétérogénéité des réseaux provient de la cohabitation plus ou moins heureuse des nombreux fournisseurs qui se battent ou s'entendent pour conquérir des parts de marchés et imposer leurs normes. Les éditeurs de système d’exploitation réseau développe des API (Application Program Interface) qui leur sont propres, les constructeurs de machines conçoivent des architectures propriétaires, les fondeurs de processeurs mettent au point des instructions processeurs particulières, les organismes de régulation s'apparentent parfois à des consortiums de multinationales et de services spéciaux des états qui revendiquent le contrôle de l'univers numérique et le monopole des nouvelles technologies. Les normes des protocoles réseaux ne sont pas toujours suivies, les technologies suivent des processus de création et de validation qui sont privés, le cycle de vie des produits est court et incertain, les constructeurs de matériels essayent de favoriser leurs produits et utilisent les techniques de commercialisation et de fidélisation “moderne”, basé sur la dépendance, l'influence des lobbyistes, les progrès de la sociologie de groupe et les neurosciences. La plus part des réseaux hétérogènes combinent les architectures, les technologies, les protocoles, les systèmes et les logiciels. !© Les services par Patrick Hautrive !;~) 2010 46 Les réseaux hétérogènes Computers Mini Processors Constructors Cryptography Langages Main Frame CELLS IBM Vigenere Assembler Delphi Editors Microsoft Systems Windows NetBEUI Servers Nfs RISC C C++ DES MD5 CHA PGP Java Sql Php Shell IPV6 3com Asymetric Ruby ITU Python OSI Oracle Netware OS/2 UDP XNS SPX/IPX Ssh Apache Postfix Smtp Ring Ethernet LAN MAN WAN Extranet Client Server Private Public FDDI VPN Bus Star Peer to Peer Intranet DMZ ADSL RNIS Unices RFC Asus Novell Ftp RTC RSA IEEE 802 EIA 568 IPV4 Protocols Lines Macintosh™ CISC Cesar ANSI Networks Blade HP Sun Intel Dell Motorola Xerox Nokia Sony Normes Topology Terminal IBM PC Bsd Unix™ X.25 ATM Community Apple Gnu Linux Mac OS TCP/IP Apple Talk Pop Bind Mysql Internet Transmission Analogical Broadband Digital Baseband Supports Coaxial UTP/STP Fiber Connectors BNC AUI DIX RJ11 RJ45 USB Serie Wifi LPT FIRE Slots ISA EISA MCA PCI PCX AGP RAM VGA DVI Methods Concentrators Collision Prevention Hub Switch Jeton MAU A/Synchronous Commutation Radio Spectral Microwave Priority CSUDSU Bridge Canals Router !© Les services par Patrick Hautrive !;~) 2010 47 Satellite Modem Firewall Laser Sneakernet Gateway TCP/IP Le protocole TCP/IP Le protocole Tcpip est le protocole d'échange de données sur internet et sur la plupart des réseaux intranet. Le protocole Tcpip se compose de deux protocoles distincts, le protocole TCP et le protocole IP. Le protocole TCP (Transport Control Protocol) assure le transport des messages sur le réseau et correspond à la couche TRANSPORT du modèle OSI. Le protocole IP (Internet Protocol) assure l'adressage des messages et correspond à la couche RESEAU du modèle OSI. Le protocole TCP est un protocole de commutation de paquets routés dans le maillage des routeurs du réseau internet. Les paquets (packets) sont découpés (segments), encapsulés (datagrammes) et véhiculés (trames) selon l'état du trafic (trafic), et empruntent le chemin (route) le plus directe ou le plus rapide. En théorie, un paquet peut très bien traverser l'atlantique pour arriver chez votre voisin. Le protocole Tcpip est un protocole de connexion, c'estàdire que les messages ne sont pas simplement envoyés. L'émetteur entame toute une procédure de connexion avec le destinataire. Les échanges sont systématiquement vérifiés (check) et réceptionnés (ack), et parfois, ils sont même synchronisés (sync) et contrôlés (control). Autrement dit, l'expéditeur d'un paquet attend un retour de la part du destinataire. La commande “man tcp” présente la mise en œuvre du protocole de connexion TCP. La commande “man udp” présente la mise en œuvre du protocole non connecté UDP. La commande “man ip” présente la mise en œuvre du protocole d'adressage IP. L'histoire de TCP/IP Le protocole TCP/IP (Transport Control Protocol / Internet Protocol) est le plus connu des protocoles parce que c’est celui qui est employé sur le réseau des réseaux, c’est à dire internet. Historiquement, TCP/IP présentait deux inconvénients majeurs, sa taille et sa lenteur. Le protocole TCP/IP fait partie intégrante du système d’exploitation BSD 4.2 et des systèmes Unix™ depuis le milieu des années 1970. Auparavant, c’était le protocole UUCP (Unix to Unix Copy Program) qui était employé pour copier des fichiers et des messages électroniques entre deux machines. Le protocole TCP/IP est une norme ouverte, c’est à dire que les protocoles qui constituent la pile de protocoles TCP/IP ont été développés par des éditeurs différents sans concertation. Le groupe de travail IETF (Internet Engineering Task Force) a rassemblé les différents protocoles de la pile TCP/IP pour en faire une norme. Le travail de l’IETF est régulièrement soumis à l’ensemble de la «communauté internet» dans des documents appelés RFC (Request For Comments). Les RFC sont considérées comme des brouillons parce que les spécifications qu’elles contiennent peuvent à tout moment être !© Les services par Patrick Hautrive !;~) 2010 48 réexaminées et remplacées. La pile TCPIP La pile TCP/IP est une pile de protocoles relativement volumineuse et sa vitesse d’exécution et de transmission des paquets est comparable à SPX/IPX. Le protocole TCP/IP est devenu la référence à partir de laquelle sont évalués les autres protocoles. La pile de protocole TCP/IP est la plus riche fonctionnellement. La pile TCPIP est relativement volumineux, mais rapide. Le protocole TCP/IP est un protocole en mode datagramme (commutation de paquets) avec connexion( ack+sync) et perte (TTL). Le protocole IP dispose de fonctions standardisées, les «API sockets» qui se comportent de la même façon sur tous les types de matériels. Les sockets sont des mécanismes qui permettent la communication inter processus distant. C'estàdire que les sockets assurent l'échange de données entre différents processus appartenant à des systèmes différents reliés par le réseau. Le mécanisme des socket existe depuis 1969 avec Unix™ BSD 4.2 de l'université de Berkeley. La pile TCP/IP est très répandue et très fonctionnelle, mais assez compliqué et assez volumineux. En fait, l’inconvénient majeur provient de son succès, et de la diminution du nombre des adresses IP disponibles, en attendant la version IPV6 appelé aussi IPNG. La pile TCPIP est une norme industrielle. Tous les réseaux reconnaissent les protocoles TCP/IP et correspond à un standard pour la communication inter réseau et particulièrement entre des réseaux hétérogènes. La pile TCPIP assure l'interopérabilité entre les systèmes hétérogènes. Le protocole TCPIP est un protocole routable. De nombreux protocoles ont été développés pour la pile TCPIP, que ce soit pour la gestion des adresses physiques du réseau (arp), le routage (rip et ospf), la réception des mails (pop3 et imap4), l'envoie de mail à un serveur de messagerie (smtp), le transfert de fichier (ftp), ou la surveillance des réseaux (snmp). Le protocole ARP (Address Resolution Protocol) permet de retrouver l'association entre l'adresse IP (@ip) et l'adresse MAC d'une machine (@mac). Le protocole RARP (Reverse Address Resoltion Protocol) permet de faire l'inverse, c'estàdire retrouver à partir de l'adresse MAC (@mac) l'adresse IP (@ip) d'une station. !© Les services par Patrick Hautrive !;~) 2010 49 Les protocoles de la pile TCP/IP Name Fonction SSH SSH (Secure Shell) pour se connecter en mode sécurisé à un serveur ssh UDP UDP (User Datagram Protocol) protocole non connecté sans contrôle de flux (no ack) HTTP HTTP (Hyper Text Transfer Protocol) affiche les pages HTML FTP FTP (File Transfer Protocol) s’occupe des transferts de fichiers TELNET TELNET permet d’établir une connexion non sécurisé à un hôte distant DHCP DHCP (Dynamic Host Configuration Protocol) TCP TCP (Transport Control Protocol) assure la segmentation et la transmission des paquets IP IP (Internet Protocol) gère les adresses logiques des nœuds (address) ARP ARP (Address Resolution Control) associe les adresses IP et physiques MAC (@mac) RARP RARP (Reverse Address Resolution Control) associe les adresses MAC et IP (@ip) RIP RIP (Routing Internet Protocol) trouve la route la plus rapide (route) OSPF OSPF (Open Shortest Path First) est une amélioration de RIP, plus rapide et plus fiable ICMP ICMP (Internet Control Message Protocol) gère les erreurs et les réponses (ping) BGP/EGP BGP/EGP (Border Gateway Protocol / Exterior Gateway Protocol) sécurise les réseaux SNMP SNMP (Simple Network Management Protocol) permet de gérer les matériels réseaux PPP PPP (Point to Point Protocol) permet d’établir une connexion distante par téléphone NFS NFS (Network File System) pour partager des fichiers sur le réseau DNS DNS (Domain Name Service) pour la résolution des noms de domaine NIS NIS (Network Information Service) centralise les informations d'un réseau (nis domain) NNTP NNTP (Network News Transport Protocol) SMTP SMTP (Simple Mail Transport Protocol) pour envoyer des courriers électroniques POP3 POP3 (Post Office Protocol version 3) pour récupérer son courrier électronique IMAP4 IMAP4 (Internet Message Advertising Protocol version 4) pour recevoir son courrier !© Les services par Patrick Hautrive !;~) 2010 50 L'entête TCP L'entête TCP permet le transport des paquets. L'entête TCP est de 40 Octets. Certaines informations des entêtes sont importantes comme les drapeaux (flags) qui permettent de configurer la communication. Par exemple, TTL (Time To Live) indique le nombre maximal de saut de routeurs, MSS (Maximum Segment Size) indique la taille maximale des segments, ou IRTT (Initial Round Trip Time). Les initiales ont une signification: U ( up), H (host), G (gateway), D (dynamic) et M (modified). L'entête TCP (40 Octets) Le contrôle des erreurs avec réexpédition (check) Le contrôle des séquences avec réassemblage (order) Le contrôle de flux avec des “fenêtres de tir” (timing) L'accusé de réception (ack) Le port de la source émettrice (sport) Le port de destination (dport) Le numéro de séquence des données (sequence) Le numéro de l'accusé de réception (ack number) La taille de l'entête TCP (data offset) Le drapeau de contrôle (control) La fenêtre de tir (window) Le total de contrôle de l'entête TCP (tcp checksum) Le pointeur d'urgence (urgent) Les options éventuelles comme la taille maximale (options) L'entête IP L'entête IP (20 Octets) permet l'adressage et le routage des paquets ou des trames sur le réseau TCP/IP. !© Les services par Patrick Hautrive !;~) 2010 51 L'entête IP (20 Octets) La version du protocole IPV4 ou IPV6 (ipv4) La longueur de l'entête IP (length) Le type de service prioritaire ou non (service) La longueur totale du paquet (total) L'identification du paquet ou le numéro de séquence des données (sequence) Les informations de défragmentation (defrag) Le nombre de sauts de routeurs encore possible (TTL) Le nom du protocole de transport (tcp) Le calcul de la parité de contrôle de l'entête IP (ip checksum) L'adresse IP de l'ordinateur émetteur (@source) L'adresse IP de l'ordinateur de destination (@target) Les options éventuelles (options) Les classes d'adresse IP Classe A Classe B Classe C Classe D Classe E (voir Le networking) !© Les services par Patrick Hautrive !;~) 2010 52 NETWORK La configuration du réseau La configuration réseau dépend d'un grand nombre de facteurs, comme de l'architecture réseau, du mode de transmission, du type de ligne, de la topologie, de la méthode d'accès au réseau, des protocoles, des systèmes, des distributions Gnu Linux, de l'organisation hiérarchique des services, de l'adressage des sous réseaux, et des dispositifs de routage et de filtrage de l'infrastructure. La configuration du réseau Commands ifconfig iwconfig route ping netstat nslookup traceroute vmstat tcpdump hostname ssh service dhcpclient ifrename dhclientscript dhclient.conf dhclient.leases dhcpeval dhcpoptions servicesadmin iwconfig ifup man tcp ifdown man ip arp man udp rarp man route ethtool man ifconfig named man ipchains ntpdate man iftab man ethtool man uri Files /etc/inittab /etc/hostname /etc/hosts /etc/host.conf /etc/hosts.allow /etc/hosts.deny /etc/iftab /etc/networks /etc/services /etc/named.pid /etc/named.boot /etc/resolv.conf /etc/nsswitch.conf /etc/network/interfaces /proc/sys/net/ipv4 /etc/sysconfig/network /etc/sysconfig/network.scripts /etc/init.d/networking /etc/rcS.d/S40networking /proc/net/route /proc/net/rt_cache /etc/dhcp3/dhclient.conf Les noms de domaine La résolution des noms de domaine (domain name) consiste à associer le nom d'une machine à son adresse IP (@ip). La résolution des noms de domaine peut s'effectuer localement dans le fichier “/etc/hosts”, ou par le réseau, via un serveur DNS (Domain Name Service) ou un serveur NIS (Network Information Service). L'ordre de recherche pour la résolution est indiqué dans le fichier “/etc/host.conf”. Quand c'est un serveur qui résout les noms de domaine, son adresse IP est spécifié dans le fichier “/etc/resolv.conf”. Le serveur “named” ou BIND (Berkeley Internet domain Name) est le serveur de nom de domaine, et le fichier “/etc/named.boot” est le fichier de configuration. La résolution d'une adresse IP en nom de domaine s'appèle la résolution DNS inverse (reverse dns). Dans un LAN (Local Area Network), les noms de domaine peuvent s'écrire simplement avec le nom de !© Les services par Patrick Hautrive !;~) 2010 53 la machine (hostname). Mais, dans le cadre d'un réseau plus vaste, le nom de domaine pour identifier une machine doit être complet et s'écrire dans le format FQDN (Full Qualified Domain Name) comportant le nom de la machine, le nom du domaine local, et se terminant par le nom hiérarchique du domaine internet ou TLD (Top Level Domain) Le fichier /etc/hosts Le fichier de résolution locale des noms d'hôtes /etc/hosts (@ip hostname.domain.tld) 127.0.0.1 127.0.0.1 192.168.1.2 192.168.1.7 localhost.localdomain.tld loopback localhost machine.domain.org server.domain.org machine machine server Le fichier /etc/networks Le fichier de résolution des noms de sous réseaux /etc/networks (subnetname @subnets) default localnet loopnet here there faraway domain 0.0.0.0 127.0.0.0 127.0.0.0 192.168.1.0 192.168.2 10.10.10.0 c1 192.168.1 Le fichier /etc/host.conf Le fichier d'ordre de la résolution des noms d'hôtes /etc/host.conf (/etc/hosts, named) order host,bind,nis multi on nospoof on alert on Le fichier /etc/resolv.conf Le fichier des serveurs DNS resolver de noms de domaine /etc/resolv.conf (nameserver @subnets) search domain nameserver nameserver nameserver domain.tld here.org 212.27.32.176 212.27.32.177 192.168.1.1 !© Les services par Patrick Hautrive !;~) 2010 54 Le fichier /etc/named.boot Le fichier /etc/named.boot (named) directory cache primary primary /var/named . named.ca domain.tld named.host 172.266.12.inaddr.arpa namedrev Le fichier /etc/sysconfig/network Le fichier de configuration des interfaces réseaux /etc/sysconfig/network (VARIABLE=Value) NETWORKING HOSTNAME GATEWAY GATEWAYDEV DOMAINNAME FORWARD_IPV4 NISDOMAIN = = = = = = = yes hostname.domain.tld 192.168.1.1 “eth0” here.org true nisdomain Le fichier /etc/ network/interfaces Le fichier /etc/network/interfaces (Debian) # The loopback network interface auto lo iface lo inet loopback # The primary network interface allowhotplug eth0 iface eth0 inet static address 10.0.2.155 netmask 255.255.255.0 network 10.0.2.0 broadcast 10.0.2.255 gateway 10.0.2.254 #ifconfig eth0 down #ifconfig eht0 up #/etc/init.d/networking restart !© Les services par Patrick Hautrive !;~) 2010 55 La configuration PPP La configuration PPP Commands /sbin/ipppd chat isdnctrl dial ppp0 minicom isdnctrl hangup ppp0 imon imontty seyon kppp pppstats wvdial Files dh_installppp plog poff pon pppconfig pppd pppdump pppoeconf eagleusbutils PPP Howto /etc/ppp/ioptions man pppd /etc/ppp/papsecrets /etc/ppp/chapsecrets /etc/ppp/connecterrors /var/log/chat.log /var/log/pppd.log Les exemples réseaux http://www.yolinux.com/TUTORIALS/LinuxTutorialNetworking.html ping 127.0.01 ; ping 192.168.1.2 ; ping 192.168.1.254 ifconfig – a ifconfig eth0 down ifconfig eth0 192.168.1.2 broadcast 192.168.1.255 netmask 255.255.255.0 up netstat nr route add net 192.168.1.0 netmask 255.255.0.0 route add 192.168.1.1 route add default netmask 0.0.0.0 ppp0 route add default gv passerelle.domain.tld route add default gv 192.168.1.254 route del 192.168.1.254 1 #Metric Gateway flag 1=external 0=local dhcpclient eth0 ifconfig plip machineonetoone machineone2one /etc/rc.d/init.d/dhcpd restart /etc/rc.d/init.d/network restart vi /etc/networking/interfaces (Debian) netstat lnp –ip netstat ac netstat ta netstat i w3m http://10.0.2.111:80 aptget install ntp iwconfig !© Les services par Patrick Hautrive !;~) 2010 56 FIREWALL Le pare feu Le pare feu ou bastion (firewall) est un dispositif à l'entrée d'un sous réseau qui filtre les paquets entrants et sortant. Le dispositif peut être un routeur sophistiqué ou une station dédiée. Le pare feu dispose toujours d'au moins deux cartes réseaux, une pour chaque sous réseau. Le pare feu enregistre les trames et analyse les informations contenues dans les entêtes (@ip source, @ip destination, numéro de port source, numéro de port de destination, types de protocoles), et fonction des règles qui lui ont été assignées, le pare feu transmet ou rejette le paquet TCP/IP. Les pare feux permettent de mettre en place des zones protégées, comme les DMZ (Demilitirized Zone). Les pare feux sont répertoriés en différentes catégories, selon la fonction qu'ils opèrent. Les pare feux qui protègent un sous réseau sont appelés des remparts (bastion). Les pare feux qui filtrent et routent les paquets sont appelés des routeurs (screening). Les pare feux qui servent de cache internet comme le logiciel libre Squid sont appelés des serveurs de caches (proxy). Les pare feux qui font de la translation d'adresse sont appelés des serveurs de mascarades (masquerading). La mascarade Un pare feu est également capable de faire de la mascarade, c'estàdire la réécriture des adresses ip et des numéros de port sources, afin d'expédier les paquets sous sa propre identité, puis en recevant les réponses, le pare feu changent à nouveau les adresses et les ports, pour transmettre les paquets à la station d'origine. Ainsi, la mascarade permet de partager une connexion à internet et en même temps de conserver l'anonymat des véritables expéditeurs. Ce mécanisme de mascarade est aussi dénommé NAT (Network Address Translation). Les documentations NAT Howto et IPCHAINS Howto présentent les différentes implémentations des pare feux. Le proxy Un pare feu peut également servir de serveur Proxy, c'estàdire de serveur internet et de cache. Le cache consiste à conserver une copie des pages qui sont demandées et livrées, et quand les même page sont une nouvelle fois demandées, et qu'elle n'ont pas été mise à jour depuis la dernière requête, d'être alors en mesure de les livrer immédiatement, sans attendre la réponse du serveur sur internet. Les logiciels de pare feux Il existe plusieurs programmes permettant de mettre en œuvre un pare feu. !© Les services par Patrick Hautrive !;~) 2010 57 Les logiciels de pare feux Ipfw Ipfwadmin Pf Ipmasq Ipchains Netfilter IP Firewall IP Firewall Administration Packet Filter des systèmes BSD IP Masquerading Gnu Linux kernel 2.2 Gnu Linux kernel 2.4 (#iptables) Les protocoles de routages Il existe plusieurs protocoles de routages des paquets et ils se distinguent selon qu'ils routent les paquets à l'intérieur d'un sous réseau privé (RIP, HELLO, OSPF), ou selon qu'ils routent les paquets vers l'extérieur sur le réseau public internet (EGP, BGP). Un exemple de pare feu Station Router Internet Provider Modem Firewall Routeur LAN DMZ L'adressage en sous réseaux Un exemple d'adressage de sous réseaux Class B Class C 8 Subnets 192.168.1.0 192.168.1.32 192.168.1.64 192.168.1.96 192.168.1.128 192.168.1.160 192.168.1.192 192.168.1.224 Net (16) + Subnet (6) + Host (10) 64 Subnets (2^6) with 1024 hosts (2^10) Sub Mask 255.255.252.0 Subnet Hosts (322) Subnet Broadcast 1 to 30 192.168.1.31 32 to 62 192.168.1.63 64 to 94 192.168.1.95 96 to 126 192.168.1.127 128 to 158 192.168.1.159 160 to 190 192.168.1.191 192 to 222 192.168.1.223 224 to 254 192.168.1.255 !© Les services par Patrick Hautrive !;~) 2010 58 La configuration d'un pare feu La configuration d'un pare feu Firewalls armoiptables ferm fiaif filtergen fireflierclientgtk fireflierserver firehol firestarter firewall fwanalog fwbuilderlinux guarddog ipkungfu knetfilter lokkit mason netscript pyroman shorewall uruk uif ufw Netfilter Files ipchains iptables iptstate ipmasq ipmasqadm ipfwadm iproute ipacng knetfilter !© Les services par Patrick Hautrive !;~) 2010 59 PRINT L'impression Les travaux d'impression sont enregistrés dans un répertoire appelé indifféremment une “imprimante”, ou file d'attente (spool). Le répertoire de Spool peut être un répertoire local ou distant sur un serveur d'impression. Les travaux d'impression proviennent généralement d'une application qui a été configurée pour proposer l'impression avec un ou plusieurs périphériques d'impression. Le document de l'application est conditionné selon le format de l'application. Afin d'être convenablement imprimé par le périphérique d'impression, le document doit être préparé ou formaté selon le langage de l'imprimante. Le langage du périphérique d'impression s'appèle un langage de description de page ou PDL (Page Description Language). C'est le pilote d'impression (driver) ou le serveur d'impression (daemon) installé sur chacun des postes de travail qui réceptionne les travaux d'impression, les formate (filter) et les redirige vers la file d'attente (spool) du périphérique d'impression (printer). Le périphérique d'impression (device) imprime les travaux d'impression (jobs) selon leur ordre d'arrivée FIFO (First In first Out) ou de priorité (priority). Un répertoire de SPOOL (Simultaneous Peripheral Operation Off Line) peut être lié à plusieurs périphériques, et/ou plusieurs répertoires de spool peuvent être liés au même périphérique d'impression. Les documentations Printing Howto et Apsfilter Handbook décrivent l'installation et la configuration de l'impression pour les systèmes Gnu Linux. Le fichier PRINTCAP (Printer Capabilities) rassemble toutes les configurations des imprimantes d'une station Gnu Linux. Le fichier spécial de périphérique “/dev/lp1” représente la première imprimante d'un système Gnu Linux. L'impression d'un document doit tenir compte des polices de caractères (fonts), de la table de codage des caractères (unicode) et du langage de description de page du périphérique d'impression (language). Le processus d'impression System Document Driver Filter Application Fonts Daemon Spool Spool Daemon PDL Network Printer Printer Paper Paper Les systèmes d'impression Les systèmes Unices disposent de plusieurs systèmes d'impression. Le système d'impression est constitué d'un serveur (daemon) qui attend les demandes d'impression lancées par les utilisateurs (jobs), et qui, en fonction du fichier de configuration (configuration file), et après une éventuelle conversion du format (filter), les redirige vers la file d'attente (spool) du périphérique d'impression (device). !© Les services par Patrick Hautrive !;~) 2010 60 Les systèmes d'impression des systèmes Unices System Name System V Unix™ AT&T LPD (Line Printer Daemon) Command lp System BSD 4.4 LPRng (Line Printer New Generation) lpr System Gnu Linux CUPS (Common Unix Printer System) Daemon lpd cupsd L'impression CUPS Le système d'impression CUPS (Common Unix Printer System) est le système privilégié des systèmes Gnu Linux. Le système d'impression Cups utilise le protocole IPP et le langage de description de page PPD. Le système CUPS est modulaire, accepte le chiffrage et gère les quotas. Le système CUPS est compatible avec les systèmes BSD et Unix™ System V d'AT&T. Les filtres d'impression Les filtres d'impression (filter) interceptent les travaux d'impression (jobs) et les préparent pour le périphérique d'impression. En général, cette préparation consiste en une conversion ou une traduction (language). Ainsi, les travaux d'impression arrivent avec le bon format (format) dans la file d'attente (spool) et sont prêts à être imprimés par le périphérique d'impression (device). Des outils permettent de convertir les formats de fichier dans d'autres formats (dvi, ps, pbm). Le programme Magic Filter identifie le format “natif” des imprimantes et sélectionne l'outil de conversion adéquat, comme Ghostscript, qui permettra de présenter au périphérique les travaux d'impression au bon format. Il existe différents filtres qui conviennent plus ou moins bien selon les types d'imprimantes. L'outil Ghostscript permet de convertir les fichiers Postscript en de nombreux autres formats. L'outil Ghostscript s'utilise en mode interactif avec un prompt “GS>”. Les outils de conversion permettent de transformer un format dans un autre en remplaçant certains caractères ou codes par d'autres. Les outils de conversion peuvent être très spécialisés et ne fonctionner que dans un seul sens (depuis un format vers un autre). Ils portent un nom qui indique le format de départ, le sens avec le chiffre “2” qui s'entend et sonne en anglais comme la conjonction de coordination “to”, et le format d'arrivée. Les outils de conversion peuvent ainsi être utilisés dans des scripts qui automatisent les tâches répétitives. Par exemple la commande “ps2pdf” convertit un fichier Postscript vers le format PDF. L'on parle aussi d'encodage, pour signifier le type de code. Les formateurs sont des outils généralistes qui permettent de rechercher et d'extraire un motif connu. !© Les services par Patrick Hautrive !;~) 2010 61 Les filtres d'impression et les outils de conversion Filters Tools Conversion Magic Filter de Image Magic Ghostscript (Postscript) mft Aps Filter Print Tool de Red Hat lout Foomatic Package Psutils gs Gimp Print gv a2ps ps2pdf ps2epsi ps2ascii html2text dvips dvipdf xdvi kdvi dvilj enscript nenscript netpbm pbmplus tiffg3 efax flexfax wv Formators pr tr cut awk troff nroff groff Le format d'impression Les commandes “gs” ou Ghostscript et “gv” ou Ghostview permettent d'interpréter et de visionner les documents qui sont dans un format Postscript ou dans un format PDF (Portable Document Format). Les fichiers au format Postscript portent l'extension “.ps” et les fichiers au format PDF portent l'extension “.pdf”. Le format PDF est un format qui est compatible avec tous les systèmes et toutes les imprimantes. Les types de formats sont nombreux et certains sont des formats propriétaires pour lesquels il faut payer une redevance, et d'autres sont des formats libres et gratuits. Les formats peuvent caractérisés les structures et les codes d'enregistrement d'un document, d'une image ou d'un fichier. Le format brut (raw) est un format texte ascii, sans structure ni code que celui de la table des caractères. Le format ASCII (American Standard Code for Information Interchange) est le format le plus simple et le plus universel qui soit, puisque c'est le codage de base des caractères. Les formats d'impression ps gif pdf jpeg raw jpg ascii Les types d'imprimantes Il existe plusieurs catégories d'imprimantes, les imprimantes à aiguilles (needle), les imprimantes à jet d'encre (bubble), les imprimantes à faisceau laser et toners (laser) et les tables traçantes d'architecte (table). Les imprimantes peuvent être des imprimantes en noir et blanc (black) ou des imprimantes couleurs (color). Les imprimantes ou les périphériques d'impression se distinguent par le ou les langages de description de page qu'elles ou ils utilisent. Les langages peuvent être des langages propriétaires, spécifiques à un éditeur de système d'exploitation ou à un constructeur de matériel, ou être des normes ouvertes qui !© Les services par Patrick Hautrive !;~) 2010 62 peuvent être exploitées sur plusieurs systèmes et plusieurs types de matériels. Les types d'imprimantes et leur PDL (Page Description Language) Language GDI Postscript PDF Encapsulated Postscript Adobe 1 & 3 PCL 5 HPGL HP Laser jet Spécification Extension Les systèmes Windows™ Portable Document Format EPS La société Adobe Postscript Common Language de Hewlett Packard Hewlett Packard General Language Hewlett Packard Language for Laser Printer “.ps” “.pdf” La configuration de l'impression La configuration d'un système d'impression dépend du système d'impression installé (lpd, lprng, cups), de la localisation et du type d'imprimante, et particulièrement du type de langage de description de page. La configuration de l'impression Commands lp lpstat lpadmin lpoptions lpstatus banner lpdomatic smbspool cancel printafm lpr lpq lprm lpc print printf lptest gsbj gsdj gslj gslp gsnd cupscalibrate cupsgenppdupdate cupslpd cupspolld cupsaddsmb cupsd cupsdisable cupsenable redhatconfigprinter Files Filters PRINTER /etc/hosts.lpd LPDEST /etc/lpd.perms PRINTDEST /etc/lpd.conf NENSCRIPT /etc/printers.conf GSLP.PS /etc/printcap GSDIR /etc/cups/client.conf GS_LIB /dev/lp0 man printcap /var/spool/lpd/printer man 1 lp /usr/local/lib/ghostscript man 4 lp /etc/lprng/printcap man gs /var/spool/lpd/smb/.config man lpc /var/lock/subsys/lpd apropos print locate print ~/.apsfilterrc /etc/apsfilter /usr/lib/apsfilter /usr/share/magicfilter Parceque pour passer par le serveur il suffit 1) sur le serveur de partager l'imprimante 2) sur le client d'avoir un /etc/cups/client.conf qui contient ServerName <nom du serveur> !© Les services par Patrick Hautrive !;~) 2010 63 Un exemple d'imprimante locale Un exemple d'installation d'une imprimante locale avec le système lpd (print daemon). Un exemple d'installation d'imprimante mkdir p /var/spool/lpd/laser chown root.daemon /var/spool/lpd/laser chmod ug=rwx,o=rx /var/spool/lpd/laser cd /var/spool/lpd/laser touch .seg errs status lock chown root.daemon * chmod ug=rw,o=r * vi filter #!/bin/sh #filter echo “” >> /tmp/testlp.out date >> /tmp/testlp.out echo “” >> /tmp/testlp.out chmod ug=rwx,o=rx filter mv /etc/printcap /etc/printcapold vi /etc/printcap laser | laser : :lp=/dev/lp0: :sd=/var/spool/lpd/laser: :lf=/var/spool/lpd/laser/errs: :if=/var/spool/lpd/filter: :mx#0: :sh: :sf: chown root.daemon /etc/printcap chmod 644 /etc/printcap ls l /etc/rc.local lpd ls l | lpr P laser less /tmp/testlp.out \ \ \ \ \ \ \ \ Un exemple d'imprimante Windows™ en réseau Un exemple d'installation d'une imprimante réseau (remote) et d'une imprimante Windows™ avec le protocole SMB (Server Message Block). Un exemple d'imprimante Windows™ en réseau mkdir p /var/spool/lpd/remotelp chown lp /var/spool/lpd/remotelp chmod 700 /var/spool/lpd/remotelp vi /var/spool/lpd smb/.config server=”Windows™ Printing Server” service=”Printer Name” password=”secret” user=”” vi /etc/printcap smb | Remote Windows™ printer : :if=/usr/bin/smbprint : :lp=/dev/null : :sd=/var/spool/lpd/smb :mx#0 : !© Les services par Patrick Hautrive !;~) 2010 64 \ \ \ \ \ Le fichier /etc/printcap Le fichier “/etc/printcap” rassemble les différentes configurations d'imprimantes d'une station. Le fichier /etc/printcap Local Printer laser | local laser : :lp=/dev/lp0: :sd=/var/spool/lpd/laser: :lf=/var/spool/lpd/laser/errs: :if=/var/spool/lpd/filter: :mx#0: :sh: :sf: lp | lexmark over there : :if=/usr/share/magicfilter/lexmark : :gqfilter : :lp=/dev/usb/lp0 : :sd=/var/spool/lpd/lp : :pl#66 : :pw#80 : :pc#150 : :mx#0 : :sh : Remote Printer \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ remotelp | Remote printer : :rm=distant: :rp=lp : :sd=/var/spool/lpd/remotelp : :mx#0 : :sh : \ \ \ \ \ \ smb | Remote Windows™ printer : :if=/usr/bin/smbprint : :lp=/dev/null : :sd=/var/spool/lpd/smb :mx#0 : \ \ \ \ \ !© Les services par Patrick Hautrive !;~) 2010 65 Les exemples d'impression Voici quelques exemples de commandes pour gérer les impressions sur un système Gnu Linux. Les exemples d'impression ls > /dev/lp export PRINTER=”printer” /usr/sbin/lpd –help dvips o letter.ps letter.dvi man printcap | col b | lpr mkdir p /var/spool/lpd/lp lp < file /usr/sbin/lpc status printer chown lp /var/spool/lpd/lp cat test.ps > /dev/lp1 lpc Topq 37 ; lpc down lp0 chmod 700 /var/spool/lpd/lp pr h “Title” file | lpr lpc enable ; lpc status lp0 /etc/init.d/lprng restart lp d laserprinter file lpc stop lp0 ; lpc start lp0 lpr file ; lpq P laser lpstat a all ; lpq a /etc/rc.d/init.d/lpd restart ; lpd l lprm user@localost +670 cancel laserprinter chmod ug=rwx, o=xr /var/spool/lpd/laser gs h ; gs lprm ; lprm 15 chgrp daemon laser GS>devicename=laser lprm $USER dpkg l | grep cupsys | awk '{print $2}' GS>quit lpstatus ; lptest 35 6 a2ps 4 file.txt P file.ps export GSDIR=”/usr/bin” lpr P ourprinter file groff ms file gs file.ps ; ps2ascii *.ps lpr P html file.html groff Tx75 ms file gs_init *.ps lpr P ourprinter #3 m file export NENSCRIPT=”B L66 N P printer” export GS_LIB=”/usr/lib/ghostscript:/usr/local/lib/fonts:/usr/X11R6/fonts” groff man Tps /usr/man/man5/printcap.5 | lpr vi /etc/cups/client.conf ServerName cupsserver !© Les services par Patrick Hautrive !;~) 2010 66 KERNEL Les noyaux Les noyaux sont classés en deux types, les micro noyaux (Hurd, Mach) et les noyaux monolithiques (Windows™, Gnu Linux). Les micro noyaux sont de petites tailles et forment le centre d'un ensemble plus vaste qui permet d'ajouter selon les besoins des fonctionnalités. Les noyaux monolithiques sont de grandes tailles et forment un ensemble auto suffisant où toutes les fonctionnalités sont réunies et sont toujours présentes en mémoire. Le système Gnu Linux est un noyau monolithique, mais il disposent de la possibilité de charger en mémoire des modules supplémentaires qui ont été prévus lors de la compilation. Le système Gnu Linux peut être réduit en taille pour constituer un minuscule noyau qui peut être intégré à des solutions électroniques embarquées (embedded) pour des matériels spécialisés. Le noyau est un programme qui est compilé en fonction de l'architecture du processeur à la quelle il est destiné (architecture). Le noyau est chargé en mémoire au démarrage du système, et reste en mémoire vive (memory) pendant toute la durée d'utilisation du système. C'est le noyau qui lance la procédure d'initialisation du système (init) et qui fait l'interface entre l'utilisateur (user), le matériel (hardware), le réseau (middleware), et qui ordonne le temps processeur (sheduler), gère l'exécution des processus (process) des différentes applications (software). C'est le noyau qui coordonne les actions des utilisateurs (human) et les réactions de l'ordinateur (computer). Le noyau Gnu Linux peut être utilisé en mode ligne de commande (shell) ou par l'intermédiaire d'une interface graphique (window). Le noyau Gnu Linux Le noyau Gnu Linux (kernel) fut initié par le finlandais Benedicte Linus Torvalds en l'année 1991, en envoyant un message sur un forum (news), au sujet d'un projet d'extension de Minix pour l'architecture Intel 386. Le noyau Gnu Linux est un système d'exploitation monolithique et modulaire (modules), qui intègre la pile de protocole réseau TCP/IP (network), qui fonctionne en multi tâche préemptif (multi threads) et en mode multi utilisateurs (secure), et qui peut être porté sur la plus part des architectures existantes. Le noyau est composé de sous systèmes spécialisés dans la gestion de la mémoire, des périphériques, de la pile de protocoles réseaux, ou de l'ordonnancement des processus. Le noyau fut par la suite livré avec la licence Gnu GPL (General Public Licence). Comme tous les projets de la communauté des Logiciels Libres (free software), les développements du noyau sont décidés collégialement par les membres de l'équipe de programmeurs qui participent à son élaboration, et arbitrés par une personne élue par ses pairs (maintainer). La personne responsable du développement du noyau Gnu Linux est en ce moment Alan Cox. Le noyau Gnu Linux est un système performant, robuste, souple et réactif. Ainsi, la correction des d'erreurs (bugs) et les parades aux trous de sécurité (holes) sont apportées très rapidement (patch) par les membres de la communauté (community). !© Les services par Patrick Hautrive !;~) 2010 67 Les termes de la licence sont disponibles à cette adresse: http://www.gnu.org/copyleft/gpl.html La licence Gnu GPL version 2 sur un système Gnu Linux: “/usr/share/commonlicenses/GPL2” Les versions du noyau Les noyaux Gnu Linux sont numérotés avec un numéro principal (major), un numéro secondaire (minor) et un numéro de suivie des corrections (revision) auquel peut éventuellement s'ajouter une identification de la distribution (distribution) ou de l'architecture (architecture). Les numéros secondaires permettent de différencier, les versions stables des versions en développement. Les versions propres à une utilisation en production (stable) portent un numéro secondaire pair (even). Les versions en cours de développement et de test (development) portent un numéro secondaire impair (odd). Les distributions construites autour du noyau Gnu Linux sont appelées des distributions Gnu Linux et rassemblent en plus du noyau lui même (kernel), les outils (tools) et nombre d'autres Logiciels Libres (free software). Le code source des différentes versions du noyau (source), aussi bien que des versions pré compilées (binary) ou modifiées (patch) sont téléchargeables sur le site “kernel.org”. Le noyau peut être téléchargé sous la forme du code source qui devra être compilé, comme le code source original (tarball), ou le code source modifié selon les besoins de telle ou telle distribution (sources patched). Le noyau peut également être téléchargé sous la forme de binaires déjà compilés spécialement pour un type d'architecture (i386) ou déjà patché pour une certaine distribution (distribution). Les appels systèmes Les appels systèmes (system calls) du noyau sont les fonctions de base ou fonctions primitives qui permettent d'exécuter certaines tâches systèmes, comme la gestion des processus par l'ordonnanceur (sheduler), la gestion des communications réseaux (network), la détection des matériels (hotplug) ou la gestion des lectures et des écritures sur le disque dur (file system). Les appels systèmes du noyau Gnu Linux fork () ioctl () exec () syslog () read () write () listen () send () receive () L'image du noyau Le noyau Gnu Linux est une image compactée à laquelle il faut ajouter quelques commandes permettant de la décompresser et de l'installer en mémoire. Les commandes gzip (“.gz”) ou bzip2 (“.bz2”) permettent de décompresser le noyau avant de le charger en mémoire. L'image qui est chargée !© Les services par Patrick Hautrive !;~) 2010 68 au démarrage se trouve dans le fichier “/boot/vmlinuz”. Cette image est le résultat d'une configuration et d'une compilation. Les paramètres de la dernière configuration ou de la précédente compilation sont conservés dans le fichier “/usr/src/linux/.config”. Les sources et les entêtes du noyau Les sources et les entêtes du noyau sont des packages indispensables pour la configuration et la compilation d'un noyau Gnu Linux. L'installation du package “kernelsource” permet d'installer tous les fichiers et les programmes utiles pour la compilation d'un noyau dans le répertoire “/usr/src/kernel sourceversion/*”. L'installation du package “kernelheaders” permet d'installer les fichiers d'entêtes de programmation en langage C. Les répertoires “/usr/include/linux/*” et “/usr/include/asm/*” contiennent tous les fichiers d'entête (“.h”) pour la programmation en langage C. Les paramètres du noyau Le fichier “/usr/src/linux/Documentation/kernelparameters.txt” explicite les nombreux paramètres du noyau. Les paramètres de la configuration du noyau évoluent avec les fonctionnalités qui y sont ajoutées par l'équipe de développement. Pour chacun de ses paramètres, il faut décider, s'il est intégré au noyau (“y”), s'il y est ajouté en tant que module (“m”) ou s'il n'en est pas tenu compte (“n”). Les paramètres sont organisés par catégories (I/O, API Posix, Sheduler, VFS, TCP/IP, Modules). Le fichier “/usr/src/linux/Documentation/changes” présente les changements, les ajouts et les suppressions de paramètres depuis la version précédente du noyau, tandis que le fichier “/usr/src/linux/Documentation/configure.help” propose des conseils pour la configuration du noyau. La taille du noyau La configuration d'un noyau permet d'ajouter ou de retirer des fonctionnalités intégrées ou des modules (modules). La réduction de la taille du noyau (size) est un enjeu parce que cela permet d'en accélérer le fonctionnement. Les premiers noyaux Linux représentaient 100 à 300 Kilo Octets, et se composaient d'environ 10 000 lignes de code en langage C (source), qui après la compilation devenaient environ 1000 lignes de code en langage machine (assembler). En 2006, le noyau Gnu Linux 2.6 représentait environ 56 Méga Octets. Les fonctionnalités du noyau La configuration d'un nouveau noyau peut s'avérer indispensable lors de mise à jour de sécurité (patch), ou lors de l'intégration d'un nouveau pilote (driver) pour un nouveau matériel (device). Le numéro principal de version d'un noyau (major) est important parce qu'il est lié avec les numéros de versions des librairies dynamiques (library). De la même façon, les numéros de versions des programmes (packages) et de leurs dépendances (dependancy) sont importants pour des raisons de compatibilité. !© Les services par Patrick Hautrive !;~) 2010 69 Certaines fonctionnalités sont obligatoirement intégrées dans le noyau, afin que celuici soit opérationnel. Le support du premier contrôleur de disque (controler), et le système de fichiers racine (root file system) sont nécessairement intégrés dans le noyau, afin de pouvoir accéder à l'arborescence qui contient les commandes de base, et de pouvoir monter les autres systèmes de fichier. La virtualisation La virtualisation consiste à faire tourner un système d'exploitation à l'intérieur d'un autre. L'on parle de moteur, d'émulateur, de système de virtualisation qui simule un environnement matériel ou système. Il existe plusieurs systèmes de virtualisation, comme Vmware, Wine, User Mode Linux et Xen. Les modules Les modules sont intégrés indirectement au noyau, car ils ne sont chargés et reliés au noyau que si celuici en a besoin. Le chargeur de modules est responsable du chargement d'un module. Les modules correspondent à une fonctionnalité, un système de fichier, un pilote de périphérique. Les modules tiers, sont des modules qui ne sont pas développés directement par les membres de la communauté des Logiciels Libres, mas par des sociétés privées, comme Nvidia pour les cartes graphiques. Les commandes systèmes Les commandes systèmes permettent d'interagir avec le noyau, de connaitre son état et de modifier ses paramètres. Les commandes systèmes et de configuration du noyau Gnu Linux Commands uname linuxinfo uptime sysctl rdev patch systune strace ltrace lcap mkrboot memtest86+ x86info xsysinfo mon ksymoops powernowd prospect powertweakd crashme sensord lmsensors lsbrelease Packages make gcc gzip gunzip bzip2 bunzip2 tar zcat kcmlinuz procps kernelimg.conf kernelsource kernelheaders kernelimage kernelpackage glibcdevel ncursesdevel egcc cpp bin86 kernelpatchscripts dhkpatches initrdtools rcrankernsmooth kernelinternalsguide Files /boot/vmlinuz /usr/src/linux/.config /usr/include/linux/* /usr/include/asm/* /usr/src/kernelsourceversion/* /usr/src/linux/Documentation/* /usr/scr/linux/README /proc/version /lib/modules/2.6.195686/* /etc/sysconfig/kernel !© Les services par Patrick Hautrive !;~) 2010 70 Les exemples du noyau uname a cat /etc/debian_version cat /proc/version cat /etc/issue cat /etc/*release lsbrelease a rdev /boot/vmlinuz /dev/hda5 gunzip cd patch.gz | patch p1 zcat /usr/src/patch2.4.19.gz | patch p1 aptcache search kernel | grep ^kernel dpkgreconfigure tzdata !© Les services par Patrick Hautrive !;~) 2010 71 VMLINUZ Le téléchargement du noyau La documentation Linux Kernel Howto présente le téléchargement, la configuration, la compilation et l'installation d'un noyau Gnu Linux. La documentation Linux Crash Rescue Howto présente différentes méthodes pour prévenir et dépasser un blocage du système. Le téléchargement du noyau peut s'effectuer à partir du site HTTP de référence “kernel.org”, ou d'un site FTP. L'intégrité de l'image téléchargée doit être vérifié avec la commande “md5sum”. Il existe par ailleurs, de nombreux sites miroirs (miror) qui hébergent des copies exactes et actualisés des fichiers d'origines, que ce soit pour le noyau, ou pour les packages contenant des Logiciels Libres (free software). http://kernel.org/pub/linux/kernel La préparation du jardin La préparation du jardin consiste à protéger les fichiers existants, soit en faisant des copies de sauvegarde, soit en les renommant afin d'éviter que leur contenu ne soit altérer par les nouveaux fichiers. Ces mesures prophylactiques permettront de revenir facilement à la situation antérieure. Le fichier de configuration du chargeur de démarrage (lilo, grub) et le fichier “/usr/src/linux/.config” contenant les paramètres de la dernière compilation sont particulièrement important à sauvegarder. La commande “make oldconfig” permet de générer un fichier de configuration avec les paramètres actuels. La préparation du jardin ou la sauvegarde des anciens fichiers de configuration mv /boot/vmlinuz2.4.7.10 /boot/vmlinuz2.4.7.10.old cp /boot/system.map /boot/system.map.old cp /etc/lilo.conf /etc/lilo.conf.old mv /usr/src/linux /usr/src/linux.old cd /usr/src/linux.old ; mv .config .config.last make oldconfig ; cp .config .config.old La préparation des outils La préparation des outils du jardin, de la graine ou de la jeune pousse, consiste à installer les packages et leurs dépendances nécessaires à la configuration et à la compilation du noyau. Les packages indispensables sont les “kernelsource”, les “kernelheader”, la bibliothèque Gnu du langage C “glibcdevel”, le compilateur Gnu pour le langage C “gcc” qui contient la commande “make” et le pré processeur pour le langage C “ppc”. Cette opération peut s'effectuer de différentes manières selon les distributions (Red Hat, Debian), le type de sources (internet, cdrom) et le mode de gestion des packages !© Les services par Patrick Hautrive !;~) 2010 72 (.rpm, .deb, tarball). Le choix du noyau à télécharger, la dernière version stable ou le numéro de version correspondant aux fonctionnalités recherchées, le choix des sources ou d'une archive pré compilée et patchée pour une distribution, sont autant de décision à prendre avant toute autre chose. Le répertoire d'installation est généralement “/usr/src”. La décompression et le désempaquetage de l'archive y créent habituellement un répertoire nommé “linuxx.y.z” avec les numéros de version de l'archive. Parfois un lien symbolique est établi entre le répertoire des sources et le répertoire générique “/usr/src/linux” afin d'en faciliter l'accès. La préparation des outils du jardin ou l'installation des packages du noyau cp linux2.4.10.tar.gz /usr/src cd /usr/src mkdir /usr/src/linux Red Hat rpm q kernelsource mount t iso9660 /dev/cdrom /mnt/cdrom rpm i /mnt/cdrom/RedHat/RPMS/kernel* ln s /usr/src/linux2.4.8 /usr/src/linux Debian aptcache search kernel aptget install debhelper modutils fakeroot aptget install kernelpackage libncurses5dev kernelsource2.4.18 vi /etc/kernelpkg.conf tar bzip2 xvf kernelsource2.4.18.tar.bz2 cp /boot/config2.4.12386 /usr/src/kernelsource2.4.18/.config ln s /usr/src/kernelsource2.4.18 /usr/src/linux Tarball bzip2 dc linux2.4.10.tar.bz2 | tar xvf tar xvfz linux2.4.10.tar.gz ln s /usr/src/linux2.4.10 /usr/src/linux ; ls l /usr/src/linux mv /usr/src/linux/.config /usr/src/linux/.config.new cp i /usr/src/linux.old/.config /usr/src/linux/.config La préparation du terrain Le temps du terrain consiste à examiner les documentations du noyau, afin de déterminer si la procédure standard de configuration et de compilation prévaut, ou s'il faut prendre en considération certaines nouveautés. Le fichier MAKEFILE reprend toutes les instructions qui seront données à la commande “make” pour la compilation. Le fichier “.config” prépare en quelque sorte la configuration en présentant les paramètres par défaut les plus courants. La récupération de l'ancien fichier “.config” peut être un gain de temps, s'il le précédent noyau était proche du nouveau. Si de grands changements de fonctionnalité ou d'architecture ont eu lieu depuis, alors, il est préférable de choisir le nouveau fichier “.config”. !© Les services par Patrick Hautrive !;~) 2010 73 La préparation du terrain ou la considération des dernières innovations less /usr/src/linux/MAKEFILE #> EXTRAVERSION=”new.2.4” less /usr/src/linux/README less /usr/src/linux/Documentation/configure.help less /usr/src/linux/Documentation/Changes less /usr/src/linux/.config #> Valeur de configuration par défaut La préparation des racines La préparation des racines et du feuillage de la plante consiste à la configuration du noyau. La configuration du noyau est la phase où sont choisis tous les paramètres qui seront retenus pour le nouveau noyau. La configuration du noyau en mode graphique avec la commande “make xconfig” génère un nouveau fichier “.config”. Les nouveaux paramètres seront conservés dans le fichier “.config”. Si un autre fichier “.config” était présent dans le répertoire, il serait utilisé comme base pour la nouvelle configuration, et serait écrasé avec les nouveaux paramètres à la fin de la configuration. Les paramètres dépendent amplement de la version du noyau et des fonctionnalités qu'il propose. En général, plus le noyau est récent et volumineux, et plus le nombre de paramètres est élevé, et plus la configuration est longue et complexe, parce qu'elle prend en compte les dernières innovations. Fort heureusement, les processeurs actuels sont rapides, et cette phase n'est plus aussi fastidieuse qu'auparavant. Trois niveaux ou trois modes de configuration sont possibles, soit le mode texte et basique (make config), soit le mode interactif avec un menu et une hiérarchisation des paramètres (make menuconfig), soit enfin, le mode graphique plus convivial (make xconfig). Le mode graphique présente des explications sur chacun des paramètres et les conditions d'utilisation (“?help”). Pour chacun des modes, il faudra sélectionner individuellement les paramètres souhaités, et choisir, s'ils seront intégrés directement dans le noyau (“yes” ou <*>), s'ils seront ignorés (“no” ou <>), ou s'ils seront ajoutés comme module (“m” ou <M>). !© Les services par Patrick Hautrive !;~) 2010 74 La préparation des racines et du feuillage ou la configuration du noyau Debian pwd ; ls l /usr/src/linux ls l /usr/src/linux/.config ; less /usr/src/linux/.config cd /usr/src/linux make proper #make mrproper ; make oldconfig make config make menuconfig make xconfig makekpkg clean less /usr/src/linux/.config La mise en terre La mise en terre de l'arbre consiste en la compilation de l'image du noyau proprement dite. La compilation s'appuie sur le fichier de configuration nouvellement créé “.config”, et tient compte des dépendances. La compilation du noyau produit généralement un fichier image qui est compressé (make bzImage). Cette image constitue le nouveau noyau. La compilation des modules est effectuée séparément (make modules). Ensuite, l'installation des fichiers aux bons endroits dépendants de l'organisation de la distribution Gnu Linux et des scripts d'installation. L'installation s'effectue également séparément, pour le noyau (make install), et pour les modules (make modules_install). Les modules sont installés dans le répertoire “/lib/modules/$(uname r)/*” et le fichier “/usr/src/linux/system.map” est généré. !© Les services par Patrick Hautrive !;~) 2010 75 La mise en terre ou la compilation de l'image du nouveau noyau cd /usr/src/linux Kernel #make dep clean bzImage > resultat.txt make clean make dep make bzImage ls l /usr/src/linux/arch/i386/boot/bzImage cp i /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz2.4.18 #make bzDisk #make zImage #make Image #make all make install Modules make modules ls l /usr/src/linux/system.map cp i /usr/src/linux/system.map /boot/system.map make modules_install depmod a ls l /lib/modules/2.4.18/*.so vi /etc/modules L'arrosage et la tutorisation L'arrosage et la tutorisation consiste à configurer le chargeur de démarrage (lilo, grub) et à rebooter la machine sur le nouveau noyau. La compilation du noyau peut également produire une image Ram Disk (initrd) pour le démarrage du système. !© Les services par Patrick Hautrive !;~) 2010 76 L'arrosage et la tutorisation ou la configuration du chargeur de démarrage Lilo Grub ls l /boot/vmlinuz2.4.18 ls l /boot/system.map ls l /boot/System.map2.6.18686 ls l /boot/config2.4.18 ls l /vmlinuz ln s /boot/vmlinuz2.4.18 /vmlinuz vi /etc/lilo.conf boot = /dev/hda delay = 20 vga = normal root = /dev/hda1 readonly image = /boot/vmlinuz2.4.18 label = newlinux image = /boot/vmlinuz2.4.7.10.old label = oldlinux /sbin/lilo v c /etc/lilo.conf vi /boot/grub/menu.1st vi /boot/grub/grub.conf timeout 20 title newlinux root (hd0,0) kernel /boot/vmlinuz2.4.18 title oldlinux root (hd0,0) kernel /boot/vmlinuz2.4.7.10.old reboot root=/dev/hda1 ro root=/dev/hda1 ro !© Les services par Patrick Hautrive !;~) 2010 77 PROC Le répertoire /proc Le répertoire /proc contient un système de fichier virtuel (virtual file system), qui reflète les valeurs du noyau (kernel) en mémoire vive (memory). Les valeurs contenues dans les fichiers du répertoire /proc sont extraites de la mémoire vive au moment de leur consultation, et constituent une image instantanée du noyau. Le répertoire /proc présente les informations sur les processus, sur l'état du système, comme les bus de la carte mère (bus), les pilotes (driver), les lecteurs ATAPI (ide) ou les périphériques SCSI (scsi), les interruptions (irq), le réseau (net), le système (sys) et les terminaux (tty). L'attribution de valeur permet à l'administrateur (root) de modifier en direct le noyau et d'affiner sa configuration (tuning). De nombreuses commandes utilisent les données du répertoire /proc pour alimenter leur sortie standard. Les informations systèmes du répertoire /proc apm buddyinfo cmdline cpufreq cpuinfo crypto devices diskstats dma execdomains fb filesystems interrupts iomem ioports kallsyms kcore kmsg loadavg locks mdstat meminfo misc modules mounts mtrr partitions self slabinfo stat swaps sysrqtrigger uptime version vmstat asound/ bus/ driver/ fs/ ide/ irq/ net/ scsi/ sys/ sysvipc/ tty/ Les informations des processus Tous les processus sont référencés avec leur numéro de PID comme répertoire. Chaque processus en cours possède un répertoire, à l'intérieur duquel se trouvent toutes ses informations et ses caractéristiques. Par exemple, tous les répertoires des processus présentent la ligne de commande qui a été lancée (cmdline), les variables d'environnement qui ont été héritées (environ), les fichiers descripteurs pour les entrées sorties (fd), la racine relative de l'arborescence (root), le répertoire de travail courant ou CWD (Current Working Directory), le code exécutable qui est chargé en mémoire (exe), la carte de l'espace mémoire du processus (maps), les points de montage connus du processus (mounts), ou le statut du processus (status). Les informations des processus dans le répertoire /proc attr auxv cmdline cwd environ exe fd maps mem mounts root stat !© Les services par Patrick Hautrive !;~) 2010 78 statm status task wchan Les fichiers core Les fichiers core sont des fichiers qui sont créés dans le répertoire d'exécution d'une commande quand celleci vient de crasher. Les fichiers core contiennent une image instantanée de l'espace mémoire du processus de la commande au moment où celleci s'est interrompue. L'on parle de fichiers “core dump”. Les fichiers core peuvent être utiles pour découvrir les raisons de l'interruption brutale ou les bugs d'un programme. L'administrateur du système peut régulièrement tracer la présence de ces fichiers core, non seulement pour découvrir la source d'un dysfonctionnement, mais aussi pour éviter qu'ils ne pullulent. Les exemples de /proc echo 8192 > /proc/sys/fs/filemax echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all echo 1024 > /proc/sys/kernel/threadsmax ls d /proc/[09]* free cat /proc/meminfo memtest86 ls /var/run/ !© Les services par Patrick Hautrive !;~) 2010 79 SYSLOGD La journalisation système Le système Gnu Linux produit des messages qui font l'objet d'une journalisation, c'estàdire que les messages du système sont enregistrés dans des journaux (log). Les messages du noyau peuvent être journalisés par le service “klogd” (kernel) et/ou le service “syslogd” (system). Le service “syslogd” est un programme qui a été amélioré à partir des sources d'un système de journalisation issu du système BSD (Berkeley Software Development). Le service klogd Le service “klogd” (Kernel Logging Daemon) intercepte les messages du noyau et les journalise ou les transmet au service “syslogd”. Les fonctionnalités du service “klogd” ont été incorporées dans le service “syslogd”. Toutefois certains administrateurs apprécient le service “klogd”, parce qu'il propose une gestion des priorités plus souple, et la capacité de retrouver l'adresse mémoire précise qui est à l'origine d'un message d'erreur du noyau. Les priorités utilisés par le service “klogd” sont définies dans le fichier “/usr/include/linux/kernel.h”. La commande “man klogd” donne une description du service et de sa configuration. Le service syslogd Le service “syslogd” centralise tous les messages systèmes en général et les messages du noyau en particulier. Le service “syslogd” peut fonctionner conjointement avec le service “klogd” ou le remplacer. Le service “syslogd” peut enregistrer directement les messages provenants du noyau, ou indirectement par l'intermédiaire du service “klogd”. Le service ou le démon “syslogd” (System Logging Daemon) est lancé par la procédure d'initialisation (init) du système. Le service “syslogd” permet de conserver une trace de toutes les activités du système. Les évènements (event) et leur degré d'importance (priority) sont consignés dans des journaux (log). Le service “syslogd” reçoit et centralise les messages (messages) de tous le système. Les messages peuvent provenir d'autres services (daemon), de sous systèmes du noyau (facility), d'applications (server), de binaires exécutables (command), ou de bibliothèques (library). La configuration du service “syslogd” est enregistrée dans le fichier de configuration “/etc/syslog.conf”. Les messages peuvent être configurés pour être redirigés vers un utilisateur (root), vers un terminal virtuel (console), vers un fichier journal dédié (/var/log/*), ou vers un autre serveur “syslogd”. La journalisation à distance (remote) permet de centraliser sur une seule machine, les messages de plusieurs. Les messages peuvent inclure en option le numéro d'identification du processus !© Les services par Patrick Hautrive !;~) 2010 80 associé (pid). La commande “man syslogd” donne une description du service et de sa configuration. La protection des journaux Les journaux systèmes devraient être régulièrement recopiés et protégés sur une autre machine, afin d'en conserver une copie originale et actualisée. Les tentatives de connexion, d'intrusion, d'installation de programmes, ou de changement de configuration peuvent être enregistrés dans les journaux systèmes. Les journaux systèmes représentent une cible pour les pirates, puisqu'ils sont susceptibles de conserver la trace de leurs visites. Les journaux systèmes Les journaux systèmes sont nombreux et peuvent être différents selon les distributions Gnu Linux. En général, les fichiers journaux (log) sont placés dans le répertoire “/var/log/*”. Certains fichiers journaux sont conservés, archivés, compressés, numérotés et remplacés en boucle par un système de rotation pouvant aller de zéro à neuf. Ainsi, le maximum d'information est conservé sans compromettre la taille du répertoire. Certains journaux peuvent être spécifiques à une distribution Gnu Linux (distribution), d'autres n'enregistrent que les évènement concernant l'utilisation de certaines commandes (command), d'autre enfin sont propres à des services (daemon) ou à des sous systèmes du noyau (facility), comme par exemple l'authentification et le contrôle des permissions (authentication), ou les activités d'un utilisateur (user). Des fichiers journaux peuvent être créés par des applications (software) ou par l'administrateur système (root). La commande “logger” permet d'envoyer un message au service “syslogd” afin qu'il soit automatiquement enregistré dans le fichier système “/var/log/messages”. La commande “dmesg” permet d'afficher et de modifier la mémoire tampon circulaire du noyau (kernel ring buffer). !© Les services par Patrick Hautrive !;~) 2010 81 Les journaux systèmes Journal /var/log/messages /var/log/boot.log /var/log/boot.msg /var/log/dmesg /var/log/wtmp /var/log/secure /var/log/loginlog /var/log/lastlog /var/log/btmp /var/log/sulog /var/log/sudo.log /var/log/maillog /var/run/utmp /var/log/installer/messages /var/log/installer/hardwaresummary /var/log/installer/partman /var/log/installer/status /var/log/installer/syslog /var/log/baseconfig.log.1 /tmp/install.log /var/log/auth.log /var/log/daemon.log /var/log/debug /var/log/kern.log /var/log/lpr /var/log/mail.log /var/log/news/news.notice /var/log/syslog /var/log/userlog /var/log/Xorg.0.log Specification System Journal Red Hat SuSE Kernel Ring Buffer #last #login #login #lastlog #lastb #su #sudo #mail #who Debian Installer Debian Hardware Debian Partitions Debian Packages List Debian First Boot Debian Base Configuration Red Hat Installer Authentication Messages Services Messages Kernel Debuging Informations Kernel Messages Line Printer Message Mail Server Postfix Messages News server Message System Logging Messages User Messages Graphical Window Server !© Les services par Patrick Hautrive !;~) 2010 82 La syntaxe du fichier /etc/syslog.conf Le fichier /etc/syslog.conf permet de configurer le comportement du service syslogd. La commande “man syslog.conf” donne des exemples d'utilisation. Le fichier de configuration accepte les caractères joker (“*”) pour remplacer une quelconque occurrence. Les lignes commençants par un dièse (“#”) sont des commentaires et les lignes se terminant par un antislash (“\””) continues sur la ligne suivante pour permettre une indentation qui facilite la lecture (échappement de la fin de ligne). Chaque ligne (rule) est constituée de deux champs séparés par un espace (space) ou une tabulation (tab). Le premier champ stipule le service (facility) et le degré d'alerte (priority), tandis que le deuxième champ renseigne sur la conduite à tenir (action). Le service est associé à son degré d'alerte par un point (“.”). Plusieurs services peuvent être réunis sur la même ligne par une virgule (“,”) et partager le même niveau d'alerte. Quand un degré d'alerte est spécifié, alors tous les messages correspondants à ce degré, et tous les messages correspondants à un degré d'alerte supérieur seront pris en compte. En indiquant un degré d'alerte, c'est donc un seuil qui est indiqué. L'opérateur égal (“=”) permet d'indiquer un seul et unique niveau de priorité. L'opérateur de négation (“!”) permet de définir un ensemble de priorité et de ne sélectionner que son complémentaire. L'expression “none” indique aucune priorité et permet d'exclure un service. Plusieurs services associés chacun à leur degré d'alerte peuvent être cumulés sur la même ligne par un point virgule (“;”) afin de leur attribuer la même action. L'accumulation séquentielle sur une même ligne du même service avec des niveaux d'alerte différents permet de limiter les écritures et de constituer des filtres ou des plages, en commençant par un ensemble général (“*”), puis en affinant par des exclusions (“none”) ou par des négations (“!”). La lecture des critères de chaque ligne est linéaire pour le démon “syslogd”, aussi, les dernières conditions prennent le dessus (overwrite) sur les précédentes. Le deuxième champ spécifie l'action à tenir. L'action sera effectuée pour tous les messages correspondants aux critères de la ligne. L'action peut consister à envoyer le message aux utilisateurs connectés (user), à enregistrer le message dans le fichier journal indiqué avec son chemin absolu depuis la racine de l'arborescence (/var/log/file), ou à envoyer le message via le réseau à un autre démon “syslogd” situé à distance sur une autre station (remote). L'opérateur moins (“”) devant un nom de fichier permet de ne pas synchroniser immédiatement les écritures dans le fichier journal. Ainsi, les écritures dans les journaux seront réparties dans le temps en fonction de l'activité du processeur. L'opérateur pipe (“|”) devant un nom de fichier de périphérique (“/dev/console”) permet de rediriger le message dans un tunnel vers un fichier fifo qui aura été créé !© Les services par Patrick Hautrive !;~) 2010 83 avec la commande “mkfifo”. L'opérateur arrowbase (“@”) devant le nom d'hôte d'une machine permet de transmettre les messages à un autre serveur syslogd, et ainsi de centraliser sur une seule machine les messages de plusieurs machines. Le fichier de configuration du service syslogd avec /etc/syslog.conf (/usr/include/sys/syslog.h) Facility Priority auth authpriv cron daemon ftp kern lpr mail (tcp wrapper) mark (internal) news security (depreciated use auth) syslog user uucp local0 local7 * # emerg (panic) alert crit err (error) warning (warn) notice info debug none =debug !crit * 0 1 2 3 4 5 6 7 Destination Emergency Alert Critical Error Warning Notice Informational Debug !© Les services par Patrick Hautrive !;~) 2010 84 root /var/log/messages /var/log/syslog |/dev/console @machine root,admin * Un exemple de /etc/syslog.conf Un exemple de /etc/syslog.conf auth,authpriv.* /var/log/auth.log *.*;auth,authpriv.none /var/log/syslog #cron.* /var/log/cron.log daemon.* /var/log/daemon.log kern.* /var/log/kern.log lpr.* /var/log/lpr.log mail.* /var/log/mail.log user.* /var/log/user.log uucp.* /var/log/uucp.log mail.info /var/log/mail.info mail.warn /var/log/mail.warn mail.err /var/log/mail.err news.* /var/log/news/news *.=debug;\ auth,authpriv.none;\ news.none;mail.none\ /var/log/debug *.=info;*.=notice;*.=warn;\ auth,authpriv.none;\ cron,daemon.none;\ mail,news.none /var/log/messages *.emerg * #Please adjust or split the list below #daemon,mail.*;\ # news.=crit;news.=err;news.=notice;\ # *.=debug;*.=info;\ # *.=notice;*.=warn /dev/tty8 #The named pipe with the `xconsole' utility #$ xconsole file /dev/xconsole [...] #daemon.*;mail.*;\ # news.crit;news.err;news.notice;\ # *.=debug;*.=info;\ # *.=notice;*.=warn |/dev/xconsole La configuration de syslogd La configuration de syslogd Commands syslogd klogd syslogdlistfiles logrotate savelog metalog swatch dmesg logger mkfifo man syslogd man sysklogd man dmesg man syslog.conf man syslogfacility man savelog Files /etc/syslog.conf /proc/kmsg /usr/include/syslog.h /usr/include/sys/syslog.h /var/run/syslogd.pid /var/log/messages /etc/sysconfig/syslog !© Les services par Patrick Hautrive !;~) 2010 85 /dev/syslog /dev/log /dev/error Un exemple d'archivage Un exemple d'archivage local des journaux systèmes vi /etc/log.cron mv /var/log/messages /var/log/messagesold ; cp /dev/null /var/log/messages export DATE=”`date +”%m%d%y”`” mv /var/log/messagesold /var/log/message.$DATE ; gzip /var/log/messages.$DATE chmod u+x /etc/log.cron crontab e Les messages d'erreurs Les messages d'erreurs (insult) sont des messages qui sont adressés à l'utilisateur en réponse à une commande inappropriée. Les messages d'erreurs sont généralement en anglais, mais, comme avec les pages man, il arrive qu'ils se présentent dans la langue choisie pour le système. !© Les services par Patrick Hautrive !;~) 2010 86 Les messages d'erreurs Messages too many links (<1000) RE Error read only file system permission denied no such process writeprotected regular file no such file or directory no process can be found nor a directory arg list too long broken pipe usage cannot access cross device link different file system device or ressource busy I/O error file exist login incorrect file table overflow file too large illegal option insufficient argument missing destination file is a directory Signification and Exemple Il ne peut avoir plus de mille sous répertoires Expression régulière invalide #grep '[x' file touch /root/file kill 50000 rm i /root/* cp file /save cd ~/unknow chmod 444 file ln file /mnt/usbkey umount /mnt/cdrom ls j cp file Les exemples de syslogd cat /dev/null /var/log/syslog kill HUP syslogd ; kill HUP `cat /etc/syslog.pid` tail f s2 /var/log/messages ; sudo /etc/init.d/sysklogd restart logger "I am `whoami` and we are the `date`" grep named /var/log/messages | tail 3 ; killall HUP syslogd chmod 744 /var/log/* ; syslogd ng package ; metalog package !© Les services par Patrick Hautrive !;~) 2010 87 STOP L'arrêt du système La commande “shutdown” arrête le système proprement, c'estàdire en prévenant les utilisateurs (user), en envoyant un signal de terminaison à tous les processus (process), et en bloquant la procédure d'authentification (login). Avant un arrêt du système, il est préférable de forcer la synchronisation des écritures (sync), puis démonter tous les systèmes de fichiers qui ne figurent pas dans le fichier “/etc/fstab”. Un arrêt d'urgence peut être provoqué par l'arrêt de l'alimentation. L'arrêt du système Commandes shutdown halt reboot init telinit sync umount kill xkill wall man shutdown exit quit logout SIGTERM SIGKILL SIGPWR Control Sequences Ctr+Alt+Z (suspension) Ctr+Alt+C (interruption) Ctr+Alt+D (terminaison) Ctr+Alt+Backspace (xserver) Ctr+Alt+F1 (virtual console) Ctr+Alt+F7 (interface graphique) Ctr+Alt+Del (system shutdown) Files /etc/inittab /etc/shutdown.allow /etc/shutdown.deny /etc/powerstatus apcupd apmd L'alimentation électrique UPS (Uninterruptible Power Supply) est une alimentation d'urgence sur batterie avec éventuellement un ondulateur qui régule l'intensité du courant électrique. APM (Advanced Power Management) est un système qui régule la batterie d'un ordinateur portable afin d'économiser de l'énergie quand il n'est pas utilisé. L'arrêt d'urgence provoque l'envoi d'un signal SIGPWR au processus init. Ensuite, selon la configuration (“/etc/inittab” et “/etc/powerstatus”), le système réagit (FAIL=powerfail+powerwait, OK=powerokwait et LOW=powerfailnow). Le changement de niveau d'exécution Le changement du niveau d'exécution (runlevel) provoque l'envoi du signal SIGTERM à tous les processus, puis après un délais de cinq secondes, l'envoi du signal SIGKILL au processus init. Les exemples de stop telinit t 10 6 ; ls l /etc/rc.d/rc0.d/K* ; /sbin/shutdown r now /sbin/shutdown r +10 “Shutdown in ten minutes” ; /sbin/shutdown r 14:30 “Shutdown at 2h30pm” /sbin/shutdown c +5 ; /sbin/shutdown h now ; /sbin/shutdown g 120 !© Les services par Patrick Hautrive !;~) 2010 88 USER Les informations de compte Les informations de compte constituent l'identité des utilisateurs. Les principales informations de compte sont le mot de passe (password) qui doit être changé régulièrement, et le nom de connexion (login) qui lui reste constant. Les informations de compte sont généralement conservées localement dans les fichiers des mots de passe “/etc/passwd”, “/etc/shadow”, et les fichiers des groupes “/etc/group” et “/etc/gshadow”. Le contrôle de l'identité (authentication) s'effectue une seule fois lors de la connexion, tandis que le contrôle des droits (permission) s'effectue à chaque accès à un fichier. C'est la procédure d'authentification qui permet de vérifier la concordance entre le nom du compte et le mot de passe. Cette phase d'authentification est importante parce qu'elle conditionne l'accès aux ressources du système. Les commandes “su” (switch user) et “sudo” (“/etc/sudoers”) permettent de changer d'identité en cours de connexion. L'authentification peut être gérée par d'autres systèmes de contrôle des identités (PAM). La centralisation des informations de compte dans des bases de données représente également d'autres types de gestion des informations de compte (NIS, Kerberos, Ldap, Acl). La commande «uuidgen» permet de générer un nombre unique pour identifier un seul utilisateur. La collecte d'information La collecte d'information sur les personnes est une pratique croissante sur internet parce qu'elle permet de ficher les gens sur une grande échelle, et de cibler des propositions commerciales ou malhonnêtes. La collecte d'information peut être volontaire et anodine, dans le cadre d'un simple formulaire d'enregistrement proposé à l'entrée d'un site par exemple (registering). Mais, elle peut être également malicieuse et illicite, soit par l'intermédiaire de programmes de divertissement proposés gratuitement sur internet (spyware), soit en obligeant l'internaute à accepter l'enregistrement d'un fichier de suivie des connexions (cookies), soit en enregistrant les noms des pages des sites visités (history). Dans les deux cas, c'est une pratique qui peut très rapidement dériver, et les bases de données peuvent être facilement revendues et détournées. C'est un risque dont il faut tenir compte, car la collecte d'information à l'insu des personnes (fishing) constitue une atteinte à la vie privée, et va à l'encontre du respect de la dignité humaine. Les tentatives d'intrusion commencent presque toujours pas une étude du profil (profiling) de la cible, et une recherche de renseignements (social engineering), susceptibles d'être utilisés contre la volonté et contre les intérêts des personnes. Les informations collectées peuvent être utilisées longtemps après leur collecte. Les messages envoyés sur des forums sont référencés (referencing) par les moteurs de recherche et se révèlent être des traces rémanentes non authentifiées qui peuvent desservir leur auteur et être sortis de leur contexte. !© Les services par Patrick Hautrive !;~) 2010 89 Les comptes utilisateurs Le compte le plus important est celui de l'administrateur (root) ou super utilisateur (super user) qui doit être réservé pour les opérations d'administration du système. La création des comptes et la gestion des utilisateurs est du domaine de compétence de l'administrateur système. L'on dit qu'il faut posséder les informations d'un compte valide (account), ou s'enregistrer sur un système pour pouvoir s'y connecter. Toutefois, la plupart des systèmes et des services à distance disposent d'un compte utilisateur pour les invités (guest) ou pour une connexion anonyme (anonymous). Le système utilise certains comptes spécialisés dans certaines tâches (system account) et dont le nom est réservé. Les services ou les serveurs sont généralement lancés et administrés par un compte de services (daemon account) qui ne correspond à aucun utilisateur, en chair et en os, mais à un utilisateur conventionnel qui permet de gérer précisément les permissions sous lesquelles sont exécutées les opérations de service. Les comptes systèmes n'ont généralement pas besoin de shell qui est dés lors désactivé (“/bin/false”). Le champ Gecos est un champ libre et optionnel qui permet de décrire l'activité du service ou de fournir des renseignements sur un utilisateur. Par convention, les numéros d'identifiant des comptes ou UID (User Identification) et les numéros d'identifiant des groupes ou GID (Group Identification) sont attribués pour les utilisateurs standards à partir du numéro 500 ou 1000. Les types de compte Account Administrator System Service Users Others Login UID root wheel admin 0 sys syslog klog man sync bin daemon hal gdm 1 < uid < 499 lp mail news uucp proxy wwwdata backup list irc gnats 500 < uid < 999 postfix messagebus apche cupsys fetchmail saned 1000 < uid < 10 000 nobody guest anonymous invite Le masque des fichiers Le masque de création des fichiers permet d'attribuer les mêmes permissions à tous les fichiers nouvellement créé par un utilisateur. Le masque de création des fichiers peut s'exprimer en octal ou dans une forme symbolique. La commande “umask” est une commande interne du shell Bash. Par exemple, un masque égal à 002 permet de créer des fichiers avec les permissions 775 (777002=755). !© Les services par Patrick Hautrive !;~) 2010 90 Les limites des utilisateurs Des limites peuvent être imposées aux shells des utilisateurs afin de prévenir une utilisation abusive des ressources du système. La commande “ulimit” est une commande interne au shell Bash (man bash). Trois niveaux de limites peuvent être fixés pour les shells des utilisateurs, les limites douces avec l'option “S”, les limites dures avec l'option “H” ou aucune limite (unlimited). Les limites douces (soft) peuvent être dépassées jusqu'à la limite dure. Les limites douces permettent de prévenir l'utilisateur quand cellesci sont atteintes, et d'encourager l'utilisateur à revenir en dessous de la limite dépassée. Les limites dures (hard) sont des limites infranchissables et surveillées par le shell qui empêchent et interrompent tous processus qui pourraient les dépasser. Les quotas imposent des contraintes d'utilisation (inode et blocks) du disque, et constituent une autre forme de limites pour les utilisateurs. La limitation des ressources ou les options de la commande interne “ulimit” (man bash) c La taille maximale des fichiers core (core size) d La taille maximale de la mémoire vive réservée pour un processus (data segment) f La taille maximale des fichiers qui peuvent être créés par le shell (file size) l La taille maximale de la mémoire vive qui peut être verrouillée (locked) m La taille maximale de la mémoire vive d'un processus RSS (Resident Set Size) n Le nombre maximum de fichiers descripteurs ouverts en même temps (file descriptor) p La taille maximale par block de 512 Octets allouée aux tunnels de redirection (pipe) s La taille maximale de la pile du shell (stack) t Le nombre maximum de temps d'utilisation du processeur exprimé en secondes (cpu time) u Le nombre maximum de processus pour un seul utilisateur (user process) v La taille maximale de mémoire virtuelle que peut utiliser le shell (virtual memory) Un exemple de création de compte La création d'un compte peut être automatique avec les commandes «adduser» ou “useradd” ou manuelle. !© Les services par Patrick Hautrive !;~) 2010 91 Un exemple de création de compte useradd u 777 s /bin/bash m d /home/indi g INDI G PEOPLE c “FSF & FFS” p “secret” indi mkdir /home/indi useradd indi cp /etc/skel* /home/indi passwd indi mkdir /var/spool/mail/indi chown R indi /home/indi/.[Az]* find / user indi ; find / uid 508 su – indi id ; pwd ; ls la La configuration des utilisateurs La configuration des utilisateurs Commands users id w who rwho whois whoami finger wall talk write username logname chfn chage chsh su sudo mkpasswd pwgen passwd chpasswd uuidgen pwck pwconv pwunconv vipw faillog unix_chkpw updatepasswd Files alias checkalias newaliases listalias umask ulimit smbpasswd useradd adduser userdel deluser usermod /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/adduser.conf /etc/deluser.conf /etc/securety/* /etc/shells /etc/skel /etc/login.defs /etc/default/useradd /var/run/utmp /etc/profile (login) /etc/bash.bashrc (shell) ~/.profile ~/.bashrc ~/.bash_profile (login) ~/.bash_history ~/.project ~/.plan ~/.signature ~/.Xauthority Les exemples des utilisateurs useradd D $USER ; usermod G JOIE, JOY $USER ; userdel R $USER useradd u 777 s /bin/bash m d /home/indi g INDI G PEOPLE c “FSF & FFS” p “secret” indi usermod l individual indi ; usermod d /home individual m indi usermod e 20101010 individual passwd individual ; cat /etc/passwd | grep indi chfn individual ; finger individual ; finger chomsky@mitedu useradd u 0 o d /root admin write $USER ttyp0 message Ctrl+D useradd u 1001 indi (Création d'un compte avec un numéro UID) !© Les services par Patrick Hautrive !;~) 2010 92 useradd g 2001 indi useradd G HASH indi useradd C “Optionel et Libre” indi usermod g 2002 indi usermod c “Optionel et Libre” indi userdel r indi ulimit a ; umask S vi ~/.bashrc if [n “$PS1”] ; then fortune fi (Groupe Principal) (Groupe Secondaire) (Champ Gecos) (Groupe Principal) (Champ Gecos) (Suppression du compte et de son répertoire) !© Les services par Patrick Hautrive !;~) 2010 93 GROUP L'organisation des groupes Par convention, les noms des groupes sont écrits en majuscules. Le groupe principal d'un utilisateur est par défaut celui qui lui a été attribué lors de la création du compte, mais peutêtre changé avec l'option “g” des commandes “useradd” et “usermod”. Un groupe (gid) peut avoir plusieurs noms avec l'option “o” de la commande “groupadd”. Le groupe principal contient les groupes secondaires qui contiennent des membres. La vérification des droits s'effectue séquentiellement jusqu'à ce qu'une permission permettent l'action. Les règles de composition des groupes peuvent suivre la théorie des sous ensembles de Boole. Les groupes regroupent des utilisateurs. Un fichier appartient à un groupe propriétaire, et les utilisateurs qui sont membres de ce groupe, directement ou indirectement, partagent les mêmes droits sur le fichier. Les utilisateurs peuvent être rassemblés selon la fonction, l'utilisation d'une ressource, la position hiérarchique, la participation à un projet, la localisation géographique. La configuration des groupes La configuration des groupes Commands group groups newgrp chgrp sg groupadd (addgroup) groupdel (delgroup) gpasswd groupmod vigr Files useradd g usermod g grpck grpconv grpunconv /etc/group /etc/gshadow /etc/adduser.conf Option SHADOWGRP Les exemples des groupes gpasswd A admin M membre, member GROUPE (Définit un administrateur et des membres) gpasswd a indi GROUPE (Intègre un membre) gpasswd GROUPE (Active un mot de passe) gpasswd r GROUPE (Suppression du mot de passe) gpasswd R GROUPE (Désactive l'accès avec newgrp) find / gid 512 exec chgrp NEWGROUP {} \; find / group 512 groupmod n KROUPE GROUPE ; groupmod g 1234 GROUPE groupadd g 666 DOUBLE ; groupadd g 666 o DIABOLO groupdel DOUBLE ; groupdel DIABOLO !© Les services par Patrick Hautrive !;~) 2010 94 QUOTA Les restrictions quantitatives Les quotas représentent pour les utilisateurs (users) et les groupes (groups) des restrictions quantitatives sur l'usage du disque. Les quotas concernent, soit le nombre maximal de fichiers que peut créer un utilisateur (inodes), soit la taille maximale dans l'espace de stockage que peut occuper les fichiers d'un utilisateur (blocks). Les limites imposées peuvent être des limites douces (soft) ou des limites dures (hard). Les limites douces permettent de prévenir l'utilisateur qu'un seuil d'alerte est dépassé, et de l'encourager à restreindre sont occupation du disque. L'utilisateur dispose alors d'un délai de courtoisie pour remédier à la situation, par exemple en supprimant ses fichiers inutiles. Les limites dures sont des limites infranchissables, et le système empêchera la création ou l'enregistrement d'un fichier. La marge de manœuvre temporaire se situe entre la limite inférieure (soft) et la limite supérieure (hard). La fonctionnalité des quotas doit être intégrée au noyau lors de sa compilation (kernel). La gestion des quotas peut être automatisée (crontab) et simplifiée avec les options de montage (usrquota et grpquota) dans le fichier “/etc/fstab”. Des profils standards peuvent être utilisés comme prototypes afin de pouvoir calquer une configuration chez un autre utilisateur. La configuration des quotas La configuration des quotas Commands quota edquota quotaon quotaoff Files repquota smbcquotas quotacheck man quota convertquota warmquota quota.user quota.group aquota.user aquota.group Packages /etc/fstab quota /usr/include/sys/quota.h quotatool webminquota Les exemple s de quotas quotaon a quota v quota v $USER quota g GROUP df /home/$USER edquota t edquota p profil $USER edquota g GROUP !© Les services par Patrick Hautrive !;~) 2010 95 quotaon /home quotaoff /home edquota – $USER f /dev/hdb1 edquota g GROUP f /dev/hdb1 repquota a repquota ug /home quotacheck cguv f /dev/hdb1 grep i quota /usr/src/linux/.config CONFIG_QUOTA=y CONFIG_XFS_QUOTA=y grep quota /etc/fstab /home /de/hda5 xfs usrquota,grpquota,noauto 0 !© Les services par Patrick Hautrive !;~) 2010 96 0 CRONTAB L'automatisation des tâches Le service crontab a été développé par Paul Vixie. L'automatisation des tâches dans les fichiers crontab permet de programmer l'exécution répétitive et régulière de tâches standardisées. La commande “crontab” et le serveur “crond” permettent de gérer l'ordonnancement de travaux détachés (nohup) du terminal (tty). Le serveur “crond” est un service qui est lancé lors de la procédure d'initialisation du système (init), et les messages systèmes (syslogd) sont enregistrés par le service de journalisation (facility). Les utilisateurs peuvent gérer et planifier eux même leur propre automatisation des tâches. Les éventuels messages d'erreurs (stderr) sont alors envoyées par mail à l'utilisateur. Les commandes enregistrées dans un fichier crontab sont exécutées depuis le répertoire personnel de l'utilisateur qui les a enregistrées ($HOME). Les fichiers crontab des utilisateurs qui sont générés avec la commande «crontab e» sont enregistrés dans le répertoire «/var/spool/cron/tabs/$USER». Lors de la création d'un fichier crontab par un utilisateur, le serveur crond contrôle les éventuelles restrictions qui figurent dans les fichiers «/etc/cron.deny» et «/etc/cron.allow». Le serveur crond recherche les tâches à effectuer toutes les minutes, et dans l'ordre examine le fichier de configuration «/etc/crontab» et les répertoires «/etc/cron.d/*» et «/var/spool/cron/*». L'heure du système Les tâches sont exécutées en fonction de l'heure du système (system time) sur lequel le daemon crontd fonctionne. Les systèmes qui fonctionnent avec des multiples utilisateurs qui travaillent dans des zones géographiques différentes, ou qui prennent en compte les modifications de l'horloge en fonction des périodes d'ensoleillement de l'année (l'heure d'été) ou DST (Daylight Saving Time) sont susceptibles de rencontrer des problèmes, puisque la linéarité temporelle n'est plus respectée. Toutefois, des horaires spécifiques peuvent être configurés avec la variable TZ (time zone) de chaque utilisateur. L'enregistrement d'une tâche Il existe quatre façons différentes d'enregistrer une tâche pour le serveur crond. L'enregistrement d'une tâche dans le fichier «/etc/crontab» est réservé à l'administrateur (root). L'administrateur qui souhaite spécifier un utilisateur particulier, enregistre les tâches avec la commande «crontab – user e». !© Les services par Patrick Hautrive !;~) 2010 97 Les utilisateurs enregistrent leurs tâches avec la commande «crontab e». L'enregistrement d'une taĉhe peut également être répertorié dans le répertoitre «/etc/cron.d/*». Les fichiers qui s'y trouvent seront lus et exécutés par le serveur crond. Ces fichiers sont écrits avec la syntaxe d'un fichier crontab. L'enregistrement d'une tâche périodique peut enfin être placé dans les répertoires spécifiques. Dans ces répertoires, les fichiers sont des scripts shell, et ne sont pas écrits avec la syntaxe crontab: /etc/cron.daily/* /etc/cron.hourly/* /etc/cron.monthly/* /etc/cron.weekly/* Des tâches peuvent être également lancées pendant l'initialisation du système (@reboot). La commande “crontab e” permet d'enregistrer (edit) et de vérifier la syntaxe d'une ligne. Les scripts périodiques Les scripts périodiques sont des scripts shells exécutables, et sont placés dans les répertoires spéciaux, comme /etc/cron.daily/*, /etc/cron.hourly/*, /etc/cron.monthly/*, /etc/cron.weekly/*. C'est le script «/usr/bin/runparts» ou le script «/usr/lib/cron/runcrons» qui lance les scripts qui figurent dans ces répertoires périodiques. Les crontab des utilisateurs Les fichiers crontab des utilisateurs, autres que l'administrateur, sont sauvegardés dans le fichier «/var/spool/cron/tabs/$USER», et ne comporte pas le paramètre correspondant à l'utilisateur (user) puisque ce sont des fichiers particuliers, dont les tâches ne concerne que l'utilisateur qui les a créées. Ces tâches particulières seront exécutées avec les permissions de l'utilisateur. Le format des enregistrements Dans un fichier crontab, chaque ligne représente une tâche différente. Le dernier paramètre représente toujours la commande a exécutée. Pour les tâches enregistrées par l'administrateur (root) dans le fichier «/etc/crontab», l'avant dernier paramètre représente le compte (account) avec lequel l'administrateur souhaite lancer la commande. Pour les fichiers crontab des utilisateurs (users), générés avec la commande «crontab e», le paramètre correspondant au compte de l'utilisateur n'est pas mentionné. Chaque enregistrement dans le fichier «/etc/crontab» est composé d'au maximum huit paramètres, !© Les services par Patrick Hautrive !;~) 2010 98 lesquels sont séparés par un espace (space). Le fichier «/etc/crontab» accepte huit paramètres possibles (minute, hour, day, month, weakday, year, user, command). Les cinq ou six premiers paramètres correspondent à la périodicité (minute, hour, day, month, weakday, year). Le sixième paramètre qui correspond à l'année est un paramètre optionnel (optional). Le septième paramètre correspond à l'utilisateur (user) choisit par l'administrateur et ne figure que dans le fichier «/etc/crontab». Le huitième paramètre correspond à la ligne de commande qui sera exécutée (command line). L'avant dernier paramètre représente toujours l'utilisateur, et le dernier paramètre représente toujours la commande (command), ou le script exécutable (executable script). Pour décrire la commande à exécuter, il est toujours préférable d'utiliser leurs chemins absolus (absolut path) dans l'arborescence du système de fichier racine (root file system), ou de s'assurer que les autres systèmes de fichiers sont bien montés (mount). Le fichier /etc/crontab (man 5 crontab) Les variables d'environnement de crontab pour l'administrateur (root) SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ Les champs du fichier /etc/crontab Periodicity Account Command Minute Hour Day Month Day of the week Year User cmd (0059) (023) (131) (112) (jandec) (07) (sunsun) 1970 root script Les jokers de crontab La valeur d'un paramètre peut être remplacée par une expression régulière (regex), une succession de valeurs séparées par une virgule («x,y»), un intervalle de valeur («xy»), une période de rotation (*/5) ou l'emploi d'un joker (“*”, «?», «#») ou des lettres L (Last day of the weak or of the month), W (nearrest weakday of the month). !© Les services par Patrick Hautrive !;~) 2010 99 Les jokers de périodicité de crontab (man 5 crontab) Minute Hour Day (0059) (023) (131) * / , * / , * / , ? Month Day of the week Year (112) (jandec) (07) (sunsun) 1970 * / , * / , ? to (L #) 2099 (L W) Des exemples d'enregistrement crontab Des exemples d'enregistrement d'une tâche dans /etc/crontab (man 5 crontab) Minute Hour 0 0 0 0 0 */10 0 * 0 1 1 1 1 1 * 1 * 0 Day Month Day of the week User * * 1 * 1,15 * “115” * */5 * * * 1 1,3,6,9,12 * * 1 1 * * * * * * 0 * * root root root root root root root root root Command Every morning at one o'clock Every first day of the month Every first and fithteen of the month Every day from first to fithteen Every five days Every ten minutes At one, every three months on sunday Every minute, every hour, every day Every happy new year Les raccourcis de crontab A la place de ces paramètres, il est possible d'employer un raccourci, commençant par le signe arrobase. Les raccourcis de crontab (/etc/crontab) (man 5 crontab) Shortcut @hourly @daily or @midnight @weekly @monthly @yearly or @annually @reboot Equivalence 0 * * * * 0 0 * * * 0 0 * * 0 0 0 1 * * 0 0 1 1 * Init 6 Fonction Once an hour Once a day Once a week Once a month Once a year Once at reboot !© Les services par Patrick Hautrive !;~) 2010 100 La configuration de crontab La configuration de crontab (man crontab) Commands cron crontab kcron anacron batch at atq atrm runparts runcon Files dh_installcron man 1 crontab man 5 crontab man 1p crontab man cron man anacron man anacrontab /etc/crontab /etc/cron.d/* /var/spool/cron/* /etc/sysconfig/cron /etc/syslog.conf /etc/anacrontab /etc/cron.deny /etc/cron.allow /etc/cron.hourly /etc/cron.daily /etc/cron.weekly /etc/cron.monthly Servers /etc/at.deny crond /etc/at.allow atd /var/spool/at /var/spool/anacron /var/spool/cron/crontab/$USER /var/spool/cron/tabs/$USER /var/log/cron /root/bin/cron.daily.local /var/spool/cron/lastrun /usr/bin/runparts /usr/lib/cron/runcrons Les exemples de crontab /etc/rc.d/init.d/cron restart kill HUP crond crontab u joe e (editing) crontab u joe l (listing) crontab r $USER (remove) crontab (create) crontab /etc/crontab export VISUAL=vi ; setenv EDITOR vi runparts /home/scripts vi todo.txt 1/5 * * * * echo “hello world” chmod a+x todo.txt crontab todo.txt echo noone > /etc/cron.deny touch /etc/cron.daily.local anacron f at l at d at 5:15pm dec 25 echo “hello world” Ctrl+D at 23:00 +3 hours !© Les services par Patrick Hautrive !;~) 2010 101 at now +5 days at now +1 day at f echo “hello world” Ctrl+D at f script now+2days at 18:00 rm Rf /tmp/* Ctrl+D at teatime ; at now ; at noon ; at midnight !© Les services par Patrick Hautrive !;~) 2010 102 MAKE La construction d'exécutables La compilation consiste en la construction d'exécutable. A partir des sources d'un programme (source), le compilateur transforme les instructions écrites dans un langage de programmation (langage) en des instructions écrites en langage machine (code) et propres à une architecture processeur (architecture). Les Makefiles sont des fichiers qui contiennent les instructions pour construire les exécutables. Les Makefiles peuvent servir à compiler les sources d'un programme ou à l'installation une application (package). Les Makefiles décrivent les étapes de la construction, avec des règles (rules), des cibles (target), la liste et la priorité des dépendances explicites et implicites de l'application (dependancies). La construction d'un exécutable se produit en général en trois phases: la configuration qui permet de choisir certains paramètres, la compilation qui transforme les sources en code, et l'installation proprement dite qui consiste à copier les fichiers aux bons endroits. Le script “configure” L'exécution du script “configure” constitue la première phase de la construction d'un exécutable. Les scripts “configure” suivent en général les mêmes procédures qui sont basées sur le package Gnu Autoconf. Toutefois, les scripts “configure” sont écrits selon les désidérata du programmeur. Le script “configure” doit être exécutable (chmod), et il est exécuté en utilisant le chemin relatif au répertoire parent (“./configure”). Dans un premier temps, le script “configure” analyse le système pour vérifier si tous les utilitaires nécessaires sont bien présents (makefile.in, configure.in), puis il construit ou adapte le fichier Makefile à partir du package Automake. Par défaut, les programmes s'installent dans le répertoire “/usr/local/bin”. La configuration des Makefiles La configuration des Makefiles Commands make automake autoconf imake qmake Files README INSTALL MAKEFILE !© Les services par Patrick Hautrive !;~) 2010 103 Packages Autoconf Automake Un exemple de construction Un exemple de construction d'un exécutable 1. Download L'archive peut être téléchargée sur un serveur FTP avec la commande “wget” L'archive peut être constitués des sources d'un programme (tarball) sur un cdrom L'archive peut être des dépendances (dependancy) ou des bibliothèques (library) cd /tmp ftp ftp://ftpserver.tld:/pub/linux/ wget ftp://ftpserver.tld:/pub/linux/archive.tar.gz chmod 1777 /usr/src mkdir /usr/src/archive cp /tmp/archive.tar.gz /usr/src/archive 2. Decompression cd /usr/src/archive tar zxvf archive.tar.gz tar tzvf archive.tar.gz | more tar tyvf archive.tar.bz2 | more cat archive.tar.bz2 | bzip2 d | tar xvf 3. Documentation cd archive ; ls less README ; less INSTALL ; less MAKEFILE vi .config.h less Makefile.in less configcache 4. Configuration ./configure –help ./configure –prefix=/usr –withthreads cp configcache configcacheold ./configure 5. Compilation make make all 6. Installation su make install ldconfig gcc v ls /usr/local/archive echo $PATH 7. Utilisation man archive info archive archive help !© Les services par Patrick Hautrive !;~) 2010 104 GCC Le compilateur gcc Le compilateur GCC (Gnu C Compilator) est le compilateur en langage C pour Gnu. C'estàdire que c'est le programme qui transforme le code source en langage exécutable, directement utilisable par le système et le processeur. Les langages de programmation Les langages de programmation peuvent être classés en plusieurs catégories. L'on distingue habituellement les langages machines (assembler), les langages compilés (“C”), les langages interprétés comme les scripts shells (bash), les langages de description (html) et les langages orientés objets ou de quatrième génération (delphi). Les environnements de programmation intégrée sont des logiciels ou des plateformes qui permettent de programmer et de compiler avec plusieurs langages de programmation. Les langages de programmation Langages Spécifications Tools Machine Assembler Compilé Interprété Descriptifs Binaires C, Fortran, Pascal Bash, les Scripts Shell HTML (Hyper Text Markup Language) Emacs, Visual Studio Orienté Objet C++, Delphi C++ Builder, Kdevelopp, Kylix Les formats binaires Les formats binaires ont évolués et l'on parle de compatibilité binaire (binary compatibility) quand le même binaire est directement exécutable dans différents environnements systèmes, et de compatibilité au niveau des sources (source compatibility) quand le même programme peut être compilé sans modifications pour plusieurs plateformes. Les programmes Gnu Linux sont compatibles au niveau des sources avec les systèmes BSD. Les bibliothèques (library) utilisent le format Unix™. Les formats ELF et COFF sont les formats originaux des systèmes Unix™. !© Les services par Patrick Hautrive !;~) 2010 105 Les phases de la compilation Les phases de la compilation en langage C Phase Format 1. Le code source 2. Le préprocesseur 3. Le compilateur 4. L'assembleur 5. L'éditeur de lien Bibliothèques dynamiques (table de saut) Bibliothèques statiques (insertion de routines) Texte Headers Code assembler Binary Executable Extension (“.c”) (“.h”) (“.i”) (“.o”) (“.s”) Name PLC CC1 ASS Linker (“.so”) (“.a”) Le langage C Le langage C est le langage natif des systèmes Unix™ et de Gnu Linux. Le langage C utilise le format ELF et a été normalisé par l'organisme ANSI. Les spécifications du langage C Le format ELF La norme ANSI C Les fichiers code source (source) en langage C (“.c”) Les fichiers entêtes (headers) sont des fonctions qui doivent être installées (“.h”) Les fichiers objets (object) sont le résultat de la compilation (“.o”) Un langage de programmation compilé (gcc) Le prototypage des fonctions La compilation des informations de débogage (gdb) Le débogage pas à pas (step by steps) L'optimisation de l'organisation entre les instructions et les données Le commutateur Assembler La représentation du code en ligne (inlining) !© Les services par Patrick Hautrive !;~) 2010 106 Le premier programme C vi hello.c include <stdio.h> int main () { (void) printf (“Hello World \n”); return 0 ; /* First program in C to print one single phrase*/ } La configuration de gcc La configuration de GCC Commands gcc g++ ranlib ld.so indent litool Files readelf Packages Autoconf glibc Les exemples de gcc gcc O g o prog prog.c (deboggage) gcc O g tutu toto.c titi.c (optimisation) gcc c toto.c gccO o tutu toto.o titi.o gcc c cube.c factor.c (bibliothèques statiques) ar 6 libperso.a cube.o factor.o ranlib libperso.a (génération de l'index) vi libperso (création d'un fichier entête personnalisé) extern float cube (float); extern float factor (int,int); vi programme.c #include “libperso.h” cd ~/src gcc I ../include L ../lib o programme programme.c c libperso.h gcc c fpic cube.c factor.c (bibliothèques statiques) gcc c shared o libperso.so cube.o factor.o ldd programme (name + path + @virtual) indent troff toto.c | groff m indent cc static prog.c o prog.sta (édition des liens statiques) !© Les services par Patrick Hautrive !;~) 2010 107 cc prog.c o prog.dyn (édition des liens dynamiques) !© Les services par Patrick Hautrive !;~) 2010 108 LIBRARY Les bibliothèques Les bibliothèques (library) sont des morceaux de programmes qui sont conçus pour s'utiliser avec d'autres programmes, une même bibliothèque pouvant servir à plusieurs programmes différents. Une bibliothèque peut être appelée par un ou plusieurs programmes en même temps. Les programmes peuvent être compilés en intégrant les bibliothèques, et l'on parle alors de bibliothèques statiques (static), ou bien en faisant seulement référence aux bibliothèques qu'il utilise, et l'on parle à ce moment de bibliothèques dynamiques (dynamic). Le code des bibliothèques statiques est inséré dans le programme au moment de la compilation, et permet de construire des programmes autonomes (independent). Les bibliothèques dynamiques sont aussi appelées des bibliothèques partagées (shared libraries). La construction des programmes à l'aide de bibliothèques partagées est encouragée bien qu'elle provoque des problèmes de dépendances qu'il faut aussi résoudre (dependancy). Les librairies dynamiques portent une extension «.so» (shared object), tandis que les librairies statiques portent une extension «.a» (assembly). ftp://ftp/ibiblio.org/pub/linux/gcc/ Les bibliothèques Gnu Name libc libm libncurses libX11 cin, cout Fonction Library C standard Library mathematical Librairie d'émulation d'une fenêtre de console Library X window Libraries for C++ Les bibliothèques dynamiques L'édition des liens (linking) est une étape de la construction d'un exécutable (gcc), et permet d'intégrer dans le programme compilé les références aux bibliothèques dont il a besoin pour fonctionner. Les bibliothèques dynamiques permettent de construire des binaires avec une taille moins importante (space). Les bibliothèques dynamiques permettent de ne télécharger, et de n'installer, qu'une seule fois le même code. Les bibliothèques dynamiques peuvent être partagées en mémoire vive (memory) et ainsi permettent de gagner de l'espace en mémoire de travail. L'éditeur de lien (ld) s'occupe de construire les liens qui font référence aux bibliothèques partagées à l'intérieur du binaire d'un !© Les services par Patrick Hautrive !;~) 2010 109 programme (library linker), et s'occupe également de charger en mémoire les bibliothèques partagées d'un programme en exécution (library loader). Les numéros de version Les versions des programmes et des bibliothèques doivent évoluées de concert afin de rester compatibles. Un même programme peut ne fonctionner qu'avec certaines versions de bibliothèques (version). Les noms des programmes et des bibliothèques portent un numéro majeur (major) et un numéro mineur (minor) qui permettent de savoir, s'ils correspondent, et s'ils sont compatibles. La recompilation des applications dont le numéro de version majeure change est parfois indispensable, alors qu'elle n'est pas toujours nécessaire quand seulement le numéro mineur change. Par ailleurs, la version des routines de liaison (stubs) doivent correspondre à la version des bibliothèques partagées (shared). La compatibilité ascendante (ascendant compatibility) consiste pour une bibliothèque à rester compatible sur plusieurs générations de programmes. Pour ce faire, il faut naturellement conserver la même structure de données et les mêmes appels de fonction. Le chargeur de librairies Le chargeur de librairies (dynamic loader) est une librairie (ld.linux.so.2) dont le rôle est de trouver dans le système, et de charger en mémoire, les librairies partagées qui sont appelées par les programmes en exécution. Les chemins de recherche des bibliothèques partagées sont enregistrés dans les fichiers “/etc/ld.so.conf” et “/etc/ld.so.cache”. A l'intérieur du fichier “/etc/ld.so.conf” peut se trouver une directive «include» faisant référence à un autre fichier de configuration. La commande “ldconfig” permet de mettre à jours les changements et les fichiers de configuration. L'existence de plusieurs chemins de recherche permet d'installer plusieurs versions différentes des mêmes bibliothèques. Ainsi, il est possible d'installer des programmes qui requièrent des versions différentes de la même bibliothèque. Les répertoires courants pour l'installation des bibliothèques sont “/usr/lib/*” et “/lib/*”. Il est possible de rajouter d'autres chemins de recherche avec la variable LD_LIBRARY_PATH. Un utilisateur peut très bien disposer dans son arborescence personnelle d'un répertoire pour ses bibliothèques (“~/lib/*”). La commande “ldd” montre les bibliothèques partagées dont dépendant le programme passé en paramètre. La librairie «ld.so» avait auparavant la responsabilité de charger les librairies dynamiques dans un ordre spécifique. !© Les services par Patrick Hautrive !;~) 2010 110 L'ordre de recherche des librairies dynamiques de «ld.so» (/etc/ld.so.conf) 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. LD_LIBRARY_PATH /etc/ld.so.cache /lib /usr/lib /usr/X11R6/lib/Xaw3d /usr/X11R6/lib /usr/lib/Xaw3d /usr/i386suselinux/lib /usr/local/lib /opt/kde3/lib include /etc/ld.so.conf.d/*.conf La commande «man ld» explique le fonctionnement du chargeur de librairies (gnu linker). La configuration des bibliothèques La configuration des bibliothèques Commands gcc ldconfig ldd lddlibc4 Files Paths ld man ldconfig /etc/ld.so.conf LD_LIBRARY_PATH ld.so man ld /etc/ld.so.cache /etc/ld.so.cache ld.linux man ldd /etc/lib.so.conf include otherlibpath.conf ld.linux.so.2 /etc/ld.so.conf.d/*.conf /lib/* /usr/lib/* /usr/local/lib/* /usr/X11R6/lib/* ~/lib/* Les exemples de bibliothèques export LD_LIBRARY_PATH=”/usr/lib:/opt/lib” ldd /bin/ln ldd /sbin/sln ldd /usr/bin/X11/xterm ln sf /usr/X11R6/lib/libX11.so.6 /usr/X11R6/lib/libX11.so.6.3 ldconfig p | less ldconfig n ls /etc/lib.so.conf !© Les services par Patrick Hautrive !;~) 2010 111 MODULE Le noyau modulable Le système Gnu Linux est un noyau modulable. La configuration du noyau (kernel) permet de choisir les fonctionnalités qui seront directement intégrées dans le noyau, et celles qui y seront rattachées sous forme de modules. La modularité du noyau permet de concilier la rapidité (fast) d'un noyau de petite taille (light) et la souplesse (smooth) d'un noyau qui s'adapte aux circonstances, et non l'inverse. La modularité propose également l'avantage de l'indépendance (independance). Les programmeurs disposent en effet d'une interface stable (interface) pour écrire les pilotes (driver). Le cœur du noyau monolithique reste relativement inchangé, tandis que les modules peuvent se développer indépendamment les uns des autres, et indépendamment du noyau. Un serveur (daemon) permet de charger en mémoire les modules dont le noyau a besoin (auto clearing). Les modules sont ensuite déchargés quand ils ne sont plus utilisés. Le service responsable du chargement des modules a évolué, et fut d'abord “kerneld” (noyau 2.0), puis ensuite “Kmod” (noyau 2.4). Les modules apparaissent sous la forme d'un fichier objet (“.o”) ou d'un fichier “kernel object” (“.ko”). Le fichier de configuration des modules “/etc/modules” liste les modules du noyau qui seront chargés au démarrage. Les noms d'alias sont attribués aux modules, afin d'en faciliter la gestion. Par exemple, les pilotes des cartes réseaux sont rassemblés dans le répertoire “/lib/modules/$(uname r)/kernel/net/*”. Les modules peuvent être dépendant les uns des autres (dependancies). La configuration des modules La configuration des modules Commands Files lsmod (list) insmod (install) rmmod (remove) modprobe (detection) depmod (dependancies) modinfo (information) modload (thread kernel) modconf (Debian) updatemodules usbmodules dh_installmodules pcimodules lspci lsusb isapnp pnpdump dmesg kerneld kmod uname /etc/modules.conf man modules /etc/modules (Debian) man modprobe /etc/conf.modules (Red Hat) man modprobe.conf /etc/modprobe.d/aliases man depmod /etc/modutils man modules.dep /etc/isapnp.conf /usr/include/linux/kmod.h /lib/modules/$(uname r)/*.o /lib/modules/$(uname r)/modules.dep /lib/modules/$(uname r)/build/net/* /lib/modules/$(uname r)/kernel/net/* MODPROBE_OPTIONS !© Les services par Patrick Hautrive !;~) 2010 112 Un exemple d'installation Un exemple d'installation de module cd /usr/src tar xvfz module.tar.gz cd module less README make make install ls /lib/modules/$(uname r)/module.o insmod f module depmod a modprobe module ls mod modinfo module rmmod module /etc/rc.d/init.d/kerneld restart Le fichier /etc/modules.conf Un exemple de fichier /etc/modules.conf alias usbcontroler usbuhci alias eht0 ne option eth0 irq=10 io=0xee00 alias sound sb option sb io=0x220 irq=5 dma=1 dma16=5 npu_io=0x330 !© Les services par Patrick Hautrive !;~) 2010 113 RPM Les packages Les packages (archive) constituent un format de conditionnement des Logiciels Libres et un mode de gestion des applications. Les packages sont généralement proposés, soit dans leur version source (source) ou dans une version pré compilée (binary). Les packages de binaires sont compilés avec des liens de bibliothèques dynamiques (dynamic libraries). Les gestionnaires de packages (manager) permettent de faciliter la gestion des installations et des désinstallations, et de résoudre les dépendances et les versions des bibliothèques. Les archives sont composées des fichiers (files) et de données de gestion (meta data). Les packages sources (src) ne dépendent d'aucune architecture (noarch), mais requièrent d'être compilés (gcc). Les packages binaires sont parfois proposés pour plusieurs types d'architectures (32 bits ou 64 bits). Pour les architectures Pentium d'Intel, les archives peuvent être pré compilées et spécialement optimisées pour certains types de processeurs (i386, i586 ou i686). Il existe deux types de packages différent, les packages RPM (avec l'extension “.rpm”), et les packages Debian (avec l'extension “.deb”). Tous les packages d'un même type (RPM ou DEB) sont construits selon les mêmes règles (rules). Lors de l'installation d'une application, le gestionnaire de package effectue une vérification des dépendances (dependancies). La commande “alien” permet de convertir un format de packages dans un autre format. Toutefois, il est toujours préférable d'utiliser les packages prévus pour le type de distribution, ou d'utiliser des archives sources (tarball). Les packages RPM Les packages RPM (Red Hat Package Manager) concernent principalement les distributions qui emploient ce format pour la gestion des applications, c'estàdire les distributions Red Hat, Fedora, Mandrake, Mandriva et SuSE. Les noms des packages RPM (archive) permettent d'identifier le programme (software), les numéros de version (version) et de sortie (release), le type d'architecture processeur (architecture), et l'extension “.rpm” caractérisant les packages RPM (extension). La base de données (data base) rassemblant tous les packages disponibles sur un système Gnu Linux de type RPM est enregistrée dans le répertoire “/var/lib/rpm/*”. La commande rpm La commande “rpm” permet de gérer les packages RPM. !© Les services par Patrick Hautrive !;~) 2010 114 Les options de la commande rpm Options rpm –initdb rpm ivh archive.rpm rpm Uvh archive.rpm rpm evh archive.rpm rpm qpl archive.rpm rpm qa archive rpm qf /usr/bin/archive rpm qi archive Installation (data base) (install) (update) (erase) (list) (query all) (query file) (query infos) rpm i –nodeps archive.rpm rpm i –force archive.rpm rpm i –ignorearch archive.rpm rpm i –ignoreos archive.rpm rpm i –test archive.rpm rpm i checksig archive.rpm rpm i –nosignature archive.rpm gpg –import signature.asc (no dependancy) (force install) (ignore architecture) (ignore os) (test only) (check signature) (no signature check) (import signature) La configuration des packages RPM La configuration des packages RPM (Red Hat Package Manager) Commands rpm urpmi rpmdrake yum up2date autorpm alien Files man rpm /etc/rpmrc /etc/rpm/macros /usr/lib/rpm/rpmrc Les exemples de RPM rpm qal xsnow | sort | less rpm qlc xsnow rpm qld xsnow rpm qpi xsnow1.411.i386.rpm rpm e –nodeps xsnow rpm ivh xsnow1.411.i386.rpm rpm Uvh xsnow1.411.i386.rpm ls /usr/X11R6/bin/xsnow rpm qf /usr/X11R6/bin/xsnow rpm qa > listrpm.txt mount /dev/cdrom cd /mnt/cdrom/RedHat/RPMS rpmivh package.rpm (query list configuration files) (query list documentation files) (query package information) !© Les services par Patrick Hautrive !;~) 2010 115 DEB Les distributions Debian Les distributions Debian sont réputées pour leur exemplarité et leur conformité à l'esprit des Logiciels Libres (free software). La distribution Debian est conforme à 100% avec la licence Gnu GPL. La philosophie Debian est un engagement (constitution) envers la communauté des Logiciels Libres (social contract) et répond à des règles de fonctionnement qui sont suivies et explicitées (policy manual). Les distributions Debian sont développés continuellement (unstable), mais elles ne sont distribuées officiellement que quand elles sont jugées opérationnelles (stable). La philosophie Debian (http://debian.org ) /usr/share/doc/debian/socialcontract.txt /usr/share/doc/debian/constitution.txt /usr/share/doc/debianreferenceen /usr/share/doc/debian/debianmanifesto Les packages Debian Les packages Debian sont disponibles en tant que sources ou DSC (Debian Sources), et en tant que binaires ou DEB (Debian Binaries). Le gestionnaire de packages est l'ensemble des programmes APT (Advanced Package Tool). Les distributions Knoppix ou Ubuntu sont des distributions de type Debian qui utilisent les même packages et les mêmes outils. La documentation Apt Howto décrit l'utilisation du gestionnaire de packages pour les distributions Debian. La commande “alien” permet de convertir les packages du format RPM au format DEB et vice versa. La commande dpkg La commande dpkg (man dpkg) (man dpkgdeb) dpkg c archive.deb dpkg i archive.deb dpkg r archive dpkg P archive dpkg I archive.deb dpkg –audit dpkg content archive.deb dpkg S motif dpkg s archive dpkg l motif dpkg L archive dpkg p archive (content) (install) (remove) (purge) (information) (audit) (files into archive) (search motif in installed packages) (status) (list packages with motif) (list files from package) (print information available) !© Les services par Patrick Hautrive !;~) 2010 116 Les dépendances des packages Les dépendances “normales” (normal) sont les packages dont dépend une archive pour fonctionner. Les dépendances “importantes” (important) sont indispensables pour le fonctionnement d'une archive, tandis que les dépendances “suggérées” (suggested) sont optionnelles. Les dépendances “inverses” (reverse) sont les packages qui dépendent de l'archive pour fonctionner. Les packages peuvent être marqué par une “priorité” (policy) ou une “préférence” (preferences) qui figure dans le fichier “/etc/apt/preferences”. La commande aptget Les commandes “aptget”, “aptshow” et “aptcache” acceptent l'emploi des expressions régulières POSIX (regex), qui s'appliquent à tous les packages recensés (*, ?, ., $, ^). Les commandes de gestion des packages (man aptget) aptget update aptget –showupgraded aptget upgrade archive aptget distupgrade aptget s install archive aptget install archive aptget remove archive aptget –purge archive aptget check aptget clean aptget –fixbroken aptget dselectupgrade (synchronisation des sources «/etc/apt/sources.list») (liste les mises à jours des packages) (mise à jours des packages) (mise à jours des packages et des dépendances) (simulation de l'installation d'une archive) (installation d'une archive) (désinstallation d'une archive) (supprime l'archive et ses fichiers de configuration) (vérification des dépendances) (suppression des archives téléchargées) (réparation des dépendances) (mise à jours des packages selon leur statut) La commande aptcache La commande “aptcache” utilise les informations enregistrées dans les fichiers cache. La commande aptcache pour la gestion du cache des packages (man aptcache) aptcache stats aptcache dumpavail aptcache search motif aptcache show archive aptcache showpkg archive aptcache depends archive aptcache rdepends archive (affichage nom, nombre, noms virtuels, missing, distinct distribution) (affichage des packages disponibles) (affichage des archives correspondants au motif de recherche) (affichage des informations sur une archive) (affichage des versions, des dépendances normales, et inverses) (affichage des dépendances et des packages pour une résolution) (affichage des dépendances inverses) !© Les services par Patrick Hautrive !;~) 2010 117 La configuration des packages Debian L'outil de base pour la gestion des packages est la commande “dpkg”. Les outils comme “aptitude” ou “synaptic” sont des interfaces conviviales (frontend) pour les commandes “aptget” et “aptcache”. Le fichier « /etc/apt/sources.list » contient des dépots ou miroirs des paquets Debian (repository). Quand de fichier est modifier, la commande « aptget update » doit être lancée pour reconstruire la liste des paquets disponibles dans le cache. La configuration des packages Debian (Apt Howto) Commands taskel dselect dpkg aptget aptshow aptcache aptkey aptsetup aptconfig aptcdrom aptsortpkgs aptftparchive aptextracttemplate dpkgbuildpackage dpkgreconfigure Files aptitude synaptic kpackage gnomeapt alien /etc/dpkg/dpkg.cfg /etc/apt/sources.list /etc/apt/apt.conf /etc/apt/preferences /var/lib/apt/lists/* /var/lib/dpkg/status /var/lib/dpkg/info/* /var/lib/dpkg/available /var/cache/apt/archives/* /etc/popularitycontest.conf man dpkg man dselect man dpkgdeb man dpkgquery man debcontrol man apt man aptget man aptcache man sourceslist man apt.conf man apt_preferences Le fichier sources.list Le fichier « /etc/apt/sources.list » contient les adresses internet où seront recherché les paquets Debian pour les installations et les mises à jours de sécurité (security update). http://debgen.simplylinux.ch/ Chaque ligne correspond à un dépôt (repository). Le premier mot sur chaque ligne indique le type d'archive (deb ou debsrc). Le type d'archive correspond soit à des paquets binaires compilés (binaries), soit à des paquets sources (sources). Les archives sources contiennent le code source des programmes plus le fichier de control Debian (.dsc), et le fichier « diff.gz » contenant les changements nécessaires pour « debianiser » le programme. Ensuite vient l'adresse internet ou se trouve le dépôt, puis, le nom de la distribution (distribution). La distribution peut être indiquée, soit le nom de code (potato, sarge, etch, lenny, squeeze, wheezy, sid), soit par le nom de la classe (oldstable, stable, testing, unstable). L'utilisation du code de la distribution permet de suivre les mises à jours des packages sans upgrader la distribution quand la !© Les services par Patrick Hautrive !;~) 2010 118 testing deviendra stable. Enfin, sont placés les types de paquets (main, contrib, free, nonfree) qui doivent être pris en compte. Le fichier « /etc/apt/sources.list » (man sources.list) Type Addresses Distribution Binaries deb http code Sources ftp classe debsrc Packages potato Official sarge etch lenny squeeze wheezy sid oldstable Third Party stable testing unstable main nonfree free #OFFICIAL DEBIAN REPOS #Debian Main Repos deb http://ftp.fr.debian.org/debian/ squeeze main contrib nonfree debsrc http://ftp.fr.debian.org/debian/ squeeze main contrib nonfree #Debian Update Repos deb http://security.debian.org/ squeeze/updates main contrib nonfree deb http://ftp.fr.debian.org/debian/ squeezeproposedupdates main contrib nonfree debsrc http://security.debian.org/ squeeze/updates main contrib nonfree debsrc http://ftp.fr.debian.org/debian/ squeezeproposedupdates main contrib nonfree #UNOFFICIAL REPOS 3rd Party Binary Repository # Debian Backports http://backports.debian.org/ deb http://backports.debian.org/debianbackports squeezebackports main #Debian Multimedia http://www.debianmultimedia.org/ ## Run: aptget update && aptget install debianmultimediakeyring && aptget update deb http://www.debianmultimedia.org stable main nonfree Les exemples de Debian dpkgreconfigure xserverxorg dpkgreconfigure locales dpkgreconfigure consoledata aptcdrom add aptget update !© Les services par Patrick Hautrive !;~) 2010 119 contrib aptget install +archive archivetoremove archive=version archive/stable aptget install aptitude aptitude –simulate distupgrade aptitude distupgrade aptcache policy cpp aptitude –simulate –purge cpp aptitude search !© Les services par Patrick Hautrive !;~) 2010 120 TARBALL Les archives Une archive est un fichier qui rassemble et contient plusieurs fichiers (box). Une archive compressée est une archive qui a été compressé afin d'en réduire la taille (compress). Les algorithmes de compression (algorithme) des outils de compression sont plus ou moins performants, c'estàdire qu'ils permettent un gain d'espace plus ou moins important, selon le type de fichier (file) et en fonction du temps nécessaire pour effectuer la compression (time). Les fichiers contenus dans une archive peuvent être des programmes sources (source) ou des programmes binaires (binary), des fichiers de configuration (configuration file), ou des bibliothèques (library). Les archives sont également utilisées pour faire des sauvegardes (backup). Les packages Les packages propres aux distributions Red Hat et Debian sont également des archives qui contiennent des fichiers. Les fichiers des packages (packages) ont été organisées pour être utilisés avec un gestionnaire de package (manager) et contiennent des méta données (meta data) en plus des fichiers propres au programme. Les tarballs Les tarballs sont des archives compressées contenant des programmes. La commande “tar” (Tape Archive) permet de rassembler plusieurs fichiers en un seul, et de constituer ainsi une archive. L'archive est ensuite compressée avec un outil de compression. La création des tarballs poursuit ainsi un double processus, d'abord un archivage, et ensuite une compression. Ces deux opérations sont également appliquées aux tarballs après le téléchargement, mais en sens inverse, d'abord une décompression, puis une extraction. En général, les tarballs sont utilisées quand il n'existe pas de packages correspondant pour le type de distribution. Les tarballs sont téléchargées depuis internet, puis décompressées, et les fichiers en sont extrait pour être compilés localement. Toutefois, les mélanges de packages et de tarball peuvent être à l'origine d'incompatibilité, parce que la gestion globale des dépendances n'est plus assurée. La commande tar La commande “tar” effectue aussi bien l'archivage que l'extraction. L'archivage (archiving) consiste à rassembler plusieurs fichiers à l'intérieur d'une archive, tandis que l'extraction (extracting) consiste à récupérer les fichiers contenus dans une archive. La commande “tar” conserve les chemins relatifs au !© Les services par Patrick Hautrive !;~) 2010 121 répertoire courant (path) où elle a été lancée (pwd). La commande “tar” préserve également les attributs des fichiers (attributs), quand le système de fichiers d'accueil le permet. Les options de la commande d'archivage tar (man tar) (info tar) c x f v z j k p Z create extract file verbose compress & decompress with “gzip” compress & decompress with “bzip2” keep existing files no overwrite preserve permissions compress & decompress with “compress” t d r u h m P V list diff add update files not symlinks modified time absolute path volume or label name Les algorithmes de compression Les algorithmes de compression sont classés en deux catégories, par lettre ou par dictionnaire. Les algorithmes de compression par lettre de Huffman date de 1952 (letter), comme la commande “pack”. Les algorithmes de compression par dictionnaire de Lempel et Welch (dictionnary) utilisent un codage par groupe de lettre, comme les commandes “zip” et gzip”. Le processus de compactage requiert du temps et de la puissance de calcul. En général, plus la densité d'une archive est importante (density) et plus les durées de compression et de décompression sont longues (time). Les formats des archives Les tarballs portent habituellement l'extension “.tar.gz” quand elles ont été compressées avec l'outil “gzip” et l'extension “tar.bz2” quand elles ont été compressées avec l'outil “bzip2” qui propose un algorithme de compression plus compacte, et permet de gagner 10% en moyenne. Les tarballs désignent particulièrement des archives contenants les sources d'un Logiciel Libre. Les formats de compression Format Red Hat Debian Gentoo Tarball Tarball Tarball Tools rpm yum dpkg aptget zip unzip gzip gunzip bzip2 bunzip2 compress uncompress Extension .rpm .deb .ZIP .tar.gz .tar.bz2 .tar.Z Spécification Package Package Port Source Gentoo Archive source with Gnu zip Archive Archive !© Les services par Patrick Hautrive !;~) 2010 122 La configuration des tarballs La configuration de l'archivage et de la compression (tarballs) Commands gzip gunzip bzip bunzip bzip2 bunzip2 compress uncompress pkzip pkunzip tkzip tkunzip zip unzip pack unpack dump restore Tools zmore zless zcat zdiff zcmp zgrep tar star cpio dd rsync gzexe Files Pax /etc/dumpdates Winzip.exe Amanda Arkeia Tivoli IBM Omniback HP HOSTDUMP.SH Les exemples de tarball tar cvf archive.tar directory/ (create archive of directory) tar cvf – files | gzip 9 > archive.tar.gz (create & gzip) files && gzip archive.tar gunzip c archive.tar.gz | tar xvf (extract & gunzip) tar cvf archive.tar.bz2 usecompressprogram bzip2 files (create & bzip2) tar czvf archive.tar.gz files (create & gzip) tar cjvf archive.tar.bz2 files (create & bzip2) tar xzvf archive.tar.gz (extract & gunzip) tar xjvf archive.tar.bz2 (extract & bunzip2) tar cf /home/$USER | (cd /save ; tar zvf ) (create & gzip) tar tzvf archive.tar.gz | more (list & gunzip) tar tjvf archive.tar.bz2 | more (list & bunzip2) cat archive.tar.bz2 | bzip2 d | tar tvf (list & bunzip2) cat archive.tar.bz2 | bzip2 d | tar xvf (extract & bunzip2) compress v file ; uncompress file.Z ; zcat file.Z | more zip file.zip *.txt ; unzip file.zip uuencode message gzip v file ; gzip l file.gz ; zcat file.gz file.gz | more ; gzip d file.gz ; gunzip file.gz ls laR $HOME | gzip > liste.gz ; zcat liste.gz gunzip –fast ; gunzip –best gzip 1 archive.tar ; gzip 6 archive.tar ; gzip 9 archive.tar cpio ocvB > /dev/fd0 backupfile.txt CTRL+D !© Les services par Patrick Hautrive !;~) 2010 123 XWINDOW Le serveur graphique La conception d'un affichage graphique, avec des fenêtres, un pointeur suivant les déplacements d'une souris, des boutons, des barre des tâches, des menus et des icônes est issue de la société Xerox. Le serveur graphique des systèmes Gnu Linux a été développé au sein du projet Athena du MIT. Le serveur graphique est un serveur réseau qui fonctionne en mode client serveur. L'affichage des fenêtres peut être déporté sur une autre machine que celle ou tourne le serveur (X forwarding). Le serveur graphique fonctionne généralement localement (localhost). Les applications graphiques locales ou distantes (remote) sont les clientes du serveur graphique. Les applications graphiques distantes reçoivent les données via le protocole TCP/IP. La version libre du serveur graphique ou X Window (version X11 Release 6.3) s'est d'abord appelé Xfree86 puis Xorg. Le serveur graphique est un programme complexe parce qu'il doit prendre en compte, la gestion des entrées (input device) du clavier (keyboard) et de la souris (mouse), le pilote de la carte graphique (graphic card), la gestion de l'affichage (display) sur un ou plusieurs écrans (monitor), la configuration des matériels (device), le nombre de couleurs (depth), le nombre de pixels (resolution), la fréquence de synchronisation (horizontal synchronisation), la fréquence de rafraîchissement (vertical refresh), les pilotes graphiques (modules), les chemins pour les polices de caractères (fonts), les pilotes des images tampons (frame buffer) et les adresses des hôtes pour un affichage distant (remote). Le serveur graphique est lancé lors de la procédure d'initialisation du système (xinit) par le gestionnaire d'affichage (display manager). La configuration du serveur graphique est enregistrée dans le fichier “/etc/X11/xorg.conf”. La documentation Xfree Howto décrit le fonctionnement et la configuration du serveur graphique. La commande “man xserver” décrit le fonctionnement du serveur graphique. L'interface graphique Un système Gnu Linux peut très bien fonctionner sans interface graphique. L'interface graphique est principalement indispensable pour les stations de travail. L'interface graphique se compose de plusieurs éléments, dont les protocoles (protocols), les serveurs (servers) et les clients (clients). Les protocoles peuvent être le protocole de communication réseau qui permet de déporter l'affichage sur d'autres machines (tcpip), le protocole d'échange entre le serveur graphique et les clients (icccm), et le protocole XDMCP (X Display Manager Control Protocol). Les serveurs peuvent être le serveur graphique (X Window) et le serveur de polices de caractères ou XFS (X Font Server). Les clients peuvent être le gestionnaire d'affichage (display manager), le gestionnaire de connexion (session manager), le gestionnaire de fenêtres (window manager), et toutes les applications !© Les services par Patrick Hautrive !;~) 2010 124 graphiques clientes (xclients). Les séquences de touches L'affichage graphique s'effectue sur la septième ou la huitième console (Ctrl+Alt+F7 ou Ctrl+Alt+F8). Les valeurs de zoom de l'affichage peuvent être modifiées avec la séquence de touches Ctrl+Alt+Plus pour le grossissement, et Ctrl+Alt+Minus pour le rapetissement. Le serveur graphique peut être redémarré avec la séquence Ctrl+Alt+Backspace. Dans un terminal la séquence de touche Ctrl+S interrompt l'affichage, mais les commandes saisies sont envoyées après la séquence Ctrl+Q. La configuration de l'affichage La configuration du serveur graphique X Window Commands Files X man xserver startx man xorg startkde man xorg.conf xorgcfg gnome dexconf session getconfig xwindow xorgconfig manager switchdesk xf86config xhost XF86cfg xauth Xfree86 rstart Xfree86Setup xev Xfree86 xrefresh configure xrdb xconfigurator xdpyinfo redhat xwininfo configure xlsatoms xfree86 xvinfo xkbprint /etc/inittab /etc/init.d/xorgcommon /etc/sysconfig/desktop /etc/X11/prefdm /etc/X11/xorg.conf /etc/X11/Xsession /etc/X11/Xwrapper.config /etc/X11/gdm/gdm.conf /etc/X11/gdm/Init/Default /etc/X11/gdm/Sessions/Default /etc/X11/xdm/Xsetup /etc/X11/xdm/Xsession /etc/X11/xinit/xinitrc /etc/X11/xinit/xserverrc /etc/X11/xinit/xclients /etc/X11/xserver/SecurityPolicy /etc/X11/XF86Config /etc/X11/XF86Config4 /etc/X11/* /usr/bin/X11/* /usr/X11R6/* /usr/lib/X11/* Desktop Display CDE xdm Gnome gdm KDE kdm Aqua Virtual Library Pagers Exceed Xinside Winaxe Wine XWin32 Vmware OpenGL QT GTK Kparts XtoolKit Widget Un exemple /etc/X11/xorg.conf !© Les services par Patrick Hautrive !;~) 2010 125 Window Blackbox WindowMaker Enlightenment AfterStep Fluxbox Sawfish Bowman AnotherLevel Fvwm2 twm kwm icccm piewm tvtwm Personal ~/.Xclients ~/.Xressources ~/.Xinitrc ~/.Xdefaults ~/.Xsession ~/.Xserverrc ~/.Xauthority ~/.Xmodmap ~/.gnome/photo Un exemple de configuration du serveur graphique (/etc/X11/xorg.conf) Section "Files" FontPath FontPath FontPath FontPath FontPath FontPath FontPath FontPath FontPath EndSection "unix/:7100" "/usr/lib/X11/fonts/misc" "/usr/lib/X11/fonts/cyrillic" "/usr/lib/X11/fonts/100dpi/:unscaled" "/usr/lib/X11/fonts/75dpi/:unscaled" "/usr/lib/X11/fonts/Type1" "/usr/lib/X11/fonts/CID" "/usr/lib/X11/fonts/100dpi" "/usr/lib/X11/fonts/75dpi" Section "Module" Load Load Load Load Load Load Load Load Load Load Load EndSection "bitmap" "dbe" "ddc" "dri" "extmod" "freetype" "glx" "int10" "record" "type1" "vbe" Section "InputDevice" Identifier Driver Option Option Option Option EndSection Section "InputDevice" Identifier Driver Option Option "/dev/input/mice" Option Option Option EndSection "Generic Keyboard" "keyboard" "CoreKeyboard" "XkbRules" "xorg" "XkbModel" "pc105" "XkbLayout" "frlatin9" "Configured Mouse" "mouse" "CorePointer" "Device" "Protocol" "ImPS/2" "Emulate3Buttons""true" "ZAxisMapping" "4 5" Section "Device" Identifier Driver BusID EndSection "ATI 3D Rage LT Pro (AGP)" "ati" "PCI:1:0:0" Section "Monitor" Identifier Option HorizSync VertRefresh EndSection "Écran générique" "DPMS" 2849 4372 Section "Screen" Identifier "Default Screen" Device "ATI 3D Rage LT Pro (AGP)" Monitor "Écran générique" DefaultDepth 24 SubSection "Display" Depth 1 Modes "1024x768" "800x600" "640x480" EndSubSection SubSection "Display" Depth 4 Modes "1024x768" "800x600" "640x480" EndSubSection SubSection "Display" Depth 8 Modes "1024x768" "800x600" "640x480" EndSubSection SubSection "Display" Depth 15 Modes "1024x768" "800x600" "640x480" EndSubSection SubSection "Display" Depth 16 Modes "1024x768" "800x600" "640x480" EndSubSection SubSection "Display" Depth 24 Modes "1024x768" "800x600" "640x480" EndSubSection EndSection Section "ServerLayout" Identifier Screen InputDevice InputDevice EndSection "Default Layout" "Default Screen" "Generic Keyboard" "Configured Mouse" Section "DRI" Mode EndSection 0666 !© Les services par Patrick Hautrive !;~) 2010 126 Les clients X Window Les clients X Window sont tous les programmes graphiques dont l'affichage est assuré par le serveur graphique X Window. Les clients X Window (ls /usr/bin/X11/) (ls /usr/X11R6/bin) xclock xlock xeyes xcalc xlogo xman xbiff xwd xkill xmatrix xclipboard xmessage xletters worm rain worms xmodmap zenity glxinfo glxgears xload xlsclients xlsfonts xlsfonts xfontsel gfontsel Un exemple de X Forwarding Le déportage de l'affichage graphique (xforwarding) permet de construire le contenu d'un affichage sur une machine, et de l'exporter sur une autre machine afin d'y être affiché. Le traitement vidéo pour calculer les pixels et les paramètres de la fenêtre (video processor) et l'affichage ou la présentation du résultat (video print) sont séparés et réalisés par deux machines différentes. Un exemple de X Forwarding X Client X Window + X Libraries xauth nmerge myauth.xa rm myauth.xa export DISPLAY=server.tld:0.0 xeyes Ctrl+C > X Server X Window + X listen tcp echo $DISPLAY xauth list xauth generate xauth nextract myauth.xa $DISPLAY scp myauth.xa client.tld:myauth.xa rm myauth.xa xhost + [email protected] Les exemples de X window sh Xinstall.sh check Xfree86 scanpci Xfree86 probeonly ls ${KDEDIR}/bin.*.kss export PATH=$PATH:/usr/X11R6/bin X :1 ; startx :1 xclock geometry 300x250200x150 xclock display localhost:0.0 export $DISPLAY=soleil.reso:0.0 (Bus Id = 1:0:0) (Display N° 1 avec Ctrl+Alt+F8) (Display & Screen N° 0.0 avec Ctrl+Alt+F7) !© Les services par Patrick Hautrive !;~) 2010 127 xhost +soleil.reso ; X > /tmp/X.out 2>&1 ; xhost vi $HOME/.Xclients #exec startkde exec gnomesession lns /usr/X11/bin/xdm /etc/X11/prefdm vi /etc/X11/Xwrapper.config allowed users=anybody vi /usr/X11R6/bin/startx ServerArgs = “nolisten tcp” vi ~/.Xinitrc exec xterm geometry +1+1 & exec gnomesession #exec startkde #exec twm #exec sawfish #exec blackbox #exec enlightenment xrdb query less /usr/X11R6/lib/X11/rgb.txt vi ~/.Xressources *background : snow xterm *background : white xterm *background : #0000ff wish *banderwidth : 1 xterm font : misc fixed * * xrdb $HOME/.Xressources cp /etc/X11/xorg.conf /etc/X11/xorg.conf.custom sudo sh c 'md5sum /etc/X11/xorg.conf >/var/lib/xfree86/xorg.conf.md5sum' sudo dpkgreconfigure xserverxorg !© Les services par Patrick Hautrive !;~) 2010 128 GNOME Le bureau gnome Le projet du bureau Gnome a été initié par Miguel de Icaza. Le bureau GNOME (Gnu Network Object Model Environment) est constitué d'un ensemble de programmes intégrés qui ont été programmés avec la plateforme de développement Orbit laquelle est une implémentation libre de Corba. L'environnement Gnome utilise les bibliothèques graphiques GTK+ (Gimp Tool Kit Plus). Les exemples de gnome man 1 GDM man 1 gdm man 8 gdm man 8 gdmlogin man 8 gdmchooser man 8 gdmflexiserver export SESSION=gnomesession gmanedit !© Les services par Patrick Hautrive !;~) 2010 129 KDE Le bureau KDE Le bureau KDE (K Desktop Environment) utilise les bibliothèques graphiques QT de la société Trolltech. Les bibliothèques QT 2.2 ne sont devenues libres, sous licence Gnu GPL, qu'avec la concurrence de Gnome. !© Les services par Patrick Hautrive !;~) 2010 130 BACKUP La nécessit é des sauvegardes Les sauvegardes (backup) sont une nécessité. Un fichier numérique peut avoir une durée de vie très longues pourvu qu'il ait été sauvegardé sur un support extérieur. Les modifications apportées à un fichier sur lequel un utilisateur travaille doivent impérativement être sauvegardées régulièrement. Les sauvegardes doivent également être restaurées régulièrement afin de vérifier qu'elles sont conformes à ce que l'on en attend. La loi de Murphy prédit que c'est au moment de la sauvegarde qu'il risque de survenir un problème. La stratégie de sauvegarde doit tenir compte d'une multitude de facteurs liés aux données, aux supports de stockage et aux procédures. La personne responsable des sauvegardes doit prendre en considération, la sélection des fichiers cibles, la période entre deux sauvegardes, l'automatisation des procédures à suivre pour la sauvegarde et pour la restauration, le type du support et la capacité maximale de stockage, le format d'enregistrement, le taux de compression, les outils, le coût de l'infrastructure et de la maintenance, le choix du lieu extérieur au site pour entreposer les jeux, le risque et l'impact d'un échec de sauvegarde, la sensibilité des données, le contrôle de la qualité et de la pérennité des données, les délais pour la remise en état. Les types de sauvegarde La véritable sauvegarde est la sauvegarde totale ou intégrale. Les autres types de sauvegarde ne sont que transitoires, entre deux sauvegardes totales. Les sauvegardes partielles, incrémentielles, différentielles n'existent que pour gagner du temps et de l'espace de stockage. La sauvegarde doit être régulière et fonctionnelle et doit permettre de restaurer rapidement les données ou le système dans un état opérationnel. Les supports de stockage Les supports de stockage sont nombreux (disquette, carte flash, clef usb, cdrom, dvd ré inscriptible, disque dur, bande, serveur, site internet, base de données). Les supports servent en général plusieurs fois, et il en faut plusieurs pour effectuer un roulement complet. L'étiquetage des supports de stockages est très important parce qu'il est souvent le seul moyen de savoir ce qui se trouve à l'intérieur, avant la restauration. L'accès à une bande est séquentiel, c'estàdire qu'il faut dérouler la bande jusqu'à l'endroit où se trouve la donnée recherchée. Les lieux de stockage des supports doivent être préservés des vols et du feu, et doivent conserver des degrés de température et d'hydrométrie convenables et stables. La configuration des sauvegardes Les sauvegardes peuvent être avantageusement automatisées avec les outils de planification comme !© Les services par Patrick Hautrive !;~) 2010 131 “cron”, et de synchronisation sécurisée comme “rsync” (remote synchronisation). La configuration des sauvegardes Commands mv rm cp scp cpio dd tar touch cron rsync rdist wget dump restore Legato Amanda ArcServe Bru Arkeia Tivoli Omniback Target mt ftape ftformat afio cdrecord /etc/* /home/* /usr/src/* /usr/lib/* /var/* Files /etc/dumpdates Les exemples de sauvegarde restore if /backup.dmp mt f /dev/nqst0 rewind rdist f configurationfile tar cvMf /dev/fd0 /etc /home | tee index.multivolumes cpio it < /dev/fd0 > index.backup cpio icvdumB /dev/fd0 find . print | cpio ocvB | compress > /dev/rtf0 find /usr mount | cpio ocvB > /dev/rft0 ls /home | cpio o > /dev/fd0 find / mtime 1 \! type d print > /tmp/daylist ; tar cv T /tmp/daylist f /dev/fd0 !© Les services par Patrick Hautrive !;~) 2010 132 VIM L'éditeur vi L'éditeur “vi” (visual) est présent par défaut sur tous les systèmes Unices. L'éditeur “vi” ou “vim” (visual improve) est un outil standard et léger qui permet d'éditer et de modifier en ligne de commande les fichiers de configuration et les scripts. L'éditeur “vi” se lance dans un terminal virtuel et n'a pas besoin d'une interface graphique pour fonctionner. L'éditeur “vi” propose plusieurs modes différents. Le mode commande est en général le mode par défaut. Le mode commande (command mode) s'obtient avec la touche “ESCAPE”, et permet de passer des commandes. Le mode insertion (edition mode) s'obtient en appuyant sur la touche “I” et permet d'éditer un texte. Le mode étendu (extended mode) s'obtient en appuyant sur la touche “:” qui forme une ligne de commande en bas de la fenêtre de l'éditeur. Les fichiers s'ouvrent dans des tampons (buffer). 26 registres lettrés peuvent conserver des données (register). Des marques lettrées (mark) peuvent être placées pour délimiter des zones. L'éditeur “vim” est un outil complexe et très riche en fonctionnalités, comme peut l'être Emacs. L'éditeur “vim” est un programme libre, sous licence Gnu GPL, développé par Bram Moolenaar, et qui encourage les dons pour aider les enfants en Ouganda (charityware). Les spécifications de “vim” Les spécifications de l'éditeur “vim” Le fichier de personnalisation “~/.viminfo” La création du fichier passé en paramètre quand il n'existe pas L'ouverture d'une copie du fichier passé en paramètre quand il existe Les 26 registres de mémoire sont nommés avec une lettre minuscule ([az]) (register) L'utilisation des tables de codes de caractères pour de nombreuses langues (keymap) La reconnaissance des types de fichiers et des langages de programmation (file type) L'évaluation des expressions arithmétiques (eval) et des expressions régulières (regex) La coloration syntaxique des scripts et des programmes sources (color) L'interface graphique avec des ascenseurs et des menus (gui) La manipulation des différences entre fichiers (diff) L'auto indentation (set autoindent) Le mode commande (cmdline) (“Escape”) Le mode édition (editing) (“i”) Le mode étendu (extended mode) (“:”) L'aide en ligne avec la commande “:!man vi”ou “:help usermanual” Le fichier de configuration “/etc/vim/vimrc” et le répertoire de documentation “/usr/share/vim/*” !© Les services par Patrick Hautrive !;~) 2010 133 Le mode commande Le mode commande de l'éditeur “vim” ESC (command mode) dd Ctrl+z (interruption & background) D k (move up) dG h (moveleft) x l (move right) X j (move down) cc u (undo) C : (extended mode) J i (insertion mode) ^ s (insertion mode) $ a (insertion & move one caracter after cursor) gg A (insertion & move end of line) G o (insertion & open one line under cursor) H O (insertion & open one line over cursor) M R (insertion & replacement except Backspace) L v (visual mode for selection with arrows) /motif V (visual line for the selection of the line) ?motif yy (copy cursor line into current register) /[AZ] p (paste current register in line under cursor) n P (paste current register line over cursor) mx ~ (change caracter in uppercase or lowercase) 'x “Ayy (copy line of the cursor in register “A”) ZZ “Ap (paste register “A” in line under cursor) Ctrl+f “K5dd (cut 5 lines and keep them in register “K”) Ctrl+b (delete cursor line) (delete from cursor to end of line) (delete from cursor to end of file) (delete one caracter under cursor) (delete one caracter before cursor) (delete line & insertion) (delete end of line & insertion) (join line of cursor with line under) (move cursor start of line) (move cursor end of line) (move cursor start of file) (move cursor end of file) (move cursor to high screen) (move cursor to middle screen) (move cursor to low screen) (search for “motif” after cursor) (search for “motif” before cursor) (search for uppercase caracter) (next pattern to search) (mark the cursor position with letter “x”) (place cursor in line marked with “x”) (write modification & exit) (forward one page) (backward one page) Un exemple de copier coller Un exemple de copier coller dans l'éditeur “vim” Esc gg mC G y'C “Ry'C d'C :e file “Rp :w file (Passe en mode commande, si c'était nécessaire) (Déplacement du curseur pour indiquer le début de la zone à copier, ici en début de fichier) (Marque la position du curseur avec la lettre “C” pour indiquer un début de zone) (Déplacement du curseur pour indiquer la fin de la zone à copier, ici fin de fichier) (Copie la zone délimitée par la marque “C” et le curseur dans le tampon courant) (Copie la zone délimitée par la marque “C” et le curseur dans le registre “R”) (Efface la zone délimitée par la marque “C” et le curseur) (Charge le fichier “file” depuis le répertoire courant) (Colle le registre “R” sur la ligne en dessous de l'emplacement du curseur) (Enregistre les modifications dans le fichier “file” du répertoire courant) !© Les services par Patrick Hautrive !;~) 2010 134 Le mode extended Lors d'un changement d'édition de fichier, ou lors du relancement de l'éditeur, celuici conserve en mémoire, les 26 registres nommés de “a” à “z” (registers), la valeur de la dernière commande (cmd), ainsi que le dernier motif de recherche (search). Le mode extended de l'éditeur “vim” :w file.txt :wq :q! :e! :r file.txt :n :!cmd :!script :!! :e file.txt :%s/motif/change/ :0,$s/motif/change/ :x,ys/motif/change/ :'M,.s/motif/change/ :'M,.!script :x,y!cmd :help :shell :ARROW :exit :quit (write into “file.txt”) (write & quit) (quit without saving) (edit reload without saving) (load “file.txt” at cursor) (next file) (execute “cmd” in a shell) (execute the “script” in a shell) (execute last command) (load file) (replacement “motif” by “change” in the entire file) (replacement “motif” by “change” in the entire file) (replacement from line “x” to line “y”) (replacement from mark “M” to cursor “.”) (execute “script” from mark “M” to cursor “.”) (execute “cmd” from line “x” to line “y”) (open help in a new buffer, :q! to leave and come back) (escape to a shell, exit to return to the editor) (scroll historic of commands) (exit & save) (quit & ask to save) :set :set all :set list :set showmode :set noshowmode :set autoindent :set autoprint :set errorbells :set number :set redraw :set showmatch :set warn :set wrapmargin :set wordsearch :set ignorecase :set nomagic :set nowrapscan :set report :set tabstop :set term :set tarse :set mesg La configuration de “vim” La configuration de l'éditeur “vim” Commands Variables vi vim view nvi :set Files TERM /etc/termcap TERMCAP /etc/vim/vimrc /usr/share/vim/vimrc /usr/share/vim/vim63/tutor/tutor.fr /usr/share/vim/vim63/doc/intro.txt /usr/share/vim/vim63/doc/help.txt /usr/share/vim/vim63/doc/index.txt /usr/share/vim/vim63/doc/starting.txt /usr/share/vim/vim63/doc/usr_01.txt /usr/share/vim/vim63/doc/tips.txt /usr/share/vim/vim63/doc/autocmd.txt /usr/share/vim/vim63/doc/cmdline.txt /usr/share/vim/vim63/doc/editing.txt /usr/share/vim/vim63/doc/options.txt !© Les services par Patrick Hautrive !;~) 2010 135 Les exemples de vi whereis vi ls l /usr/bin/vi ls l /etc/alternatives/vi ls l /usr/bin/vim vi /[Bb]ox 4x 10gg 8dd rx dw 3dw cw d$ cc 5cc “k5yy “k5dd :1,10!grep motif :3 :3,6d :!echo $PATH :0,$s/pear/peach/ :.+2,$3s/cat/dog/ :!/bin/bash :!pwd :set ts=4 Ctrl+V vi file.txt mC j y'C G collage) p u :e! :w f.txt (recherche les motifs “Box” et “box”) (suppression de 4 caractères après le curseur) (bouge le curseur à la dixième ligne) (efface 8 lignes) (remplace le caractère du curseur par la lettre “x”) (efface un mot à droite du curseur) (efface trois mots à droite du curseur) (efface un mot et passe en mode insertion pour changer un mot) (efface du curseur à la fin de la ligne) (efface la ligne et passe en mode insertion pour changer une ligne) (efface 5 ligne et passe en mode insertion) (enregistre 5 lignes à partir du curseur dans le registre “k”) (coupe 5 lignes à partir du curseur et les enregistre dans le registre “k”) (recherche dans les lignes 1 à 10 le motif, et conserve ces lignes) (déplace le curseur à la troisième ligne) (supprime les lignes comprises entre 3 et 6) (exécution dans le shell de la commande “echo”) (remplacement de la ligne zéro à la fin du motif “pear” par “peach”) (remplacement de la ligne courante +2 à la fin 3 de “cat” par “dog”) (exécution du sous shell bash, puis retour à l'éditeur) (exécution de la commande “pwd”, puis retour à l'éditeur) (fixer la tabulation à 4 caractères) (Visual Block mode for column selection & Escape) (Marque la position du curseur avec la lettre “C” pour indiquer un début de zone) (Déplacement du curseur pour indiquer la fin de la zone à copier) (Copie la zone délimitée par la marque “C” et le curseur dans le tampon courant) (Déplacement du curseur en fin de fichier pour indiquer la ligne dessus le (Collage du tampon sur la ligne en dessous du curseur) (Revenir avant le collage du tampon) (Recharger le fichier original) (Enregistrement des modifications dans le fichier 'f.txt”) !© Les services par Patrick Hautrive !;~) 2010 136 EMACS L'éditeur Emacs L'éditeur Emacs (Editor Macro) est écrit en langage LISP par RMS (Richard M. Stallman). Richard M Stallman est le fondateur de la FSF (Free Software Foundation), le concepteur de l'acronyme récursif GNU (Gnu is Not Unix), et le défenseur de la licence Gnu GPL (General Public Licence). L'éditeur Emacs (emacs21) est un outil puissant et souple qui pourrait servir d'unique interface pour un utilisateur avertit. “Emacs est un système d'exploitation déguisé en éditeur”. Les séquences de touches (control sequences) permettent de faire toutes les opérations avec le seul clavier. La notation CX correspond à Ctrl+X, et la notation MX correspond à Alt+X (meta sequences) qui s'appelait anciennement la touche Meta. De nombreux modules peuvent être ajoutés à l'éditeur Emacs pour en faire une interface multi usage. L'éditeur contient un menu qui donne accès au manuel d'utilisation, à un tutoriel, et à une FAQ (Frequently Asked Questions). Les spécifications de Emacs Les spécifications de Emacs Indentation Numérotation Colorisation Complétion Tampon circulaire Fonction Evaluation Expressions régulières Macro instruction Extension Programmation Débogage Compilation !© Les services par Patrick Hautrive !;~) 2010 137 Navigation Édition Didacticiel Tutoriel Psychiatre TEXTE Le format texte Le format texte ou le format ASCII (American Standard Code for Information Interchange) est le format standard pour les fichiers de configuration des systèmes Unices depuis 1968. Le format texte (raw) est un format qui emploi les caractères non accentués de la table de codage anglophone codé sur 7 bits. C'est le format le plus simple, le plus léger et le plus rapide qui soit, parce qu'il n'a besoin, ni d'être traduit, ni d'être converti, ni d'être structuré, ni d'être transformé en d'autres codes. Sur internet, c'est aussi le format privilégié pour échanger des mails sans fioritures, et pour communiquer sur des chats ou des newsgroups le plus succinctement possible. Les émoticons (smileys), les desseins (ascii art), et même des jeux permettent de s'exprimer graphiquement avec seulement les caractères du clavier (matrix). Les fichiers au format texte ne requièrent pas d'extension dans un système Gnu Linux. Les fichiers textes ne contiennent que les caractères de contrôle qui font partie de la table de codage, comme la tabulation (tab), la fin de ligne (line feed) ou le retour à la ligne (carriage return). Les fichiers textes peuvent être visualisés en mode ligne de commande dans des afficheurs (pagers), modifiés dans des éditeurs (editors), transformés à l'aide de formateurs (formators) ou de convertisseurs (encoders), structurés dans des logiciels de traitements de texte (office suites) ou de mise en pages (paging). Les fichiers textes peuvent être automatiquement traduit dans une autre langue (ispell). Les fichiers ascii (man ascii) Pagers more less pg xpdf acroread Editors ed ex jed vi vim pine pico emacs zile gedit Formators Office Suites Converters tr Open Office Org dvips troff nroff groff Star Office db2pdf awk cut Kword recode Abiword dos2unix Anyware Office unix2dos Applixware flip Scribus Latex !© Les services par Patrick Hautrive !;~) 2010 138 Formats ASCII HTML SGML XML XHTML PDF DVI PS DOCBOOK IMAGE Les images Les fichiers des images contiennent des codes qui sont interprétés par les programmes qui permettent de les visionner. Une image peut être enregistrée dans plusieurs types de formats, et les formats peuvent être libres de droits, ou propriétaires. En général, les programmes spécialisés dans l'affichage des images sont compatibles avec plusieurs formats. L'enregistrement d'une image peut s'effectuer en variant certains paramètres qui vont modifier l'aspect de l'image, comme le nombre de couleurs, l'entrelacement ou le degré de compression. Les formats portables Les formats PAM (Portable Arbitrary Map) et PNM (Portable Anymap) sont des formats simples d'image. Les commandes “man 5 pam” et “man pnm” décrivent ces deux formats pour lesquels il existe de nombreuses commandes de conversion et de transformation vers d'autres formats. Les commandes “apropos pam” et “apropos pnm” listent les commandes qui se réfèrent à ces formats. Les fichiers images Tools ImageMagic PerlMagic GimpPlugins ScriptFu Povray Giftools Viewer Format Converter Commands ee eog xv xwud bmp gthumb gif file identify jpeg gamma4scanimage jpg scanimage png gnomepanelscreenshot tiff flipscreen3d jigsaw pcx mirrorblob dib pdfimages thumbpdf tga convert leaftoppm 411toppm anytopnm gimp gimprremote inkscape blender flag import montage combine identify display Screen matrixview webcollage vidwhacker xscreensavergetimage xcursorgen xwd glslideshow Les exemples d'images import window root screen.tiff ; import window.xpm ; montage +frame */jpg mosaic.jpg for in *.bmp do convert $i xpm: `basename $i .bmp ` .xpm done convert A.jpg B.jpg +append AB.jpg !© Les services par Patrick Hautrive !;~) 2010 139 SOUND Les sons Les sons sont des ondes, des vibrations, des changements de pression atmosphérique, des perturbations à l'intérieur d'un fluide. Les sons comportent des bruits, des distorsions, des pertes et des interférences. Le système d'acquisition sonore de l'oreille humaine est construite pour entendre les fréquences comprises, en moyenne, entre 20 hertz et 20 Khz (20 Kilo Hertz = 20 000 hertz). Les sons graves sont constitués de fréquences lentes, tandis que les sons aigus sont constitués de fréquences rapides. La parole est généralement inférieure à 4 000 hertz. Les conversations au téléphone sont échantillonnées 8 000 fois par seconde. C'estàdire que 8 000 signaux analogiques sont transmis en une seconde. La musique sur un cdrom est constitué de 44 100 échantillons par seconde. Les enregistrements sonores Les enregistrements sonores analogiques sont constitués de valeurs continues (courbe), tandis que les enregistrements numériques sont constitués de valeurs discrètes (seuil). L'échantillonnage L'échantillonnage est un ensemble de valeurs prisent à intervalle régulier. La précision indique la hauteur ou la différence entre le point le plus bas et le point le plus haut. La fréquence indique la largeur, plus la fréquence est grande et plus il y a, dans un intervalle donné, d'aller et retour entre le point le plus bas et le point le plus haut. Par exemple, 8 bits permettent de former 2^8=256 graduations différentes, et 16 bits permettent une échelle de précision égale à 2^16=65 535 niveaux différents. Les technologies Les technologies multimédias Les sons synthétiques (wavetable) Les évènements Midi Les bibliothèques OpenAL3D Les bibliothèques SDL Le serveur OSS (Open Sound System) Le serveur ALSA (Advanced Linux Sound Architecture) Les Plugins sont des modules d'extension Les lecteurs multimédias (players) pour les sons (music readers) et les vidéos (videos players) Les Codecs sont des bibliothèques pour lire les encodages de certains formats (win32codecs) !© Les services par Patrick Hautrive !;~) 2010 140 La configuration du son Les fichiers sons Commands play cplay rec vrec playmidi randomplay timidity kmid aumix xmix kmix music123 mpeg123 ogg123 soundgrab vlc gtick gem beast nyquist solfege brahms csound bookcase Encoders sndconfig musiclibrarian audiolink tagtool gqmpeg gjay sweep streamripper juke rhythmbox ripperx rezound mp3blaster mp3burn mp32ogg mp3c juk jack abcde abcmidi abc2ps mp3splt mcfoo fapg ffmpeg sfront puredata cheesetracker grip gramofile s3mod zinf mikmod madman creox ifpline tapiir soundtracker rosegarden noteedit flac Formats Readers Wave (.wav) (.wmv) Midi (.mid) Mpeg 2 (.mpg) Mpeg layer 3 (.mp3) Mpeg 4 Quictime Gsm Divx Mov Oggvorbis (.ogg) Oggztools Ogmtools Vorbistools xmms xmmskde xmms goodnight xine totem totemxine totem gstreamer helixplayer mplayer amarok kaffein alsaplayer audacity somaplayer playmp3list gdancer moc synaesthesia cecilia !© Les services par Patrick Hautrive !;~) 2010 141 Server quark mserv mservclient mpd mpc ncmpc gnump3d vlc artsd esd moosic mp3roaster digitaldj darkice klog ncmpc sox icecastserver icecast2 ices2 wmix quodlibet gnomoradio gmpc glurp VIDEO Les images vidéo Les images vidéo sont souvent constituées d'images et de sons, et de nombreux formats cohabitent ensembles plus ou moins heureusement. Les lecteurs vidéos sont des lecteurs multi média et multi formats. Les lecteurs vidéos sont souvent employés pour lire les fichiers sons (music player). Le lecteur et le serveur VLC (Video Lan Communication) constituent un ensemble de programme complet, pour la lecture de vidéo sur un poste et la distribution sur plusieurs postes d'un même LAN (Local Area Network). !© Les services par Patrick Hautrive !;~) 2010 142 SAMBA Le protocole SMB Le protocole SMB (Server Message Block) est aussi appelé protocole CIFS (Common Internet File System). Le protocole SMB est un protocole qui a été développé en 1987 par les sociétés Intel et Microsoft. Le protocole SMB est un protocole de partage de fichiers et d'imprimantes pour les systèmes Windows™. Le protocole SMB s'appuie sur le protocole réseau TCP/IP et les RPC (Remote Procedure Calls). Le serveur Samba Le serveur Samba a été développé par l'australien Andrew Tridgell afin de pouvoir intégrer des systèmes Unices dans un environnement hétérogène et permettre le partage de fichiers. Le serveur Samba se compose du daemon “smbd” pour le partage de fichier et des imprimantes, du daemon “nmbd” pour la résolution des noms avec le protocole NetBIOS, et de l'exploration des partages WINS (browser). Le support SMBFS doit être inclu dans la compilation du noyau (kernel). Le serveur Samba 2.2 est compatible avec la gestion des ACL (Access control List) et la gestion des Quotas pour les serveurs Windows™ NT qui utilisent le système de fichiers NTFS (New Technology File System) de la société Microsoft. Un serveur Samba peut faire office de PDC (Principal Domain Controler), de BDC (Backup Domain Controler) ou de SAS (Stand Alone Server). Le fichier de configuration de Samba “/etc/smb.conf” peut s'administrer via une interface web, comme le propose les logiciels SWAT (Samba Web Administration Tool) et Webmin (Web Administration). Le serveur Samba est compatible avec la gestion des impressions sous CUPS (Common Unix Printing System). Les commandes Samba la commande «smbclient» sur une station Linux permet l'exploration des partages. La commande “man 7 smb” décrit la suite des programmes inclus dans Samba. La commande “man smb.conf” décrit le fichier de configuration de Samba. La commande “testparm” teste les paramètres du fichier de configuration de Samba smb.conf. La commande “testprns” permet de tester les imprimantes partagées sur le réseau. La commande “nmblookup” permet de connaitre le Master Browser. La commande “smbstatus” permet de connaitre les connexions en cours. La commande “smbpasswd” permet d'administrer les mots de passe des utilisateurs de Samba. !© Les services par Patrick Hautrive !;~) 2010 143 Les types de partage Deux types de partage peuvent être implémentés, soit au niveau des utilisateurs avec les permissions des utilisateurs (user level), soit au niveau des ressources avec les permissions sur les fichiers (share level). C'estàdire que le contrôle de l'accès à une ressource peut s'effectuer en vérifiant les permissions de l'utilisateur qui accède à la ressource, ou en vérifiant si l'utilisateur connait le mot de passe attribué à la ressource. Les mots de passe sont crypté sur le réseau quand le patch du Service PACK3 de Microsoft est installé. L'installation de Samba L'installation de Samba tar xzvf sambalatest.tar.gz cd sambaversion su ./configure –prefix=/usr/local/samba make ; make install export PATH=/usr/local/samba/bin:$PATH vi /etc/man.config MANPATH /usr/local/samba/man MANPATH_MAP /usr/local/samba/bin /usr/local/samba/man mkdir /mnt/samba vi /etc/samba/pw username = mister password = secret smbmount //server/share /mnt/samba o credential=/etc/samba/pw,uid=mister vi /etc/samba/smb.conf ; vi /etc/smb.conf tesparm /etc/rc.d/init.d/samba restart ; /etc/rc.d/init.d/smb restart ; /usr/sbin/samba restart smbpasswd a mister smbd D nmbd D ps ax | grep smbd nmbd killall TERM smbd nmbd smbmount //server/share /mnt/samba smbclient //localhost/data /mnt/samba smb:> ls smb:> quit !© Les services par Patrick Hautrive !;~) 2010 144 Les clients Windows™ Les clients Windows™ peuvent partager des dossiers sur le réseau. Pour partager des fichiers, les clients Windows™ doivent disposer du protocole réseau TCP/IP, d'un serveur de noms DNS (Domain Name Service), d'une adresse IP valide et du bon masque de sous réseau, ou d'un serveur DHCP (Dynamic Host Configuration Protocol). L'installation d 'un PDC dans un Domaine WINNT ™ L'installation d'un PDC dans un Domaine WINNT™ vi /etc/samba/smb.conf [Global] workgroup = DOMAIN security = user encrypted password = yes smbpasswd file = /etc/smbpasswd domain logons = yes os level = 34 local master = yes prefered master = yes domain master = yes [Netlogon] path = /export/samba/logon public = no writeable = no browsable = no mkdir /export/samba/logon chmod 770 /export/samba/logon vi /etc/passwd windows95$:*:680:100::/dev/null:/dev/null smbpasswd a m windwos95 E:\> net view \\serversamba E:\> net use H:\\serveursamba testparm nmblookup DOMAIN smbclient L serveursamba smbclient //serveursamba/file mypassword U pierre smbclient //printserveur/imprimante P smb> print file.txt smb> quit La journalisation de Samba La journalisation Samba (smb.conf) vi /etc/samba/smb.conf [Global] log file = /var/log/samba/log/%.m max log file = 5000 debug level = 3 syslog = 1 syslog only = no /etc/init.d/syslog restart !© Les services par Patrick Hautrive !;~) 2010 145 Le fichier /etc/samba/smb.conf Les lignes commençants par un point virgule (semicolon) ou un dièse (hash) sont des commentaires. Les lignes entre crochet désignent des groupes de paramètres. Le groupe de paramètres [global] s'applique par défaut à tous les partages et à tous les autres groupes, sauf si un groupe ne précise spécifiquement ses paramètres. !© Les services par Patrick Hautrive !;~) 2010 146 Le fichier de configuration de Samba /etc/samba/smb.conf (man smb.conf) [global] [homes] workgroup = FreeSoftwareGroup comment = Home Directories server string = %h server L.A.M.P browseable = no ;writable = no comment = This is an Open Source Domain create mask = 0700 ;directory mask = 0700 ;wins support = no ;wins server = w.x.y.z ;[netlogon] ;local master = yes ;preferred master = yes ;comment = Network Logon Service os level = 77 ; public = yes ;domain master = auto ;path = /home/samba/netlogon ;domain master = yes ;domain logons = no ;guest ok = yes ;public = no ;allow hosts = 192.168.1. 127. ;browseable = no ;writable = no dns proxy = no ;share modes = no ;name resolve order = lmhosts host wins bcast [printers] log file = /var/log/samba/log.%m comment = All Printers max log size = 1000 ; debug level = 3 browseable = yes ;writable = no ;path = /tmp ;syslog only = no ;syslog = 0 printable = yes ;public = yes panic action = /usr/share/samba/panicaction %d create mode = 0700 ;security = user ;security = share [print$] ;smb passwd file = /etc/samba/smbpasswd comment = Printer Drivers encrypt passwords = true ; null passwords = no path = /var/lib/samba/printers passdb backend = tdbsam guest browseable = yes ;read only = yes obey pam restrictions = yes guest ok = no ;write list = root, @ntadmin ;guest account = nobody ;[cdrom] invalid users = root ;comment = Samba server's CDROM ;unix password sync = no ;writable = no ;locking = no ;path = /cdrom passwd program = /usr/bin/passwd %u ;public = yes passwd chat = *password:* %n\n *Retype:* %n\n # automount a shared CDROM in /etc/fstab : ;pam password change = no #/dev/scd0 /cdrom iso9660 ;load printers = yes defaults,noauto,ro,user 0 0 ;printing = bsd ;printcap name = /etc/printcap ;preexec = /bin/mount /cdrom ;printing = cups ;printcap name = cups ;postexec = /bin/umount /cdrom ;printer admin = @ntadmin [data] ;preserve case = yes path = /export/data ;read only = no ;short preserve case = yes map archive = no ;include = /home/samba/etc/smb.conf.%m [pub] #SO_RCVBUF=8192 SO_SNDBUF=8192 comment = Public Space socket options = TCP_NODELAY path = /home/pub ; read only = no ; public = yes #message command = /bin/sh c writable = yes ; write list = root, admin, @staff '/usr/bin/linpopup "%f" "%m" %s; rm %s' & [mister] ;idmap uid = 1000020000 comment = Joe's Secrets Files ;idmap gid = 1000020000 path = /usr/joe ;valid user = joe ;public = no ;template shell = /bin/bash writeable = yes ;create mask = 0700 null passwords = no ; map to guest = never !© Les services par Patrick Hautrive !;~) 2010 147 L es imprimantes avec Samba Les imprimantes avec Samba (smb.conf) vi /etc/samba/smb.conf [Global] printing = cups load printers = yes printcap name = lpstat directory = /tmp [Printers] comment = Imprimante laser browsable = yes printable = yes public = yes L'administration de Samba avec Swat L'administration de Samba avec Swat cp /etc/smb.conf /etc/smb.backup vi /etc/services swat 901 /tcp vi /etc/inetd.conf swat stream tcp nowait.500 swat stream tcp nowait.500 killall HUP inetd firefox http://localhost:901 root /usr/local/samba/bin/swat root /usr/sbin/tcpd !© Les services par Patrick Hautrive !;~) 2010 148 swat /usr/sbin/swat L'administration de Samba avec Apache, Swat et CGI L'administration de Samba avec Apache, Swat et CGI aptget install swat httpd mkdir /home/httpd/html/swat cp R /usr/local/samba/swat /home/httpd/samba/swat cp /usr/local/samba/bin/swat /etc/httpd/cgibin vi /home/httpd/html/swat/.htaccess AuthName “Surveillance Swat” AuthType Basic AuthUserFile /etc/swat.users require validuser htpasswd c /etc/swatusers root vi /etc/httpd/conf/access.conf AllowOverride AuthConfig apachectl restart /etc/rc.d/init.d/httpd restart firefox http://localhost/swat/cgibin/swat Un exemple de partage Samba Un exemple de partage Samba mkdir /usr/pierre /home/pub /home/staff useradd paul pierre chmod 777 /home/pub passwd paul chown paul /home/staff chgrp STAFF /home/staff chmod 775 /home/staff smbpasswd a pierre chown pierre /usr/pierre chmod 700 /usr/pierre !© Les services par Patrick Hautrive !;~) 2010 149 La configuration de Samba La configuration de Samba (www.samba.org) Commands smbd nmbd smbclient testparm net testprns smbstatus nmblookup smbpasswd smbmount smbumount smbmnt smbcquotas smbcacls smbsh smbtree smbtar smbspool smbcontrol rpcclient cupsaddsmb Files pdbedit findsmb net swat winbindd wbinfo editreg profile log2pcap vfstest ntlm_auth SWAT /etc/smb.conf /etc/samba/smb.conf /usr/local/samba/lib/smb.conf /etc/printcap /etc/pam.d/samba /etc/samba/pw /etc/dhcp3/dhcliententerhooks.d/samba /usr/local/samba/docs/htmldocs/* /usr/local/samba/man /usr/local/samba/bin /usr/share/samba/panicaction /var/log/samba/* /var/log/samba/log.{smbd,nmbd} Les exemples de Samba C:\> NET USE W:\\host\sharename\ testparm /etc/smb.conf smbclient L I machine.domain.tld U $USER smbpasswd a alice smb a alice grep joe /etc/passwd | mksmbpasswd.sh >> /etc/smbpasswd !© Les services par Patrick Hautrive !;~) 2010 150 man 7 samba man 5 smb.conf man 8 net kernel (SMBFS) MANPATH MANPATH_MAP mksmbpasswd.sh JAVA La machine virtuelle Le langage Java est un langage orienté objet qui a été développé par la société Sun Micro System. Le langage Java est un langage compilé et interprété pour une machine virtuelle. Les systèmes qui ont installés le kit de développement ou JDK (Java Development Kit) et la machine virtuelle Java ou JVM (Java Virtual Machine) sont en mesure d'écrire et de compiler des programmes en Java. Les systèmes qui ont installés l'environnement d'exécution ou JRE (Java Runtime Environment) peuvent exécuter les programmes compilés en Java. Ainsi, les programmes exécutables ne dépendent plus de l'architecture processeur, et les mêmes outils permettent de développer pour plusieurs environnements matériels différents. La devise de Java est “write once, run anyware” (écrit une seule fois pour tourner partout). Les environnements de développement ANT (Abstract Window Toolkit) et SWING sont des boîtes à outils pour développer en Java. Les programmes Java sont très utilisés sur internet parce qu'ils sont faciles d'utilisation et qu'ils permettent d'ajouter des graphismes attrayants et ludiques sur les sites. Les pages HTML contiennent des morceaux de codes (byte code) qui sont téléchargés et interprétés par les navigateurs des internautes (applets). Une applet peut être testé dans un bac à sable (sandbox). Les exemples de Java javac jikes appletviewer java jar write2latex.jar config clean.xml file.sxw file.tex !© Les services par Patrick Hautrive !;~) 2010 151 CVS La gestion des versions Les programmes RCS (Revision Control System) ou CVS (Concurrent Versions System) sont des services qui permettent de gérer les différentes versions d'un même fichier. Ainsi, les internautes peuvent télécharger sur un site de téléchargement (sourceforge.org) les dernières versions des Logiciels Libres. Le programme CVS permet de suivre les dépôts effectués par les développeurs, et d établir une source officielle unique. Le programme CVS permet également de fusionner deux fichiers différents et modifiés pour n'en former qu'un seul. Les commandes CVS La configuration de CVS Commands cvs import cvs commit cvs init cvs release cvs update cvs checkout man cvs Files CVSROOT CVSEDITOR CVS_RSH !© Les services par Patrick Hautrive !;~) 2010 152 NFS Le service NFS Le service NFS (Network File System) propose le partage de fichiers et d'imprimante sur les réseaux TCP/IP dans un environnement Unix™. Le service NFS est le successeur du protocole UUCP (Unix to Unix Copy Program). Le service NFS peut fonctionner avec le service NIS (Network Information Services). Le service NFS est compatible avec le service d'authentification LDAP (Lightweight Directory Access Protocol). Le service NFS a été développé par la société Sun Micro System en 1980. La RFC 1094 décrit le fonctionnement du service NFS, et la RFC 1777 décrit l'implémentation du service LDAP dans NFS. Le package NFS 3.0 est compatible avec les noyaux Gnu Linux 2.2.18 qui sont compilés avec les fonctionnalités “NFS File System” et “NFS Server”. Le service NFS fonctionne avec les RPC (Remote Procedure Call) et Portmapper. Le service NFS est lancé lors de la procédure d'initialisation du système (init). Le service NFS propose le montage à distance de fichiers stockés sur une autre machine. Lors d'une erreur ou d'un dysfonctionnement, le service NFS essaye indéfiniment de monter le système de fichier, ce qui peut accroitre les échanges réseaux et rallonger les temps de réponse. Un exemple de fichier /etc/exports Un exemple de fichier de configuration des partages NFS “/etc/exports” Directory /home /home /pub /projet /projet/secret / /mnt/cdrom Network 192.168.1.2 machine.domain.tld Options (rw,root_squash) (rw) (ro,insecure,root_squash) *.domain.tld (rw) machine.domain.tld (ro) 192.168.1.1/24 192?168.1.9 (no access) (rw,no_root_squash) La configuration de NFS !© Les services par Patrick Hautrive !;~) 2010 153 La configuration de NFS Commands mount umount exports nfslock nfsmount portmap nfsstat showmount rpc rpcinfo rpcclient rpcgen exportfs mountd nfsd Files rpc.nfsd rpc.portmapper rpc.statd rpc.rquotad rpc.mountd insmod modprobe /etc/fstab (NFS client) /etc/exports (NFS server) /etc/rpc /var/lock/subsys/nfs /usr/sbin/pmap_dump /etc/init.d/mountnfs.sh /proc/filesystems /etc/hosts.allow /etc/host.deny /etc/sysconfig/nfs Un exemple de partage NFS Un exemple de partage NFS NFS Server aptget install portmap nfscommon nfskernelserver mkdir /nfs/shared vi /etc/exports /nfs/shared station(ro,root_squash) /usr/sbin/exportfs a /etc/init.d/nfsserver restart nfsstat NFS Client aptget install portmap nfscommon nfsuserserver /etc/init.d/portmap start mkdir /home/shared vi /etc/fstab nfsserver:/nfs/shared /home/shared nfs rw /etc/init.d/nfs restart mount t nfs nfsserver:/nfs/shared /home/shared ls /home/shared 0 2 !© Les services par Patrick Hautrive !;~) 2010 154 man nfs man exports man portmap Les exemple de NFS vi /etc/exports /partage 10.0.2.0/24(ro,root_squash) #/ master(rw) trusty(rw,no_root_squash) /projects proj*.local.domain(rw) /usr *.local.domain(ro) @trusted(rw) /home/joe pc001(rw,all_squash,anonuid=150,anongid=100) /pub (ro,insecure,all_squash) /tmp *(ro) df t nfs ; exportfs ;rpcinfo p ; /etc/init.d/portmap start insmod nfs ; modprobe nfs !© Les services par Patrick Hautrive !;~) 2010 155 NIS Le service NIS Le service NIS permet la centralisation et l'automatisation de l'administration d'un réseaux Unix™. Le service NIS propose d'administrer les informations d'adressage des stations, d'harmoniser les fichiers de configuration, et de distribuer les informations de compte des utilisateurs sur tous le réseau. Avec le service NIS, les noms des comptes et leur numéro d'identifiant (uid), et les noms des groupes et leur identifiant (gid) sont toujours les même, ce qui permet le contrôle des permissions sur toutes les ressources partagées du réseau. Le service NIS est le successeur du service YP (Yellow Page) qui fait allusion aux bottins des pages jaunes des services postaux. La base de données NIS Le service NIS représente une base de données distribuées à partir d'un serveur central. Le serveur NIS contient une carte des fichiers qui sont distribués sur le réseau (map). Le serveur NIS constitue un domaine (nis domain) où toutes les stations partagent les mêmes informations de comptes (password) et de réseau (network). Le serveur NIS principal est appelé le serveur maitre (nis master) et stocke la base de données de tous les domaines NIS. Un réseau peut être structuré en plusieurs domaines NIS. Les serveurs NIS secondaires recopient régulièrement les informations originales du serveur principal afin de pouvoir les distribuer aux clients plus rapidement. Les clients NIS peuvent être configurés en mode initiative (pull mode), c'estàdire que c'est le client qui alimente le serveur NIS avec ses informations. De nombreux fichiers (maps) peuvent être intégrés à la base de données NIS. Le service NIS est un service de répertoire hiérarchisés et global, compatibles avec les protocoles X500, DAP et LDAP (Lightweight Directory Access Protocole). Le service NIS n'est pas très sécurisé, c'est pourquoi, il est parfois appelé NIS (Network Intruder Services). La configuration de NIS La configuration du service NIS Commands Files /var/yp/ypbuild /var/yp/domainname /etc/passwd makedbm /usr/local/etc/openldap/slapd.conf /etc/group /etc/hosts /etc/aliases /etc/ethers Maps /etc/bootparam /etc/netmasks /etc/protocols /etc/netgroup !© Les services par Patrick Hautrive !;~) 2010 156 /etc/rpc /etc/services /etc/ypservers /etc/publickey APACHE Le serveur web Apache Le serveur Apache (httpd) est le serveur de page web pour plus de 70% des serveurs de sites sur internet. Le code du serveur Apache est issu du code du serveur web NCSA. Les pages web sont écrites en langage HTML (Hyper Text Markup Language) et sont véhiculées sur le réseau internet avec le protocole HTTP (Hyper Text Transfer Protocol) qui fait parti de la pile de protocoles TCP/IP. Le serveur Apache est compatible avec SSL (Secure Socket Layer) qui permet de distribuer des pages internet sécurisées (https). Le serveur Apache est lancé par la procédure d'initialisation du système (init). Les connexions au serveur Apache sont par défaut gérées par le serveur Apache (stand alone), mais elles peuvent également l'être par le super démon internet (inetd). Le serveur Apache peut être configuré comme serveur Proxy. Le serveur apache peut gérer plusieurs noms de domaine (virtual homing) sur la même adresse IP (internic). Le serveur Apache peut être administré à distance avec le logiciel Webmin. Le serveur Apache permet de réguler les demandes de connexion (threads) et propose également l'équilibrage des charges entre plusieurs machines (load balancing). Les serveurs LAMP Les serveurs LAMP (Linux Apache Mysql Php) constituent des solutions intégrées qui sont proposées par des hébergeurs (web hosting), et qui peuvent s'administrer à distance (remote). Les serveurs LAMP sont composées uniquement de Logiciels Libres (Free Software). Les serveurs LAMP sont des machines équipées d'un système d'exploitation libre (linux) sur lequel sont installés, un serveur internet (apache), et une base de données (mysql) qui est interrogées à l'aide de scripts Php (php). Les modules PHP 4 s'intègrent parfaitement avec le serveur Apache 2 et permettent d'ajouter selon les besoins des fonctionnalités. Les bibliothèques pour Apache Le serveur Apache propose de nombreuses bibliothèques (libapache*) qui assurent la compatibilité avec les scripts CGI, Perl, Python, PHP, ASP et JAVASCRIPT, ainsi que l'authentification Kerberos, Radius ou Pam. Le moteur de servlet Tomcat pour Java permet la diffusion de pages XSLT, CSS, RSS ou de MP3, et avec les langages Java, Ruby, et Lisp. !© Les services par Patrick Hautrive !;~) 2010 157 Le site internet Les sites internet peuvent être construits à l'aide de logiciels de composition de page HTML, comme la suite Mozilla qui s'est scindée en plusieurs projets libres, et a évoluée vers le logiciel Nvu, puis vers le logiciel Kompozer. Les fichiers du site internet sont généralement placés dans le répertoire “/var/www/*”, ou “/usr/local/httpd/htdocs/*”, ou le répertoire affecté à la directive DocumentRoot du fichier de configuration “/etc/apache/httpd.conf”. Par défaut, c'est la page nommée “index.html” qui est chargée, quand aucune autre indication n'est inscrite dans la barre d'adresse URL (Uniform Resource Locator) d'un navigateur. Si aucun fichier “index.html” n'existe à la racine du site (ServerRoot), alors c'est la liste des fichiers contenus dans le répertoire qui est affichée dans le navigateur. Les permissions pour accéder à une ressource peuvent être précisées pour chaque répertoire dans un fichier “.htaccess”. La configuration pour Apache La configuration du serveur Apache (httpd) (http://www.apache.org/) Commands httpd apache apachectl apachedbg apachetop apachemodconf apacheconfig modulesconfig htpasswd htpasswd2 check_forensic Files ab webdruide slash axkit scannerlog cronolog vlogger visitors logresolve rotatelogs /etc/httpd.conf /etc/httpd/httpd.conf /etc/httpd/conf/httpd.conf /etc/apache/httpd.conf /etc/apache/srm.conf (cgi) /etc/apache/php3.ini (acl) /etc/apache/access.conf /etc/apache/mime.types /etc/apache/magic /etc/apache/passwd /etc/sysconfig/apache2 /etc/logrotate.d/apache /usr/local/httpd/htdocs/* /usr/local/httpd/cgibin/* Packages /etc/init.d/apache apache /etc/rc5.d/S91apache apachecommon http_core.c apache2utils mod_so.c libapr0 .htaccess Editors README.DSO MozillaComposer man apache Open Office Org man uri Nvu /var/www/index.html Kompozer /var/cache/apache Peacock /var/log/message August /var/log/httpd/* Amaya /var/log/apache Bluefish /var/log/apache/error.log Screem /var/log/apache/access.log /var/run/apache.pid /var/www/html/* Le chargement de modules Le fichier de configuration «httpd..conf» peut contenir les directives pour charger les modules nécéssaires (LoadModules AddModules ClearModuleList). !© Les services par Patrick Hautrive !;~) 2010 158 Un exemple de script CGI Un exemple de script CGI (Perl) vi /etc/http/conf/httpd.conf vi /home/httpd/cgibin.try.pl #!/usr/bin/perl print «La date et l'heure \n»; chmod +x /home/httpd/cgibin/try.pl lynx http://localhost/cgibin/try.pl Le contrôle des accès Le contrôle des accès au serveur Apache (.htpaccess) vi /etc/httpd/conf/httpd.conf <Directory /> Options AllowOveride </Directory> <Directory /home/httpd/html> OptionsIndexesIncludes AllowOveride Order Allow AccessFileName </Directory> vi /home/httpd/html/private/.htpaccess password,motdepasse htpasswd e /etc/httpd/conf/users joe FollowSymlinks none FollowSymlinks none allow, deny from all .htpaccess #(all but with .htpaccess) Le fichier /etc/apache/httpd.conf Le fichier “/etc/apache/httpd.conf” est très documenté. Le site internet http://www.apache.org/ dispose d'exhaustives documentations officielles. L'installation du serveur Apache propose une introduction “/usr/share/doc/apache/apache.intro.html” et des fichiers de configuration à titre d'exemples dans le répertoire “/usr/share/apache/defaultconfigs/*”. Désormais, le fichier de configuration «httpd..conf» est très bien documenté avec des commentaires pour chaque ligne. Les fichiers de configuration «httpd..conf» pour Apache version 2, contiennent des directives Include qui réfèrent à d'autres fichiers de configuration, chacun spécialisé dans une !© Les services par Patrick Hautrive !;~) 2010 159 fonctionnalité particulière, et contenant les directives habituelles. Ainsi, le fichier de configuration original a été scindé en plusieurs fichiers de configuration, permettant une gestion automatisée de chacun d'entre eux par des routines. !© Les services par Patrick Hautrive !;~) 2010 160 Le fichier de configuration /etc/apache/httpd.conf ServerType standalone ServerRoot /etc/apache LockFile /var/lock/apache.lock PidFile /var/run/apache.pid ScoreBoardFile /var/run/apache.scoreboard #ResourceConfig /etc/apache/srm.conf #AccessConfig /etc/apache/access.conf Timeout 300 KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 15 MinSpareServers 5 MaxSpareServers 10 StartServers 5 MaxClients 150 MaxRequestsPerChild 100 #Listen 3000 #Listen 12.34.56.78:80 #BindAddress * Include /etc/apache/modules.conf AccessFileName .htaccess <Files ~ "^\.ht"> Order allow,deny Deny from all </Files> AddLanguage en .en AddLanguage fr .fr <IfModule mod_negotiation.c> LanguagePriority en da nl et fr de el it ja pl pt ptbr lb ca es sv </IfModule> #CacheNegotiatedDocs UseCanonicalName Off TypesConfig /etc/mime.types DefaultType text/plain #DefaultType "application/octetstream" #AddType application/xhttpdphp .php #AddType application/xhttpdphp source .phps AddType application/xtar .tgz AddType image/bmp .bmp #AddHandler cgiscript .cgi .sh .pl <IfModule mod_mime_magic.c> MIMEMagicFile /usr/share/misc/file/magic.mime #AddHandler imapfile map </IfModule> #Default charset to iso88591 (http://www.apache.org/info/csssecurity/). AddDefaultCharset on HostnameLookups Off #MetaDir .web ErrorLog /var/log/apache/error.log #MetaSuffix .meta LogLevel warn #ErrorDocument 500 "The server down” LogFormat "%{Referer}i > %U" referer #ErrorDocument 404 /missing.html LogFormat "%{Useragent}i" agent #ErrorDocument 404 /cgi #CustomLog /var/log/apache/referer.log referer <IfModule mod_status.c> bin/missing_handler.pl #CustomLog /var/log/apache/agent.log agent ExtendedStatus On #ErrorDocument 402 </IfModule> http://server.tld/subscription_info.html <IfModule mod_backtrace.c> BrowserMatch "Mozilla/2" nokeepalive EnableExceptionHook On Port 80 BrowserMatch "MSIE 4\.0b2;" #BacktraceLog /var/log/apache/backtrace.log User wwwdata nokeepalive downgrade1.0 forceresponse </IfModule> Group wwwdata 1.0 ServerAdmin webmaster@localhost <IfModule mod_whatkilledus.c> #ServerName http://123.45.67.89/ <IfModule mod_proxy.c> EnableExceptionHook On #ServerName new.host.name #<Directory proxy:*> #WhatKilledUsLog ServerName localhost #Order deny,allow /var/log/apache/whatkilledus.log DocumentRoot /var/www #Deny from all </IfModule> #Allow from .your_domain.com <Directory /> #</Directory> ServerSignature On Options SymLinksIfOwnerMatch #ProxyVia On #ServerTokens Full AllowOverride None #CacheRoot "/var/cache/apache" #Alias fakename realname </Directory> #CacheSize 5 Alias /icons/ /usr/share/apache/icons/ #CacheGcInterval 4 Alias /images/ /usr/share/images/ <Directory /var/www/> #CacheMaxExpire 24 ScriptAlias /cgibin/ /usr/lib/cgibin/ Options Indexes Includes #CacheLastModifiedFactor 0.1 IndexOptions FancyIndexing NameWidth=* FollowSymLinks MultiViews #CacheDefaultExpire 1 DefaultIcon /icons/unknown.gif AllowOverride None #NoCache one.tld two.tld three.tld #AddDescription "GZIP compressed" .gz Order allow,deny </IfModule> #AddDescription "tar archive" .tar Allow from all #ReadmeName README.txt </Directory> #NameVirtualHost 12.34.56.78:80 #HeaderName HEADER.txt #NameVirtualHost 12.34.56.78 IndexIgnore .??* *~ *# HEADER.html <IfModule mod_dir.c> #<VirtualHost _default_:*> DirectoryIndex index.html index.htm HEADER.txt RCS CVS *,v *,t #</VirtualHost> #IndexIgnore README.* index.shtml index.cgi index.php Include /etc/apache/conf.d AddEncoding xcompress Z </IfModule> AddEncoding xgzip gz tgz !© Les services par Patrick Hautrive !;~) 2010 161 Les directives Apache Les directives Apache (httpd.conf) Directives Description and options ServerType Mode de lancement du serveur (standalone inetd) ServerName Nom réseau du serveur Apache (server network name ) ServerAdmin @mail de l'administrateur du serveur Apache (mail admin) ServerRoot Répertoire des fichiers de configuration du serveur Apache (/etc/httpd) User Utilisateur propriétaire du serveur httpd (user daemon owner) Group Groupe propriétaire du serveur httpd (group daemon owner) Port Numéro du port de connexion (port 80 by default) Listen Activation de plusieurs adresses IP pour le même serveur (host:port @IP) ServerAlias Alias de nom pour différents serveurs (Virtual host) AccessConfig Chemin du fichier de contrôle des connexions (/etc/httpd/conf/access.conf) RessourceConfig Répertoire pour les scripts CGI (cgi scripts) ScriptAlias Répertoire pour les scripts CGI (cgi scripts) UserDir DocumentRoot Pages personnelles publiques (Public_html → /home/joe/public_html → http://localhost/~joe ) Répertoire pour les pages HTML (/var/www/html or /home/httpd) TypesConfig Fichier contenant les types MIMES (/etc/mime.types) DefaultTypes Type MIME utilisé par défaut (text/plain) DirectoryIndex Affichage automatique de la page index (index.htm or index.html) ErrorLog Fichier journal d'enregistrement des erreurs (/var/log/apache/error.log) LogLevel Niveau d'alerte pour l'enregistrement des erreurs (warm) HostNameLookups Résolution des adresses IP en nom de domain par le serveur Apache (DNS) VirtualHostDirectory Gestion de plusieurs sites par le même serveur (virtual hosting) Installation d'un site local !© Les services par Patrick Hautrive !;~) 2010 162 Installation d'un site Apache en local Vi /home/httpd/html/index.html <HTML> <HEAD> <TITLE> Site Apache </TITLE> <BODY> Try Apache and have fun !;) </BODY> </HEAD> </HTML> ls /usr/local/apache httpd httpd h cd /home/httpd mkdir conf htdocs logs vi httpd.conf httpd d /home/httpd/html httpd f /home/httpd/httpd.conf lynx http://localhos t:8000/index.html Installation d e Virtual Host Installation de Virtual Host (httpd.conf) Port 80 Listen 172.16.0.1:80 Listen 172.16.0.1:8000 <VirtualHost 172.16.0.1:8000> DocumentRoot /www/site1 ServerName www.site1.org </VirtualHost> NameVirtualHost 172.16.0.2 <VirtualHost 172.16.0.2> DocumentRoot /www/site2 ServerName www.site 2 .org </VirtualHost> <VirtualHost 172.16.0.2> DocumentRoot ServerName </VirtualHost> /www/site3 www.site 3 .org !© Les services par Patrick Hautrive !;~) 2010 163 Les exemples pour Apache rpm qa | grep apache rpm e apache1.3.67 ls /mntcdrom/RedHat/RPMS rpm ivh apache*.rpm aptget install apache aptget install libapachemodphp4 aptget remove apache apachectl configtest vi /etc/apache/httpd.conf AddType application/xhttpdphp .php AddType application/xhttpdphpsource .phps vi /etc/apache/modules.conf LoadModule php4_module /usr/lib/apache/1.3/libphp4.so httpd f /etc/httpd.conf httpd l ls /etc/rc.d/rc3.d/S85httpd /etc/rc.d/init.d/httpd restart cp /etc/httpd/access.confdist /etc/httpd/access.conf cp index.html /usr/local/httpd/htdocs/index.html lynx http://localhost:2112 /usr/local/apache/src/httpd f /usr/local/apache/conf/httpd.conf vi /etc/httpd/httpd.conf Port 80 User nobody Group nogroup ServerAdmin [email protected] ServerRoot /usr/local/apache ErrorLog /var/log/apache/error.log ServerName www.domain.tld less /etc/httpd/modules.conf vi /etc/httpd/access.conf UserDir publichtml vi /etc/httpd/srm.conf DocumentRoot /urs/local/apache/htdocs ScriptAlias /cgibin/ /usr/local/apache/cgibin/ /usr/sbin/apachemodconf apache ls /home/httpd/html/index.html ls /home/httpd/cgibin/; ls /home/httpd/icons/ !© Les services par Patrick Hautrive !;~) 2010 164 MESSAGE La messagerie électronique La messagerie électronique (electronical mail) est le service le plus plébiscité sur internet. La messagerie électronique a introduit la communication numérique asynchrone, c'estàdire que les abonnées relèvent et répondent à leur courrier quand ils le décident. Le contenu du fichier “~/.signature”, quand il existe, est concaténé à tous les messages sortants. Les messages électroniques peuvent être écrit en texte (plain) ou en HTML, et contenir des pièces jointes (attached file) au format MIME ou UUENCODE. Le protocole SMTP (Simple Mail Transfer Protocol) est le protocole qui permet à un client d'envoyer un message (sending). Les protocoles POP3 (Post Office Protocol version 3) et IMAP4 (Internet Message Advertising Protocol version 4) permettent de récupérer son courrier électronique (receiving). Les messages non sollicités Les logiciels de filtrage des messages, comme Spamassassin, permettent de réduire la réception des messages non sollicités (spam). Certaines sociétés de markéting direct sont spécialisées dans le commerce illicite de liste ou de base de données d'adresse mail (data base), plus ou moins ciblées. Toutefois, il s'avère plus efficace et peut être plus judicieux de se servir de plusieurs adresses de messagerie, ou d'empêcher les programmes de recherche d'adresse (mail bot) de trouver la sienne, soit en la divisant (me AT provider FR), soit en y ajoutant un mot qu'il faudra enlever à la main (me no spam AT provider FR). Les serveurs de messagerie Les serveurs de messagerie sont des programmes qui restent à l'écoute (daemon) des connexions SMTP entrantes (socket) sur le port 25 pour réceptionner le courrier du domaine. Les serveurs de messagerie les plus connus sont Sendmail écrit par Eric Allman et Eric Raymond en 1970, et Postfix écrit par Wietse Venema. Le serveur Sendmail a la réputation d'être complexe, tandis que le serveur Postfix a la réputation d'être plus simple. Le serveur sendmail utilise un pré processeur de macro M4 pour générer son fichier de configuration “/etc/sendmail.cf”. Les listes de diffusion Les serveurs de liste de diffusion (mailing list) permettent d'envoyer la même copie d'une conversation !© Les services par Patrick Hautrive !;~) 2010 165 à tous les abonnés (subscribe). Les messages peuvent être modérés (moderated), c'estàdire qu'ils sont filtrés par une personne qui fait office de modérateur dans les conversations. Les messages peuvent être envoyés sous la forme de résumés hebdomadaires (digest). Une liste de diffusion peut être ouverte (open) ou fermée, c'estàdire réservée à des personnes choisies (private). Les serveurs de liste de diffusion les plus connus sont Majordomo, Listserv et Listpro. Les serveurs de forum Les serveurs de forum (news group) permettent également la participation à des conversations avec de nombreux interlocuteurs, et l'échange de messages qui sont distribués à toutes les personnes connectées au serveur. Les messages ne sont pas adressés à des abonnés, les messages sont adressés aux personnes connectées à un moment donné. C'est l'utilisateur qui se connecte à un réseau de serveurs de forum (usenet) avec le protocole NNTP (Network News Transport Protocol) et qui rapatrie chez lui d'abord les entêtes des messages (headers) et ensuite chacun des messages qu'il consulte (body content). Les serveurs de forum les plus connus sont Inn, Collabra, Diablo et Leafnode. Le modèle de messagerie Le modèle de messagerie client serveur est un modèle d'architecture à fichiers partagés ou les messages sont adressés jusqu'au destinataire (push). En théorie, le modèle de messagerie est constitué de quatre composantes différentes : MX (Mail Exchanger), MUA (Mail User Agent), MTA (Mail Transfer Agent) et MDA (Mail Delivery Agent). Le MUA est le logiciel de messagerie chez le client expéditeur (mailer) qui envoie les messages au MTA correspondant au fournisseur de son adresse électronique (send provider). Le MTA expédie le message sur le réseau à un MX qui le relais à un autre MX (exchanger) jusqu'au MDA correspondant au fournisseur de l'adresse électronique du destinataire (receive provider). Le MDA du client destinataire stocke le message dans sa boite mail (mail box), et lui envoie une copie du message quand celuici relève son courrier avec son logiciel de messagerie (mailer). !© Les services par Patrick Hautrive !;~) 2010 166 La configuration de la messagerie La configuration de la messagerie électronique Protocols POP 3 IMAP 4 SMTP NNTP UUCP TCP/IP Commands bogolexer countmail compose edit error formail from kmailservice ksendbugmail local mailaddr mailmail mailq mailstat mbox mcmfmt Servers mutt_dotlock newaliases pickup popclient postdrop postlock print procmailex procmailrc procmailsc rmail runmailcap see showq virtual xbiff smtp pop imap2 imap3 procmail fetchmail sendmail postfix cc:mail majordomo listserv listpro innd nnrpd collabra diablo leafnode Spamassassin (port 25) (port 110) (port 143) (port 220) (port 110) Files Clients /etc/services /etc/aliases /etc/aliases.db /etc/mailcapopos /etc/mailcap.order /etc/mailname /etc/mail.rc ~/.muttrc ~/.signature /etc/sendmail.cf /etc/sendmail.hf /var/log/sendmail.st /var/spool/mqueue/* /var/run/sendmail.pid /etc/sysconfig/mail nn trn tin elm mail mailx kmail mutt emacs biff evolution mozilla Les entêtes de messages Les entêtes de messages TO: FROM: CC: BCC: SUBJECT: MESSAGE: JOIN: Destinataire Expéditeur Carbon Copy Blind Carbon Copy Sujet du message Corps du message Pièces jointes au message Les exemples pour la messagerie mail [email protected] < todo.txt /usr/lib/sendmail bd q 30m !© Les services par Patrick Hautrive !;~) 2010 167 POSTFIX Le serveur de Postfix Le serveur Postfix utilise les bibliothèques DB3Devel. Un serveur Postfix permet de gérer l'adressage des messages (mail), les listes de diffusion (mailing list), le filtrage des messages (anti spam), la vérification de la présence de code malveillant (anti virus), l'authentification SASL (authentication) et les domaines virtuels (virtual domain). Le service de messagerie Postfix est lancé lors de la procédure d'initialisation du système (init). La commande “locate postfix” liste tous les fichiers comprenant la clef “postfix”. La commande “apropos postfix” liste toutes les commandes qui se réfèrent à “postfix”. La commande “man postfix” décrit le fonctionnement du serveur de messagerie “postfix”. La commande “aptcache search postfix” recherche dans les packages Debian le motif “postfix”. La commande “aptcache show postfix” montre la description du package Debian nommé “postfix”. La configuration de Postfix La configuration du serveur de messagerie Postfix Commands locate postfix apropos postfix man postfix access aliases body_checks bounce canonical cidr_table cleanup defer error flush header_checks ldap_table lmtp local mailq master mysql_table newaliases oqmgr pcre_table pgsql_table pickup pipe postalias postcat postconf postdrop postfix postkick postlock postlog postmap postqueue postsuper proxymap qmgr qmqpd qshape regexp_table relocated Files sendmail showq smtp smtpd spawn tlsmgr trace transport trivialrewrite verify virtual smtpsink smtpsource /etc/aliases /etc/postfix/main.cf /etc/postfix/master.cf /etc/postfix/postfixscript /etc/postfix/postfixfiles /etc/postfix/postinstall /etc/postfix/dynamicmaps.cf /etc/postfix/sasl/* /etc/sysconfig/postfix /var/spool/mail/$USER /var/spool/postfix/* /var/spool/maillog /var/spool/mailq /usr/lib/postfix/* !© Les services par Patrick Hautrive !;~) 2010 168 Les exemple s pour Postfix rpm qa | grep bd3 rpm i db3devel dpkg l libdb3 man qmgr mv postfix.1.1.11.tar.gz /usr/local/src adduser postfix groupadd postdrop cd /usr/local/src tar xzvf postfix.1.1.11.tar.gz cd postfix.1.1.11 less INSTALL make && make install /usr/sbin/postfix /usr/libexec/postfix postfix flush ln s /etc/rc.d/init.d/postfix /etc/rc.d/rc3.d/S97postfix ln s /etc/rc.d/init.d/postfix /etc/rc.d/rc0.d/K37postfix !© Les services par Patrick Hautrive !;~) 2010 169 IPTABLES Le pare feu Un pare feu (firewall) est un dispositif de sécurité, qui filtre les paquets réseaux et qui repose sur l'analyse des entêtes (headers) du protocole TCP/IP. Un pare feu peut être un matériel spécifique (router), un système dédié (server) ou une application intégrée à une station (monitor). Un pare feu est généralement placé à l'entrée d'un sous réseau (subnet) afin d'en surveiller les connexions et les données entrantes, avec pour objectif d'éviter les intrusions (intruder). Un pare feu peutêtre également configurer pour filtrer les connexions sortantes d'un réseau local (LAN) vers Internet (WAN). Un pare feu configuré pour faire de la translation d'adresse (NAT) transformera tous les paquets sortants (outgoing) de telle sorte que seule l'adresse IP Internet du pare feu apparaissent depuis l'extérieur (mascarade). Les réponses provenant de l'extérieur (incoming) seront aussi transformées par le pare feu, et transmises aux différentes stations locales qui les ont émises. Un pare feu qui s'intercale entre un réseau extérieur et un réseau intérieur doit disposer d'au moins deux cartes réseaux (netcard interface), l'une connectée à internet et l'autre connectée au réseau local. Le pare feu i ptables Les pare feux pour les systèmes GNU/Linux sont ipchains pour les noyaux Linux 2.4 et iptables pour les noyaux Linux 2.4 et supérieurs. Le pare feu iptables est le successeur de ipchains et appartient au package Netfilter. Le pare feu iptables inspecte les paquets TCP/IP version IPV4 (ipv4). Le pare feu iptables est intégré au noyau Linux (kernel) avec plus ou moins de modules (modules). La commande « iptable » est une application qui permet à l'administrateur (user space) de modifier les tables de routage du pare feu Netfilter qui sont compilées dans le noyau du système ou comme modules (kernel space). Certaines extensions (extensions) au pare feu iptables permettent d'obtenir d'autres fonctionnalités. Le fichier iptables qui contient les instructions pour le pare feu (ipatbles, commands, tables, chains, rules, targets) peut être généré à la main avec un éditeur (text editor), à l'aide de scripts (scripts) ou grâce à un outil (frontend). Le fonctionnement d'iptables Le pare feu iptables est constitué de quatre tables (filter, nat, mangle, raw) dans lesquelles sont enregistrées les configurations. Chaque table est constituée de plusieurs chaines (chains) prédéfinies ou !© Les services par Patrick Hautrive !;~) 2010 170 personnalisées. Les chaines d'une table contiennent des règles (rules) qui sont examinées par le pare feu pour chaque paquet émis ou reçus. Pour chaque paquet, les règles sont examinées une à une dans l'ordre dans lequel cellesci sont écrites. Quand une règle ne s'applique pas au paquet, alors la règle suivante est comparée au paquet, et ainsi de suite jusqu'à ce qu'une règle s'applique, ou jusqu'à la dernière règle du pare feu. Si le pare feu n'a trouvé aucune règle qui s'applique au paquet, ou si l'une de cellesci indique de le retourner (return), alors la politique générale (policy) de la chaine s'applique au paquet. Quand une règle est ajoutée à une chaine, la nouvelle règle est enregistrée à la suite des autres (apend), à moins que ne soit spécifié l'emplacement précis où celleci doit se trouver dans la chaine. Chaque règle est constituée de la commande du pare feu (iptables), du nom éventuel de la table (table), de la commande à appliquer (command) pour cette règle, du nom de la chaine (chain) dans laquelle cette règle s'insère, des caractéristiques TCP du paquet (matches) et de l'action à appliquer en cas de concordance (target). L'action peutêtre une action prédéfinie (jump) ou le renvoi à une autre chaine personnalisée pour la même table (user defined chain). Les actions prédéfinies consiste à accepter le paquet (accept), à le laisser tomber (drop), à le placer dans une liste d'attente (queue) où il sera confié à un espace utilisateur (user space), ou à le retourner (return), c'estàdire à lui appliquer la politique générale de la chaine (policy). Les tables Le pare feu iptables est constitué de quatre tables indépendantes (filter, nat, mangle, raw). Chaque table contient des chaines prédéfinies (builtin). 1. La table « filter » est la table par défaut (default) du pare feu. 2. La table « nat » est la table s'occupe de la translation d'adresse ou NAT (Network Address Translation). La table « nat » modifie les paquets émis depuis le réseau local (established) et gère les paquets qui tentent d'établir de nouvelles connexions (new connexion). 3. La table « mangle » est la table qui modifie les caractéristiques TCP des paquets. 4. La table « raw » est la table qui définie les exceptions (exemption) aux autres tables et qui met en œuvre les priorités particulières pour certains paquets, lorsque cellesci sont définies. La table « raw » utilise une action prédéfinie particulière (notrack) et une extension particulière au pare feu iptables (ip_conntrack). Les chaines Le pare feu iptables contient des chaines prédéfinies (builtin) pour chacune des quatre tables, mais des chaines personnalisées peuvent également être définies (user define chain). !© Les services par Patrick Hautrive !;~) 2010 171 La table « filter » contient les chaines prédéfinies INPUT, FORWARD et OUTPUT. La table « nat » contient les chaines prédéfinies PREROUTING, OUTPUT et POSTROUTING. La table « mangle » contient les chaines prédéfinies PREROUTING, INPUT, FORWARD, OUTPUT et POSTROUTING. La table « raw » contient les chaines prédéfinies PREROUTING et OUTPUT. L'ordre des chaines Chaque table contient des chaines (chains) qui sont lus par le pare feu dans l'ordre. Chaque chaine contient des règles qui sont lus dans l'ordre, dans lequel cellesci ont été écrites, les unes après les autres, de la plus générale et de la plus libérale, à la plus spécifique et à la plus contraignante. L'ordre des chaines est très important parce que le pare feu appliquera au paquet qu'il examine l'action (rule) de la première chaine qui correspond exactement au paquet. Lorsqu'une règle est ajoutée au pare feu, et qu'aucune table n'est spécifiée avec l'option « t », cette ligne est ajouté à la fin de la chaine correspondante de la table de filtrage (filter), qui est la table par défaut (default). Les chaines prédéfinies 1. La chaine PREROUTING concerne les paquets entrants (incoming) qu'ils viennent de l'extérieur depuis l'une des cartes réseaux (network interface) ou qu'ils soient générés par la machine qui héberge le pare feu. Ces paquets seront modifiés (altered) dès leur arrivée dans le pare feu, qu'ils soient destinés à la machine locale hébergeant le pare feu (server) ou qu'ils soient destinés à être routés vers une autre des interfaces réseaux (network interfaces). 2. La chaine INPUT concerne les paquets entrants (incoming) qui sont destinés à la machine locale (local delivery routing table). Selon la man page d'iptables, il est mentionné que la chaine INPUT concernerait des paquets destinés aux connexions de la machine sur laquelle est installé le pare feu (local socket). Ce serait peutêtre le cas par exemple des connexions établies avec l'un des services (server) qui pourraient être installés sur la même machine que le pare feu. La chaine INPUT s'appliquerait dans ce cas à la carte réseau qui est connectée à l'extérieur (WAN). Toutefois, sur le site d'iptables.org, il est stipulé que la chaine INPUT n'a rien à voir avec les connexions provenant de l'extérieur (socket)... 3. La chaine FORWARD concerne des paquets qui transitent par le pare feu. Ces paquets sont générés à l'extérieur de la machine hébergeant le pare feu et sont destinés à une autre machine. La chaine FORWARD traite les paquets entrants (incoming) qui traversent le pare feu, et qui seront transmis vers un autre réseau (outgoing). La chaine FORWARD s'applique aux paquets reçus sur l'une des cartes réseaux et émis sur l'une des autres cartes réseaux. En générale, la chaine FORWARD s'occupe des paquets modifiés (mascarade) par le mécanisme de translation d'adresse (NAT) et routés (routed) entre le réseau local (LAN) et le réseau Internet (WAN). 4. La chaine OUTPUT concerne les paquets sortants (outgoing) qui sont émis par la machine hébergeant le pare feu. Ces paquets peuvent être destinés à la machine hébergeant le pare feu ou !© Les services par Patrick Hautrive !;~) 2010 172 être destinés à être routés vers l'extérieur. Ces paquets sortants peuvent être émis, soit par l'un des services installés sur le pare feu (server), soit par une autre station depuis l'intérieur du réseau local (LAN) dans le cas d'une translation d'adresses (NAT). 5. La chaine POSTROUTING concerne les paquets sortants (outgoing) qui ont été routés (routed) et qui peuvent être modifiés (altered) avant leur émission sur l'une des interfaces réseaux. Ces paquets peuvent être destinés à la machine hébergeant le pare feu (server) ou être destinés à une autre machine, que ce soit une machine appartenant au réseau local (LAN) ou au réseau extérieur (WAN). Les spécifications pour iptables Les spécifications du pare feu iptables (Netfilter) Le pare feu iptables est disponible pour les noyaux 2.4 (kernel 2.4) Le filtrage des paquets (packets filtering) La translation des adresses IP (masquerade) Le suivi des connexions (connexion tracking) La lecture séquentielle des règles des chaînes (order) Les chaines pour le filtrage des paquets: INPUT, FORWARD et OUTPUT Les chaines pour la translation d'adresse: PREROUTING, OUTPUT et POSTROUTING Les chaines personnalisées (userdefine) L'incrémentation de compteurs de paquets (counter) et des compteurs d'octets (byte) Les critères de sélection portent sur les entêtes (headers) et les drapeaux (flags) des paquets Les modules d'extension pour les critères (parameters), les politiques (targets) et les protocoles !© Les services par Patrick Hautrive !;~) 2010 173 Le shéma d'iptables ( http://ornellas.apanela.com/dokuwiki/pub:firewall_and_adv_routing) Incoming trafic (Network A) (network interface Eth0) | V +----------+ |PREROUTING| +----------+ | raw | <--------------+ | mangle | | | nat | | +----------+ | | | Routing | +- Decision-+ | | | | V V | Local Remote | Destination Destination | | | | V V | +--------+ +---------+ | | INPUT | | FORWARD | | +--------+ +---------+ | | mangle | | mangle | | | filter | | filter | | +--------+ +---------+ | | | | V | | LocalMachine | | | | | V | | Routing Decision | | | | | V | | +--------+ | | | OUTPUT | | | +--------+ | | | raw | | | | mangle | | | | nat | | | | filter | | | +--------+ | | | +-------------+ | | | POSTROUTING | Local +----> +-------------+ --> Traffic | mangle | | nat | +-------------+ | V Outgoing trafic (Network B) (network interface Eth0) !© Les services par Patrick Hautrive !;~) 2010 174 Les tables pour iptables Le pare feu iptables est constitué principalement de trois tables (tables) dans lesquelles sont enregistrées les configurations. La première table (filter) concerne le filtrage des paquets. La deuxième table (nat) s'occupe de la translation des adresses ou NAT (Network Address Translation). La troisième table (mangle) est utilisée pour effectuer les modifications dans les champs des entêtes. Une quatrième table dite brute (raw) peut être mise en place pour effectuer des opérations particulières sur les paquets TCP. Les chaines pour iptables Le pare feu iptables distingue les fonctions de filtrage et des fonctions de translation d'adresse. Le pare feu iptables est organisé en parties distinctes, appelées des chaines (builtin chains). Les chaines OUTPUT, INPUT et FORWARD sont utilisées pour le filtrage (filtering), tandis que les chaines OUTPUT, PREROUTING et POSTROUTING sont utilisées pour la translation des adresses (masquerade). L'administrateur peut également construire des chaines qu'il définit lui même (user define). Les chaines FORWARD, PREROUTING et POSTROUTING requièrent de disposer de deux cartes réseaux, chacune étant configurée avec un masque de sous réseau différent. Chacune des chaines peut être constituée d'une ou de plusieurs règles (rules) qui sont ordonnées (ordered) et numérotées (numbered). Une règle peut être formée d'un ou de plusieurs critères (parameters) de sélection ou de comparaison. Tous les paquets concernés par une chaine traversent successivement toutes les règles de la chaine, jusqu'à ce qu'une de ces règles s'applique au paquet. Si aucune règle ne s'appliquent au paquet, alors c'est la politique générale de la chaine (policy) qui s'applique au paquet. Quand tous les critères (parameters) d'une règle s'appliquent à un paquet, alors l'une des actions prédéfinies (verdict) ou l'une des actions définies par l'une des extensions du pare feu (target) associée à cette règle est administrée au paquet, et un autre paquet peut être analysé par le pare feu. Quand les critères d'une règle ne s'appliquent pas à un paquet, alors le paquet est examiné par la règle suivante dans l'ordre de la chaine, et ainsi de suite. Certaine action, comme ULOG, peuvent être administrée, mais le paquet continu a être analysé par la règle suivante (non terminating target). Les chaines de filtrage La chaine INPUT filtre les paquets entrants, tandis que la chaine OUTPUT analyse les paquets sortants. La chaine FORWARD permet de rediriger les paquets d'un segment de réseau vers un autre. Les chaines de translation Les chaines pour la translation d'adresse sont consultées uniquement lors de la création d'une nouvelle !© Les services par Patrick Hautrive !;~) 2010 175 connexion. La chaine PREROUTING modifie les paquets dès qu'ils arrivent, tandis que la chaine POSTROUTING les modifie quand ils sont routés. Le traitement séquentiel Les règles s'enchainent séquentiellement selon l'ordre d'apparition dans la chaine. L'action (target) de la première règle qui correspond à un paquet s'applique, et les règles suivantes ne sont pas examinées. Ainsi, l'ordre des règles est déterminant pour le bon fonctionnement d'un pare feu. Les règles doivent être ordonnées, du cas le plus général, vers le cas le plus particulier, et se terminer par une règle par défaut qui s'applique à tous les paquets ayant traversés entièrement la chaine. Plus le nombre de règles à l'intérieur d'une chaine est important, et plus le travail du pare feu pour chaque paquet peut être conséquent. C'est pourquoi, les paquets les plus courants devrait trouver rapidement une règle qui leur correspondent. Le filtrage doit être composé, en premier des filtres les plus larges, et s'affiner petit à petit. Autrement dit, les fils des grilles ou les mailles des filets successifs doivent être organisés pour se resserrer de plus en plus. La dernière règle doit pouvoir s'appliquer à tous les paquets ayant traversés la chaine. La dernière règle est la règle qui doit s'appliquer à tous les paquets qui ne correspondent à aucune des règles précédentes. Le principe de filtrage Le meilleur principe de filtrage est d'interdire tout (deny all), sauf ce qui est explicitement autorisé (explicit), plutôt que d'autoriser tout (allow all) implicitement (implicit), et de n'interdire que ce qui est reconnu comme inacceptable. Dans les deux cas, il y a des aménagements à effectuer régulièrement, mais dans le premier cas, les aménagements sont positifs, l'administrateur autorise quelque chose de nouveau considéré comme souhaitable, tandis que dans le second cas, les aménagements sont négatifs, l'administrateur interdit ce qu'il vient de reconnaitre comme inacceptable. Les critères d'une règle Les règles sont construites à partir des champs des entêtes TCP/IP des paquets (headers) et peuvent concerner toute les couches du modèle OSI des protocoles réseaux. Les règles peuvent être formées d'un ou de plusieurs critères (parameters) qui s'accumulent. Tous les critères d'une règle doivent correspondre exactement au paquet pour que la politique de la règle s'applique au paquet. Les critères sont reliés entre eux par l'opérateur logique implicite ET (and). L'opérateur logique de négation NON (not) peut être également utilisé pour désigner la complémentarité d'un critère (inverse). L'opérateur de négation est le point d'exclamation (“!”) qui permet de formuler le contraire d'un critère. Les critères (parameters) peuvent être basés sur le protocole (protocol), la carte réseau (interface), !© Les services par Patrick Hautrive !;~) 2010 176 l'adresse source (@source) ou l'adresse de destination (@destination), le port source (sport) ou le port de destination (dport), type de connexion (sync) ou le type de paquet (fragment). Les protocoles qui sont reconnus par le pare feu iptables sont les protocoles TCP (tcp), UDP (udp), ICMP (icmp), BGP (bgp) et IPSEC (ipsec). Les modules d'extension D'autres critères (extension match) et d'autres politiques (targets extension) peuvent être indiqués avec des modules d'extension (modules) qui doivent être intégrés ou chargés par le noyau (kernel). Les modules d'extensions permettent d'affiner les critères, comme l'état (state) des connexions (INVALID, ESTABLISHED, NEW, RELATED, SNAT, DNAT), l'heure de connexion (time), la vitesse de connexion (rate), les adresses physiques des interfaces (mac), les types d'adresses réseaux (address type), les plages d'adresse (address range), les types de protocoles (protocol), les drapeaux (flag) des entêtes (SYN, ACK, FIN, RST, URG, PSH, ALL, NONE), les identifiants des propriétaires (owner) des paquets, ou les structures de paquets inhabituels (unclean). En théorie, quand le module existe et qu'il fonctionne, les critères peuvent porter sur n'importe quel autre champ des entêtes (headers) de la pile de protocole TCP/IP (TOS, DSCP, ECN, CWR, ECE, ECT, ESP, FLC, MSS, TTL). Les compteurs des règles Quand un paquet correspond aux critères d'une règle (match), alors la politique de la règle (target) s'applique au paquet (packet), et le compteur de la règle (packet counter) est incrémenté. Les règles disposent également d'un compteur d'octets (byte counter) qui permet de surveiller quantitativement le trafic. Les politiques des règles Chaque règle est associé à une politique (target). La politique représente l'action qui est appliquée au paquet qui correspond aux critères de la règle. Les quatre politiques ou actions principales sont de laisser passer le paquet (accept), de l'abandonner (drop), de le transmettre à une zone utilisateur (queue) ou de le retourner à la chaine précédente (return). Les autres politiques sont spécifiques à des modules d'extension. Chaque chaine est définie pour appliquer une politique par défaut (policy). Les opérations sur les chaines La construction et l'administration des chaines et de leurs règles s'effectuent à l'aide d'opérations ou de commandes. Les opérations permettent de lister (list), d'ajouter (append) en fin de chaine, de supprimer (delete), d'insérer (insert), de déplacer (replace), de vérifier (check) les règles et leur politique (target) à l'intérieur d'une chaine. Les opérations permettent de gérer les compteurs des règles !© Les services par Patrick Hautrive !;~) 2010 177 (counter), les délais (timeout), d'indiquer la translation (masquerade). Les opérations permettent également d'insérer (new) et de supprimer (delete) des sous chaines définies par l'administrateur (user define). Les règles d'une chaine sont numérotées à partir de un. La commande « man iptables » présente le pare feu et la configuration de ces options. La documentation iptables La documentation Packet Filtering Howto décrit les mécanismes de filtrage des paquets TCP/IP. La documentation Nat Howto présente la translation d'adresses. Les documentations Netfilter Extensions Howto et Netfilter Hacking Howto présentent les caractéristiques qui ne sont pas incluses dans les paquetages standards et qui requièrent des configurations particulières. http://www.netfilter.org/documentation/ http://www.linuxreport.org/content/view/26/23/ https://help.ubuntu.com/community/IptablesHowTo http://jengelh.medozas.de/documents/Chaostables.pdf http://linux.about.com/od/commands/l/blcmdl8_iptable.htm http://www.netfilter.org/ http://en.wikipedia.org/wiki/Iptables http://www.frozentux.net/iptablestutorial/iptablestutorial.html http://ornellas.apanela.com/dokuwiki/pub:firewall_and_adv_routing http://web.mit.edu/rheldoc/4/RHDOCS/rhelrgen4/chiptables.html http://artoflinux.blogspot.com/2008/07/iptablestutorialforbeginners.html http://www.yolinux.com/TUTORIALS/LinuxTutorialIptablesNetworkGateway.html http://www.linuxhomenetworking.com/wiki/index.php/Quick_HOWTO_:_Ch14_:_Linux_Firewalls_U sing_iptables !© Les services par Patrick Hautrive !;~) 2010 178 Tables Rules & Parameters Matches Ext. Rules table filter (default) nat (address translation) mangle (QOS, tuning) raw (optimize patch) Operations ! (negation operator) m (match) p (tcp,udp,icmp,mac) m tcp (port range#:#) h (hide) sourceport i (input:eth0, eth+) destinationport o (output:eth0,eth+) tcpflags s (@ip source) m limit (with limit) s (@ip/255.255.255.0) m limit limit (rate log) A (append to end) s (@ip/24) (maskbits) m limit limitburst C (check) d (@ip destination) m state (state) D (delete) j (jump) NEW I (insert) To target ESTABLISHED F (flush all rules) To user chain RELATED R (replace) b (bidirectionnal) INVALID L (list) c (set packet counter) m conntrack P (default policy) n (@ip in numérical) ctstate (conntrack mod) Z (counter at zero) f (fragmented packets) SNAT & DNAT N (new uchain) v (verbose) ctproto E (rename uchain) x (exact value counters) ctorigsrc X (delete uchain) linenumbers ctorigdst M S (masquerade) modprobe=command ctreplsrc M L (list nat) tcpoption ctrepldst h (help) sourceport (tcp udp) ctstatus deletechain destinationport (tcp udp) ctexpire tcpflags dscp (dscp mod) Chains SYN ACK FIN RST dscpclass POSTROUTING (o) URG PSH ALL pkttype (pkttype mod) INPUT (i) NONE tos (typeofservice mod) FORWARD (i o) syn (SYN packets) ahspi (IPsec mod) OUTPUT (o) mss espspi (Ipsec mod) PREROUTING (i) icmptype length (length mod) userdefine macsource ttl (time to live mod) sourceports unclean destinationports sport (source port num) ports dport (dest. port num) mark ports uidowner Targets Builtin gidowner ACCEPT pidowner DROP (ipchains DENY) sidowner REJECT (error message) cmdowner QUEUE (user space) RETURN (default policy) !© Les services par Patrick Hautrive !;~) 2010 179 Target Extensions BALANCE CLASSIFY CLUSTERIP CONNMARK DNAT (postrouting) todestination DSCP ECN ecntcpremove LOG logprefix loglevel logtcpsequence logtcpoptions logipoptions MARK (Iproute2) setmark MASQUERADE toports MIRROR NETMAP NOTRACK REDIRECT toports REJECT rejectwith ROUTE SNAT (prerouting) tosource TCPMSS setmss clampmsstopmtu TOS settos TRACE TTL ULOG (user space) ulognlgroup ulogprefix ulogcprange ulogqthreshold La configuration pour iptables La configuration du pare feu iptables (Netfilter) (man iptables) Commands /sbin/iptables /sbin/iptables iptablesrestore iptablessave ip6tables ip6tablessave ip6tablesrestore chkconfig Tools acidlab arptables netstatnat specter psad reaim openvpn firehol fwanalog fwlogwatch fiaif shorewall ebtables ulogd NARC EasyFW Webmin GUFW Scripts netscript2.4 uif guarddog guidedog kmyfirewall knetfilter lokkit gnomelokkit ferm filtergen fireflierserver fireflierclientgtk fireflierclientkde fireflierclientqt webminfirewall Files Modules /etc/protocols /etc/services /etc/default/iptables /etc/sysconfig/iptables /usr/share/doc/iptables/* /lib/iptables/* /proc/net/ip_tables_matches /proc/net/ip_tables_names /proc/net/ip_tables_targets iptables_nat ip_conntrack ipconntrack_ftp iptablesdev iptstate ipacng Un script iptables Dans cet exemple, le script iptables est un script RC (Run Command), qui est placé dans le répertoire des services lancés lors de la procédure d'initialisation du système « /et/init.d/* ». Le script est activé (start) pour les niveaux d'initialisation 3 et 5 (liens S567 et liens K567). #!/bin/sh # where programs are IPT=/sbin/iptables MOD=/sbin/modprobe # interfaces LNET=eth1 INET=eth0 # incoming connections and services TCP_INCOMING=ftp,ssh,smtp,domain,http,pop3,https UDP_INCOMING=domain !© Les services par Patrick Hautrive !;~) 2010 180 # loading additional modules $MOD ip_conntrack_ftp $MOD ip_conntrack_irc $MOD ip_nat_ftp case "$1" in start) echo "Loading IPTABLES rules" # Flush all tables $IPT F $IPT F t nat #General Policy $IPT P INPUT DROP $IPT P FORWARD ACCEPT $IPT P OUTPUT ACCEPT # accept everything on loopback device (incoming) $IPT A INPUT i lo j ACCEPT # accept everything on localnet device (incoming) for out localnet $IPT A INPUT i $LNET s 10.0.1.0/24 j ACCEPT $IPT A INPUT i $LNET s 10.0.2.0/24 j ACCEPT $IPT A INPUT i $LNET s 10.0.3.0/24 j ACCEPT # check and catch unclean packages, of course log it !!! $IPT A INPUT j LOG m limit limit 10/hour m unclean $IPT A INPUT j DROP m unclean $IPT A OUTPUT j LOG m limit limit 10/hour m unclean $IPT A OUTPUT j DROP m unclean $IPT A FORWARD j LOG m limit limit 10/hour m unclean $IPT A FORWARD j DROP m unclean # tell the outside world, that we don't have IDENT and SOCKS servers $IPT A INPUT p tcp dport 113 j REJECT rejectwith icmpportunreachable $IPT A INPUT p tcp dport 1080 j REJECT rejectwith icmpportunreachable # responding to ping echo request !!! $IPT A INPUT p icmp icmptype echorequest j ACCEPT # outside world :) allow everything if our server or net established connection !© Les services par Patrick Hautrive !;~) 2010 181 $IPT A INPUT p tcp j ACCEPT m state state ESTABLISHED,RELATED $IPT A INPUT p udp j ACCEPT m state state ESTABLISHED $IPT A INPUT p icmp j ACCEPT m state state RELATED,ESTABLISHED # this is what we allow to go out from out network, and this machine $IPT A INPUT p tcp i $INET s 0/0 j ACCEPT m state state NEW m multiport destinationport $TCP_INCOMING $IPT A INPUT p udp i $INET s 0/0 j ACCEPT m state state NEW m multiport destinationport $UDP_INCOMING # dynamic NAT (masq) $IPT t nat A POSTROUTING p all s 10.0.1.0/24 j MASQUERADE $IPT t nat A POSTROUTING p all s 10.0.2.0/24 j MASQUERADE $IPT t nat A POSTROUTING p all s 10.0.3.0/24 j MASQUERADE # forwarding $IPT t nat A PREROUTING s 0/0 p tcp dport 80 m state state NEW,ESTABLISHED,RELATED j DNAT to 10.0.3.2:80 # redirection $IPT t nat A PREROUTING i eth1 s 10.0.3.0/28 p tcp dport 80 j REDIRECT toport 3128 # log $IPT A INPUT j LOG m limit limit 10/hour $IPT A OUTPUT j LOG m limit limit 10/hour $IPT A FORWARD j LOG m limit limit 10/hour ;; stop) echo "Flushing IPTABLES rules !" $IPT P INPUT ACCEPT $IPT P OUTPUT ACCEPT $IPT P FORWARD ACCEPT $IPT F $IPT F t nat ;; *) echo "Usage: iptables {start|stop}" ;; esac exit 0 !© Les services par Patrick Hautrive !;~) 2010 182 La configuration /proc echo 1 >/proc/sys/net/ipv4/tcp_syncookies echo 1 >/proc/sys/net/ipv4/conf/eth0/rp_filter echo 1 > /proc/sys/net/ipv4/ip_forward Le forwarding vi /etc/sysctl.conf net.ipv4.ip_forward = 1 vi /etc/sysconfig/network FORWARD_IPV4=true La sauvegarde /sbin/iptablessave > /etc/sysconfig/iptables.rules /sbin/iptablesrestore < /etc/sysconfig/iptables.rules Les exemples pour iptables # iptables t [TABLE] A [CHAIN] [RULES] j [TARGET] chkconfid del ipchains chkconfig add iptables ipchains F service ipchains stop rmmod ipchains service iptables start iptables t nat n L ; iptables L v modprobe iptables_nat ; modprobe ip_conntrack ; modprobe ipconntrack_ftp echo 1 > /proc/sys/net/ipv4/ip_forward /sbin/services iptables save (Red Hat) /etc/sysconfig/Susefirewall (Suse) /etc/sysconfig/scripts/Suse/firewall2custom (Suse) /sbin/suse/firewall restart (Suse) vi /etc/default/iptables (Debian) enable_iptables_initrd = true /etc/init.d/iptables save_active iptables L INPUT iptables F OUTPUT ; iptables Z FORWARD ; iptables P INPUT DROP !© Les services par Patrick Hautrive !;~) 2010 183 iptables A INPUT i lo j ACCEPT iptables N PUTFOR iptables A PUTFOR m limit –limit 2/sec j LOG iptables A PUTFOR m state –state ESTABLISHED,RELATED j ACCEPT iptables A PUTFOR m state –state NEW m tcp p tcp –dport 22 j ACCEPT iptables A PUTFOR j DROP iptables A INPUT j PUTFOR iptables A FORWARD j PUTFOR iptables t nat A POSTROUTING p ppp0 j MASQUERADE !© Les services par Patrick Hautrive !;~) 2010 184 MYSQL Les bases de données Les bases de données (data base) sont des ensembles de tables où sont classés et indexés les données ou les enregistrements. Les bases de données relationnelles ou SGBDR (Système de Gestion de Base de Données Relationnelles) relient les tables entre elles par des clefs communes (primary key). Le langage de programmation ou d'interrogation le plus connu pour les bases de données est le SQL (Structured Query Language). Les bases de données les plus connues sont Oracle, Ingres, Adabas, PostgreSQL, Mysql et Open Office. Les solutions LAMP (Linux Apache Mysql Php) ou LAPP (Linux Apache Postgresql Perl) sont des systèmes intégrés et autonomes composés uniquement de Logiciels Libres. Les bases de données sont interrogeables et administrables en même temps, c'estàdire, qu'une base de données fonctionne toujours, alors que des modifications sont effectuées. Afin d'éviter les erreurs ou les doublons dans les enregistrements des données, toutes les modifications doivent être verrouillée (lock file) et validées (commit). Des scripts (“.sql”) peuvent être employés pour automatiser la gestion des bases de données. La base de données Mysql La base de données Mysql est employée dans de nombreuses applications comme la messagerie (postfix), les transferts de fichiers (pureftp), la sauvegarde réseau (bacula), l'analyse réseau (snort, nagios) ou les sites de partage de contenus ou CMS (Content management Site). La base de comptes Mysql est indifférente à la casse. La gestion d'une base de données Mysql peut s'effectuer à distance via le module de l'interface de Webmin. L'installation de Mysql L'installation de la base de données Mysql aptget install mysqlserver mysqlclient php4mysql phpmyadmin ./configure –prefix=/usr/local/mysql make ; make install ; adduser mysql ../script/mysql_install_db su mysql vi /etc/passwd mysql:*: /usr/local/bin/safe_mysql –log & /usr/local/bin/mysqladmin version /etc/rc.d/init.d/mysql restart mysql u root !© Les services par Patrick Hautrive !;~) 2010 185 La configuration de Mysql La configuration de Mysql (man mysql) Commands mysql mysqld mysqladmin mysqltcl msql2mysql myisamchk myisamlog myisampack mysqlaccess mysqlbinlog mysqlbug mysqlcheck mysqldump mysqldumpslow mysqlerr mysqlhotcopy mysqlimport mysqlmanager mysqlmanagerc mysqlshow mysqltest dbf2mysql perror replace resolveip Tools acidlabmysql sqlrelay mysql_install_db sqleditor safe_mysql pike7 mysqladmin mtop mysqlnavigator mytop mysqlquerybrowser dbengine my_print_defaults eskuel mysql_convert_table_format tora mysql_explain_log webmin mysql_find_rows mysql_fix_extensions mysql_fix_privilege_tables mysql_install_db mysql_secure_installation mysql_setpermission mysql_table mysql_tableinfo mysql_waitpid mysql_zap mysqld_multi mysqld_safe mysqlmanagerpwgen pack_isam resolve_stack_dump Files /etc/init.d/mysql /etc/rc5.d/S20mysql /etc/rc6.d/K20mysql /etc/mysql/my.cnf /etc/my.cnf /etc/mysql/debianstart /etc/mysql/debian.cnf /etc/logrotate.d/* /etc/logcheck/* /etc/mysql/debianlog rotate.conf /var/lib/mysql/mysql /var/lib/mysql/test /var/cache/mysql /var/run/mysqld /usr/share/doc/* /usr/share/mysql/* /usr/share/mysql/french/* /usr/share/mysql/charsets/* Les commandes SQL Les commandes SQL (Structured Query Language) SELECT INSERT UPDATE DELETE DROP SET FLUSH GRANT SHOW DATABASES TABLES STATUS COLUMNS INDEX USE !© Les services par Patrick Hautrive !;~) 2010 186 Packages mysqlserver mysqlclient php4mysql phpmyadmin Les exemples pour Mysql mysql u root p < create_db.sql vi /etc/php4/apache/php.ini extension = mysql.so mysql u root mysql> show databases; mysql> SET PASSWORD FOR root=PASSWORD('secret'); mysql> FLUSH PRIVILEGES; mysql> GRANT ALL PRIVILEGES ON *.* TO mister@localhost IDENTIFY BY 'secret'; mysql> GRANT SELECT, INSERT, UPDATE, DELETE, DROP on test.* TO loop@localhost IDENTIFY BY 'other secret'; mysql> DROP DATABASE IF EXIST bd_test; mysql> SELECT * FROM table_test; mysql> CREATE DATABASE bd_test; mysql> SHOW DATABASE; mysql> USE bd_test; mysql> CREATE TABLE table_test (id INT NOT NULL auto_increment, commentaires TEXT, PRIMARY KEY (id)); mysql> INSERT INTO table_test VALUES ('0', 'commentaires'); !© Les services par Patrick Hautrive !;~) 2010 187 PHP L'interpréteur PHP L'interpréteur PHP (Hypertext Pre Processor) se compose d'un noyau Zend et de modules de fonctions. L'interpréteur PHP propose par défaut de multiples fonctions, la gestion des tableaux, des chaines de caractères, des dates et des bases de données. L'interpréteur PHP est multiprocessus, et les modules chargés peuvent être partagés. Les morceaux de code en PHP sont inclus dans une page HTML, et ils sont interprétés chez le client par le module PHP. Le serveur web Apache doit être compilé avec le module PHP. L'installation de PHP L'installation de PHP tar xzvf php4.1.1.tar.gz cd php4 .configure –withmysql=/usr/lib/mysql make ; make install vi /etc/httpd/httpd.conf LoadModule php4module libexec /libphp4.so AddModule mod_php4.c AddType application/xhttpdphp apachectl restart vi info.php <?php phpinfo(); ?> cp info.php /usr/local/httpd/htdocs/ chmod 777 /usr/local/httpd/htdocs/info.php firefox http://localhost/info.php .php Les exemples pour PHP vi exemple.php <?php echo “Hello Wordl”; ?> aptget install php5 Les exemples de variables pour PHP $num = 5; $alpha = “Yes or No”; $string = “Message”; !© Les services par Patrick Hautrive !;~) 2010 188 echo strlen($string); echo (date(“1 ds of F Y h:i:s A”)); Les exemples de tableaux pour PHP $tab = array(“tree”,”leaves”); $tab = array(“tree” ==>1, “leaves” ==> 22); Les exemples de fonctions pour PHP function todo($a,$b) { return ($a+$b); } echo todo(2,3); Les exemples de boucles pour PHP $i = 0; while ($i < 5) { echo $i; $i++; } Les exemples de tests pour PHP $i = 5; if ($i == 6) { echo “The variable equals 6”; } else { echo “The variable differs from 6”; } !© Les services par Patrick Hautrive !;~) 2010 189 CMS Le partage de contenu Les applications CMS (Content Management System) sont des programmes qui permettent de mettre en place très rapidement des sites web complexes et de partager du contenu (files, chat). Les applications CMS sont utilisées pour construire des sites généralistes (portal), des sites de diffusion (blog), des sites d'échange (news), des sites de discussion (forum), des sites de documentation (wiki), des sites commerciaux (ecommerce), des sites de réseaux sociaux (social), de sites de collaboratifs (groupware), des sites d'apprentissage (elearning), des sites d'annuaire (phonebook), des sites d'entraide (faq), des sites internes (intranet), des sites de publication visuelle (gallery), sonore (music) ou vidéo (motion), etc. L'application CMS gère de manière automatisée tout le contenu du site, que ce soit, les pages (html), les cadres dans la page (framework), les connexions (account), les partages de documents (upload), les liens (link), etc. Les avantages des CMS Les applications CMS permettent de donner une unité visuelle et fonctionnelle à un site. Ainsi, toutes les pages d'un site, qui a été généré par une application CMS, présentent la même organisation (structure), généralement en plusieurs colonnes (colum) avec une bannière (banner) et un menu (bar). Par ailleurs, la charte graphique (style) du site est toujours respectée, parce qu'un même modèle (skin) sert de base pour toutes les pages. La gestion des boutons (button), des espaces (space), des couleurs (color), des polices (caracter), des versions des documents (date), et des utilisateurs (user) est centralisée et géré par l'application CMS. Enfin, les applications CMS permettent d'interconnecter les réseaux sociaux (facebook, twitter, youtube). L'environnement technique d'un CMS Les applications CMS sont installées sur un ordinateur (system) avec un accès au réseau (internet), adossées à un serveur web (web server), et à un serveur de base de données (database). Les meilleures applications CMS sont des logiciels libres (free software) parce qu'elles ont été programmées par une communauté (community) qui élabore des projets basés sur un code source ouvert (open source). Les programmes sont protégés par une licence libre (gnu gpl license), et les membres de la communauté en assure l'amélioration des fonctionnalités (development), et la correction des erreurs (maintenance). !© Les services par Patrick Hautrive !;~) 2010 190 Souvent des architectures LAMP (Linux Apache Mysql Php) sont proposées. Ainsi, la chaine entière de production et de diffusion sur le net est géré par des Logiciels Libres, depuis le système d'exploitation (linux), le serveur web (apache), la base de données (mysql), les scripts de gestion de la base de données (php), et l'application CMS (joomla). Les types de CMS Il existe plusieurs types d'applications CMS, selon les technologies qu'elles utilisent, comme les modèles de page (template), des sous programmes (modules), des scripts d'interrogation de la base de données (php, perl, python, tcl) ou des langages de programmes (java, ruby, cocoon, tomcat, c#), des outils d'administration (mysqladmin, phpmyadmin), etc. Les CMS les plus connus sont des logiciels libres comme Wordpress, Joomla, Spip, Drupal, PHPNuke, MediaWiki, Zope etc. Les types de modules Selon la spécialisation d'un CMS, les modules qui peuvent être intégrés au site web varient, mais en général, ils proposent tous de nombreux modules. Les modules qui sont intégrés au site permettent d'ajouter une fonctionnalité et de rendre le site plus convivial et plus dynamique. Les modules que l'on retrouve souvent sont les suivants: un calendrier (calendar), une barre de recherche (search), l'ouverture d'un compte (register), la connexion au site (login), une barre de menu déroulant (menu) ou par onglet (tab), un champ pour rechercher une occurrence dans le site ou sur un moteur de recherche (research), des liens légaux (legacy), de renseignements (contact) et de licence (copyright) en bas de page, des bulles d'information quand le pointeur de la souri reste un instant sur une option (info), le comptage (counter) et l'indexation des pages visitées (index), un système de popularisation des articles mis en ligne (votes) et d'expression pour les visiteurs (commentary), l'insertion automatique d'une image à coté d'un texte publié par un même auteur (logo), la présentation d'images (galery), des fichiers à télécharger (download), la visualisation de la structure du site pour retrouver facilement une page (site map), des modèles de présentation graphique (themes), le classement des pages par rubriques (category) ou la présentation de mots clefs les plus demandés (tags), l'abonnement à une lettre de diffusion (mailinglist) ou à une alerte sur un thème (rss), la gestion de la traduction en plusieurs langues (languages), etc. Un exemple d'installation CMS Voici un exemple d'installation d'un site web généré par une application CMS. Dans cet exemple, tous les logiciels utilisés sont des logiciels libres, le système Gnu Linux (debian4 Etch), le serveur web (apache2), la base de données (mysql4), la gestion des scripts (php5), les outils de management de la base de données (php5mysql) et de management des scripts (phpmyadmin), et l'application CMS (phpwebsite1.7), le navigateur (firefox11.3). !© Les services par Patrick Hautrive !;~) 2010 191 L'installation d'un CMS doit prendre en compte la gestion des utilisateurs (user), la provision de l'espace de stockage (disk), la mise en place du réseau (network), l'installation des programmes (packages), la préparation de la base de données (data base), et la configuration du site (cms). 1. Dans un premier temps, l'administrateur des comptes se charge de la gestion des utilisateurs (adduser, usermod) et des groupes (addgroup, groupmod) qui administreront l'installation et la maintenance du site. 2. Dans un deuxième temps, l'administrateur de l'espace de stockage se charge de choisir le répertoire dans lequel sera installé le site (disk, df, mkdir, mount, DocumentRoot) afin de pouvoir accueillir les fichiers du site et les journaux (logs, ServerRoot), ainsi qu'une stratégie de sauvegarde (dd, tar, crontab, rsync). 3. Dans un troisième temps, l'administrateur réseau doit s'assurer biensûr que le réseau fonctionne (ifconfig, route, ping, netstat, nmap, /etc/init.d/network, /etc/network/interfaces). Quand le site sera terminé, la configuration du pare feu (iptables) et l'ouverture des ports (ports, /etc/services) permettra aux internaute d'accéder au site. 4. Dans un quatrième temps, l'administrateur du système procède à l'octroi des permissions (chmod, ls l, su, sudo) pour sécuriser les accès, et à l'installation des serveurs nécessaires (apt get, tar, ServerRoot). Les fichiers de configuration des serveurs (/etc/*) sont souvent bien commentés et permettent la compréhension de leurs mécanismes, autan que l'optimisation de leurs configurations. Pour Apache le fichier se trouve dans «/etc/apache2/apache2.conf». 5. Dans un cinquième temps, l'administrateur de la base de données crée une nouvelle base de données pour accueillir le site CMS, ainsi qu'un utilisateur, lequel possède les droits pour la gérer (CREATE, GRANT, SHOW, USE). Cette base de données peutêtre générée à partir du prompt «mysql>» (mysql), ou à l'aide de l'outil de management (phpmyadmin). Le fichier de configuration de MySql se trouve dans «/etc/mysql/my.cnf». 6. Dans un sixième temps, l'administrateur du site crée le site avec l'interface qui lui est proposée par le CMS et avec les informations que lui ont données les autres administrateurs (databasename, databaseuser, databasepassword, sitedirectory). Il est très important de rechercher quels sont les programmes nécéssaires (packages) et leurs dépendances (dependencies) sur le site du CMS (phpwebsite) et de suivre les directives qui sont placées dans les fichiers d'aide qui figurent dans l'arborescence du CMS (README, INSTALL, DOCUMENTATION). En général, le premier compte utilisateur que l'on crée est l'administrateur du site CMS (webadmin). En se connectant au serveur CMS avec un navigateur (lynx, w3m, firefox), des directives sont données sur la configuration. 7. Dans un septième temps, l'administrateur du site CMS construit le site et choisit les modules qui seront incorporés au site. La sélection des modules et l'organisation des espaces s'effectuent directement avec un navigateur internet (firefox) pointant sur le serveur CMS. Quand, le site est enfin prêt, il ne reste plus qu'à le mettre en ligne. Le site CMS propose également une interface web d'administration, et l'administration peut donc se faire à distance. Avec Debian, la configuration par défaut de Php5 se trouve dans le fichier «/etc/php5/apache2/php.ini». !© Les services par Patrick Hautrive !;~) 2010 192 L'installation d'un CMS (phpwebsite) Phases Users Commands adduser uid 1010 web ; usermod u 1010 web ; cat /etc/passwd | grep web groupadd staff ; groupmod g 110 staff ; chown R web:staff /home/web Disk fdisk l ; df h ; du h Directory mkdir /home/website ; chown root:staff /home/website chmod 664 /home/website/index.html Network route add default gw 10.0.2.254 ; vim /etc/network/interfaces /etc/init.d/networking restart ; ifconfig ; route; ping, netstat ; nmap Packages vim /etc/apt/sources.list ; aptget update CMS aptcache show apache | less ; aptcache search mysql aptget install opensshserver apache2 mysqlserver5.0 mysqlclient aptget install php5mysql phpmysql php5 phpgd cd /home/website ; wget phpwebsite_1_7_1.tar.gz ; tar xvzf phpwebsite_1_7_1.tar.gz mv phpwebsite_1_7_1 phpwebsite ; chown R web:staff phpwebsite Apache cd phpwebsite ; less /home/website/phpwebsite/README less /home/website/phpwebsite/docs/INSTALL vim /etc/apache2/apache2.conf ; groupmod A wwwdata web staff /home/website vim /etc/apache2/sitesenabled/000default mv /var/www/apache2default/* /home/website/ ; chmod 775 /home/website /etc/init.d/apache2 restart ; w3m 10.0.2.155 Mysql mysql ; mysql>CREATE DATABASE db_webphpsite; mysql>SHOW DATABASES; mysql>CREATE USER dbwww IDENTIFIED BY 'webpassword'; mysql>USE db_webphpsite; mysql>SHOW TABLES; Web Site http://10.0.2.155/phpwebsite/dbtest.php ; vim /home/website/phpwebsite/dbtest.php http://10.0.2.155/phpwebsite/setup/ (#login: webadmin ; password: 'webadminpassword'#) http://10.0.2.155/phpwebsite/setup/help/sessions.en_US.txt less /usr/share/phpmyadmin/README ; less /usr/share/phpmyadmin/INSTALL less /home/website/phpwebsite/docs/README less /home/website/phpwebsite/docs/INSTALL http://10.0.2.155/phpmyadmin/ #(login: dbwww password: 'webpassword')# http://10.0.2.155/phpwebsite/index.php (#login: webadmin ; password: 'webadminpassword'#) !© Les services par Patrick Hautrive !;~) 2010 193 FTP Le transfert de fichiers Le transfert de fichier peut s'effectuer avec FTP (File Transfer Protocol) à partir d'un serveur FTP et à l'aide de la commande “ftp”. Pour les sites FTP qui acceptent les connexions anonymes (anonymous), les utilisateurs (ftp) peuvent donner leur adresse de messagerie comme mot de passe, ou ne rien saisir. Il existe des serveurs FTP qui envoient les fichiers demandés par mail en pièces jointes. La commande “ftp” lance le client FTP en mode interactif avec un prompt (“ftp>”). Le protocole FTP répond aux spécifications des RFC 959 et RFC 1759. La commande “man ftp” décrit l'ensemble des options et des commandes FTP. L'administration du serveur FTP (wuftpd) peut s'effectuer à distance via les modules de l'interface de Webmin. Le serveur wuftpd de l'université de Washington peut faire également office de serveur Proxy pour les données FTP (frox). Les modes de transfert Les transferts en mode texte (ascii) conviennent pour les fichiers textes (unix, msdos, ou apple), tandis que les transferts en mode binaire (binary) conviennent pour les fichiers compressés, les images et les programmes compilés. Le mode texte endommage les fichiers binaires susceptibles de contenir des caractères de contrôle. L'option Retour Charriot (Carriage Return, “cr”), en mode texte, permet de convertir les séquences de caractères “CR+LF” (Carriage Return + Line Feed) des textes Windows™, en “LF” pour la lecture sous Unix™. L'option interactive (“i”) permet de désactiver le prompt interactif lors des transferts multiples de plusieurs fichiers. L'option d'expansion des noms de fichiers (glob) permet d'utiliser les jokers avec les commandes “mput”, “mget” et “mdelete”. Le mode passif (passif mode) permet, depuis l'extérieur, de franchir un pare feu (firewall), si le serveur FTP accepte ce mode. !© Les services par Patrick Hautrive !;~) 2010 194 La configuration pour FTP La configuration pour FTP (File Transfert Protocol) (man ftp) Commands (ftp> help) ? debug mdir put ! dir mget pwd $ disconnect mkdir qc account exit mls quit append form mode quote ascii get modtime recv bell glob mput reget binary hash newer rhelp bye help nlist rstatus case idle nmap rename cd image ntrans reset cdup lcd open restart chmod ls passive rmdir close macdef prompt runique cr mdelete proxy send delete Servers sendport ftpd Pureftpd site ftpdssl ftpproxy size vsftpd muddleftpd status wuftpd ftpupload struct wsftp ftpwatch sunique wzdftpd frox system proftpd configmanager tenex pyftpd krb5ftpd tick jftpgw inetutilsftpd trace ftpgrab twoftpd type atftpd ftpmirror umask oftpd fmirror user tftpd mirror verbose Files $HOME/.netrc /etc/alternatives/ftp /etc/lftp.conf /usr/include/arpa/ftp.h /lib/security/pam_ftp.so /usr/lib/apt/methods/ftp /usr/share/doc/ftp/* /usr/share/vim/vim63/ftplugin/* man netrc /etc/inetd.conf /etc/services Clients ftp sftp gftp ftpssl wget wput lftpget kbear cftp ncftp ncftp2 curl lftp pftp tftp yafc zftp atftp gopher filerunner rssh dpkgftp debmirror puttytools sitecopy xsitecopy scponly lukemftp netkitftp weex pavuk lurkftp aria !© Les services par Patrick Hautrive !;~) 2010 195 Les exemples pour FTP vi /etc/inetd.conf ftp stream tcp nowait root /usr/sbin/ftpd vi /etc/services wuftp 3010/tcp wuftpd wuftpdata 3009/tcp wuftpd /bin/chconfig ftp ftp://[email protected] ftp://ftp.lip6.fr ftp://ftp.univlille1.fr ftp ftp> open ftp.uu.net ftp> ls mail [email protected] mail [email protected] info.cern.ch ipswitch.com twi.tudelft.nl w3.org ftpd lio !© Les services par Patrick Hautrive !;~) 2010 196 IRC La conversation en direct Les serveurs de conversation proposent des salons de conversation en direct (live). Le salon (room) ou le canal (chanel) peut être un lieu d'âpres discussions sérieuses (talks), d'échanges et d'entre aide (help), de bavardages anodins (chats) ou de badinage sans conséquences (flirts). Les internautes se connectent à un serveur (server) sous l'identité d'un pseudonyme (nickname) et choisissent à leur convenance, un salon généraliste ou spécialisé dans un thème particulier. La fenêtre du client (client) ou IMC (Instant Messaging Client) affiche les dialogues instantanément avec le pseudonyme comme préfixe. Toutes les personnes qui sont connectées au même moment peuvent participer et échanger en direct. Une personne peut participer à plusieurs canaux en même temps. Les noms des canaux sont en général matérialisés par un dièse (hash) devant l'intitulé, et les commandes commencent par une barre oblique (slash). Les salons peuvent être ouverts au tout venant (open), protégés par un mot de passe (private), surveillés par un chaperon (moderated) et administrés par une véritable personne (operator). Des logiciels peuvent également participer aux discussions et intervenir machinalement comme des robots (bots). En général, n'importe qui peut créer un salon, choisir le thème de discussion, et les règles de conduite que sont sensées suivre les invités ou les participants. La personne qui crée un salon en devient automatiquement l'opérateur, et peut de fait administrer le salon comme bon lui semble, par exemple en expulsant (kick) une personne du salon, et nommer éventuellement d'autres opérateurs pour la suppléer ou la remplacer. Plusieurs protocoles (protocols) permettent de transmettre les conversations en direct, et ils existent plusieurs réseaux (networks) regroupant des serveurs distribués dans le monde entier. Certains serveurs de conversation en direct exigent d'avoir un compte (account), tandis que d'autres autorisent les connexions anonymes (anonymous). Certains clients sont multi protocoles et permettent de se connecter à plusieurs réseaux différents, tandis que d'autres sont enfermés dans leur propre technologie. Les serveurs de conversation Les serveurs IRC (Inter Relay Chat) sont historiquement les premiers serveurs de conversation qui aient existé sur internet. Les serveurs Jabber utilisent le protocole libre Jabber, et fonctionnent avec des Logiciels Libres. Le réseau MSN (Microsoft Network) est très répandu parce que c'est un produit qui est mis en avant par les distributeurs et la publicité, et parce que l'éditeur de logiciels impose la pratique illégale de la vente forcée et les discours biaisés par les transactions occultes des lobbies. Les protocoles AIM (AOL Instant Messanger), Yahoo!Messanger, Gadu Gadu, ICQ, OpenRide, et Google Talk sont inégalement !© Les services par Patrick Hautrive !;~) 2010 197 présents sur la toile. Les serveurs Fserv permettent d'échanger des fichiers volumineux. Les serveurs de forums (newsgroup), et en particulier la hiérarchie alternative (alt) permettent également les échanges de conversation et de fichiers, mais ils ne sont pas aussi instantanés. Certains réseaux comme ICQ proposent une identification unique des personnes ou UIN (Universal Internet Number). Les serveurs de conversation se sont développés en proposant d'animer les conversations textuelles avec des images (smileys) et d'échanger des fichiers (binary). Aujourd'hui, les technologies et les hauts débits permettent les communications audio ou VOIP (Voice Over Internet Protocol) et les communications vidéo en directe (webcam) à deux ou à plusieurs (visio conference). La configuration pour IRC La configuration des conversations IRC (Inter Relay Chat) (port 6667) (man irc) Protocols Networks Bots Irc undernet.org Jabber freenode.net Msn irchelp.org Aim jabber.org Yahoo linuxpower.org GaduGadu icq.com ICQ mirc.co.uk efnet.org dal.net htdig.org siegfried.org hummingbird.com Clients supybot ntalk plum irc2 rbot bitchx gruftistats epic4 muh jabber madoka gaim fisg naim dircproxy psi dancerircd kopete ctrlproxy ksirc ircd kvirc ircdirc2 konversation ircdircu chatzilla ircdhybrid xchat hybserv Licq iroffer tkirc iacd zenirc bobot++ zircon pisg eggdrop bitlbee scrollz pork riece liece lostirc centericq cwirc cgiirc tinyirc tirc sirc ayttm erc ircii irssi Files /etc/alternatives/irc /usr/share/irssi/help/ircnet /usr/lib/gaim/libirc.so /etc/irssi.conf ~/.irssi/config Les commandes IRC /help intro /help newuser /help server /msg nicname Message !© Les services par Patrick Hautrive !;~) 2010 198 /motd Message Of The day /query nicname /list help /list min 5 /names #linux /load /dcc get /join #linux /topic Free Software /whois nickname /kick nickname /leave /quit Les exemples pour IRC xchat.linuxpower.org irc linux caen.fr.eu.undernet.org /join [#linux] [min 5] [max 200] licq p icqname !© Les services par Patrick Hautrive !;~) 2010 199 SSH Les communications cryptées Le cryptage ou la sécurisation des communications permet de garantir la confidentialité des messages, l'intégrité des données, et l'authenticité des intervenants. Le cryptage des communications s'effectue au niveau des couches hautes du modèle OSI. Le cryptage avec SSL (Secure Socket Layer) est issue des développements du système libre Open BSD. De nombreux protocoles, des systèmes de fichiers et de nombreux programmes utilisent cette bibliothèque de cryptage pour leur communication. La suite des programmes Open SSH (Secure Shell) et la commande “ssh” permettent de se connecter à distance à un serveur “sshd” et de disposer d'un interpréteur de commandes (shell) sur un autre poste relié par le protocol réseau TCP/IP. La commande “scp” permet de crypter des données avant de les copier sur un autre poste. La commande “rsync” permet de synchroniser des répertoires à distance. Les noms des commandes sécurisées par un cryptage des échanges contiennent souvent la lettre “s”, comme par exemple “sftp”. Le protocole HTTPS (Hyper Text Transfer Protocol Secure) repose sur SSL, et permet de distribuer des pages web sécurisées. Le programme SSH est un programme très complet qui utilise la cryptographie asymétrique avec l'échange de clés publiques (public key) et de clés privées (private key). Le programme SSH remplace les anciens programmes obsolètes, comme le programme “telnet” qui laissait circuler en clair sur le réseau les informations de compte, et la suite des programmes de connexion à distance (remote), que furent “rcp” et “rshell”. L'administration d'un serveur SSH peut s'effectuer à distance via le module de l'interface Webmin. Pour les ordinateurs Windows™, il existe des programmes, comme le client «putty» qui permettent de se connecter à un serveur SSH sous Linux. La cryptographie asymétrique La cryptographie asymétrique utilise deux clefs différentes. La clef publique et la clef privée sont créées au même moment par et pour un seul utilisateur. La clef publique (public key) est associée à un utilisateur, et est ouvertement distribuée. La clef publique permet le cryptage d'un message en clair à destination d'une personne en particulier. La clef privée (private key) est liée à la clef publique, et reste confidentielle. La clef privée permet le décryptage, par le destinataire, du message brouillé par sa clef publique. Seul le destinataire peut décrypter le message qui a été crypté avec sa clef publique, ce qui permet indirectement d'authentifier la personne qui a pu décrypter le message. Des serveurs distribuent les clefs publiques des utilisateurs, des réseaux de confiance (trusted network), et des intermédiaires spécialisés ou tiers de confiance (verisign), permettent d'attester de l'identité des dépositaires. Le programme PGP (Pretty Good Privacy) de Philipp Zimmermann utilisent la cryptographie asymétrique. !© Les services par Patrick Hautrive !;~) 2010 200 Le serveur SSH Le serveur SSH crée et diffuse sa clef publique qui permet de crypter les échanges avec d'autres stations. Notamment lors de l'échange d'une clef privée avec une autre machine pour l'ouverture d'une session de communication sécurisée. La génération d'un couple de clef La commande «sshkeygen» permet de générer un couple de clefs asymétriques, une clef privée et une clef publique qui sont associées, et qui permettent respectivement de crypter un message et de le décrypter. La configuration de SSH La configuration des communications cryptées avec ssh (man sshd) (man ssh_config) (port 22) Commands telnet rlogin rcp rsh putty ssh scp sshd rsync rdist slogin sdm putty fsh zssh autossh gnomekeyring dsniff dirvish secpanel scponly sshkrb5 kdessh keychain hsftp SSH Tools scanssh sshadd sshagent sshargv0 sshaskpass sshcopyid sshkeygen sshkeyscan sshkeysign opensshclient opensshserver secvpn sshfs rssh dpsycossh dropbear clusterssh Files /etc/ssh/sshd_config /etc/ssh/ssh_config /etc/ssh/moduli /etc/alternatives/sshaskpass /usr/share/doc/opensshclient/* /usr/share/services/ssh.protocol ~/.rhost $HOME/.ssh/known_hosts $HOME/.ssh/identity $HOME/.ssh/identity.pub /usr/doc/* Les exemples pour SSH telnet l user server 23 logout quit exit ^] /etc/rc.d/init.d/sshd restart ssh 10.0.2.111 ssh [email protected] ssh [email protected]:/directory ssh [email protected]:/directory ssh l user server !© Les services par Patrick Hautrive !;~) 2010 201 scp filehere [email protected]:/home/user/filethere scp [email protected]:/home/user/filethere filehere mkdir $HOME/.ssh sshkeygen p scp $HOME/.ssh/identity user@server:/$HOME/.ssh/authorized_keys less /etc/ssh/sshd_config ClientAliveInterval 15 X11Forwarding yes ClientAliveCountMax 3 PermitRootLogin yes !© Les services par Patrick Hautrive !;~) 2010 202 BOOKS La bibliographie Le système Unix™ est une invention américaine, les lignes de code des systèmes Unices et les langages de programmation sont conçus en langue anglaise, et le système libre Gnu Linux est une collaboration internationale dont la langue d'échange est l'anglais, aussi, n'estil pas étonnant que la plupart des ouvrages soient rédigés et traduits de l'anglais. Certains textes sont librement téléchargeables sur internet. La bibliographie philosophique La bibliographie philosophique Title L'éthique des hackers et l'esprit de l'ère de l'information Just for fun La tribune libre : Les ténors de l'informatique libre Le livret du libre Free as freedom La cathédrale et le bazar Le chaudron magique Cyber Lexis (le jargon) Une brève histoire des hackers Comment devenir un hacker Noosphere Unix & internet Howto Le grand livre des robots History of unix, linux and open source History of Linux The heoric hacker The haloween document Ghost in the shell The hitchhicker's guide to the galaxy Author Pekka Himanen Linus Torvalds Recueil de texte Recueil de texte Richard M. Stallman Eric S. Raymond Eric S. Raymond Eric S. Raymond Eric S. Raymond Eric S. Raymond Eric S. Raymond Eric S. Raymond Isaac Asimov David A. Wheeler Ragib Hasan Eric Brunvand Mamoun Oshii Douglas Adams La bibliographie technique !© Les services par Patrick Hautrive !;~) 2010 203 Editor Oreilly.fr La bibliographie technique Title Author Formation Debian Gnu Linux Linux Administration Unix pas de panique Le système Linux Linux in a nutshell Les bases de l'administration système Advanced linux programming Maximun linux security Alexy Delattre Bouchaudy Cyrille Dunant, Emmanuel Eckard Welsh Aeleen Frish Mark Mitchell !© Les services par Patrick Hautrive !;~) 2010 204 Editor Eyrolles Oreilly Oreilly Oreilly
Documents pareils
Les services
Les périphériques de type IDE (hard disk) Les périphériques de type SCSI et USB (scsi disk) Les périphériques FIREWIRE Les périphériques lecteurs de disquettes (floppy disk) Les périphériques lect...
Plus en détail