Les Services

Mémoire sur la pratique du shell Bash sous Gnu

1. La console 2. Les services 3. Le networking

Par Patrick Hautrive http://hautrive.free.fr

Les services © Patrick Hautrive !;~) 2010 1 Table des matières DEVICE...... 3PRINT...... 61DEB...... 118NIS...... 159 DISK...... 11KERNEL...... 68TARBALL...... 124APACHE...... 160 FLOPPY...... 13VMLINUZ...... 73XWINDOW...... 127MESSAGE...... 167 FSTAB...... 16PROC...... 78GNOME...... 132POSTFIX...... 170 INODE...... 21SYSLOGD...... 80KDE...... 133IPTABLES...... 172 EXT2...... 30STOP...... 88BACKUP...... 134MYSQL...... 187 REISERFS...... 34USER...... 89VIM...... 136PHP...... 190 RAID...... 35GROUP...... 94EMACS...... 140CMS...... 192 LVM...... 37QUOTA...... 95TEXTE...... 141FTP...... 196 SWAP...... 39CRONTAB...... 98IMAGE...... 142IRC...... 199 MOUNT...... 41MAKE...... 104SOUND...... 143SSH...... 202 OSI...... 44GCC...... 108VIDEO...... 145BOOKS...... 205 TCP/IP...... 48LIBRARY...... 111SAMBA...... 146 NETWORK...... 53MODULE...... 114JAVA...... 154 FIREWALL...... 58RPM...... 116NFS...... 156

Copyright © 2010 Patrick Marceau Louis HAUTRIVE

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Foundation; with no Invariant Sections, no Front­Cover Texts, and no Back­Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation Licence". For all the examples of commands and all the scripts, please refer to the GNU General Public License as published by the Free Software Foundation.

http://www.gnu.org/licenses/fdl.html

Copyright © 2010 Patrick Marceau Louis HAUTRIVE

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the license, or any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public Licence along with this program. If not, see:

http://www.gnu.org/licenses/

Les services © 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 CD­ROM sont des périphériques (devices) de stockage qui peuvent être classés selon le type de contrôleur avec lesquels ils fonctionnent (IDE­ATAPI, 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, HDMI, SDCARD). 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 évènements des périphériques sont gérés par le daemon « udev ».

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/XF86Config­4” 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 «dpkg­reconfigure xserver­xorg».

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

Les services © Patrick Hautrive !;~) 2010 3 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, HDMI) 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 HDMI Connectors Series Parallel Usb Firewire Flash RJ45 VGA DVI

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 (“/dev/null”, “dev/zero” ou “/dev/random”), ou des fichiers d'interface avec les périphériques physiques. Ces fichiers d'interface qui servent à la communication entre le système et les périphériques physiques sont appelés des pseudo périphériques. Les pseudo périphériques sont de type caractère ©, quand les transmissions s'effectuent bit à bit, ou de type bloc (b), quand les transmissions s'effectuent par bloc entier.

Les services © Patrick Hautrive !;~) 2010 4 Les fichiers spéciaux des périphériques (devices) /dev/console Le lien vers la console maitresse (premier terminal virtuel) /dev/mouse Le lien vers la sourie (link) /dev/psaux Le périphérique vers la sourie (round connector type) /dev/modem Le lien vers périphérique modem (series connector type) /dev/ppp Le périphérique pour les connections avec le protocol PPP /dev/cdrom Le lien vers le lecteur de CD­ROM (link) /dev/lp0 Le périphérique pour l'imprimante (first parallel port) /dev/hd Les périphériques de type IDE (hard disk) /dev/sd Les périphériques de type SCSI et USB (scsi disk) /dev/sg Les périphériques FIREWIRE /dev/fd Les périphériques lecteurs de disquettes (floppy disk) /dev/st Les périphériques lecteurs de bandes pour les sauvegardes (streamer) /dev/tty Les terminaux virtuels (teletype) /dev/pty Les pseudo terminaux pour l'interface graphique (pseudo type) /dev/cua Les modems (modulateur démodulateur) /dev/stdin Le speudo périphérique d'entrée standard d'un processus /stdout Le speudo périphérique de sortie standard d'un processus /dev/stderr Le speudo périphérique de sortie standard des erreurs d'un processus /dev/full Le speudo périphérique qui simule un périphérique saturé (la saturation) /dev/null Le pseudo périphérique qui fait office de poubelle (le grand vide) /dev/zero Le pseudo périphérique qui envoi un flux de bit à zéro (l'uniforme) /dev/random Le pseudo périphérique qui donne un nombre aléatoire du noyau (le hasard)

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,

Les services © Patrick Hautrive !;~) 2010 5 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 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”,

