Introduction à Linux : chapitre 1 Linux : Présentation Linux : un hobby devenu un système d'exploitation professionnel ● Retour en août 1991... un étudiant finlandais envoie un message sur comp.os.minix commençant par ces quelques mots : Hello everybody out there using minix I'm doing a (free) operating system (just a hobby, won't be big and professional like gnu) for 386 (486) AT clones. ● Cet étudiant est Linus Torvalds, et le hobby dont il parle est devenu ce que nous connaissons aujourd'hui... Linux. Linux : un système d'exploitation professionnel ● ● ● A l'origine un projet d'étudiant, Linux est maintenant un système d'exploitation mûr pour l'industrie, qui fait partie intégrante de la stratégie système et réseaux de nombres d'entreprises Fait aussi partie de la stratégie de développement de grands noms tels que Oracle, Sun, IBM, HP, Intel : Linux bénéficie d'une réelle reconnaissance par les plus grands. Linux rivalise avec les systèmes d'exploitations traditionnels, c'est pourquoi il devient inévitable Linux : ses atouts Linux intéresse principalement pour les avantages suivants : ● ● ● Stabilité et robustesse Excellente qualité de service : pas « de plantage surprise » ni d'instabilité, grâce à une gestion efficaces des processus Performances, rendement et adaptabilité Peu gourmand en ressources, même en mode multi-utilisateurs. Exploitable sur machines de configuration modeste ou obsolète, tout en restant à jour, mais aussi sur multiprocesseurs, clusters, et mainframes Coût réduit Le noyau Linux et la plupart des modules étant gratuit, chacun peut construire une version adaptée à ses besoins. Cependant, des distributions, gratuites ou payantes, sont disponibles sur Internet (Red Hat, Fedora, Mandrake, SuSESlackware, Debian, etc.) Linux : ses atouts (suite) Linux présente d'autres avantages : ● Assistance ● Libre et Ouvert : code source disponible et modifiable ● Portable : disponible sur de nombreux types de systèmes ● Conforme aux normes et standards ● Très proche des autres Unix ● Nombreux logiciels interopérables, souples et extensibles ● X Window ● Dynamique industrielle ● Bénéficie à tous les utilisateurs ● Migration facilitée par émulateurs et portage d'applications Linux : applications ● ● ● ● ● Station de développement La plupart des langages disponibles : ADA95, C, C++, Fortran, Java, Cobol, LISP, Prolog, SmallTalk, Delphi (Kylix) + outils de développement perfectionnés : contrôle des sources, travail en groupe (groupware), suivi des erreurs, validation et vérification Station bureautique Suites bureautiques de qualité professionnelle (Open Office) couplées aux environnements graphiques évolués tels KDE ou Gnome : traitement de texte, tableur, logiciel de présentation et de dessin, gestion de fichiers, partage de documents, etc. Station réseau Palette complète d'outils réseau : navigateur, courrier électronique, agenda (IBM Lotus), FTP, messagerie instantanée, IRC, newsgroups, et outils professionnels : ping, traceroute, analyseur de protocoles, etc. Station graphique ou PAO Centre multimédia Linux : applications (suite) ● ● ● ● Serveur de fichiers et d'impression Support des trois principaux protocoles de partages de fichiers: NFS (UNIX), SMB (Windows), AppleShare (MacOS) et protocoles de partages d'imprimantes. Egalement serveur de fax. Serveur Réseau puissant Serveur Web (Apache) avec support de PHP, MySQL, etc., serveur FTP, newsgroups, courrier électronique, DNS Puissant firewall (iptables), routage (RIP, IGRP, OSPF, BGP4, etc.), proxy NAT Serveur d'applications client/serveur SGBD relationnels, relationnels-objets ou objets, commerciaux (Oracle 9i, IBM DB2) ou libres (mySQL, PostgreSQL), serveurs d'applications JAVA Admnistration IBM Tivoli, IBM Websphere, BEA Weblogic Linux : présentation ● ● Linux est un système d'exploitation libre de type UNIX développé par le finlandais Linus Torvalds. Le noyau de Linux, le « kernel », le coeur du système, est développé sous licence GNU ● ● ● La licence GNU spécifie que le code source est disponible à quiconque, mais que sa version originale appartient à son auteur. Autour de ce noyau s'articulent des modules, les composants du systèmes qui permettent d'interfacer le noyau avec les périphériques Le Shell est l'interface utilisateur en mode texte Le système X Window est un environnement graphique, au dessus duquel une surcouche logicielle peut être implémentée, permettant d'étendre les fonctions de X Window : par ex. KDE ou Gnome Linux : présentation (suite) ● Il existe de nombreuses applications pour Linux ● ● La compilation de diverses applications, du noyau, des environnements graphiques, donne lieu à des distributions, généralement fournies avec une interface d'installation du système et des outils d'administration Il existe nombre de distributions, gratuites ou payantes ● Gratuites ou payantes, libres ou protégées RedHat et sa version gratuite Fedora, Mandrake, SuSE, Debian, Slackware, Et une foule de distributions moins connues adaptées à certains besoins Exemple : Knoppix, une version démarrable à partir d'un CDROM Xbox Linux, transforme une console Xbox en système Linux FraizeWall, qui offre une passerelle/firewall préconfigurés etc. Linux : l'avenir Dernier noyau disponible : 2.6 ● ● ● ● ● Adapté aussi bien aux mainframes, qu'aux stations de travail et microcontrôleurs embarqués Optimisation pour serveurs à 32 processeurs, support des architectures Numa (Non Uniform Memory Access) Derniers processeurs supportés 4 milliards d'utilisateurs connectés, 1 milliard de processus possibles Architecture UCLinux dédiée aux systèmes embarqués Linux : présentation NOTES Introduction à Linux : chapitre 2 Linux en détail Etapes de démarrage ● ● ● ● ● ● ● ● Le BIOS vérifie le système (POST) Bootloader 1 lancé à partir du MBR du disque dur principal Le Boot1oader 1 lance le bootloader 2 sur la partition /boot/ Le Bootloader 2 charge le noyau Linux (kernel) et initrd en mémoire Le noyau charge les modules nécessaires (initrd) et monte la partition root en lecture seulement Le noyau passe le contrôle du processus de démarrage au programme /sbin/init. /sbin/init : chargement des services et outils de l'espace utilisateur, montage des partitions répertoriées dans /etc/fstab. Invite de connexion de l'utilisateur Bootloader : chargeur de démarrage MBR : Master Boot Record Etapes de démarrage : BIOS ● Au démarrage, exécution du BIOS (Basic Input/Output System) stocké en ROM (mémoire morte) Test du système, recherche et vérification des périphériques, principalement périphérique d'amorçage du système (disquette, CDROM, ou disque dur) Recherche du MBR sur le périphérique d'amorçage ● MBR (Master Boot Record) : secteur de 512 octets, contient le bootloader, ainsi que la table de partition du disque. Chargement et exécution du Bootloader, suite d'instructions de démarrage du système d'exploitation sur le périphérique. Etapes de démarrage : chargeur de démarrage ● Les deux chargeurs de démarrage les plus connus : GRUB ou LILO ● Exécution divisée en deux étapes : ● ● le BIOS exécute un binaire de taille réduite stocké dans le MBR ce 1er chargeur localise et exécute un 2è chargeur stocké à l'endroit indiqué dans la configuration (disque dur par ex.) LILO : configuration succinte stockée dans le MBR. A chaque changement de configuration, une écriture dans le MBR doit être faite (/sbin/lilo -v -v) GRUB : chargeur plus récent, lecture possible de la configuration sur partition ext2 ou ext3 dans /boot/grub/grub.conf Etapes de démarrage : chargeur de démarrage ● ● ● ● ● Affichage de l'écran de sélection des système d'exploitation ou des différents noyaux Linux. Une séléction automatique d'un choix par défaut est effectué au bout d'un laps de temps configurable. En fonction du choix, exécution d'un binaire de noyau Linux stocké dans /boot/ ; nom de type vmlinuz-<version-noyau> (où <version-noyau> correspond à la version du noyau spécifiée dans les paramètres du chargeur de démarrage) chargement en mémoire de initrd, "image disque RAM initial" : utilisé ensuite par le noyau pour charger des pilotes utiles au système (par ex. pour disque SCSI) Avertissement : Supprimer le répertoire /initrd/ provoquerait un échec de votre système, avec un message d'erreur panique au moment du démarrage. Le processus de démarrage est cédé au noyau (kernel) Etapes de démarrage : noyau ● ● Le noyau initialise et configure la mémoire, les processeurs, le système E/S, les périphériques de stockage, "standards" Le noyau utilise ensuite initrd pour charger des pilotes et modules spécifiques (principalement SCSI, RAID, USB) nécessaires au noyau pour accéder au système de fichier réel et continuer le démarrage ● Le fichier /boot/initrd.img est chargé en mémoire comme un périphérique de stockage virtuel RAMDisk (par ex. /dev/ram0) Ce disque virtuel RAMDisk est ensuite monté en tant que racine temporaire du système de fichiers (/). Les pilotes et modules mentionnés plus haut sont maintenant chargés par le noyau. initrd est démonté en tant que racine et la racine définitive est montée. À ce stade, le noyau est chargé en mémoire et est désormais opérationnel. Il faut maintenant initialiser l'environnement utilisateur. Etapes de démarrage : init ● ● ● ● Le programme /sbin/init finalise le processus de démarrage. Il est guidé par le fichier /etc/inittab qui décrit l'ensemble des processus qui sont lancés en fonction des circonstances : principalement à l'initialisation du système, lorsque le système passe à un niveau d'exécution différent (runlevel), lorsque les touches CTRL-ALTDEL sont pressées, etc. Suivant le runlevel, les processus lancés sont divers : gestionnaire de son, serveur de mail, web, scheduler de tâches (crond), etc. /sbin/init devient parent ou grand-parent de tous les processus qui sont lancés. init tourne tout le temps. Si init meure, tous les processus meurent. Etapes de démarrage : init (suite) ● ● /etc/inittab lance d'abord le script /etc/rc.d/rc.sysinit si::sysinit:/etc/rc.d/rc.sysinit rc.sysinit réalise les opérations d'initialisation du système : initialise la variable PATH pour les autres scripts active la partition de swap monte les partitions de disque dur suivant /etc/fstab initialise le nom du système (hostname) vérifie l'intégrité du système de fichiers démarre la gestion des quotas initialise le "Plug and Play" prépare la gestion des modules initialise l'horloge système détruit les fichiers de verrouillage Etapes de démarrage : init (suite) ● ● init lance ensuite divers processus en fonction du niveau d'exécution (runlevel) configuré dans inittab Le runlevel est le contexte dans lequel se trouve le système et qui va induire l'arrêt ou le démarrage de processus. On distingue 7 runlevels différents : ● 0 - Arrêt du système (Halt) 1 - Mode mono-utilisateur 2 - Mode multi-utilisateurs (sans NFS) 3 - Mode Multi-utilisateurs 4 – Non utilisé 5 - Mode Multi-utilisateurs avec login graphique 6 – Redémarrage du système (Reboot) Le runlevel peut changer pendant la vie du système. init effectue alors les opérations correspondantes Etapes de démarrage : init (suite) ● ● ● ● En fonction du runlevel, innitab indique à init de démarrer les processus dont les scripts de démarrage se trouvent dans le répertoire correspondant au runlevel Par ex : pour runlevel 5, /etc/rc.d/rc5.d/ En réalité, ces scripts sont des liens symboliques vers des scripts existants dans le répertoire /etc/rc.d/init.d/. On peut ainsi modifier le lien (ajouter, supprimer, renommer) sans affecter le script auquel il fait référence Le nom de ces liens symboliques décrit si les processus doivent être démarrés (S, Started) ou arrêtés (K, Killed), et dans quel ordre (le nombre suivant la 1ère lettre du nom) Par ex : dans /etc/rc.d/rc5.d/ on trouve les scripts S10network et S55sshd S10network indique que toutes les opérations relatives au démarrage du réseau sont effectuées avant de démarrer le serveur de connexion sécurisée sshd Etapes de démarrage : init (suite) ● ● ● ● init arrête tout d'abord tous les liens symboliques K du répertoire en émettant la commande /etc/rc.d/init.d/<commande> stop, <commande> correspondant au processus à arrêter Elle démarre ensuite tous les liens symboliques S : /etc/rc.d/init.d/<commande> start Par ex : le lien S55xinetd lancera la commande /etc/rc.d/init.d/xinetd start Remarque : on peut utiliser ces mêmes scripts en tant que superutilisateur (root) pour démarrer ou arrêter des services Par ex : /etc/rc.d/init.d/httpd stop arrêtera le serveur Web Apache Pour les runlevels 2 à 5, le script local (S99local) pointant vers /etc/rc.d/rc.local est le dernier à être exécuté. Ce script permet de lancer des commandes de personnalisation du système. Etapes de démarrage : init (suite) ● Après avoir exécuté tout les scripts de /etc/rc.d pour le runlevel, le script /etc/inittab établit un processus /sbin/mingetty pour chaque console virtuelle (invites de login) assignée à ce niveau d'exécution : ● ● ● Pour les runlevels 2 à 5, six consoles virtuelles sont démarrées Le runlevel 1 (mode mono-utilisateur) n'obtient qu'une console Pour les runlevels 0 (arrêt) et 6 (redémarrage), aucune console n'est démarrée mingetty est un getty, un gestionnaire (GET) de terminal (TTY, teletype). Le getty attend une connexion sur les liens série. A la connexion, il configure le lien série, demande un login et un mot de passe, puis effectue le processus de login pour l'utilisateur Pour le runlevel 5 (login graphique), /etc/inittab exécute le script /etc/X11/prefdm qui affiche le login graphique La séquence de démarrage est terminée. Introduction à Linux Les services réseaux Les services réseaux ● ● Plusieurs services réseaux disponibles Partage de fichiers et d'imprimantes (NFS, SMB) Serveurs de connexion sécurisée (sshd) ou pas (telnet) Serveurs web (httpd = apache) Serveurs FTP (wu-ftpd, pro-ftpd, etc.) Etc. Deux moyens de démarrer ces services : À l'initialisation du runlevel ou par ligne de commande À l'attente de connexion avec les TCP Wrappers et Xinetd Lancement des services réseaux ● ● ● ● ● ● Dans le chapitre précédent, nous avons vu comment démarrer un service (réseau ou pas) à l'initialisation du système ou par ligne de commande Linux offre un contrôle d'accès sécurisé fiable grâce à la mise en oeuvre du firewall IPTables Cependant, pour accroître la sécurité, il est recommandé d'ajouter une couche de protection supplémentaire individuelle à chaque service réseau démarré Cette protection est offerte sur deux niveaux : Les TCP Wrappers (enveloppeurs réseaux) qui détermine les machines autorisées à se connecter à chaque service Xinetd qui s'intercale entre les TCP Wrappers et le service réseaux et offre un contrôle d'accès plus affiné au service réseau Les enveloppeurs TCP ● ● ● ● ● Les enveloppeurs TCP offrent un contrôle d'accès basé sur le nom ou l'adresse de la machine qui tente la connexion Lorsqu'une tentative de connexion à un service est effectuée L'enveloppeur TCP contrôle l'accès en fonction des fichiers /etc/hosts.allow et /etc/hosts.deny Il loggue (enregistre) ensuite les informations de connexion dans le fichier de logs /var/log/secure ou /var/log/messages Si l'accès est donné, l'enveloppeur TCP n'interfère plus dans le processus de communication entre le serveur et le client Les enveloppeurs TCP sont ainsi complètement transparents dans le contrôle d'accès à un serveur Ils offrent de plus une gestion centralisée de l'accès aux services réseaux Xinetd : un super-server ● ● ● ● xinetd est un super-service enveloppé dans un enveloppeur TCP contrôlant l'accès à un sous-réseau de services réseaux comme ftpd, telnetd, etc. En ce sens, xinetd est un super-service car il centralise l'accès à d'autres services réseaux et permet de les contrôler plus finement xinetd offre une panoplie complète de gestion du service, allant du simple contrôle d'accès à la redirection réseau, en passant par la gestion des ressources et l'enregistrement de connexion (logging) C'est un service très puissant. Cependant, beaucoup de services décident de contrôler eux-même l'accès et se passent de xinetd Exemples : Samba (httpd), sshd Fonctionnement de xinetd ● Xinetd écoute sur certains ports réseaux associés à des services ● Lors d'une tentative de connexion à un service réseau géré par xinetd Une première vérification d'accès est faite par l'enveloppeur TCP Si l'accès est autorisé, xinetd vérifie l'accès et les modalités de démarrage du service en fonction de sa propre configuration pour ce service Si l'accès est autorisé par xinetd, une instance du service est démarrée à qui la connexion est cédée. xinetd n'intervient plus alors dans le processus de communication entre le serveur et le client Xinetd gère les nouvelles tentatives de connexion à ce service, et en fonction des ressources allouées, décide s'il doit lancer une nouvelle instance de ce service Xinetd : fichiers de configuration ● ● /etc/xinetd.conf : configuration globale de xinetd Le répertoire /etc/xinetd.d/ : fichiers de configuration spécifiques au service Un seul fichier est nécessaire, mais organisation plus simple avec un fichier pour chaque service ● includedir /etc/xinetd.d (dans xinetd.conf) La plupart des directives de configuration globale sont héritées aux services /etc/xinetd.conf : configuration globale ● Paramètres généraux lus une seule fois au démarrage de xinetd ● Lors de changement dans la configuration, nécessaire de redémarrer xinetd Exemple : defaults { instances = 60 log_type = SYSLOG authpriv log_on_success = HOST PID log_on_failure = HOST cps = 25 30 } includedir /etc/xinetd.d /etc/xinetd.conf : configuration globale ● ● ● ● ● ● Instances : nombre de requêtes maximum que xinetd peut gérer log_type : les logs sont envoyées à syslogd avec la facilité authpriv. Pour enregistrer directement dans un fichier sans envoyer à syslogd, FILE /var/log/xinetdlog log_on_success : engregistrer les connexions réussies. Par defaut, l'adresse IP de la machine et le process ID du server lancé sont enregistrés log_on_failure : entregistrer les connexions non-réussies ou nonautorisées Cps : nombre de connexion / seconde pour chaque service. Si cette limite est atteinte, le service est inacessible pendant 30s. includedir /etc/xinetd.d/ : inclus les options de configurations pour chaque service, sous la forme d'un fichier spécifique Le répertoire /etc/xinetd.d ● ● Ce répertoire contient les fichiers de configuration spécifiques à chaque service. Comme xinetd.conf, lus au démarrage de xinetd une fois pour toute. Exemple : service telnet { flags = REUSE socket_type = stream wait = no user = root server = /usr/sbin/in.telnetd log_on_failure += USERID disable = yes } Le répertoire /etc/xinetd.d ● ● Service : nom du service. Correspond en général aux services définis dans /etc/services file. Flags : définis les attributs de la connexion. REUSE ordonne à xinetd de réutiliser le socket pour une connexion Telnet ● socket_type : définit le type de socket à stream ● Wait : le service est simple-tâche (yes) our multi-tâches (no) ? ● User : sous quel utilisateur le service doit être lancé ● Server : définit le programme à lancer ● ● log_on_failure : paramètres à enregistrer en cas de connexion réussie, en plus des paramètres par défaut définis dans xinetd.conf Disable : définit si le service est active ou pas