Les services © Patrick Hautrive !;~) 2010 6 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).

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 Files hotplug ln lspci /dev/* /proc/mounts mount ls lsusb /etc/fstab /proc/bus/pci/devices umount dmesg lsmod /etc/X11R6/XF86Config­4 /proc/bus/usb/devices fdisk mkdir usbmodules /etc/xorg.conf /proc/ide mkfs make sane­find­scanner /proc/scsi/device_info fsck modprobe sane­usb /proc/tty/drivers losetup man mount update­usbids mknod hotplug devfs MAKEDEV fdisk udev cfdisk udisks

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 /dev/hda La première partition /de/hda1 La deuxième partition /dev/hda2 Le disque dur IDE esclave (slave) de la première nappe /dev/hdb Le disque dur IDE maitre (master) de la deuxième nappe /dev/hdc Le disque dur IDE esclave (slave) de la deuxième nappe /dev/hdd Le périphérique SCSI en tête de la chaine /dev/sda La première partition /de/sda1 La deuxième partition /dev/sda2 Le périphérique SCSI en second de la chaine /dev/sdb Le lecteur de disquette 3 pouces ¼ /dev/fd0 La première carte réseau eth0 La deuxième carte réseau eth1

Les services © Patrick Hautrive !;~) 2010 7 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 (driver).

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 Port Parallel Devices ttyS0 = COM1 lp0 = LPT1 fd0 = FLOPPY1 (A:\) ttyS1 = COM2 lp1 = LPT2 fd1 = FLOPPY2 (B:\) ttys2 = COM3 hda = IDE (master one) ttys3 = COM4 sda = SCSI (one) sga = 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 © Patrick Hautrive !;~) 2010 8 Les périphériques USB EHCI (USB 2.0) OHCI (Sis, Ali chipset, Power Book, Imacs, Compaq) UHCI (Intel, Via) usbcore.o usb­uhci.o usb­ohci.o

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 cd /usr/src/linux modprobe usbcore lspci make menuconfig modprobe usbmouse lsusb make modules dmesg | grep USB hotplug make modules_install 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

Les services © Patrick Hautrive !;~) 2010 9 vi /etc/X11R6/XF86Config­4 Section Input Device identifier “Mouse 0” driver “mouse” option “Protocol” “IMPS/2” option “ZAx is Mapping” “4 5” option “Device” “/dev/input/misc” cdrecord ­scanbus udisks –dump hotplug fdisk /dev/hda cfdisk /dev/sda

Les services © 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 au­delà 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 libellés (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 Files df quota fdisk /etc/fstab du ulimit mount /mnt/* kdiskfree lsattr umount dd chattr mkfs mkdir ddrescue fsck

Les services © 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 df –sync du ­sh /tmp du ­ach fdisk ­l df ­hT mount ­o remount /home umount /dev/hdb e2fsck /dev/ dd if=/dev/hda of=/dev/hdb conv=noerror, sync ddrescue ­v ddrescue –max­retries=­1 /dev/hda /dev/hdb umount /dev/hdb e2fsck /dev/hdb

Les services © 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 CD­ROM 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 © 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 © 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 © 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 celui­ci démonté ou en lecture seule (read only).

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 © 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 Others Cdrom Network Virtual SYSV (Unix™) MINIX ISO9600 NFS VFS UFS (Bsd Solaris) HFS (Apple) ROCKRIDGE SMBFS PROC JFS (AIX d'IBM) HPFS (Macintosh) JOLEIT (Unicode) SYSFS XFS (Inix, SGI) NCPFS (Novell) UDF ROOTFS XIAF NCP (Netware) HIGHSIERRA TMPFS VXFS (HP­HUX) BEFS (BeOS) USBFS SOCKFS ADFS (True 64) AFFS (Amiga) PIPEFS GPFS UMSDOS (setuid, posix) BDEV OpenBSD (Open BSD) MSDOS (Fat16) DEVFS FFS (BSD) VFAT (Fat 32) DEVPTS EXT NTFS (Windows™) MQUEUE EXT2 (Gnu Linux) CVSFAT RAMFS EXT3 (Gnu Linux) AUTOFS ROMFS REISERFS (Gnu Linux) EFS CRAMFS LVM GNX4 COHERENT SWAP (82) CODA

Les services © Patrick Hautrive !;~) 2010 17 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 Files fdisk sync debugfs /etc/fstab mount rdev badblocks /etc/mtab umount fuser dumpfs /etc/lvmtab fsck lsof kfstab /etc/filesystems e2fsck lsattr e2label /etc/crontab mkfs chattr e2image /etc/anacrontab mkfs.ext2 man 5 fstab xfs_admin /proc/filesystems reiserfsck man 8 mount df /proc/partitions mkreiserfs man 5 fs du mkswap man 5 nfs dd swapon man rpc.nfsd dump swapoff sum tune2fs resize2fs mknod blkid exports mountd losetup testdisk

Les services © 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 (man 8 mount) DEVICE MOUNTPOINT FS 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 © 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 OPTIONS DUMP FSCK /dev/hda1 / ext2 user (noexec, nosuid, nodev) 0 1 server:/path /home ext3 defaults (rw, suid, dev, exec, auto, nouser, async) 1 2 ignore none swap sw auto 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

Un exemple de fstab

Un exemple de fichier /etc/fstab proc /proc proc defaults 0 0 /dev/hda3 / ext3 defaults,errors=remount­ro 0 1 /dev/hda6 /home ext3 defaults 0 2 /dev/hda2 none swap sw 0 0 /dev/hdc /media/cdrom0 udf,iso9660 ro,user,noauto 0 0 /dev/fd0 /media/floppy0 auto rw,user,noauto 0 0 server:/usr /nfs/tools nfs defaults 0 2 mailserver:/var/spool/mail /var/spool/mail nfs timeo=20, intr 0 0 /dev/sda2 none swap sw,pri=3 0 0 /dev/sda3 none swap sw,pri=3 0 0 /dev/sda4 none swap sw,pri=1 0 0

Les exemples de fstab man fstab cat /etc/fstab

Les services © Patrick Hautrive !;~) 2010 20 INODE

Les noms des fichiers

Chaque fichier possède un numéro d'inode qui lui est propre, à moins qu'un fichier ne soit un lien physique (hardlink) vers un fichier qui existe déjà sur la même partition. Le nombre maximal d'inode pour une partition dépend de la taille de la partition (partition size), de la taille de l'unité minimale de stockage sur le disque (block size) et du système de fichier qui est installé (file system). Le rapport « Nombre d'octets/(2**13) » donne une idée du nombre d'inode d'un système de fichier EXT3. Par exemple, pour une partition de 453 Mo, le nombre d'inode est de 57 958, considérant des blocs de 512 Octets et huit blocs réservés pour chaque inode.

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ée 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 (i­list).

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 (i­list) ce qui est couramment appelé la table des

Les services © Patrick Hautrive !;~) 2010 21 inodes.

La commande «stat /etc/passwd» montre les attributs d'un fichier figurant dans la table d'inode. La correspondance entre le nom du fichier, son numéro d'inode et l'adresse physique du bloc File System (root) Inode Table (i­list ­­> bloc inode) Device (blocks on the disk) Name Inode Inode 1 @ Block @ Block Block Data (@ Block) file.txt 1234 ­­> 1234 5622 ­­> 5622 Raw Data Name Inode Inode 15 @ Block @ Block Block Data (@ Block) big.tgz 6789 ­­> 6789 12 @ Data Informations 1001 to 1012 ­­> 1001 to 1012 Raw Data (128 Octets) 3 @ Indirection @ BlockSimple ­­> 1013 256 @ Block @ BlockDouble ­­> 1014 256*256 @ Block @ BlockTriple ­­> 1015 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 sont équivalents à un Octet (Byte) 1024 Octets sont équivalents à un Kilo Octet (Ko) 1024 Kilo Octets sont équivalents à un Méga Octet (Mo) 1024 Méga Octets sont équivalents à un Giga Octet (Go) 1024 Giga Octets sont équivalents à un Tera Octet (To) 1024 Tera Octets sont équivalents à un Péta Octet (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

Les services © Patrick Hautrive !;~) 2010 22 modèle et du constructeur du périphérique. En général, la taille d'un bloc physique est de 512 Octets.

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 (60). Un disque IDE peut contenir jusqu'à 63 partitions différentes, tandis qu'un disque SCSI peut contenir jusqu'à 12 partitions logiques. 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) x Sectors x Blocks Block Size (per cylinder) (per tracks) (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 au­dessus 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

Les services © Patrick Hautrive !;~) 2010 23 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 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 Block = 512 Octets 3 heads, 42 sectors/track, 1010 cylinders Sector = 42 blocks Units = cylinders of 126 * 512 = 64 512 bytes Number of Heads = 3 Tracks (3x42=126) Device Boot Start End Blocks Id System Number of Cylinders = 1010 /dev/sda1 * 1 1010 63 609 b W95FAT32 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

Les services © Patrick Hautrive !;~) 2010 24 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 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 (i­list). 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 (i­list) 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, est­il 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 CD­ROM 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 © 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 (i­list) 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 celui­ci 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.

Le nombre maximal d'inodes d'un système de fichiers dépend de l'unité de stockage minimale (block),

Les services © Patrick Hautrive !;~) 2010 26 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 © 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 12*1 Ko = 12 Ko 1 @ de bloc de première indirection Pointant vers 256 @ de blocs de données 256*1 Ko = 256 Ko 1 @ de bloc de double indirection Pointant vers 256 @ de bloc de première indirection 256*1 Ko = 256 Ko Pointant vers 256 @ de bloc de données 256*256*1 Ko= 64 Mo 1 @ de bloc de triple indirection Pointant vers 256 @ de bloc de première indirection 256*1 Ko = 256 Ko Pointant vers 256 @ de bloc de double indirection 256*256*1 Ko= 64 Mo Pointant vers 256 @ de bloc de données 256*64 Mo = 15,625 Go

La table des inodes

La table des inodes est stricto sensu la liste des inodes (i­list) 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 (i­list) 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 N­1 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 © 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 SIZE DATES ­ d b c l p s rwsrwSrwT Same inode 501 501 12 @ DATA 1024 ctime Different names 3 @ INDIRECTION mtime @ simple atime @ 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 © Patrick Hautrive !;~) 2010 29 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 un temps de lecture ou d'écriture plus long, et à 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. Le système de fichier EXT2 ne fragmente pas beaucoup les fichiers sur un disque (1%), parce qu'il opère une pré allocation de blocs (block) pour chaque nouveau fichier. Avec le système de fichier EXT3, quand un bloc est écrit sur le disque, 7 autres sont réservés à la suite (segmentation). Ainsi, lorsque deux fichiers sont écrits simultanément sur le disque, une plage est réservée pour chacun d'entre eux, et les blocs alloués à chacun des deux fichiers ne s'entrelacent pas.

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).

Les services © Patrick Hautrive !;~) 2010 30 La journalisation pour Gnu Linux est disponible depuis les noyaux 2.4.16.

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, celui­ci 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

Le système de fichiers Ext2 fait suite à Ext. Le système de fichier 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 du système de fichier 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)

Les services © Patrick Hautrive !;~) 2010 31 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. La commande « fsck » permet de vérifier le système de fichiers.

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 systèmes de fichiers sont périodiquement et automatiquement vérifiés après un certain nombre de montage, par exemple, tous les 30 montages. Pour ce faire le système de fichier maintient des paramètres dynamiques (dynamic parameters), qui sont des compteurs, et qui permettent de lancer la vérification automatique, lors d'un redémarrage du système (reboot). La commande « dump2fs ­h /de/hda2 » affiche les paramètres dynamiques du système de fichiers. La commande « tune2fs ­c 0 /dev/hda2 » permet de remettre à zéro les compteurs.

La commande fsck

La commande “fsck” permet de vérifier un système de fichiers, et de corriger les éventuelles erreurs (corrupted file system). 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.

Les fronts end pour Ext2 fsck ­­> fsck.ext2 ­­> e2fsck mkfs ­­> mkfs.ext2 ­­> mke2fs

Les services © Patrick Hautrive !;~) 2010 32 La configuration de Ext2

La configuration de Ext2 fait appel à de nombreuses commandes.

La configuration de Ext2 Commands Files fsck lsattr tune2fs fsck.ext2 chattr badblocks e2fsck df debugfs fsck.ext3 du dump2fs e3fsck dd e2image reiserfs e2label mkfs resize2fs mkfs.ext2 testdisk mke2fs mkfs.ext3 mke3fs

Les exemples 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 ­N (No execution but simulation) fsck ­M (Mounted file systems only are checked) fsck ­A (All file system in /etc/fstab are checked) fsck ­f (Force the file system check) fsck ­y (Yes to all reparation of the file system) 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 dump2fs ­h /dev/hda2 (Show dynamic parameters of the file system) tune2fs ­c 0 /dev/hda2 (Reinitialization of the counters)

Les services © 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 © 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 d'entrelacement de la parité (SHAKING). Certains RAIDS proposent également l'enregistrement

Les services © Patrick Hautrive !;~) 2010 35 d'une redondance dans la parité (DOUBLE PARITY), tandis que d'autres n'effectuent qu'une vérification de celle­ci (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) A C B D RAID 0 STRIPPING (parallélisme et performance) A B C D RAID 1 MIRRORING (duplication ou duplexing) A A B B RAID 5 STRIPPING + PARITY (redondance de parité) A B P C D P E F P RAID 6 STRIPPING + PARITY + SHAKING (entrelacement) A B P C P D P E F RAID 10 STRIPPING + MIRRORING + PARITY + SHAKING A A U V P B B W P X C C P Y Z

La configuration du RAID

La configuration d'un RAID requiert de préférence des disques identiques.

La configuration du RAID Commands Files raidstart ­a /etc/raidtab raiddev /proc/mdstat man 5 raidtab mkraid raidtools

Les services © Patrick Hautrive !;~) 2010 36 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) Les partitions réelles ou les disques entiers (type 0x8E). VG (Volume Group) Les disques virtuels pouvant regrouper plusieurs partitions et disques. PE (Physical Extent) L'unité de stockage physique d'un VG (blocs logiques de 4 Mo). LV (Logical Volume) Les partitions virtuelles à l'intérieur d'un VG.

La configuration de LVM

La configuration de LVM Commands Files man 8 lvm pvcreate vgchange vgmerge lvchange man 5 lvm.conf man 8 pvcreate pvmove vgck vgmknodes lvcreate /etc/lvm/lvm.conf man 8 vgcreate pvremove vgconvert vgreduce lvdisplay $HOME/.lvm_histo clvmd pvdisplay vgcreate vgremove lvextend ry readline pvdata vgdisplay vgrename lvmchange vgcfgbackup pvchange vgextend vgs lvmdiskscan pvscan vgexport vgscan lvreduce pvs vgimport vgsplit lvremove lvrename lvresize lvs lvscan

Les services © Patrick Hautrive !;~) 2010 37 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 © 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, celles­ci 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 Kernel Processus Cache Disk Processus Unused %total Physical Memory Swap

Les services © Patrick Hautrive !;~) 2010 39 La configuration de la swap

La configuration de la swap Commands Files free mkswap /etc/fstab sync swapon ­a /proc/swaps swapoff ­s

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 © 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 » accepte de nombreuses options et peut être employé pour monter de nombreux types de système de fichiers, dont des images ISO (iso image). La commande « mount » lit le fichier « /etc/mtab » pour afficher les périphériques qui sont actuellement montés sur le système de fichier racine (root file system). La commande “mount ­a” lit le fichier de configuration “/etc/fstab” où sont répertoriés tous les systèmes de fichiers à monter, et monte ceux qui ont l'option « auto ».

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 CD­ROM ou une clef USB. L'auto montage “supermount” est un script qui requiert que le langage interprété Perl soit installé.

Les services © Patrick Hautrive !;~) 2010 41 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 fichier, qui doit être reconnu par le noyau (module) et les attributs de montage.

La configuration de mount Commands Files mount autofs man 8 mount /etc/fstab umount supermount /dev/MAKEDEV /etc/mtab disklabel sync man MAKEDEV /proc/mounts exportfs fdisk mknod /proc/filesystems cryptdir growfs dumpfs /proc/ide mountpoint fsck tune2fs /proc/swap debugfs e2label

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 © Patrick Hautrive !;~) 2010 42 Les exemples de mount man 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 mount ­o loop ­t iso9660 image.iso /mnt/iso

Les services © 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 Fonctions 7. APPLICATION 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 © 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 Tcp­ip (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 TCP­IP Windows™ NT Apple NetWare Application NFS FTP SNMP Redirecteur Serveur AppleShare NCP Presentation XDR SMTP RIP TDI AFP ARP POP3 OSPF Tube NetBIOS Session PPP IMAT ICMP NWLink NBT DLC ASP ADSP ZIP PAP ATP NBP AEP RTMP SPX Transport TCP TCP NDIS 4.0 DDP IPX Network IP IP Pilotes LAN Pilotes LAN Wrapper Pilotes LAN Couche Local Token Ether Liaison NDIS ODI NDIS Couche MAC MAC Talk Ring Talk 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 Network Server connect 1 ­­­­> 2 listen receive (ack) 4 <­­­­ 3 send (ack) send (request) 5 ­­­­> 6 receive (request) receive (response) 8 <­­­­ 7 send (response) disconnect 9 ­­­­> 10 close connexion

Les services © Patrick Hautrive !;~) 2010 45 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 1058 ROUTING IP RFC 791 DARPA RFC 1178 DOMAIN NAME RFC 792 ICMP RFC 1180 TEACHING TCPIP RFC 793 TCP RFC 1208 GLOSSARY RFC 821 SMTP RFC 1219 ADDRESSING RFC 822 MAIL RFC 1234 ROUTING IPX RFC 950 SUBNET RFC 2196 SECURITY RFC 977 NNTP 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 © Patrick Hautrive !;~) 2010 46 Les réseaux hétérogènes Computers Mini Main Frame Terminal IBM PC Blade Macintosh™ Processors CELLS CISC RISC Constructors IBM HP Sun Intel Dell Motorola Xerox Nokia Sony Asus 3com Cryptography Cesar Vigenere RSA DES MD5 CHA PGP Asymetric Langages Assembler Delphi C C++ Java Sql Php Shell Ruby Python Normes ANSI IEEE 802 EIA 568 IPV4 IPV6 RFC ITU OSI Editors Microsoft Novell Oracle Unices Community Apple Systems Windows Netware OS/2 Bsd Unix™ Gnu Linux Mac OS Protocols NetBEUI UDP XNS SPX/IPX TCP/IP Apple Talk Servers Nfs Ftp Ssh Apache Postfix Smtp Pop Bind Mysql Topology Bus Star Ring Ethernet LAN MAN WAN Internet Networks Peer to Peer Intranet DMZ Extranet Client Server Private Public Lines RTC ADSL RNIS X.25 ATM FDDI VPN Transmission Analogical Broadband Digital Baseband A/Synchronous Commutation Supports Coaxial UTP/STP Fiber Radio Spectral Microwave Satellite Laser Connectors BNC AUI DIX RJ11 RJ45 USB Serie Wifi LPT FIRE Slots ISA EISA MCA PCI PCX AGP RAM VGA DVI Methods Collision Prevention Jeton Priority Canals Modem Sneakernet Concentrators Hub Switch MAU CSUDSU Bridge Router Firewall Gateway

Les services © Patrick Hautrive !;~) 2010 47 TCP/IP

Le protocole TCP/IP

Le protocole Tcp­ip est le protocole d'échange de données sur internet et sur la plupart des réseaux intranet. Le protocole Tcp­ip se compose de deux protocoles distincts, le protocole TCP et le protocole IP. Le protocole TCP (Transport Control Protocol) assure le transport des 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 Tcp­ip 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 réexaminées et remplacées.

Les services © Patrick Hautrive !;~) 2010 48 La pile TCP­IP

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 TCP­IP 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 TCP­IP 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 TCP­IP assure l'interopérabilité entre les systèmes hétérogènes. Le protocole TCP­IP est un protocole routable.

De nombreux protocoles ont été développés pour la pile TCP­IP, 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 © 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 © 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 © 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 © 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 Files ifconfig hostname ifup man tcp /etc/inittab /etc/network/interfaces iwconfig host ifdown man ip /etc/hostname /etc/sysctl.conf route hostid arp man udp /etc/hosts /etc/sysconfig/network/ifcfg­eth0 ping ssh rarp man route /etc/host.conf /etc/sysconfig/network.scripts netstat service ethtool man ifconfig /etc/hosts.allow /etc/init.d/networking nslookup dhcpclient named man ipchains /etc/hosts.deny /etc/rcS.d/S40networking traceroute ifrename ntpdate man iptables /etc/iftab /proc/sys/net/ipv4 vmstat dhclient­script man iftab /etc/networks /proc/net/route tcpdump dhclient.conf man ethtool /etc/services /proc/net/rt_cache dhclient.leases man uri /etc/named.pid /proc/sys/net/ipv4/ip_forward dhcp­eval /etc/named.boot /etc/dhcp3/dhclient.conf dhcp­options /etc/resolv.conf services­admin /etc/nsswitch.conf iwconfig

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 © 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 localhost.localdomain.tld machine 127.0.0.1 loopback localhost 192.168.1.2 machine.domain.org machine 192.168.1.7 server.domain.org server

Le fichier /etc/networks

Le fichier de résolution des noms de sous réseaux /etc/networks (subnetname @subnets) default 0.0.0.0 localnet 127.0.0.0 loopnet 127.0.0.0 here 192.168.1.0 there 192.168.2 faraway 10.10.10.0 domain ­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 de résolution des serveurs de noms de domaine DNS resolver (/etc/resolv.conf) search domain.tld domain here.org nameserver 212.27.32.176 nameserver 212.27.32.177 nameserver 192.168.1.1 nameserver @subnets

Les services © Patrick Hautrive !;~) 2010 54 Le fichier /etc/named.boot

Le fichier /etc/named.boot (named) directory /var/named cache . named.ca primary domain.tld named.host primary 172.266.12.in­addr.arpa namedrev

Le fichier /etc/sysconfig/network

Le fichier de configuration des interfaces réseaux /etc/sysconfig/network (VARIABLE=Value) NETWORKING = yes HOSTNAME = hostname.domain.tld GATEWAY = 192.168.1.1 GATEWAYDEV = “eth0” DOMAINNAME = here.org FORWARD_IPV4 = true NISDOMAIN = 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 allow­hotplug 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 dns­domain tld.org dns­search tld.org dns­nameservers 10.0.2.254 #ifconfig eth0 down #ifconfig eht0 up #/etc/init.d/networking restart

Les services © Patrick Hautrive !;~) 2010 55 La configuration PPP

La configuration PPP Commands Files /sbin/ipppd chat dh_installppp PPP Howto isdnctrl dial ppp0 minicom plog /etc/ppp/ioptions isdnctrl hangup ppp0 imon poff man pppd imontty pon /etc/ppp/pap­secrets seyon pppconfig /etc/ppp/chap­secrets kppp pppd /etc/ppp/connect­errors pppstats pppdump /var/log/chat.log wvdial pppoeconf /var/log/pppd.log eagle­usb­utils

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 eth1 up ifconfig eth0 192.168.1.2 broadcast 192.168.1.255 netmask 255.255.255.0 up netstat ­nr host machine nsloopkup www.hautrive.tk 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 add ­net 192.168.2.0/24 gw 10,0,2,254 route del 192.168.1.254 1 #Metric Gateway flag 1=external 0=local dhcpclient eth0 ifconfig plip machine­one­to­one machine­one­2­one /etc/rc.d/init.d/dhcpd restart /etc/rc.d/init.d/network restart vi /etc/networking/interfaces (Debian) /etc/sysconfig/network/ifcfg­eth0 (SuSE) netstat ­lnp –ip netstat ­ac

Les services © Patrick Hautrive !;~) 2010 56 netstat ­ta netstat ­i w3m http://10.0.2.111:80 echo 1 > /proc/sys/net/ipv4/ip_forward vi /etc/sysctl.conf forwarding=1 apt­get install ntp iwconfig lspci | grep 03:00 lspci ­n | grep 03:00 iwconfig wlan0 iwlist scan ifconfig wlan0 up lsmod | grep ­i ath modprobe ­r ath5k ; sleep 3s ; logger "test ath5k" ; modprobe ath5k ;

Les services © Patrick Hautrive !;~) 2010 57 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 © Patrick Hautrive !;~) 2010 58 Les logiciels de pare feux Ipfw IP Firewall Ipfwadmin IP Firewall Administration Pf Packet Filter des systèmes BSD Ipmasq IP Masquerading Ipchains Gnu Linux kernel 2.2 Netfilter 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 LAN Station Router Internet Provider Modem Firewall Routeur DMZ

L'adressage en sous réseaux

Un exemple d'adressage de sous réseaux Class B Net (16) + Subnet (6) + Host (10) 64 Subnets (2^6) with 1024 hosts (2^10) Class C Sub Mask 255.255.252.0 8 Subnets Subnet Hosts (32­2) Subnet Broadcast 192.168.1.0 1 to 30 192.168.1.31 192.168.1.32 32 to 62 192.168.1.63 192.168.1.64 64 to 94 192.168.1.95 192.168.1.96 96 to 126 192.168.1.127 192.168.1.128 128 to 158 192.168.1.159 192.168.1.160 160 to 190 192.168.1.191 192.168.1.192 192 to 222 192.168.1.223 192.168.1.224 224 to 254 192.168.1.255

Les services © Patrick Hautrive !;~) 2010 59 La configuration d'un pare feu

La configuration d'un pare feu Firewalls Netfilter Files armo­iptables ipchains ferm iptables fiaif iptstate filtergen ipmasq fireflier­client­ ipmasqadm fireflier­server ipfwadm firehol iproute firestarter ipac­ng firewall knetfilter fwanalog fwbuilder­linux guarddog ipkungfu knetfilter lokkit netscript pyroman shorewall uruk uif ufw

Les services © Patrick Hautrive !;~) 2010 60 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 ) 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 Spool Printer Paper Filter Daemon PDL Network Application Fonts Daemon Spool Printer 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 qui sont 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 © Patrick Hautrive !;~) 2010 61 Les systèmes d'impression des systèmes Unices System Name Command Daemon System V Unix™ AT&T LPD (Line Printer Daemon) lp lpd System BSD 4.4 LPRng (Line Printer New Generation) lpr System Gnu Linux CUPS (Common Unix Printer System) 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 © Patrick Hautrive !;~) 2010 62 Les filtres d'impression et les outils de conversion Filters Tools Conversion Formators Magic Filter de Image Magic Ghostscript (Postscript) mft dvips enscript pr Aps Filter Print Tool de Red Hat lout dvipdf nenscript tr Foomatic Package Psutils gs xdvi netpbm cut Gimp Print gv kdvi pbmplus awk a2ps dvilj tiffg3 troff ps2pdf efax nroff ps2epsi flexfax groff ps2ascii wv html2text

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 caractérisent 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 pdf raw ascii gif jpeg jpg

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 © Patrick Hautrive !;~) 2010 63 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 Spécification Extension GDI Les systèmes Windows™ Postscript “.ps” PDF Portable Document Format “.pdf” Encapsulated Postscript EPS Adobe 1 & 3 La société Adobe PCL 5 Postscript Common Language de Hewlett Packard HP­GL Hewlett Packard General Language HP Laser jet Hewlett Packard Language for Laser Printer

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 Files Filters lp lpr cups­calibrate PRINTER /etc/hosts.lpd ~/.apsfilterrc lpstat lpq cups­genppdupdate LPDEST /etc/lpd.perms /etc/apsfilter lpadmin lprm cups­lpd PRINTDEST /etc/lpd.conf /usr/lib/apsfilter lpoptions lpc cups­polld NENSCRIPT /etc/printers.conf /usr/share/magicfilter lpstatus print cupsaddsmb GSLP.PS /etc/printcap banner printf cupsd GSDIR /etc/cups/client.conf lpdomatic lptest cupsdisable GS_LIB /dev/lp0 smbspool gsbj cupsenable man printcap /var/spool/lpd/printer cancel gsdj red­hat­config­printer man 1 lp /usr/local/lib/ghostscript printafm gslj man 4 lp /etc/lprng/printcap gslp man gs /var/spool/lpd/smb/.config gsnd man lpc /var/lock/subsys/lpd apropos print locate print

Parce que 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

Les services © Patrick Hautrive !;~) 2010 64 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 vi /etc/printcap chown root.daemon /var/spool/lpd/laser laser | laser : \ chmod ug=rwx,o=rx /var/spool/lpd/laser :lp=/dev/lp0: \ cd /var/spool/lpd/laser :sd=/var/spool/lpd/laser: \ touch .seg errs status lock :lf=/var/spool/lpd/laser/errs: \ chown root.daemon * :if=/var/spool/lpd/filter: \ chmod ug=rw,o=r * :mx#0: \ vi filter :sh: \ #!/bin/sh :sf: \ #filter chown root.daemon /etc/printcap echo “­­­­­” >> /tmp/testlp.out chmod 644 /etc/printcap date >> /tmp/testlp.out ls ­l /etc/rc.local echo “­­­­­” >> /tmp/testlp.out lpd chmod ug=rwx,o=rx filter ls ­l | lpr ­P laser mv /etc/printcap /etc/printcap­old 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 vi /etc/printcap chown lp /var/spool/lpd/remotelp smb | Remote Windows™ printer : \ chmod 700 /var/spool/lpd/remotelp :if=/usr/bin/smbprint : \ vi /var/spool/lpd smb/.config :lp=/dev/null : \ server=”Windows™ Printing Server” :sd=/var/spool/lpd/smb \ service=”Printer Name” :mx#0 : \ password=”secret” user=””

Les services © Patrick Hautrive !;~) 2010 65 Le fichier /etc/printcap

Le fichier “/etc/printcap” rassemble les différentes configurations d'imprimantes d'une station.

Le fichier /etc/printcap Local Printer Remote Printer laser | local laser : \ remotelp | Remote printer : \ :lp=/dev/lp0: \ :rm=distant: \ :sd=/var/spool/lpd/laser: \ :rp=lp : \ :lf=/var/spool/lpd/laser/errs: \ :sd=/var/spool/lpd/remotelp : \ :if=/var/spool/lpd/filter: \ :mx#0 : \ :mx#0: \ :sh : \ :sh: \ :sf: \ lp | lexmark over there : \ smb | Remote Windows™ printer : \ :if=/usr/share/magicfilter/lexmark : \ :if=/usr/bin/smbprint : \ :gqfilter : \ :lp=/dev/null : \ :lp=/dev/usb/lp0 : \ :sd=/var/spool/lpd/smb \ :sd=/var/spool/lpd/lp : \ :mx#0 : \ :pl#66 : \ :pw#80 : \ :pc#150 : \ :mx#0 : \ :sh : \

Les services © Patrick Hautrive !;~) 2010 66 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 laser­printer 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 laser­printer 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 our­printer file groff ­ms file gs file.ps ; ps2ascii *.ps lpr ­P html file.html groff ­Tx75 ­ms file gs_init *.ps lpr ­P our­printer #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 © Patrick Hautrive !;~) 2010 67 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 ils 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 © Patrick Hautrive !;~) 2010 68 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/common­licenses/GPL­2”

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 qui sont 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 () read () listen () ioctl () write () send () exec () receive () syslog ()

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 © Patrick Hautrive !;~) 2010 69 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 “kernel­source” permet d'installer tous les fichiers et les programmes utiles pour la compilation d'un noyau dans le répertoire “/usr/src/kernel­ source­version/*”. L'installation du package “kernel­headers” 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/kernel­parameters.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 © Patrick Hautrive !;~) 2010 70 Certaines fonctionnalités sont obligatoirement intégrées dans le noyau, afin que celui­ci soit opérationnel. Le support du premier contrôleur de disque (controler), et le système de fichier 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 (Vmware, Wine, User Mode Linux, KVM 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 celui­ci 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 Packages Files uname memtest86+ make kernel­source /boot/vmlinuz linuxinfo x86info gcc kernel­headers /usr/src/linux/.config uptime xsysinfo gzip kernel­image /usr/include/linux/* sysctl mon gunzip kernel­package /usr/include/asm/* rdev ksymoops bzip2 glibc­devel /usr/src/kernel­source­version/* patch powernowd bunzip2 ncurses­devel /usr/src/linux/Documentation/* systune prospect tar egcc /usr/scr/linux/README strace powertweakd zcat cpp /proc/version ltrace crashme kcmlinuz bin86 /lib/modules/2.6.19­5­686/* lcap sensord procps kernel­patch­scripts /etc/sysconfig/kernel mkrboot lm­sensors kernel­img.conf dh­kpatches lsb­release initrd­tools r­cran­kernsmooth kernel­internals­guide

Les services © Patrick Hautrive !;~) 2010 71 Les exemples du noyau uname ­a cat /etc/debian_version cat /proc/version cat /etc/issue cat /etc/*­release lsb­release ­a rdev /boot/vmlinuz /dev/hda5 gunzip ­cd patch.gz | patch ­p1 zcat /usr/src/patch­2.4.19.gz | patch ­p1 apt­cache search kernel | grep ^kernel dpkg­reconfigure tzdata

Les services © Patrick Hautrive !;~) 2010 72 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/vmlinuz­2.4.7.10 /boot/vmlinuz­2.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 “kernel­source”, les “kernel­header”, la bibliothèque Gnu du langage C “glibc­devel”, 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 mirrors, local servers, cdrom) et le

Les services © Patrick Hautrive !;~) 2010 73 mode de gestion des packages (.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é “linux­x.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 linux­2.4.10.tar.gz /usr/src cd /usr/src mkdir /usr/src/linux Red Hat rpm ­q kernel­source mount ­t iso9660 /dev/cdrom /mnt/cdrom rpm ­i /mnt/cdrom/RedHat/RPMS/kernel­* ln ­s /usr/src/linux­2.4.8 /usr/src/linux Debian apt­cache search kernel apt­get install debhelper modutils fakeroot apt­get install kernel­package libncurses5­dev kernel­source­2.4.18 vi /etc/kernel­pkg.conf tar ­­bzip2 ­xvf kernel­source­2.4.18.tar.bz2 cp /boot/config­2.4.12­386 /usr/src/kernel­source­2.4.18/.config ln ­s /usr/src/kernel­source­2.4.18 /usr/src/linux Tarball bzip2 ­dc linux­2.4.10.tar.bz2 | tar xvf ­ tar xvfz linux­2.4.10.tar.gz ln ­s /usr/src/linux­2.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 © Patrick Hautrive !;~) 2010 74 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” or <*>), s'ils seront ignorés (“no” or <>), ou s'ils seront ajoutés comme module (“m” or ).

La préparation des racines et du feuillage ou la configuration du noyau 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 Debian make­kpkg clean less /usr/src/linux/.config

Les services © Patrick Hautrive !;~) 2010 75 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é.

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/vmlinuz­2.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 © Patrick Hautrive !;~) 2010 76 L'arrosage et la tutorisation ou la configuration du chargeur de démarrage ls ­l /boot/vmlinuz­2.4.18 ls ­l /boot/system.map ls ­l /boot/System.map­2.6.18­686 ls ­l /boot/config­2.4.18 ls ­l /vmlinuz ln ­s /boot/vmlinuz­2.4.18 /vmlinuz Lilo vi /etc/lilo.conf boot = /dev/hda delay = 20 vga = normal root = /dev/hda1 readonly image = /boot/vmlinuz­2.4.18 label = newlinux image = /boot/vmlinuz­2.4.7.10.old label = oldlinux /sbin/lilo ­v ­c /etc/lilo.conf Grub vi /boot/grub/menu.1st vi /boot/grub/grub.conf timeout 20 title newlinux root (hd0,0) kernel /boot/vmlinuz­2.4.18 root=/dev/hda1 ro title oldlinux root (hd0,0) kernel /boot/vmlinuz­2.4.7.10.old root=/dev/hda1 ro reboot

Les services © 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 qui sont 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), les ports de communication entre le système et les périphériques (ioports), l'accès direct à la mémoire pour certains périphériques (dma), 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 paramètres des périphériques PCI sont attribués automatiquement.

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 sysrq­trigger 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 cmdline environ fd mem root statm task auxv cwd exe maps mounts stat status wchan

Les services © Patrick Hautrive !;~) 2010 78 Les fichiers core

Les fichiers core sont des fichiers qui sont créés dans le répertoire d'exécution d'une commande quand celle­ci vient de crasher. Les fichiers core contiennent une image instantanée de l'espace mémoire du processus de la commande (procces memory) au moment où celle­ci 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/file­max echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all echo 1024 > /proc/sys/kernel/threads­max ls ­d /proc/[0­9]* free cat /proc/meminfo memtest86 ls /var/run/ isapnp pnpdump lspci lsusb

Les services © 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 associé (pid).

Les services © Patrick Hautrive !;~) 2010 80 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 © Patrick Hautrive !;~) 2010 81 Les journaux systèmes Journal Specification /var/log/messages System Journal /var/log/boot.log Red Hat /var/log/boot.msg SuSE /var/log/dmesg Kernel Ring Buffer /var/log/wtmp #last /var/log/secure #login /var/log/loginlog #login /var/log/lastlog #lastlog /var/log/btmp #lastb /var/log/sulog #su /var/log/sudo.log #sudo /var/log/maillog #mail /var/run/utmp #who /var/log/installer/messages Debian Installer /var/log/installer/hardware­summary Debian Hardware /var/log/installer/partman Debian Partitions /var/log/installer/status Debian Packages List /var/log/installer/syslog Debian First Boot /var/log/base­config.log.1 Debian Base Configuration /tmp/install.log Red Hat Installer /var/log/auth.log Authentication Messages /var/log/daemon.log Services Messages /var/log/debug Kernel Debuging Informations /var/log/kern.log Kernel Messages /var/log/lpr Line Printer Message /var/log/mail.log Mail Server Postfix Messages /var/log/news/news.notice News server Message /var/log/syslog System Logging Messages /var/log/userlog User Messages /var/log/Xorg.0.log Graphical Window Server

Les services © 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éé avec la commande “mkfifo”. L'opérateur arrowbase (“@”) devant le nom d'hôte d'une machine

Les services © Patrick Hautrive !;~) 2010 83 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 Destination auth emerg (panic) 0 Emergency root authpriv alert 1 Alert /var/log/messages cron crit 2 Critical ­/var/log/syslog daemon err (error) 3 Error |/dev/console ftp warning (warn) 4 Warning @machine kern notice 5 Notice root,admin lpr info 6 Informational * mail (tcp wrapper) debug 7 Debug mark (internal) none ­ news =debug security (depreciated use auth) !crit syslog * user uucp local0 local7 * #

Les services © Patrick Hautrive !;~) 2010 84 Un exemple de /etc/syslog.conf

Un exemple de /etc/syslog.conf auth,authpriv.* /var/log/auth.log *.=info;*.=notice;*.=warn;\ *.*;auth,authpriv.none ­/var/log/syslog auth,authpriv.none;\ #cron.* /var/log/cron.log cron,daemon.none;\ daemon.* ­/var/log/daemon.log mail,news.none kern.* ­/var/log/kern.log ­/var/log/messages lpr.* ­/var/log/lpr.log *.emerg * mail.* ­/var/log/mail.log user.* ­/var/log/user.log #Please adjust or split the list below uucp.* /var/log/uucp.log #daemon,mail.*;\ mail.info ­/var/log/mail.info # news.=crit;news.=err;news.=notice;\ mail.warn ­/var/log/mail.warn # *.=debug;*.=info;\ mail.err /var/log/mail.err # *.=notice;*.=warn /dev/tty8 news.* /var/log/news/news #The named pipe with the `xconsole' utility *.=debug;\ #$ xconsole ­file /dev/xconsole [...] auth,authpriv.none;\ #daemon.*;mail.*;\ news.none;mail.none\ # news.crit;news.err;news.notice;\ ­/var/log/debug # *.=debug;*.=info;\ # *.=notice;*.=warn |/dev/xconsole

La configuration de syslogd

La configuration de syslogd Commands Files syslogd swatch man syslogd /etc/syslog.conf /dev/syslog klogd dmesg man sysklogd /proc/kmsg /dev/log syslogd­listfiles logger man dmesg /usr/include/syslog.h /dev/error logrotate mkfifo man syslog.conf /usr/include/sys/syslog.h savelog man syslog­facility /var/run/syslogd.pid metalog man savelog /var/log/messages /etc/sysconfig/syslog

Les services © Patrick Hautrive !;~) 2010 85 Un exemple d'archivage

Un exemple d'archivage local des journaux systèmes vi /etc/log.cron mv /var/log/messages /var/log/messages­old ; cp /dev/null /var/log/messages export DATE=”­­­­­`date +”%m%d%y”`­­­­­” mv /var/log/messages­old /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 © Patrick Hautrive !;~) 2010 86 Les messages d'erreurs Messages Signification and Exemple too many links (<1000) Il ne peut avoir plus de mille sous répertoires RE Error Expression régulière invalide #grep '[x' file read only file system permission denied touch /root/file no such process kill 50000 write­protected regular file rm ­i /root/* no such file or directory cp file /save no process can be found nor a directory cd ~/unknow arg list too long broken pipe usage cannot access chmod 444 file cross device link ln file /mnt/usbkey different file system device or ressource busy umount /mnt/cdrom I/O error file exist login incorrect file table overflow file too large illegal option ls ­j insufficient argument missing destination file cp file is a directory

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 © 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 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 Control Sequences Files shutdown sync man shutdown Ctr+Alt+Z (suspension) /etc/inittab halt umount exit Ctr+Alt+C (interruption) /etc/shutdown.allow reboot kill quit Ctr+Alt+D (terminaison) /etc/shutdown.deny init xkill logout Ctr+Alt+Backspace (xserver) /etc/powerstatus telinit wall SIGTERM Ctr+Alt+F1 (virtual console) apcupd SIGKILL Ctr+Alt+F7 (interface graphique) apmd SIGPWR Ctr+Alt+Del (system shutdown)

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 © 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 © 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 Login UID Administrator root wheel admin 0 System sys syslog klog man sync bin daemon hal gdm 1 < uid < 499 Service lp mail news uucp proxy www­data backup list irc gnats 500 < uid < 999 postfix messagebus apche cupsys fetchmail saned Users 1000 < uid < 10 000 Others 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 (777­002=755).

Les services © 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 celles­ci 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, 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 © 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/.[A­z]* find / ­user indi ; find / ­uid 508 su – indi id ; pwd ; ls ­la

La configuration des utilisateurs

La configuration des utilisateurs Commands Files users username mkpasswd alias /etc/passwd /etc/profile (login) id logname pwgen checkalias /etc/shadow /etc/bash.bashrc (shell) w chfn passwd newaliases /etc/group ~/.profile who chage chpasswd listalias /etc/gshadow ~/.bashrc rwho chsh uuidgen umask /etc/adduser.conf ~/.bash_profile (login) whois su pwck ulimit /etc/deluser.conf ~/.bash_history whoami sudo pwconv smbpasswd /etc/securety/* ~/.project finger pwunconv useradd /etc/shells ~/.plan wall vipw adduser /etc/skel ~/.signature talk faillog userdel /etc/login.defs ~/.Xauthority write unix_chkpw deluser /etc/default/useradd update­passwd usermod /var/run/utmp

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 2010­10­10 individual passwd individual ; cat /etc/passwd | grep indi chfn individual ; finger individual ; finger chomsky@mit­edu 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 © Patrick Hautrive !;~) 2010 92 useradd ­g 2001 indi (Groupe Principal) useradd ­G HASH indi (Groupe Secondaire) useradd ­C “Optionel et Libre” indi (Champ Gecos) usermod ­g 2002 indi (Groupe Principal) usermod ­c “Optionel et Libre” indi (Champ Gecos) userdel ­r indi (Suppression du compte et de son répertoire) ulimit ­a ; umask ­S vi ~/.bashrc if [­n “$PS1”] ; then fortune fi

Les services © 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 Files group groupadd (addgroup) useradd ­g /etc/group Option SHADOWGRP groups groupdel (delgroup) usermod ­g /etc/gshadow newgrp gpasswd grpck /etc/adduser.conf chgrp groupmod grpconv sg vigr grpunconv

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 © 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 quotas s'appliquent sur l'ensemble d'une partition (partition) ou d'un système de fichier monté (mounted partition). Les quotas peuvent être aussi utiles pour la gestion d'une partition dédié à un serveur (server).

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.

Les types de limites

Les limites imposées peuvent être des limites douces (soft) ou des limites dures (hard). Les limites peuvent s'appliquer soit au niveau de la taille des fichiers (blocks), soit au niveau du nombre d'inode (inode). Les limites peuvent être appliquées à un ou plusieurs utilisateurs (user) ou à un ou plusieurs groupes d'utilisateurs (group).

Les limites douces (soft) permettent de prévenir l'utilisateur qu'un seuil d'alerte est dépassé (alert), et de l'encourager à restreindre sont occupation du disque. L'utilisateur dispose alors d'un délai (probation) de courtoisie pour remédier à la situation, par exemple en supprimant ses fichiers inutiles. L'utilisateur qui a dépassé sa limite douce, doit dans le délai qui lui est imparti, redescendre en dessous de cette limite douce. Si l'utilisateur ou le groupe ne redescendent pas en dessous de sa limite douce, alors, il ou ils ne pourront plus, ni écrire, ni créer de nouveaux fichiers.

Les limites dures (hard) sont des limites infranchissables, et le système empêchera la création ou l'enregistrement d'un fichier. Dans le cas des groupes, quand la limite dure est franchie, ce sont alors tous les membres du groupe (group members), qui ne peuvent plus, ni écrire, ni créer de fichier. La marge de manœuvre temporaire (interval) se situe toujours entre la limite inférieure (soft) et la limite supérieure (hard).

L'installation de quotas

La mise en place des quotas s'effectue par l'installation du package « quota », par les options de montage des partitions dans le fichier « /etc/fstab », et en initialisant les fichiers de gestion des quotas à

Les services © Patrick Hautrive !;~) 2010 95 la racine de la partition concernée. Les fichiers de gestion des quotas sont par exemple les fichiers « /home/quota.user » et « /home/quota.group ». L'initialisation des fichiers de gestion des quotas peut s'effectuer avec la commande « quotacheck –avug ». Enfin, la partition sur laquelle est configurée les quotas, doit être remontée (remount) pour tenir compte de la nouvelle configuration. La commande « quota » permet d'afficher les quotas des utilisateurs et des groupes. La commande « edquota » permet de gérer les limites. Par défaut, les quotas ne sont pas actif, même s'ils ont été configurés. Les commandes « quotaon » et « quotaoff » permettent respectivement des les activer ou de les désactiver. La commande « repquota » permet de générer un rapport sur l'utilisation des quotas d'une partition.

L'installation des quotas (man quota) (man edquota) su rpm ­i quota vim /etc/fstab /dev/hda3 /home ext3 defaults,usrquota,grpquota 0 0 touch /home/quota.user touch /home/quota.group quotacheck –avug mount –o remount /home quota ­u user quota ­g GROUP edquota ­u user edquota ­g GROUP edquota ­t quotaon ­a quotaon ­u /dev/hda3 quotaoff ­g /dev/hda3 repquota ­u /dev/hda3 repquota ­g /dev/hda3 repquota ­a

La configuration des quotas

La configuration des quotas Commands Files Packages quota repquota smbcquotas quota.user /etc/fstab quota edquota quotacheck man quota quota.group /usr/include/sys/quota.h quotatool quotaon convertquota man quotactl aquota.user ­quota quotaoff warmquota aquota.group

Les exemple s de quotas

Les services © Patrick Hautrive !;~) 2010 96 quotaon ­a quota ­v quota ­v $USER quota ­g GROUP df /home/$USER edquota ­t edquota ­p profil $USER edquota ­g GROUP 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 0

Les services © Patrick Hautrive !;~) 2010 97 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 © Patrick Hautrive !;~) 2010 98 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/run­parts» ou le script «/usr/lib/cron/run­crons» 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, lesquels sont séparés par un espace (space). Le fichier «/etc/crontab» accepte huit paramètres

Les services © Patrick Hautrive !;~) 2010 99 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 (00­59) (0­23) (1­31) (1­12) (0­7) 1970 root script (jan­dec) (sun­sun)

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 («x­y»), 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 jokers de périodicité de crontab (man 5 crontab) Minute Hour Day Month Day of the week Year (00­59) (0­23) (1­31) (1­12) (0­7) 1970 (jan­dec) (sun­sun) * / , ­ * / , ­ * / , ­ ? * / , ­ * / , ­ ? to (L W) (L #) 2099

Les services © Patrick Hautrive !;~) 2010 100 Des exemples d'enregistrement crontab

Des exemples d'enregistrement d'une tâche dans /etc/crontab (man 5 crontab) Minute Hour Day Month Day of the week User Command 0 1 * * * root Every morning at one o'clock 0 1 1 * * root Every first day of the month 0 1 1,15 * * root Every first and fithteen of the month 0 1 “1­15” * * root Every day from first to fithteen 0 1 */5 * * root Every five days */10 * * * * root Every ten minutes 0 1 1 1,3,6,9,12 0 root At one, every three months on sunday * * * * * root Every minute, every hour, every day 0 0 1 1 * root 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 Equivalence Fonction @hourly 0 * * * * Once an hour @daily or @midnight 0 0 * * * Once a day @weekly 0 0 * * 0 Once a week @monthly 0 0 1 * * Once a month @yearly or @annually 0 0 1 1 * Once a year @reboot Init 6 Once at reboot

Les services © Patrick Hautrive !;~) 2010 101 La configuration de crontab

La configuration de crontab (man crontab) Commands Files Servers cron batch dh_installcron /etc/crontab /etc/at.deny crond crontab at man 1 crontab /etc/cron.d/* /etc/at.allow atd kcron atq man 5 crontab /var/spool/cron/* /var/spool/at anacron atrm man 1p crontab /etc/sysconfig/cron /var/spool/anacron runparts man cron /etc/syslog.conf /var/spool/cron/crontab/$USER runcon man anacron /etc/anacrontab /var/spool/cron/tabs/$USER man anacrontab /etc/cron.deny /var/log/cron /etc/cron.allow /root/bin/cron.daily.local /etc/cron.hourly /var/spool/cron/lastrun /etc/cron.daily /usr/bin/run­parts /etc/cron.weekly /usr/lib/cron/run­crons /etc/cron.monthly

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 run­parts /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 © Patrick Hautrive !;~) 2010 102 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 © Patrick Hautrive !;~) 2010 103 MAKE

La construction d'exécutables

La compilation consiste en la construction d'exécutable. A partir des sources d'un programme (source code), le compilateur (compiler) transforme les instructions écrites dans un langage de programmation (langage) en des instructions écrites en langage machine (binary). Les programmes exécutables qui résultent de la compilation sont propres à une architecture processeur (architecture), et à un système d'exploitation (operating system).

Les packages sources

Les packages sources (source package) sont téléchargés depuis Internet, selon l'architecture processeur, et selon le système d'exploitation. Les packages sources contiennent le code du programme (source code), des scripts pour automatiser leur compilation (makefile, configure), et éventuellement une documentation (README, INSTALL).

Les packages sources sont téléchargeables sous la forme d'une archive compressée (tarball) avec l'extension « .tar.gz » ou « .tarbz2 ». Les commandes « tar ­xzvf package.tar.gz» et « tar ­xjvf package.tar.gz» permettent de décompresser les archives. Ensuite, les commandes « cd package », « ./configure », « make » et « make install » permettent de configurer, de compiler et d'installer le programme.

Les packages sources représente un format universel (universal format), puisqu'ils peuvent être compilés pour n'importe quelle plateforme architecturale, et pour n'importe quel système d'exploitation, Les packages sources requièrent d'être compilés avant d'être exploitables ou exécutables, au contraire des packages sous la forme de binaires (binaries), qui sont déjà compilés pour une architecture particulière et pour un système d'exploitation en particulier.

Les dépendances

Sur les sytèmes Gnu Linux, les sources d'un programme sont livrées sans les librairies dont il dépend, parce que chaque librairie constitue un package en soi (libraries), mais aussi parce cela limite le téléchargement répétitif de la même librairie (download), et cela réduit l'espace de stockage nécessaire (space disk). Toutefois l'avantage principal de la gestion séparée des librairies, est que cela simplifie les mises à jour (update), et que cela améliore la gestion des différentes versions (version).

Dans un programme binaire, au contraire, toutes les dépendances sont déjà présentes et compilées, et le programme est exploitable tout de suite. Par contre, quand une mise à jour est disponible c'est tout le programme avec ses dépendances qu'il faut télécharger à nouveau. Enfin, l'avantage de la séparation des dépendances, n'est pas si simple, puisque certains programmes exigent pour fonctionner certaines

Les services © Patrick Hautrive !;~) 2010 104 librairies adaptées, ou certaines versions de librairies partagées, voire certaines anciennes versions (old version), puisque les packages n'évoluent pas toujours au même rythme (development rhythm).

Quoi qu'il en soit, il est possible de compiler les sources d'un programme avec à l'intérieur du programme les librairies dont il a besoin (static libraries). Alors, il n'y a plus de problèmes de dépendance, mais le binaire est d'une taille plus importante (size). Enfin, les gestionnaires de packages (package manager) gère automatiquement les dépendances, et s'occupent du téléchargement et de l'installation.

Les librairies partagées

La commande « ldd /path/program » permet de connaitre les librairies partagées par le programme. La variable LD_LIBRARY_PATH et le fichier compilé « /etc/ld.so.cache » contiennent les chemins par défaut vers les principales librairies. La commande « ldconfig » génère le fichier cache, et permet de charger dynamiquement les librairies en mémoire. Le fichier de configuration est « /etc/ld.so.conf », et la commande « ldconfig ­p » permet d'obtenir la liste des librairies patrtagées qui sont installées. En général, les librairies se trouvent dans les répertoires « /usr/lib » et « /lib ».

La compilation

La compilation des sources d'un programme (source) est une procédure qui laisse une plus grande marge de liberté, puisque de nombreuses options (options) permettent d'optimiser la compilation, et d'obtenir ainsi, un programme binaire plus adaptés à la machine sur laquelle il est destiné à tourner. Pendant la procédure de compilation, il est possible d'activer ou de désactiver certaines fonctionnalités d'un programme (functionalities), afin de l'adapter à ses besoins, tandis que les programmes qui sont pré compilés (binaries) proposent les fonctionnalités génériques du programme (standard).

Le processus de compilation requière que soit installés sur la machine, les outils de compilation (compiler tools), les entêtes (headers) et les librairies partagées (shared libraries) dont dépend le programme. Par exemple, un programme écrit en langage C a besoin de la librairie « libc.so » pour être compilé, et un programme qui utilise les redirections a besoin des entêtes standards (headers) des Entrées Sorties (« stdio.h »).

Un exemple de source

#include /* Nécessite libc6­dev */ int main(int argc, char **argv) { printf(“Vive GNU/Linux \n”); return 0; }

Les services © Patrick Hautrive !;~) 2010 105 La compilation croisée

Il est possible de compiler les sources d'un programme pour une autre architecture et un autre système d'exploitation que ceux sur lequel est effectué la compilation (cross compiling).

Les Makefiles

Les Makefiles sont des scripts 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 Files Packages make README Autoconf automake INSTALL Automake autoconf MAKEFILE imake qmake

Les services © Patrick Hautrive !;~) 2010 106 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://ftp­server.tld:/pub/linux/ wget ftp://ftp­server.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 config­cache 4. Configuration ./configure –help ./configure –prefix=/usr –with­threads cp config­cache config­cache­old ./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 whereis archive ; ldd /path/archive

Les services © Patrick Hautrive !;~) 2010 107 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 Binaires Assembler Compilé C, Fortran, Pascal Emacs, Visual Studio Interprété Bash, les Scripts Shell Descriptifs HTML (Hyper Text Markup Language) 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 © Patrick Hautrive !;~) 2010 108 Les phases de la compilation

Les phases de la compilation en langage C Phase Format Extension Name 1. Le code source Texte (“.c”) 2. Le pré­processeur Headers (“.h”) (“.i”) PLC 3. Le compilateur Code assembler (“.o”) CC1 4. L'assembleur Binary (“.s”) ASS 5. L'éditeur de lien Executable Linker Bibliothèques dynamiques (table de saut) (“.so”) Bibliothèques statiques (insertion de routines) (“.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 © Patrick Hautrive !;~) 2010 109 Le premier programme C vi hello.c include int /* First program in C to print one single phrase*/ main () { (void) printf (“Hello World \n”); return 0 ; }

La configuration de gcc

La configuration de GCC Commands Files Packages gcc ld.so readelf Autoconf g++ indent glibc ranlib litool

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 gcc­O ­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) cc prog.c ­o prog.dyn (édition des liens dynamiques)

Les services © Patrick Hautrive !;~) 2010 110 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 Fonction libc Library C standard libm Library mathematical libncurses Librairie d'émulation d'une fenêtre de console libX11 Library X window cin, cout 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 © Patrick Hautrive !;~) 2010 111 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épend le programme passé en paramètre. La librairie «ld.so» avait auparavant la responsabilité de charger les librairies dynamiques dans un ordre spécifique, mais c'est maintenant la commande « ldconfig » qui s'en charge.

La commande «man ld» explique le fonctionnement du chargeur de librairies (gnu linker).

Les services © Patrick Hautrive !;~) 2010 112 L'ordre de recherche des librairies dynamiques (ld.so) (ldconfig) (/etc/ld.so.conf) 1. LD_LIBRARY_PATH 2. /etc/ld.so.cache 3. /lib 4. /usr/lib 5. /usr/X11R6/lib/Xaw3d 6. /usr/X11R6/lib 7. /usr/lib/Xaw3d 8. /usr/i386­suse­linux/lib 9. /usr/local/lib 10. /opt/kde3/lib 11. include /etc/ld.so.conf.d/*.conf

La configuration des bibliothèques

La gestion la configuration des librairies s'effectue automatiquement pour une distribution standardisée, mais peut être un casse tête, lorsqu'un système GNU/Linux contient de nombreuses versions du même programme, et des programmes qui appartiennent à différentes versions d'une même distribution.

La configuration des bibliothèques Commands Files Paths gcc ld man ldconfig /etc/ld.so.conf LD_LIBRARY_PATH ldconfig ld.so man ld /etc/ld.so.cache /etc/ld.so.conf ldd ld.linux man ldd /etc/lib.so.conf include otherlibpath.conf lddlibc4 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 © Patrick Hautrive !;~) 2010 113 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) lspci /etc/modules.conf man modules insmod (install) lsusb /etc/modules (Debian) man modprobe rmmod (remove) isapnp /etc/conf.modules (Red Hat) man modprobe.conf modprobe (detection) pnpdump /etc/modprobe.d/aliases man depmod depmod (dependancies) dmesg /etc/modutils man modules.dep modinfo (information) kerneld /etc/isapnp.conf modload (thread kernel) kmod /usr/include/linux/kmod.h modconf (Debian) uname /lib/modules/$(uname ­r)/*.o update­modules /lib/modules/$(uname ­r)/modules.dep usbmodules /lib/modules/$(uname ­r)/build/net/* dh_installmodules /lib/modules/$(uname ­r)/kernel/net/* pcimodules MODPROBE_OPTIONS

Les services © Patrick Hautrive !;~) 2010 114 Un exemple d'installation

Un exemple d'installation de module cd /usr/src insmod ­f module tar xvfz module.tar.gz depmod ­a cd module modprobe module less README ls mod make modinfo module make install rmmod module ls /lib/modules/$(uname ­r)/module.o /etc/rc.d/init.d/kerneld restart

Le fichier /etc/modules.conf

Un exemple de fichier /etc/modules.conf alias usb­controler usb­uhci 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 exemples de modules lsmod ls /lib/modules/2.6.18­4­486/kernel/net/iv4/netfilter/* modprobe

Les services © Patrick Hautrive !;~) 2010 115 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 (Red Hat, Fedora, Mandrake, Mandriva et SuSE, Turbo Linux, Trustix, CentOs).

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/*”.

Des outils graphiques de gestion des packages (yum) se base sur la commande « rpm » pour effectuer les opérations d'installation, de désinstallation, ou de mise à jours des packages.

Des sites miroirs (mirror) mettent à disposition des internautes des packages au format RPM.

Les services © Patrick Hautrive !;~) 2010 116 La commande rpm

La commande “rpm” permet de gérer les packages RPM en ligne de commande.

Les options de la commande rpm Options Installation rpm –initdb (data base) rpm ­i –nodeps archive.rpm (no dependancy) rpm ­ivh archive.rpm (install) rpm ­i –force archive.rpm (force install) rpm ­Uvh archive.rpm (update) rpm ­i –ignorearch archive.rpm (ignore architecture) rpm ­evh archive.rpm (erase) rpm ­i –ignoreos archive.rpm (ignore os) rpm ­qpl archive.rpm (list) rpm ­i –test archive.rpm (test only) rpm ­qa archive (query all) rpm ­i ­­checksig archive.rpm (check signature) rpm ­qf /usr/bin/archive (query file) rpm ­i –nosignature archive.rpm (no signature check) rpm ­qi archive (query infos) gpg –import signature.asc (import signature)

La configuration des packages RPM

La configuration des packages RPM (Red Hat Package Manager) Commands Files rpm yum man rpm /etc/rpmrc urpmi up2date /etc/rpm/macros rpmdrake autorpm /usr/lib/rpm/rpmrc alien

Les exemples de RPM rpm ­qal xsnow | sort | less rpm ­qlc xsnow (query list configuration files) rpm ­qld xsnow (query list documentation files) rpm ­qpi xsnow­1.41­1.i386.rpm (query package information) rpm ­e –nodeps xsnow rpm ­ivh xsnow­1.41­1.i386.rpm rpm ­Uvh xsnow­1.41­1.i386.rpm ls /usr/X11R6/bin/xsnow rpm ­qf /usr/X11R6/bin/xsnow rpm ­qa > list­rpm.txt mount /dev/cdrom cd /mnt/cdrom/RedHat/RPMS rpm­ivh package.rpm

Les services © Patrick Hautrive !;~) 2010 117 DEB

La philosophie Debian

Les distributions Debian sont basées sur la distribution Debian, qui est réputé pour son exemplarité et sa 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).

De nombreuses distributions se base sur le développement de la distribution Debian (Ubuntu, Knoppix).

Les distributions Debian

Les distributions Debian sont développés continuellement (unstable), mais elles ne sont distribuées officiellement que quand elles sont suffisamment testées pour être jugées opérationnelles (stable) dans un environnement de production.

La philosophie Debian ( http://debian.org ) /usr/share/doc/debian/social­contract.txt /usr/share/doc/debian­reference­en /usr/share/doc/debian/constitution.txt /usr/share/doc/debian/debian­manifesto

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 (package manager) est l'ensemble des programmes APT (Advanced Package Tool), qui permet d'installer ou de désinstaller des programmes, avec la gestion des dépendances (dependencies) et les mises à jour de sécurité (security uptdate).

La commande « dselect » est l'ancienne commande de gestion des packages Debian. La gestion des packages s'effectue désormais avec la commande « dpkg » , pour la gestion de bas niveau, et la commande « apt­get » pour la gestion courante. Toutefois, depuis la version officielle de Debian 4, c'est la suite des commandes APT ou la commande « aptitude » qu'il faut préférer pour la gestion des packages. Des outils graphiques (« synaptic ») s'appuyant sur ces commandes, permettent également de gérer l'installation et la désinstallation des programmes, comme la mise à jour de sécurité (security uptdate).

Les distributions Knoppix ou Ubuntu sont des distributions de type Debian qui utilisent les même

Les services © Patrick Hautrive !;~) 2010 118 packages et les mêmes outils.

Le fichier « /etc/apt/sources.list » contient des dépôts des packages Debian (repository) sur internet. La liste des dépôts officiels (main, free) peut être modifiée pour accepter des programmes qui sont développés par d'autres équipes que les contributeurs Debian (contrib), ou pour accepter des programmes qui fonctionnent sous Debian, mais dont les sources ne sont pas sous licence GNU GPL (non free).

Le fichier de configuration de la commande « apt­get » est « /etc/apt/apt.conf ». La commande “alien” permet de convertir les packages du format RPM au format DEB et vice versa.

La documentation Apt Howto décrit l'utilisation du gestionnaire de packages pour les distributions Debian.

La commande dpkg

La commande « dpkg » est une commande de bas niveau pour gérer les packages Debian. La commande « dpkg­reconfigure » permet de reconfigurer un package Debian.

La commande dpkg (man dpkg) (man dpkg­deb) dpkg ­c archive.deb (content) dpkg ­i archive.deb (install) dpkg ­r archive (remove) dpkg ­P archive (purge the package and its configuration files) dpkg ­I archive.deb (information) dpkg –audit (audit) dpkg ­­content archive.deb (files into archive) dpkg ­S motif (search motif in installed packages) dpkg ­s archive (status) dpkg ­l motif (list packages with motif) dpkg ­L archive (list files from package) dpkg ­p archive (print information available) dpkg­reconfigure package (reconfigure hte package)

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 services © Patrick Hautrive !;~) 2010 119 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 apt­get

Les commandes “apt­get”, “apt­show” et “apt­cache” 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 apt­get) apt­get update (synchronisation des sources «/etc/apt/sources.list») apt­get –show­upgraded (liste les mises à jours des packages) apt­get upgrade archive (mise à jours des packages) apt­get dist­upgrade (mise à jours des packages et des dépendances de la distribution) apt­get ­s install archive (simulation de l'installation d'une archive) apt­get install archive (installation d'une archive) apt­get remove archive (désinstallation d'une archive) apt­get –purge archive (supprime l'archive et ses fichiers de configuration) apt­get check (vérification des dépendances) apt­get clean (suppression des archives téléchargées) apt­get –fix­broken (réparation des dépendances) apt­get dselect­upgrade (mise à jours des packages selon leur statut)

La commande apt­cache

La commande “apt­cache” utilise les informations enregistrées dans les fichiers caches.

La commande apt­cache pour la gestion du cache des packages (man apt­cache) apt­cache stats (affichage nom, nombre, noms virtuels, missing, distinct distribution) apt­cache dumpavail (affichage des packages disponibles) apt­cache search motif (affichage des archives qui correspondent au motif de recherche) apt­cache show archive (affichage des informations sur une archive) apt­cache showpkg archive (affichage des versions, des dépendances normales, et inverses) apt­cache depends archive (affichage des dépendances et des packages pour une résolution) apt­cache rdepends archive (affichage des dépendances inverses)

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 “apt­get” et “apt­ cache”.

Les services © Patrick Hautrive !;~) 2010 120 Le fichier « /etc/apt/sources.list » contient des dépôts ou miroirs des paquets Debian (repository). Quand le fichier des sources est modifié, la commande « apt­get update » doit être lancée pour reconstruire la liste des paquets disponibles dans le cache.

La configuration des packages Debian (Apt Howto) Commands Files taskel apt­sortpkgs aptitude /etc/dpkg/dpkg.cfg man dpkg dselect apt­ftparchive synaptic /etc/apt/sources.list man dselect dpkg apt­extracttemplate kpackage /etc/apt/apt.conf man dpkg­deb apt­get dpkg­buildpackage gnome­apt /etc/apt/preferences man dpkg­query apt­show dpkg­reconfigure alien /var/lib/apt/lists/* man deb­control apt­cache /var/lib/dpkg/status man apt apt­key /var/lib/dpkg/info/* man apt­get apt­setup /var/lib/dpkg/available man apt­cache apt­config /var/cache/apt/archives/* man sources­list apt­cdrom /etc/popularity­contest.conf 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 deb­src). 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 testing deviendra stable.

Enfin, sont placés les types de paquets (main, contrib, free, nonfree) qui doivent être pris en compte.

Les services © Patrick Hautrive !;~) 2010 121 Le fichier « /etc/apt/sources.list » (man sources.list) Type Addresses Distribution Packages Binaries deb http code potato Official main contrib sarge etch lenny squeeze wheezy sid Sources deb­src ftp classe oldstable Third Party non­free free stable testing unstable #OFFICIAL DEBIAN REPOS #Debian Main Repos deb http://ftp.fr.debian.org/debian/ squeeze main contrib non­free deb­src http://ftp.fr.debian.org/debian/ squeeze main contrib non­free #Debian Update Repos deb http://security.debian.org/ squeeze/updates main contrib non­free deb http://ftp.fr.debian.org/debian/ squeeze­proposed­updates main contrib non­free deb­src http://security.debian.org/ squeeze/updates main contrib non­free deb­src http://ftp.fr.debian.org/debian/ squeeze­proposed­updates main contrib non­free #UNOFFICIAL REPOS 3rd Party Binary Repository # Debian Backports ­ http://backports.debian.org/ deb http://backports.debian.org/debian­backports squeeze­backports main #Debian Multimedia ­ http://www.debian­multimedia.org/ ## Run: apt­get update && apt­get install debian­multimedia­keyring && apt­get update deb http://www.debian­multimedia.org stable main non­free

Les exemples de Debian dpkg­reconfigure xserver­xorg dpkg­reconfigure locales dpkg­reconfigure console­data apt­cdrom add apt­get update apt­get install +archive ­archive­to­remove archive=version archive/stable apt­get install aptitude aptitude –simulate dist­upgrade aptitude dist­upgrade

Les services © Patrick Hautrive !;~) 2010 122 apt­cache policy cpp aptitude –simulate –purge cpp aptitude search

Les services © Patrick Hautrive !;~) 2010 123 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 répertoire courant (path) où elle a été lancée (pwd). La commande “tar” préserve également les

Les services © Patrick Hautrive !;~) 2010 124 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 create t list x extract d diff f file r add v verbose u update z compress & decompress with “gzip” h files not symlinks j compress & decompress with “bzip2” m modified time k keep existing files no overwrite P absolute path p preserve permissions V volume or label name Z compress & decompress with “compress”

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 Tools Extension Spécification Red Hat rpm yum .rpm Package Debian dpkg apt­get .deb Package Gentoo zip unzip .ZIP Port Source Gentoo Tarball gzip gunzip .tar.gz Archive source with Gnu zip Tarball bzip2 bunzip2 .tar.bz2 Archive Tarball compress uncompress .tar.Z Archive

La configuration des tarballs

Les services © Patrick Hautrive !;~) 2010 125 La configuration de l'archivage et de la compression (tarballs) Commands Tools Files gzip gunzip zmore tar Pax /etc/dumpdates bzip bunzip zless star Winzip.exe bzip2 bunzip2 zcat cpio Amanda compress uncompress zdiff dd Arkeia pkzip pkunzip zcmp rsync Tivoli IBM tkzip tkunzip zgrep gzexe Omniback HP zip unzip HOSTDUMP.SH pack unpack dump restore

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 ­­use­compress­program 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 © Patrick Hautrive !;~) 2010 126 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 barres 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 avec le protocole X11R6. Le mode client serveur permettait de servir plusieurs terminaux avec un seul serveur graphique. L'affichage des fenêtres peut être calculé sur une machine, et déporté sur une autre machine (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 sur le port 6000. L'exportation de l'affichage (display) peut s'effectuer avec la commande « ssh ». Le serveur graphique utilisent les librairies graphiques libres (OpenGL).

La version libre du serveur graphique ou X Window (version X11 Release 6.3) s'est d'abord appelé Xfree86 puis Xorg, parce que la version de Xfree 4.4 n'était plus sous licence libre. 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 rafraichissement (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 services © Patrick Hautrive !;~) 2010 127 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 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 Desktop Display Window Init man xserver /etc/inittab CDE xdm Blackbox X man xorg /etc/init.d/xdm Gnome gdm WindowMaker startx man xorg.conf /etc/init.d/xorg­common KDE kdm Enlightenment startkde gnome­ /etc/sysconfig/desktop Aqua AfterStep xorgcfg session /etc/X11/prefdm Virtual Library Fluxbox dexconf x­window­ /etc/X11/xorg.conf Sawfish Pagers OpenGL getconfig manager /etc/X11/Xsession Bowman Exceed QT xorgconfig xf86config /etc/X11/Xwrapper.config AnotherLevel Xinside GTK switchdesk xf86cfg /etc/X11/gdm/gdm.conf Fvwm2 twm Winaxe Kparts xhost XF86config /etc/X11/gdm/Init/Default kwm icccm Wine XtoolKit xauth XF86cfg /etc/X11/gdm/Sessions/Default piewm tvtwm X­Win32 Widget rstart Xfree86 /etc/X11/xdm/Xsetup Vmware JDS Personal xev XF86Setup /etc/X11/xdm/Xsession ~/.Xclients xrefresh Xfree86Setup /etc/X11/xinit/xinitrc ~/.Xressources xrdb Xfree86­ /etc/X11/xinit/xserverrc ~/.xinitrc xdpyinfo configure /etc/X11/xinit/xclients ~/.Xdefaults xwininfo xconfigurator /etc/X11/xserver/SecurityPolicy ~/.xsession xlsatoms redhat­ /etc/X11/XF86Config ~/.Xserverrc xvinfo configure­ /etc/X11/XF86Config4 ~/.Xauthority xkbprint xfree86 /etc/X11/kdm/* ~/.Xmodmap /usr/bin/X11/* ~/.gnome/photo /usr/X11R6/* /usr/lib/X11/*

Un exemple /etc/X11/xorg.conf

Les services © Patrick Hautrive !;~) 2010 128 Un exemple de configuration du serveur graphique (/etc/X11/xorg.conf) Section "Files" Section "Device" FontPath "unix/:7100" Identifier "ATI 3D Rage LT Pro (AGP)" FontPath "/usr/lib/X11/fonts/misc" Driver "ati" FontPath "/usr/lib/X11/fonts/cyrillic" BusID "PCI:1:0:0" FontPath "/usr/lib/X11/fonts/100dpi/:unscaled" EndSection FontPath "/usr/lib/X11/fonts/75dpi/:unscaled" FontPath "/usr/lib/X11/fonts/Type1" Section "Monitor" FontPath "/usr/lib/X11/fonts/CID" Identifier "Écran générique" FontPath "/usr/lib/X11/fonts/100dpi" Option "DPMS" FontPath "/usr/lib/X11/fonts/75dpi" HorizSync 28­49 EndSection VertRefresh 43­72 EndSection Section "Module" Load "bitmap" Section "Screen" Load "dbe" Identifier "Default Screen" Load "ddc" Device "ATI 3D Rage LT Pro (AGP)" Load "dri" Monitor "Écran générique" Load "extmod" DefaultDepth 24 Load "freetype" SubSection "Display" Load "glx" Depth 1 Load "int10" Modes "1024x768" "800x600" "640x480" Load "record" EndSubSection Load "type1" SubSection "Display" Load "vbe" Depth 4 EndSection Modes "1024x768" "800x600" "640x480" EndSubSection Section "InputDevice" SubSection "Display" Identifier "Generic Keyboard" Depth 8 Driver "keyboard" Modes "1024x768" "800x600" "640x480" Option "CoreKeyboard" EndSubSection Option "XkbRules" "xorg" SubSection "Display" Option "XkbModel" "pc105" Depth 15 Option "XkbLayout" "fr­latin9" Modes "1024x768" "800x600" "640x480" EndSection EndSubSection SubSection "Display" Section "InputDevice" Depth 16 Identifier "Configured Mouse" Modes "1024x768" "800x600" "640x480" Driver "mouse" EndSubSection Option "CorePointer" SubSection "Display" Option "Device" Depth 24 "/dev/input/mice" Modes "1024x768" "800x600" "640x480" Option "Protocol" "ImPS/2" EndSubSection Option "Emulate3Buttons""true" EndSection Option "ZAxisMapping" "4 5" EndSection Section "ServerLayout" Identifier "Default Layout" Screen "Default Screen" InputDevice "Generic Keyboard" InputDevice "Configured Mouse" EndSection

Section "DRI" Mode 0666 EndSection

Les services © Patrick Hautrive !;~) 2010 129 Le serveur X Window

Le serveur graphique calcul l'affichage, les mouvements de la souris et l'entrée de texte, puis expédie la fenêtre graphique au gestionnaire de fenêtre de l'application cliente. Le serveur graphique utilise les librairies Xlib et les communications s'effectuent avec le protocole X11. C'est l'application cliente qui initie la communication avec le serveur graphique.

Au­dessus des librairies graphiques Xlib peuvent être installées différentes composantes (graphical tool kit) pour le calcul de l'affichage. Il existe plusieurs environnements graphiques compatibles avec Gnu Linux et le serveur graphique X Window, comme ceux du bureau Gnome (GTK+, GTK#), du bureau KDE (QT, QT+), des applications écrites en Java (JDS) ou de Motif. Ces environnements graphiques permettent de développer des applications cohérentes, et d'uniformiser l'apparence des différentes fenêtres.

Le serveur X Window est lancé automatiquement pour le niveau d'initialisation « init 5». La commande « startx » permet de lancer le serveur X Window, quand il n'a pas démarré. Par défaut, le serveur X Window redirige l'affichage vers l'adresse IP « 127.0.0.1:0 ». La commande « startx :1 » lance le serveur X Window et redirige l'affichage (display) vers le deuxième moniteur (Ctrl+Alt+8) de la machine locale (localhost).

La commande « xhost » permet de restreindre l'accès au serveur X Window. La commande « xhost ­ » refuse l'accès à tout le monde, tandis que la commande « xhost + » accepte tous les clients. La commande « xhost + 10.0.1.1 » accepte les connexions des clients qui proviennent depuis cette adresse.

Le s clients X Window

Les clients X Window sont tous des 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 xman xmatrix rain xmodmap xlsclients xlock xbiff xclipboard worms zenity xlsfonts xeyes xwd xmessage glxinfo xlsfonts xcalc xkill xletters glxgears xfontsel xlogo worm xload 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

Les services © Patrick Hautrive !;~) 2010 130 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 Server X Window + X Libraries X Window + X listen tcp xauth nmerge myauth.xa echo $DISPLAY rm myauth.xa xauth list export DISPLAY=server.tld:0.0 xauth generate xeyes xauth nextract myauth.xa $DISPLAY Ctrl+C scp myauth.xa client.tld:myauth.xa rm myauth.xa xhost + [email protected]

Les exemples de X window sh Xinstall.sh ­check Xfree86 ­scanpci (Bus Id = 1:0:0) Xfree86 ­probeonly ls ${KDEDIR}/bin.*.kss export PATH=$PATH:/usr/X11R6/bin X :1 ; startx ­­:1 (Display N° 1 avec Ctrl+Alt+F8) xclock ­geometry 300x250­200x150 xclock ­display localhost:0.0 (Display & Screen N° 0.0 avec Ctrl+Alt+F7) export $DISPLAY=soleil.reso:0.0 xhost +soleil.reso ; X > /tmp/X.out 2>&1 ; xhost ­ vi $HOME/.Xclients #exec startkde exec gnome­session ln­s /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 gnome­session #exec startkde #exec twm #exec sawfish #exec blackbox #exec enlightenment

Les services © Patrick Hautrive !;~) 2010 131 xrdb ­query less /usr/X11R6/lib/X11/rgb.txt vi ~/.Xressources *background : 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 dpkg­reconfigure xserver­xorg

Les services © Patrick Hautrive !;~) 2010 132 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=gnome­session gmanedit

Les services © Patrick Hautrive !;~) 2010 133 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 © Patrick Hautrive !;~) 2010 134 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 © Patrick Hautrive !;~) 2010 135 “cron”, et de synchronisation sécurisée comme “rsync” (remote synchronisation).

La configuration des sauvegardes Commands Target Files mv touch Legato mt /etc/* /etc/dumpdates rm cron Amanda ftape /home/* cp rsync ArcServe ftformat /usr/src/* scp rdist Bru afio /usr/lib/* cpio wget Arkeia cdrecord /var/* dd dump Tivoli tar restore Omniback

Les exemples de sauvegarde restore ­if /backup.dmp mt ­f /dev/nqst0 rewind rdist ­f configuration­file 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 © Patrick Hautrive !;~) 2010 136 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 ([a­z]) (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 user­manual” Le fichier de configuration “/etc/vim/vimrc” et le répertoire de documentation “/usr/share/vim/*”

Les services © Patrick Hautrive !;~) 2010 137 Le mode commande

Le mode commande de l'éditeur “vim” ESC (command mode) d (cut after a selection in visual mode) Ctrl+z (interruption & background) y (paste after a selection in visual mode) k (move up) dd (delete cursor line) h (moveleft) D (delete from cursor to end of line) l (move right) dG (delete from cursor to end of file) j (move down) x (delete one caracter under cursor) u (undo) X (delete one caracter before cursor) : (extended mode) cc (delete line & insertion) i (insertion mode on the cursor) C (delete end of line & insertion) I (insertion mode at the begining of the line) J (join line of cursor with line under) s (insertion mode) ^ (move cursor start of line) a (insertion & move one caracter after cursor) $ (move cursor end of line) A (insertion & move end of line) gg (move cursor start of file) o (insertion & open one line under cursor) G (move cursor end of file) O (insertion & open one line over cursor) H (move cursor to high screen) R (insertion & replacement except Backspace) M (move cursor to middle screen) v (visual mode for selection with arrows) L (move cursor to low screen) V (visual line for the selection of the line) /motif (search for “motif” after cursor) yy (copy cursor line into current register) ?motif (search for “motif” before cursor) p (paste current register in line under cursor) /[A­Z] (search for uppercase caracter) P (paste current register line over cursor) n (next pattern to search, no p for previous) ~ (change caracter in uppercase or lowercase) mx (mark the cursor position with letter “x”) “Ayy (copy line of the cursor in register “A”) 'x (place cursor in line marked with “x”) “Ap (paste register “A” in line under cursor) Ctrl+f (forward one page) “K5dd (cut 5 lines and keep them in register “K”) Ctrl+b (backward one page) ZZ (write modification & exit)

Un exemple de copier coller

Les services © Patrick Hautrive !;~) 2010 138 Un exemple de copier coller dans l'éditeur “vim” Esc (Passe en mode commande, si c'était nécessaire) gg (Déplacement du curseur pour indiquer le début de la zone à copier, ici en début de fichier) mC (Marque la position du curseur avec la lettre “C” pour indiquer un début de zone) G (Déplacement du curseur pour indiquer la fin de la zone à copier, ici fin de fichier) y'C (Copie la zone délimitée par la marque “C” et le curseur dans le tampon courant) “Ry'C (Copie la zone délimitée par la marque “C” et le curseur dans le registre “R”) d'C (Efface la zone délimitée par la marque “C” et le curseur) :e file (Charge le fichier “file” depuis le répertoire courant) “Rp (Colle le registre “R” sur la ligne en dessous de l'emplacement du curseur) :w file (Enregistre les modifications dans le fichier “file” du répertoire courant)

Le mode extended

Lors d'un changement d'édition de fichier, ou lors du relancement de l'éditeur, celui­ci conserve en mémoire, les 26 registres nommés de “a” à “z” (26 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 (write into “file.txt”) :set :wq (write & quit) :set all :q! (quit without saving) :set list :e! (edit reload without saving) :set showmode :r file.txt (load “file.txt” at cursor) :set noshowmode :n (next file) :set autoindent :!cmd (execute “cmd” in a shell) :set autoprint :!script (execute the “script” in a shell) :set errorbells :!! (execute last command) :set number :e file.txt (load file) :set redraw :%s/motif/change/ (replacement “motif” by “change” in the entire file) :set showmatch :0,$s/motif/change/ (replacement “motif” by “change” in the entire file) :set warn :x,ys/motif/change/ (replacement from line “x” to line “y”) :set wrapmargin :'M,.s/motif/change/ (replacement from mark “M” to cursor “.”) :set wordsearch :'M,.!script (execute “script” from mark “M” to cursor “.”) :set ignorecase :x,y!cmd (execute “cmd” from line “x” to line “y”) :set nomagic :help (open help in a new buffer, :q! to leave and come back) :set nowrapscan :shell (escape to a shell, exit to return to the editor) :set report :ARROW (scroll historic of commands) :set tabstop :exit (exit & save) :set term :quit (quit & ask to save) :set tarse :set mesg

Les services © Patrick Hautrive !;~) 2010 139 La configuration de “vim”

La configuration de l'éditeur “vim” Commands Variables Files vi TERM /etc/termcap /usr/share/vim/vim63/doc/starting.txt vim TERMCAP /etc/vim/vimrc /usr/share/vim/vim63/doc/usr_01.txt view EDITOR /usr/share/vim/vimrc /usr/share/vim/vim63/doc/tips.txt nvi /usr/share/vim/vim63/tutor/tutor.fr /usr/share/vim/vim63/doc/autocmd.txt :set /usr/share/vim/vim63/doc/intro.txt /usr/share/vim/vim63/doc/cmdline.txt /usr/share/vim/vim63/doc/help.txt /usr/share/vim/vim63/doc/editing.txt /usr/share/vim/vim63/doc/index.txt /usr/share/vim/vim63/doc/options.txt

Les exemples de vi whereis vi ls ­l /usr/bin/vi ls ­l /etc/alternatives/vi ls ­l /usr/bin/vim vi /[Bb]ox (recherche les motifs “Box” et “box”) 4x (suppression de 4 caractères après le curseur) 10gg (bouge le curseur à la dixième ligne) 8dd (efface 8 lignes) rx (remplace le caractère du curseur par la lettre “x”) dw (efface un mot à droite du curseur) 3dw (efface trois mots à droite du curseur) cw (efface un mot et passe en mode insertion pour changer un mot) d$ (efface du curseur à la fin de la ligne) cc (efface la ligne et passe en mode insertion pour changer une ligne) 5cc (efface 5 ligne et passe en mode insertion) “k5yy (enregistre 5 lignes à partir du curseur dans le registre “k”) “k5dd (coupe 5 lignes à partir du curseur et les enregistre dans le registre “k”) :1,10!grep motif (recherche dans les lignes 1 à 10 le motif, et conserve ces lignes) :3 (déplace le curseur à la troisième ligne) :3,6d (supprime les lignes comprises entre 3 et 6) :!echo $PATH (exécution dans le shell de la commande “echo”) :0,$s/pear/peach/ (remplacement de la ligne zéro à la fin du motif “pear” par “peach”) :.+2,$­3s/cat/dog/ (remplacement de la ligne courante +2 à la fin ­3 de “cat” par “dog”) :!/bin/bash (exécution du sous shell bash, puis retour à l'éditeur) :!pwd (exécution de la commande “pwd”, puis retour à l'éditeur) :set ts=4 (fixer la tabulation à 4 caractères) Ctrl+V (Visual Block mode for column selection & Escape)

Les services © Patrick Hautrive !;~) 2010 140 vi file.txt mC (Marque la position du curseur avec la lettre “C” pour indiquer un début de zone) j (Déplacement du curseur pour indiquer la fin de la zone à copier) y'C (Copie la zone délimitée par la marque “C” et le curseur dans le tampon courant) G (Déplacement du curseur en fin de fichier pour indiquer la ligne dessus le collage) p (Collage du tampon sur la ligne en dessous du curseur) u (Revenir avant le collage du tampon) :e! (Recharger le fichier original) :w f.txt (Enregistrement des modifications dans le fichier 'f.txt”)

Les services © Patrick Hautrive !;~) 2010 141 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 C­X correspond à Ctrl+X, et la notation M­X 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 Fonction Extension Navigation Numérotation Evaluation Programmation Édition Colorisation Expressions régulières Débogage Didacticiel Complétion Macro instruction Compilation Tutoriel Tampon circulaire Psychiatre

Les services © Patrick Hautrive !;~) 2010 142 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 ().

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 Editors Formators Office Suites Converters Formats more ed ex jed tr Open Office Org dvips ASCII less vi vim troff nroff groff Star Office db2pdf HTML SGML pg pine pico awk cut Kword recode XML XHTML xpdf acroread emacs zile Abiword dos2unix PDF DVI PS gedit Anyware Office unix2dos DOCBOOK Applixware flip Scribus Latex

Les services © Patrick Hautrive !;~) 2010 143 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 Viewer Format Converter Commands Screen ImageMagic ee eog xv xwud bmp convert gimp matrixview PerlMagic gthumb gif leaftoppm gimpr­remote webcollage GimpPlugins file identify jpeg 411toppm inkscape vidwhacker ScriptFu gamma4scanimage jpg anytopnm blender xscreensaver­getimage Povray scanimage png flag xcursorgen Giftools gnome­panel­screenshot tiff import xwd flipscreen3d jigsaw pcx montage glslideshow mirrorblob dib combine pdfimages thumbpdf tga identify display

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 © Patrick Hautrive !;~) 2010 144 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 ( readers) et les vidéos (videos players) Les Codecs sont des bibliothèques pour lire les encodages de certains formats (win32codecs)

Les services © Patrick Hautrive !;~) 2010 145 La configuration du son

Les fichiers sons Commands Encoders Formats Readers Server play sndconfig Wave (.) (.wmv) quark cplay musiclibrarian abcmidi Midi (.mid) xmms­kde mserv rec audiolink abc2ps Mpeg 2 (.mpg) xmms­ mserv­client vrec tagtool mp3splt Mpeg layer 3 (.) goodnight mpd playmidi gqmpeg mc­foo Mpeg 4 mpc randomplay gjay fapg Quictime totem ncmpc timidity sweep Gsm totem­xine gnump3d kmid streamripper sfront Divx totem­ vlc aumix juke puredata Mov gstreamer artsd xmix cheesetracker ­vorbis (.ogg) helix­player esd kmix ripperx grip Oggz­tools moosic music123 rezound gramofile Ogmtools mp3roaster mpeg123 mp3blaster s3mod ­tools kaffein digitaldj ogg123 mp3burn zinf alsaplayer darkice soundgrab mp32ogg mikmod audacity klog vlc mp3c madman somaplayer ncmpc gtick creox playmp3list sox gem jack ifp­line gdancer icecast­server beast tapiir moc icecast2 nyquist soundtracker synaesthesia ices2 solfege rosegarden cecilia wmix brahms noteedit quodlibet csound flac gnomoradio bookcase gmpc glurp

Les services © Patrick Hautrive !;~) 2010 146 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 © Patrick Hautrive !;~) 2010 147 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 © Patrick Hautrive !;~) 2010 148 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 samba­latest.tar.gz cd samba­version 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 © Patrick Hautrive !;~) 2010 149 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 mkdir /export/samba/logon [Global] chmod 770 /export/samba/logon workgroup = DOMAIN vi /etc/passwd security = user windows95$:*:680:100::/dev/null:/dev/null encrypted password = yes smbpasswd ­a ­m windwos95 smbpasswd file = /etc/smbpasswd E:\> net view \\server­samba domain logons = yes E:\> net use H:\\serveur­samba os level = 34 testparm local master = yes nmblookup DOMAIN prefered master = yes smbclient ­L serveur­samba domain master = yes smbclient //serveur­samba/file mypassword ­U pierre [Netlogon] smbclient //printserveur/imprimante ­P path = /export/samba/logon smb> print file.txt public = no smb> quit writeable = no browsable = no

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 © Patrick Hautrive !;~) 2010 150 Le fichier /etc/samba/smb.conf

Les lignes commençants par un point virgule (semi­colon) 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 © Patrick Hautrive !;~) 2010 151 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/panic­action %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 CD­ROM ;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 # auto­mount a shared CD­ROM 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 = 10000­20000 comment = Joe's Secrets Files ;idmap gid = 10000­20000 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 © Patrick Hautrive !;~) 2010 152 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 root /usr/local/samba/bin/swat swat swat stream tcp nowait.500 root /usr/sbin/tcpd /usr/sbin/swat killall ­HUP inetd firefox http://localhost:901

Les services © Patrick Hautrive !;~) 2010 153 L'administration de Samba avec Apache, Swat et CGI

L'administration de Samba avec Apache, Swat et CGI apt­get 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/cgi­bin vi /home/httpd/html/swat/.htaccess AuthName “Surveillance Swat” AuthType Basic AuthUserFile /etc/swat.users require valid­user htpasswd ­c /etc/swat­users root vi /etc/httpd/conf/access.conf AllowOverride AuthConfig apachectl restart /etc/rc.d/init.d/httpd restart firefox http://localhost/swat/cgi­bin/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 © Patrick Hautrive !;~) 2010 154 La configuration de Samba

La configuration de Samba (www.samba.org) Commands Files smbd smbcacls pdbedit /etc/smb.conf man 7 samba nmbd smbsh findsmb /etc/samba/smb.conf man 5 smb.conf smbclient smbtree net /usr/local/samba/lib/smb.conf man 8 net testparm smbtar swat /etc/printcap kernel (SMBFS) net smbspool winbindd /etc/pam.d/samba MANPATH testprns smbcontrol wbinfo /etc/samba/pw MANPATH_MAP smbstatus rpcclient editreg /etc/dhcp3/dhclient­enter­hooks.d/samba mksmbpasswd.sh nmblookup cupsaddsmb profile /usr/local/samba/docs/htmldocs/* smbpasswd log2pcap /usr/local/samba/man smbmount vfstest /usr/local/samba/bin smbumount ntlm_auth /usr/share/samba/panic­action smbmnt SWAT /var/log/samba/* smbcquotas /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 © Patrick Hautrive !;~) 2010 155 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 © Patrick Hautrive !;~) 2010 156 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 (.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 Files cvs import man cvs CVSROOT cvs commit CVSEDITOR cvs init CVS_RSH cvs release cvs update cvs checkout

Les services © Patrick Hautrive !;~) 2010 157 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 Network Options /home 192.168.1.2 (rw,root_squash) /home machine.domain.tld (rw) /pub (ro,insecure,root_squash) /projet *.domain.tld (rw) machine.domain.tld (ro) /projet/secret (no access) / 192.168.1.1/24 (rw,no_root_squash) /mnt/cdrom 192?168.1.9

La configuration de NFS

Les services © Patrick Hautrive !;~) 2010 158 La configuration de NFS Commands Files mount rpc rpc.nfsd /etc/fstab (NFS client) man nfs umount rpcinfo rpc.portmapper /etc/exports (NFS server) man exports exports rpcclient rpc.statd /etc/rpc man portmap nfslock rpcgen rpc.rquotad /var/lock/subsys/nfs nfsmount exportfs rpc.mountd /usr/sbin/pmap_dump portmap mountd insmod /etc/init.d/mountnfs.sh nfsstat nfsd modprobe /proc/filesystems showmount /etc/hosts.allow /etc/host.deny /etc/sysconfig/nfs

Un exemple de partage NFS

Un exemple de partage NFS NFS Server apt­get install portmap nfs­common nfs­kernel­server mkdir /nfs/shared vi /etc/exports /nfs/shared station(ro,root_squash) /usr/sbin/exportfs ­a /etc/init.d/nfsserver restart nfsstat NFS Client apt­get install portmap nfs­common nfs­user­server /etc/init.d/portmap start mkdir /home/shared vi /etc/fstab nfsserver:/nfs/shared /home/shared nfs rw 0 2 /etc/init.d/nfs restart mount ­t nfs nfsserver:/nfs/shared /home/shared ls /home/shared

Les services © Patrick Hautrive !;~) 2010 159 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 © Patrick Hautrive !;~) 2010 160 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 Maps /var/yp/ypbuild /var/yp/domainname /etc/passwd /etc/bootparam /etc/rpc makedbm /usr/local/etc/openldap/slapd.conf /etc/group /etc/netmasks /etc/services /etc/hosts /etc/protocols /etc/ypservers /etc/aliases /etc/netgroup /etc/publickey /etc/ethers

Les services © Patrick Hautrive !;~) 2010 161 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 © Patrick Hautrive !;~) 2010 162 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 Files Packages httpd ab /etc/httpd.conf /etc/init.d/apache apache apache webdruide /etc/httpd/httpd.conf /etc/rc5.d/S91apache apache­common apachectl slash /etc/httpd/conf/httpd.conf http_core.c apache2­utils apache­dbg axkit /etc/apache/httpd.conf mod_so.c libapr0 apachetop scannerlog /etc/apache/srm.conf (cgi) .htaccess Editors apache­modconf cronolog /etc/apache/php3.ini (acl) README.DSO MozillaComposer apacheconfig vlogger /etc/apache/access.conf man apache Open Office Org modules­config visitors /etc/apache/mime.types man uri Nvu htpasswd logresolve /etc/apache/magic /var/www/index.html Kompozer htpasswd2 rotatelogs /etc/apache/passwd /var/cache/apache Peacock check_forensic /etc/sysconfig/apache2 /var/log/message August /etc/logrotate.d/apache /var/log/httpd/* Amaya /usr/local/httpd/htdocs/* /var/log/apache Bluefish /usr/local/httpd/cgi­bin/* /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 © Patrick Hautrive !;~) 2010 163 Un exemple de script CGI

Un exemple de script CGI (Perl) vi /etc/http/conf/httpd.conf vi /home/httpd/cgi­bin.try.pl #!/usr/bin/perl print «La date et l'heure \n»; chmod +x /home/httpd/cgi­bin/try.pl lynx http://localhost/cgi­bin/try.pl

Le contrôle des accès

Le contrôle des accès au serveur Apache (.htpaccess) vi /etc/httpd/conf/httpd.conf Options FollowSymlinks AllowOveride none OptionsIndexesIncludes FollowSymlinks AllowOveride none #(all but with .htpaccess) Order allow, deny Allow from all AccessFileName .htpaccess vi /home/httpd/html/private/.htpaccess password,motdepasse htpasswd ­e /etc/httpd/conf/users joe

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/default­configs/*”.

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 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 © Patrick Hautrive !;~) 2010 164 Le fichier de configuration /etc/apache/httpd.conf ServerType standalone AccessFileName .htaccess AddLanguage en .en ServerRoot /etc/apache AddLanguage fr .fr LockFile /var/lock/apache.lock PidFile /var/run/apache.pid Order allow,deny ScoreBoardFile Deny from all LanguagePriority en da nl et fr de el it ja /var/run/apache.scoreboard pl pt pt­br lb ca es sv #ResourceConfig /etc/apache/srm.conf #AccessConfig /etc/apache/access.conf #CacheNegotiatedDocs Timeout 300 UseCanonicalName Off #AddType application/x­httpd­php .php KeepAlive On TypesConfig /etc/mime.types #AddType application/x­httpd­php­ MaxKeepAliveRequests 100 DefaultType text/plain source .phps KeepAliveTimeout 15 #DefaultType "application/octet­stream" AddType application/x­tar .tgz MinSpareServers 5 AddType image/bmp .bmp MaxSpareServers 10 #AddHandler cgi­script .cgi .sh .pl StartServers 5 MIMEMagicFile /usr/share/misc/file/magic.mime #AddHandler imap­file map MaxClients 150 #Default charset to iso­8859­1 (http://www.apache.org/info/css­security/). MaxRequestsPerChild 100 Off AddDefaultCharset on #Listen 3000 HostnameLookups /var/log/apache/error.log #MetaDir .web #Listen 12.34.56.78:80 ErrorLog warn #MetaSuffix .meta #BindAddress * LogLevel "%{Referer}i ­> %U" referer #ErrorDocument 500 "The server down” Include /etc/apache/modules.conf LogFormat LogFormat "%{User­agent}i" agent #ErrorDocument 404 /missing.html #CustomLog /var/log/apache/referer.log referer #ErrorDocument 404 /cgi­ ExtendedStatus On #CustomLog /var/log/apache/agent.log agent bin/missing_handler.pl #ErrorDocument 402 http://server.tld/subscription_info.html Port 80 EnableExceptionHook On BrowserMatch "Mozilla/2" nokeepalive User www­data #BacktraceLog /var/log/apache/backtrace.log BrowserMatch "MSIE 4\.0b2;" Group www­data nokeepalive downgrade­1.0 force­response­ 1.0 ServerAdmin webmaster@localhost #ServerName http://123.45.67.89/ EnableExceptionHook On #ServerName new.host.name #WhatKilledUsLog # ServerName localhost /var/log/apache/whatkilledus.log #Order deny,allow DocumentRoot /var/www #Deny from all #Allow from .your_domain.com ServerSignature On # Options SymLinksIfOwnerMatch #ServerTokens Full #ProxyVia On AllowOverride None #Alias fakename realname #CacheRoot "/var/cache/apache" Alias /icons/ /usr/share/apache/icons/ #CacheSize 5 # 4 Alias /images/ /usr/share/images/ CacheGcInterval # 24 Options Indexes Includes ScriptAlias /cgi­bin/ /usr/lib/cgi­bin/ CacheMaxExpire FollowSymLinks MultiViews IndexOptions FancyIndexing NameWidth=* #CacheLastModifiedFactor 0.1 AllowOverride None DefaultIcon /icons/unknown.gif #CacheDefaultExpire 1 Order allow,deny #AddDescription "GZIP compressed" .gz #NoCache one.tld two.tld three.tld Allow from all #AddDescription "tar archive" .tar #ReadmeName README.txt #HeaderName HEADER.txt #NameVirtualHost 12.34.56.78:80 IndexIgnore .??* *~ *# HEADER.html #NameVirtualHost 12.34.56.78 DirectoryIndex index.html index.htm HEADER.txt RCS CVS *,v *,t # index.shtml index.cgi index.php #IndexIgnore README.* # AddEncoding x­compress Z Include /etc/apache/conf.d AddEncoding x­gzip gz tgz

Les services © Patrick Hautrive !;~) 2010 165 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 Pages personnelles publiques (Public_html → /home/joe/public_html → http://localhost/~joe) DocumentRoot 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)

Les services © Patrick Hautrive !;~) 2010 166 Installation d'un site local

Installation d'un site Apache en local Vi /home/httpd/html/index.html Site Apache Try Apache and have fun !;­) 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 DocumentRoot /www/site1 ServerName www.site1.org

NameVirtualHost 172.16.0.2 DocumentRoot /www/site2 ServerName www.site 2 .org

DocumentRoot /www/site3 ServerName www.site 3 .org

Les services © Patrick Hautrive !;~) 2010 167 Les exemples pour Apache rpm ­qa | grep apache rpm ­e apache­1.3.6­7 ls /mntcdrom/RedHat/RPMS rpm ­ivh apache­*.rpm apt­get install apache apt­get install libapache­mod­php4 apt­get remove apache apachectl configtest vi /etc/apache/httpd.conf AddType application/x­httpd­php .php AddType application/x­httpd­php­source .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.conf­dist /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 public­html vi /etc/httpd/srm.conf DocumentRoot /urs/local/apache/htdocs ScriptAlias /cgi­bin/ /usr/local/apache/cgi­bin/ /usr/sbin/apache­modconf apache ls /home/httpd/html/index.html ls /home/httpd/cgi­bin/; ls /home/httpd/icons/

Les services © Patrick Hautrive !;~) 2010 168 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 © Patrick Hautrive !;~) 2010 169 à 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 celui­ci relève son courrier avec son logiciel de messagerie (mailer).

Les services © Patrick Hautrive !;~) 2010 170 La configuration de la messagerie

La configuration de la messagerie électronique Protocols Commands Servers Files Clients POP 3 bogolexer mutt_dotlock smtp (port 25) /etc/services nn IMAP 4 countmail newaliases pop (port 110) /etc/aliases trn SMTP compose pickup imap2 (port 143) /etc/aliases.db tin NNTP edit popclient imap3 (port 220) /etc/mailcapopos elm UUCP error postdrop procmail (port 110) /etc/mailcap.order mail TCP/IP formail postlock fetchmail /etc/mailname mailx from print sendmail /etc/mail.rc kmail kmailservice procmailex postfix ~/.muttrc mutt ksendbugmail procmailrc cc:mail ~/.signature emacs local procmailsc majordomo /etc/sendmail.cf biff mailaddr rmail listserv /etc/sendmail.hf evolution mailmail run­mailcap listpro /var/log/sendmail.st mozilla mailq see innd nnrpd /var/spool/mqueue/* mailstat showq collabra /var/run/sendmail.pid mbox virtual diablo /etc/sysconfig/mail mcmfmt xbiff leafnode Spamassassin

Les entêtes de messages

Les entêtes de messages TO: Destinataire FROM: Expéditeur CC: Carbon Copy BCC: Blind Carbon Copy SUBJECT: Sujet du message MESSAGE: Corps du message JOIN: Pièces jointes au message

Les exemples pour la messagerie mail [email protected] < todo.txt /usr/lib/sendmail ­bd ­q 30m

Les services © Patrick Hautrive !;~) 2010 171 POSTFIX

Le serveur de Postfix

Le serveur Postfix utilise les bibliothèques DB3­Devel. 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 “apt­cache search postfix” recherche dans les packages Debian le motif “postfix”. La commande “apt­cache show postfix” montre la description du package Debian nommé “postfix”.

La configuration de Postfix

La configuration du serveur de messagerie Postfix Commands Files locate postfix ldap_table postlock sendmail /etc/aliases apropos postfix lmtp postlog showq /etc/postfix/main.cf man postfix local postmap smtp /etc/postfix/master.cf access mailq postqueue smtpd /etc/postfix/postfix­script aliases master postsuper spawn /etc/postfix/postfix­files body_checks mysql_table proxymap tlsmgr /etc/postfix/post­install bounce newaliases qmgr trace /etc/postfix/dynamicmaps.cf canonical oqmgr qmqpd transport /etc/postfix/sasl/* cidr_table pcre_table qshape trivial­rewrite /etc/sysconfig/postfix cleanup pgsql_table regexp_table verify /var/spool/mail/$USER defer pickup relocated virtual /var/spool/postfix/* error pipe smtp­sink /var/spool/maillog flush postalias smtp­source /var/spool/mailq header_checks postcat /usr/lib/postfix/* postconf postdrop postfix postkick

Les services © Patrick Hautrive !;~) 2010 172 Les exemple s pour Postfix rpm ­qa | grep bd3 rpm ­i db3­devel 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 © Patrick Hautrive !;~) 2010 173 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 (front­end).

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 © Patrick Hautrive !;~) 2010 174 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 celles­ci 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 celles­ci 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ù celle­ci 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 celles­ci 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 © Patrick Hautrive !;~) 2010 175 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 celles­ci 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 © Patrick Hautrive !;~) 2010 176 ê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 (user­define) 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 © Patrick Hautrive !;~) 2010 177 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 © Patrick Hautrive !;~) 2010 178 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 services © Patrick Hautrive !;~) 2010 179 Les chaines de translation

Les chaines pour la translation d'adresse sont consultées uniquement lors de la création d'une nouvelle 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

Les services © Patrick Hautrive !;~) 2010 180 (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), 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

Les services © Patrick Hautrive !;~) 2010 181 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 (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/iptables­tutorial/iptables­tutorial.html http://ornellas.apanela.com/dokuwiki/pub:firewall_and_adv_routing http://web.mit.edu/rhel­doc/4/RH­DOCS/rhel­rg­en­4/ch­iptables.html http://artoflinux.blogspot.com/2008/07/iptables­tutorial­for­beginners.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 © Patrick Hautrive !;~) 2010 182 Tables Rules & Parameters Matches Ext. Rules Target Extensions ­­table ! (negation operator) ­m (­­match) BALANCE filter (default) ­p (tcp,udp,icmp,mac) ­m tcp (port range#:#) CLASSIFY nat (address translation) ­h (hide) ­­source­port CLUSTERIP mangle (QOS, tuning) ­i (input:eth0, eth+) ­­destination­port CONNMARK raw (optimize patch) ­o (output:eth0,eth+) ­­tcp­flags DNAT (postrouting) Operations ­s (@ip source) ­m limit (with ­­limit) ­­to­destination ­s (@ip/255.255.255.0) ­m limit ­­limit (rate log) DSCP ­A (append to end) ­s (@ip/24) (maskbits) ­m limit ­­limit­burst ECN ­C (check) ­d (@ip destination) ­m state (­­state) ­­ecn­tcp­remove ­D (delete) ­j (jump) NEW LOG ­I (insert) To target ESTABLISHED ­­log­prefix ­F (flush all rules) To user chain RELATED ­­log­level ­R (replace) ­b (bidirectionnal) INVALID ­­log­tcp­sequence ­L (list) ­c (set packet counter) ­m conntrack ­­log­tcp­options ­P (default policy) ­n (@ip in numérical) ­­ctstate (conntrack mod) ­­log­ip­options ­Z (counter at zero) ­f (fragmented packets) SNAT & DNAT MARK (Iproute2) ­N (new uchain) ­v (verbose) ­­ctproto ­­set­mark ­E (rename uchain) ­x (exact value counters) ­­ctorigsrc MASQUERADE ­X (delete uchain) ­­line­numbers ­­ctorigdst ­­to­ports ­M ­S (masquerade) ­­modprobe=command ­­ctreplsrc MIRROR ­M ­L (list nat) ­­tcp­option ­­ctrepldst NETMAP ­h (help) ­­source­port (tcp udp) ­­ctstatus NOTRACK ­­delete­chain ­­destination­port (tcp udp) ­­ctexpire REDIRECT ­­tcp­flags ­­dscp (dscp mod) ­­to­ports Chains SYN ACK FIN RST ­­dscp­class REJECT POSTROUTING (­o) URG PSH ALL ­­pkt­type (pkttype mod) ­­reject­with INPUT (­i) NONE ­­tos (typeofservice mod) ROUTE FORWARD (­i ­o) ­­syn (SYN packets) ­­ahspi (IPsec mod) SNAT (prerouting) OUTPUT (­o) ­­mss ­­espspi (Ipsec mod) ­­to­source PREROUTING (­i) ­­icmp­type ­­length (length mod) TCPMSS user­define ­­mac­source ­­ttl (time to live mod) ­­set­mss ­­source­ports unclean ­­clamp­mss­to­pmtu ­­destination­ports ­sport (source port num) TOS ­­ports ­dport (dest. port num) ­­set­tos ­­mark ­­ports TRACE ­­uid­owner Targets Builtin TTL ­­gid­owner ULOG (user space) ACCEPT ­­pid­owner ­­ulog­nlgroup DROP (ipchains DENY) ­­sid­owner ­­ulog­prefix REJECT (error message) ­­cmd­owner ­­ulog­cprange QUEUE (user space) ­­ulog­qthreshold RETURN (default policy)

Les services © Patrick Hautrive !;~) 2010 183 La configuration pour iptables

La configuration du pare feu iptables (Netfilter) (man iptables) Commands Tools Scripts Files Modules /sbin/iptables acidlab netscript­2.4 /etc/protocols iptables_nat /sbin/iptables arptables uif /etc/services ip_conntrack iptables­restore netstat­nat guarddog /etc/default/iptables ip­conntrack_ftp iptables­save specter guidedog /etc/sysconfig/iptables iptables­dev ip6tables psad kmyfirewall /usr/share/doc/iptables/* iptstate ip6tables­save reaim knetfilter /lib/iptables/* ipac­ng ip6tables­restore openvpn lokkit /proc/net/ip_tables_matches chkconfig firehol gnome­lokkit /proc/net/ip_tables_names fwanalog ferm /proc/net/ip_tables_targets fwlogwatch filtergen fiaif fireflier­server shorewall fireflier­client­gtk ebtables fireflier­client­kde ulogd fireflier­client­qt NARC webmin­firewall EasyFW Webmin GUFW

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 © Patrick Hautrive !;~) 2010 184 # ­­­ 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 ­­reject­with icmp­port­unreachable $IPT ­A INPUT ­p tcp ­­dport 1080 ­j REJECT ­­reject­with icmp­port­unreachable

# responding to ping echo request !!! $IPT ­A INPUT ­p icmp ­­icmp­type echo­request ­j ACCEPT

# outside world :­) allow everything if our server or net established connection

Les services © Patrick Hautrive !;~) 2010 185 $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 ­­destination­port $TCP_INCOMING $IPT ­A INPUT ­p udp ­i $INET ­s 0/0 ­j ACCEPT ­m state ­­state NEW ­m multiport ­­destination­port $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 ­­to­port 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 © Patrick Hautrive !;~) 2010 186 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/iptables­save > /etc/sysconfig/iptables.rules /sbin/iptables­restore < /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 ip­conntrack_ftp echo 1 > /proc/sys/net/ipv4/ip_forward /sbin/services iptables save (Red Hat) /etc/sysconfig/Susefirewall (Suse) /etc/sysconfig/scripts/Suse/firewall2­custom (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 iptables ­A INPUT ­i lo ­j ACCEPT

Les services © Patrick Hautrive !;~) 2010 187 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 © Patrick Hautrive !;~) 2010 188 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 apt­get install mysql­server mysql­client php4­mysql 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 © Patrick Hautrive !;~) 2010 189 La configuration de Mysql

La configuration de Mysql (man mysql) Commands Tools Files Packages mysql acidlab­mysql sqlrelay /etc/init.d/mysql mysql­server mysqld mysql_install_db sql­editor /etc/rc5.d/S20mysql mysql­client mysqladmin safe_mysql pike7 /etc/rc6.d/K20mysql php4­mysql mysqltcl mysql­admin mtop /etc/mysql/my.cnf phpmyadmin msql2mysql mysql­navigator mytop /etc/my.cnf myisamchk mysql­query­browser dbengine /etc/mysql/debian­start myisamlog my_print_defaults eskuel /etc/mysql/debian.cnf myisampack mysql_convert_table_format tora /etc/logrotate.d/* mysqlaccess mysql_explain_log webmin /etc/logcheck/* mysqlbinlog mysql_find_rows /etc/mysql/debian­log­ mysqlbug mysql_fix_extensions rotate.conf mysqlcheck mysql_fix_privilege_tables /var/lib/mysql/mysql mysqldump mysql_install_db /var/lib/mysql/test mysqldumpslow mysql_secure_installation /var/cache/mysql mysqlerr mysql_setpermission /var/run/mysqld mysqlhotcopy mysql_table /usr/share/doc/* mysqlimport mysql_tableinfo /usr/share/mysql/* mysqlmanager mysql_waitpid /usr/share/mysql/french/* mysqlmanagerc mysql_zap /usr/share/mysql/charsets/* mysqlshow mysqld_multi mysqltest mysqld_safe dbf2mysql mysqlmanager­pwgen perror pack_isam replace resolve_stack_dump resolveip

Les commandes SQL

Les commandes SQL (Structured Query Language) SELECT SET DATABASES INSERT FLUSH TABLES UPDATE GRANT STATUS DELETE SHOW COLUMNS DROP INDEX USE

Les exemples pour Mysql

Les services © Patrick Hautrive !;~) 2010 190 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 © Patrick Hautrive !;~) 2010 191 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 php­4.1.1.tar.gz cd php­4 .configure –with­mysql=/usr/lib/mysql make ; make install vi /etc/httpd/httpd.conf LoadModule php4­module libexec /libphp4.so AddModule mod_php4.c AddType application/x­httpd­php .php apachectl restart vi info.php cp info.php /usr/local/httpd/htdocs/ chmod 777 /usr/local/httpd/htdocs/info.php firefox http://localhost/info.php

Les exemples pour PHP vi exemple.php apt­get install php5

Les exemples de variables pour PHP

$num = 5; $alpha = “Yes or No”; $string = “Message”;

Les services © Patrick Hautrive !;~) 2010 192 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 © Patrick Hautrive !;~) 2010 193 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 (e­commerce), des sites de réseaux sociaux (social), de sites de collaboratifs (groupware), des sites d'apprentissage (e­learning), 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 © Patrick Hautrive !;~) 2010 194 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, PHP­Nuke, 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 (php5­mysql) et de management des scripts (phpmyadmin), et l'application CMS (phpwebsite1.7), le navigateur (firefox11.3).

Les services © Patrick Hautrive !;~) 2010 195 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 bien­sû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 © Patrick Hautrive !;~) 2010 196 L'installation d'un CMS (phpwebsite) Phases Commands Users 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 ; apt­get update apt­cache show apache | less ; apt­cache search mysql apt­get install openssh­server apache2 mysql­server­5.0 mysql­client apt­get install php5­mysql phpmysql php5 php­gd CMS 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 cd phpwebsite ; less /home/website/phpwebsite/README less /home/website/phpwebsite/docs/INSTALL Apache vim /etc/apache2/apache2.conf ; groupmod ­A www­data web staff /home/website vim /etc/apache2/sites­enabled/000­default mv /var/www/apache2­default/* /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 © Patrick Hautrive !;~) 2010 197 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 (wu­ftpd) peut s'effectuer à distance via les modules de l'interface de Webmin. Le serveur wu­ftpd 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 © Patrick Hautrive !;~) 2010 198 La configuration pour FTP

La configuration pour FTP (File Transfert Protocol) (man ftp) Commands (ftp> help) Servers Files ? debug mdir put sendport ftpd Pure­ftpd $HOME/.netrc ! dir mget pwd site ftpd­ssl ftp­proxy /etc/alternatives/ftp $ disconnect mkdir qc size vsftpd muddleftpd /etc/lftp.conf account exit mls quit status wu­ftpd ftp­upload /usr/include/arpa/ftp.h append form mode quote struct ws­ftp ftpwatch /lib/security/pam_ftp.so ascii get modtime recv sunique wzdftpd frox /usr/lib/apt/methods/ftp bell glob mput reget system proftpd config­manager /usr/share/doc/ftp/* binary hash newer rhelp tenex pyftpd krb5­ftpd /usr/share/vim/vim63/ftplugin/* bye help nlist rstatus tick jftpgw inetutils­ftpd man netrc case idle nmap rename trace ftpgrab twoftpd /etc/inetd.conf cd image ntrans reset type atftpd ftpmirror /etc/services cdup lcd open restart umask oftpd fmirror chmod ls passive rmdir user tftpd mirror close macdef prompt runique verbose cr mdelete proxy send delete Clients ftp wget cftp lftp zftp gopher filerunner lukemftp sftp wput ncftp pftp atftp rssh dpkg­ftp netkit­ftp gftp lftpget ncftp2 tftp debmirror weex ftp­ssl kbear curl yafc putty­tools pavuk sitecopy lurkftp xsitecopy aria scponly

Les services © Patrick Hautrive !;~) 2010 199 Les exemples pour FTP vi /etc/inetd.conf ftp stream tcp nowait root /usr/sbin/ftpd ftpd ­lio vi /etc/services wuftp 3010/tcp wu­ftpd wuftp­data 3009/tcp wu­ftpd /bin/chconfig ftp ftp://[email protected] ftp://ftp.lip6.fr ftp://ftp.univ­lille1.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

Les services © Patrick Hautrive !;~) 2010 200 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 ( 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 © Patrick Hautrive !;~) 2010 201 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 () à deux ou à plusieurs (visio conference).

La configuration pour IRC

La configuration des conversations IRC (Inter Relay Chat) (port 6667) (man irc) Protocols Networks Bots Clients Files Irc .org supybot ntalk scrollz /etc/alternatives/irc Jabber .net plum irc2 pork /usr/share/irssi/help/ Msn irchelp.org rbot riece /usr/lib/gaim/libirc.so Aim jabber.org gruftistats epic4 liece /etc/irssi.conf Yahoo linuxpower.org muh jabber lostirc ~/.irssi/config GaduGadu .com madoka gaim ICQ .co.uk fisg cwirc .org dircproxy psi cgiirc dal.net ­ircd tinyirc htdig.org ctrlproxy ksirc tirc siegfried.org sirc hummingbird.com ircd­irc2 ircd­ircu ircd­hybrid xchat hybserv Licq irssi iroffer tkirc iacd zenirc bobot++ zircon

Les commandes IRC

/help intro /help newuser /help server /msg nicname Message

Les services © Patrick Hautrive !;~) 2010 202 /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 icq­name

Les services © Patrick Hautrive !;~) 2010 203 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 © Patrick Hautrive !;~) 2010 204 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 «ssh­keygen» 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 SSH Tools Files telnet ssh autossh scanssh secvpn /etc/ssh/sshd_config rlogin scp gnome­keyring ssh­add sshfs /etc/ssh/ssh_config rcp sshd dsniff ssh­agent rssh /etc/ssh/moduli rsh rsync dirvish ssh­argv0 dpsyco­ssh /etc/alternatives/ssh­askpass putty rdist secpanel ssh­askpass dropbear /usr/share/doc/openssh­client/* slogin scponly ssh­copy­id clusterssh /usr/share/services/ssh.protocol sdm ssh­krb5 ssh­keygen ~/.rhost putty kdessh ssh­keyscan $HOME/.ssh/known_hosts fsh keychain ssh­keysign $HOME/.ssh/identity zssh hsftp openssh­client $HOME/.ssh/identity.pub openssh­server /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 © Patrick Hautrive !;~) 2010 205 scp file­here [email protected]:/home/user/file­there scp [email protected]:/home/user/file­there file­here mkdir $HOME/.ssh ssh­keygen ­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 © Patrick Hautrive !;~) 2010 206 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'est­il 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 Author Editor L'éthique des hackers et l'esprit de l'ère de l'information Pekka Himanen Just for fun Linus Torvalds La tribune libre : Les ténors de l'informatique libre Recueil de texte Oreilly.fr Le livret du libre Recueil de texte Free as freedom Richard M. Stallman La cathédrale et le bazar Eric S. Raymond Le chaudron magique Eric S. Raymond Cyber Lexis (le jargon) Eric S. Raymond Une brève histoire des hackers Eric S. Raymond Comment devenir un hacker Eric S. Raymond Noosphere Eric S. Raymond Unix & internet Howto Eric S. Raymond Le grand livre des robots Isaac Asimov History of unix, linux and open source David A. Wheeler History of Linux Ragib Hasan The heoric hacker Eric Brunvand The haloween document Ghost in the shell Mamoun Oshii The hitchhicker's guide to the galaxy Douglas Adams

Les services © Patrick Hautrive !;~) 2010 207 La bibliographie technique

La bibliographie technique Title Author Editor Formation Debian Gnu Linux Alexy Delattre Linux Administration Bouchaudy Eyrolles Unix pas de panique Cyrille Dunant, Emmanuel Eckard Le système Linux Welsh Oreilly Linux in a nutshell Oreilly Les bases de l'administration système Aeleen Frish Oreilly Advanced linux programming Mark Mitchell Maximun linux security

Les services © Patrick Hautrive !;~) 2010 208 Patrick Hautrive http://hautrive.free.fr

Les services © Patrick Hautrive !;~) 2010 209