IN3R21 Systèmes d’exploitation Damien Masson [email protected] Année 2009-2010 (Transparents © Xavier Hilaire) Objectifs du cours Comprendre les principes utilisés dans tout système d’exploitation moderne Comprendre comment fonctionne UNIX Savoir écrire des scripts en shell standard, ce qui suppose la maîtrise : de la syntaxe et du fonctionnement du shell des expressions régulières 2 Objectifs du cours IN4R12 : programmation système Synchro de processus fork Mémoire partagée Signaux ... Concepts fondamentaux (processus,fichiers, mémoire,...) IN3R21 : systèmes d’exploitation Shell Expressions régulières 3 Notions de base sur les systèmes d’exploitation 4 Définition Système d’exploitation n.m. : “Logiciel de base d'un ordinateur destiné à commander l'exécution des programmes en assurant la gestion des travaux, les opérations d'entrée-sortie sur les périphériques, l'affectation des ressources aux différents processus, l'accès aux fichiers, ainsi que la comptabilité des travaux.” (Grand dictionnaire terminologique) Plus simplement : ensemble logiciel faisant abstraction des ressources matérielles d’une machine, en présentant toujours une même interface (pilotes, bibliothèques, commandes…) à l’utilisateur. 5 Bref historique 1954 : Gene Amdahl sort le premier système d’exploitation pour IBM 704 Configuration très variable d’un client à l’autre, bien que certaines caractéristiques aient été communes (CPU: 36 bits/mot, PF et entier; bandes magnétiques, cartes perforées; unités d’impression) 6 Bref historique 1961 : CTSS, 1er système multi-utilisateurs mis au point au MIT par Corbato et Fano. 1964 : naissance du projet MULTICS (AT&T et MIT), qui ne se finalisera jamais 1969 : K. Thompson et D. Ritchie écrivent le premier SE à temps partagé sur DEC PDP-7: naissance d’UNIX. Portage sur PDP-11 deux ans plus tard. 1973 : noyau UNIX entièrement réécrit en C : UNIX Time-Sharing System V4. 1974 : G. Kildall écrit CP/M. Dans le même temps, Apple développe ProDOS. 7 Bref historique 1980 : Microsoft lance XENIX (Motorola 68k), qui deviendra DOS. IBM manque de racheter CP/M et se tourne vers Microsoft pour coécrire son système. 1981 : sortie du premier PC à base Intel par IBM, exploité sous PC-DOS 1 1985 : sortie de l’Amiga 1000 par Commodore. AmigaDOS = SE dédié avec interface graphique. IBM lance le développement de OS/2 dans le même temps. 1987 : sortie du Macintosh II par Apple. Sortie de Windows 2.0 par Microsoft. Lancement de Solaris par Sun Microsystems. 8 Bref historique 1988 : sortie de A/UX par Apple. 1989 : Création de NeXT par Steve Jobs. Sortie de Windows 3.0 par Microsoft. 1992 : Sortie de Windows 3.1 par Microsoft. 1994 : Sortie de AIX par IBM. Sortie de Windows 95 et de Windows NT 3 par Microsoft. Sortie de Linux 1.0 par Linus Torvald. 1998 : Sortie de Windows 98 par Microsoft 1999 : Noyau Linux 2.2 multi-plateforme: x86, Alpha, Sparc, m68k, MIPS. 2001 : Sortie de Windows XP par Microsoft, lancement de Mac OS X par Apple. 9 Définition Il faut donc exploiter: Le(s) processeur(s) Les programmes qu’ils doivent exécuter : La mémoire réelle ou virtuelle? partagée? pagination et va-et-vient sur disque (swap) Les disques un ou plusieurs en même temps? quelles priorités? Droits d’accès au matériel? partitionnement systèmes de fichiers, fichiers et droits d’accès Le réseau Tous les autres périphériques } pas traités dans cette unité 10 Modèle de machine Modèle le plus fréquemment utilisé : von Neumann: Mémoire séparée du/des processeur(s) Instructions et données représentables dans un même type de mémoire mémoire CPU1 ... bus CPUn bus disque imprimante clavier 11 Les processeurs Possèdent des « variables internes » appelées registres, d’accès unitaire en temps Réalisent les opérations logiques (et,ou,négation,ou exclusif), et arithmétiques (+,-,*,/), entières ou à point flottant Réalisent des entrées/sorties sur le bus de données (accès aux périphériques) Adressent la mémoire octet par octet, et au moins mot par mot. Exécutent leurs programmes sans forcément savoir ce qu’exécutent les autres processeurs 12 Les processeurs Sont capables d’exécuter des processus en mode superviseur ou utilisateur (bits Ring0 sur x86, MSR_PR sur PowerPC) : Mode superviseur : accès autorisé à l’intégralité de la mémoire physique de la machine, et aux différents bus d’E/S. C’est le mode processeur sous lequel s’exécutent la plupart des différents composants du système. Mode utilisateur : accès à la mémoire limité aux zones allouées au processus. Accès aux bus interdit. C’est le mode processeur sous lequel s’exécute la majorité du code applicatif. 13 Les processeurs Lorsqu’un processus tente d’accéder au bus, ou à une zone mémoire qui ne lui appartient pas, le processeur l’interrompt et signale la faute au processus créateur de celui fautif (le shell, ou tout autre programme) par une interruption Un processus tournant en mode utilisateur peut s’interrompre pour exécuter certaines routines prédéfinies en mode superviseur par le mécanisme d’interruption logicielle (instruction INT sur Intel. A rapprocher de TRAP sur 68k pour les exceptions) Vocabulaire : privilégié, protégé (architectures Intel) et superviseur sont synonymes. 14 Les processus Le processus est l’unité de programme indivisible exécutée par un processeur Ne pas confondre processus et programme : un programme peut être constitué de plusieurs processus. Il peut également être exécuté en plus d’un exemplaire (instance) sur un même système. Un système est dit monoprocessus s’il ne peut exécuter qu’un seul processus à la fois: l’exécution d’un nouveau processus requiert la terminaison du processus courant. Il est dit multiprocessus dans le cas contraire. 15 Processeurs et processus Un système est dit multiprocesseur s’il supporte l’exécution de plusieurs processus sur plus d’un processeur ; monoprocesseur dans le cas contraire. Un système monoprocesseur et multiprocessus est parfois dit à temps partagé. Le problème de l’exécution de p processus par n processeurs est résolu par un composant du système appelé ordonnanceur (scheduler) 16 Processeurs et processus CPU0 Monoprocesseur, temps partagé C B A t CPU0 C A t Multiprocesseur CPU1 C B t 17 Organisation d’un système Applicatifs utilisateur Applicatifs système Bibliothèque système Fonctions système Ordonnanceur Pilotes de périphériques et composants système Matériel Mode utilisateur Mode superviseur Shell, services (ftp, lp,…) Gestion de la mémoire, des fichiers, des périphériques Gestion des processus et événements Appel de fonction 18 Interruption Organisation d’un système Le noyau (kernel) d’un système d’exploitation est l’ensemble logiciel indivisible minimal qui est systématiquement chargé au démarrage D’un point de vue processeur, il est vu comme du code s’exécutant en mode superviseur Deux grands schémas d’organisation classiques : monolithique et à micro-noyau. Le choix dépend du niveau de service minimal qui doit être offert. (Un troisième schéma est celui du client-serveur) 19 Organisation d’un système Système monolithique : fonctionnalités concentrées dans le noyau. Aucune hiérarchie imposée sur les appels de fonctions entre composants. Applicatifs Bibliothèque système noyau Gestion RAM Ordonnanceur Syst. de fichiers Matériel Pilotes Réseau 20 Organisation d’un système Système à µ-noyau : tout ce qui ne nécessite pas un accès direct au matériel est retiré du noyau. Réseau Applicatifs Gestion RAM Bibliothèque système Syst. de fichiers noyau Matériel Pilotes Ordonnanceur 21 La mémoire Mémoire morte, ou ROM (read only memory) : Accès alétoire, en lecture seulement, souvent lente (recopie en RAM usuelle) Contient le code exécutable nécessaire au démarrage de la machine Variante: EPROM (Editable Programmable ROM) Mémoire vive, ou RAM (random access memory) : Contient le code exécutable et les données du noyau du système d’exploitation et des processus Mémoire à accès rapide, modifiable, et organisée selon le schéma suivant pour chaque processus : 22 La mémoire réelle Adresses croissantes Pile Pointeur de pile: SP } Tas (données dynamiques) code exécutable + données constantes Collision possible (dépassement de pile) Pointeur de segment de données: DP Pointeur de segment de code : CS 23 La mémoire virtuelle Idée de la mémoire virtuelle = permettre à un programme d’accéder à un espace mémoire plus grand que l’espace mémoire physique réel La mémoire physique est partagée en segments (segmentation), pages (segments de taille fixe, pagination), ou une combinaison des deux A un instant donné, seuls les segments auxquels les processus actifs ont fait récemment accès se trouvent en mémoire. Les autres sont écrits sur disque. Lorsqu’un processus veut accéder à une adresse virtuelle v donnée : la MMU (memory management unit) détermine le numéro de segment s et le déplacement d dans ce segment tels que v=(s,d) si s est présent en mémoire => accès direct à (s,d) si s n’est pas présent en mémoire => défaut de segment. Il faut recharger le segment en défaut depuis le disque 24 La mémoire virtuelle Remarque : un processeur 32 bits peut adresser jusqu’à 2^32 = 4096 MO = 4 GO. Sur Linux 32 bits, chaque processus adresse jusqu’à 3 GO d’espace virtuel, le GO restant étant alloué pour la table de pages et les données système du processus (gâchis !) Quel algorithme de remplacement de page utiliser ? algorithme de référence de Belady : choisir la page référencée le + tard possible dans le futur. N’a qu’un intérêt théorique algorithme aléatoire : on choisit la page au hasard (proposé par IBM sur RS). Facile à implémenter, mais pas très bon. algorithme FIFO : choisir la page la plus ancienne. Mauvaise stratégie (pas corrélation avec la fréquence d’utilisation) algorithme LRU (least recently used) : choisir la page la moins récemment utilisée. Problème : suppose que l’on tienne à jour les fréquences d’utilisation de chaque page (utilisation d’une pile et d’un indicateur de vieillissement) 25 Les périphériques Communiquent avec le(s) processeur(s) par l’intermédiaire du bus de données: soit octet par octet : périphériques « caractère », par ex.: clavier, souris. soit par blocs à des adresses convenues : périphériques « bloc », par ex.: disque dur. Bloquent indirectement les processeurs si les bus de données et mémoire (système) sont confondus Peuvent solliciter l’attention des processeurs par le mécanisme d’interruption 26 Le système UNIX GNU/Linux 27 Qu’est-ce que UNIX ? Une marque, détenue à l’origine par AT&T (Bell Labs) et aujourd’hui par Open Group (consortium industriel) Succède à Unics (lui-même sucesseur de Multics), projet commun à Bell Labs (AT&T), MIT, et General Electric UNIX s’inspire en très large partie de code public, hérité soit du monde universitaire (U. Californie à Berkeley, en particulier), et a été enrichi par des sociétés privées (HP, IBM, Novel, Sun Microsystems,..) 28 Qu’est-ce que UNIX ? 29 Qu’est-ce que GNU/Linux ? GNU/Linux (ou Linux) n’est pas une version d’UNIX Mais il en reprend les idées générales : Monolithique Multiprocessus Multi-utilisateurs : plusieurs utilisateurs peuvent exécuter simultanément leurs processus sur une même machine Code source écrit majoritairement en C Notions système (processus, signaux, utilisateurs, droits, terminaux, ...) identiques 30 Qu’est-ce que GNU/Linux ? Avantages : Code source public (licence GPL) Haute portabilité (supporte les architectures i386, Power, PC98, Alpha, MIPS, Sparc, …) Applications très nombreuses Inconvénients : Nombre de distributions sur le marché Spécificités introduites dans certaines d’entre elles Fiabilité et mise à l’épreuve moins poussées que sur la plupart des systèmes commerciaux 31 Schéma général Accès réservé à l’administrateur terminaux liaison terminal + display X11 liaisons terminaux + displays X11 Eric openoffice Joël Processus (util.) openoffice (eric) firefox (joel) maia (alain) console firefox Alain maia 32 Utilisateurs et groupes Un utilisateur UNIX = une entrée identifiée par un entier unique (UID) dans la table des utilisateurs. NB: il ne s’agit pas forcément d’une personne physique Un groupe UNIX = une entrée identifiée par un entier unique (GID) dans la table des groupes Table des utilisateurs et des groupes : fichiers /etc/passwd et /etc/group . Accès direct si politique de gestion locale, délocalisée sinon (NIS, PAM, Kerberos, …) Tout utilisateur doit être membre d’au moins un groupe 33 Utilisateurs et groupes Une ligne d’un fichier /etc/passwd : hilairex:x:516:488:hilairex:/mnt/users_hdb8/:/bin/bash Login UID GID Nom complet Mot de passe crypté (x si gestion délocalisée, * si compte interdit) Shell par défaut Répertoire HOME (par défaut) Deux lignes d’un fichier /etc/group : compta::524:dupontl users::488:dupontl,durandt,hilairex Nom GID Liste de logins Mot de passe crypté (ou vide si inutilisé) 34 L’utilisateur root C’est l’administrateur système Il est le seul a avoir un UID et GID à zéro (0) A autorité sur tout (accès aux fichiers, au matériel, aux droits des autres utilisateurs, aux processus en lecture comme en écriture). Définit généralement des utilisateurs fictifs et des groupes pour limiter les droits des autres utilisateurs ou applications: nobody:*:-2:-2:Unprivileged User:/:/usr/bin/false root:*:0:0:System Administrator:/var/root:/bin/sh daemon:*:1:1:System Services:/var/root:/usr/bin/false lp:*:26:26:Printing Services:/var/spool/cups:/usr/bin/false 35 Les processus Tout processus Linux (et UNIX) : Possède un identificateur entier unique : le PID (Process ID) Est toujours créé par clonage d’un processus existant, qui devient son père Dispose des droits conférés à l’utilisateur qui l’a lancé (accès fichiers, réseau, etc.) Ne peut lire et écrire que dans l’espace mémoire que le système lui a alloué ou qu’il alloue lui-même dynamiquement, sauf s’il s’agit de mémoire partagée 36 Les processus Se trouve toujours dans l’un des trois états { élu, prêt, bloqué } et peut transiter vers un autre état comme ceci : Elu T1 Prêt T2 Bloqué T3 • Signification des états: • • Bloqué: en attente de la réalisation d’un événement d’E/S Prêt: dégagé de toute attente d’E/S Elu: effectivement en cours d’exécution 37 Les processus : transitions • • • T1: Linux est préemptif, c.à.d que l’ordonnanceur peut décider à tout moment de suspendre l’exécution d’un processus au profit d’un autre; dans ce cas le processus retourne dans l’état prêt. Les commandes nice et renice permettent d’attribuer une priorité d’exécution à chaque processus. T2 : lorsqu’un processus est en attente d’un événement d’E/S (réception d’un caractère sur port série, par ex.), le noyau l’interrompt et le place dans l’état bloqué. Il passe alors la main au premier processus prêt de la file d’attente. T3 : le gestionnaire d’événements est programmé pour débloquer les processus dans l’état bloqué sur réception de l’événement matériel attendu. Dans ce cas, le processus débloqué retourne dans l’état prêt. 38 Les processus : ordonnancement Linux utilise 40 files circulaires (tourniquets, de -19 à 20) sur lesquelles tournent des processus de même priorité + une métafile. p1 20 19 p2 p5 p3 p4 … • Exécution des processus de priorité numérale basse privilégiée par un temps d’exécution plus long • Ajout/retrait d’un processus sur un tourniquet en temps unitaire • Les temps d’exécution alloués (quantum) sont réajustés dynamiquement • La commande renice permet d’envoyer un processus vers un autre tourniquet -19 p3 p3 39 Les processus La commande ps : afficher les processus lancés (nombreuses options) $ ps -auxf USER PID %CPU %MEM root 1 0.0 0.0 root root … nobody daemon root hilairex hilairex hilairex hilairex VSZ 1560 2 3 0.0 0.0 0.0 0.0 0 0 3334 3353 10611 10613 10614 10834 10883 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.1 0.0 0.1 0.1 0.2 0.3 0.0 11420 1688 6944 7024 4316 6628 2724 RSS TTY 536 ? 0 ? 0 ? 1144 616 2028 2012 2976 3176 948 ? ? ? ? pts/0 pts/0 pts/0 STAT START S Feb02 TIME COMMAND 0:00 init [5] S SN Feb02 Feb02 0:00 [migration/0] 0:00 [ksoftirqd/0] Ssl Ss Ss S Ss S R+ Feb02 Feb02 13:33 13:33 13:33 13:54 13:59 0:00 mDNSResponder 0:00 /usr/sbin/atd 0:00 \_ sshd: hilairex 0:00 \_ sshd: hilairex@pts/0 0:00 \_ -bash 0:00 \_ xterm 0:00 \_ ps -auxf Option Effet Option Effet -l Affichage long -u Affiche le nom d’utilisateur -a Affiche tous les processus -x Inclure les processus sans terminal -m Informations mémoire -f Arbre des appels 40 Les processus La commande top : moniteur de processus $ top -c Tasks: 99 total, 2 running, 96 sleeping, 0 Cpu(s): 0.0% us, 0.3% sy, 0.0% ni, 99.7% id, Mem: 1034240k total, 659612k used, 374628k Swap: 1004052k total, 0k used, 1004052k PID USER PR NI 10940 hilairex 16 0 2000 1060 804 R 0.3 0.1 0:00.01 top -c 1 root 16 0 1560 536 472 S 0.0 0.1 0:00.49 init [5] 2 root RT 0 0 0 0 S 0.0 0.0 0:00.00 [migration/0] 34 19 0 0 0 S 0.0 0.0 0:00.00 [ksoftirqd/0] 3 root VIRT RES stopped, 1 zombie 0.0% wa, 0.0% hi, 0.0% si free, 28744k buffers free, 385436k cached SHR S %CPU %MEM Option … Effet -c Afficher la ligne de commande -p int Ne surveiller que le processus int -d (cumulatif) TIME+ COMMAND Option Effet -u util Affiche seulement les processus de l’utilisateur util Inclure les processus sans terminal Trier selon un champs particulier: taper ‘F’ une fois la commande lancée. Autres options: taper ‘?’ ou ‘h’. 41 Les fichiers TOUT est fichier Linux (comme UNIX) présente à l’utilisateur l’ensemble des fichiers auxquels le système à accès sous forme d’un arbre de répertoires dont la racine est / Il existe 5 types de fichiers : Fichier ordinaire Répertoire : fichier spécial lu par le système, et qui implémente une liste d’autres fichiers Liens matériels : pointeur référençant directement le numéro d’i-node (voir + loin) d’un fichier ordinaire déjà existant Lien symboliques: fichier spécial lu par le système, dont le contenu indique un nouvel emplacement à partir duquel il faut continuer la recherche du fichier cible. A la différence d’un lien matériel, un lien symbolique peut ne plus « pointer » sur rien. 42 Les fichiers Exemple à propos des liens : $ ls -l total 8 -rw------1 hilairex wheel 18 9 mar $ cat test Ceci est du texte $ ln -s test liensymb $ ln test lienmat $ ls -l total 24 -rw------2 hilairex wheel 18 9 mar lrwx-----1 hilairex wheel 4 9 mar -rw------2 hilairex wheel 18 9 mar $ rm test $ ls -l total 16 -rw------1 hilairex wheel 18 9 mar lrwx-----1 hilairex wheel 4 9 mar $ cat liensymb cat: liensymb: No such file or directory $ 01:43 test lien symbolique lien matériel 01:43 lienmat 01:43 liensymb -> test 01:43 test 01:43 lienmat 01:43 liensymb -> test 43 Les fichiers Fichier de contrôle de périphérique (dans /dev) : fichier spécial servant à accéder directement à un périphérique (très souvent par read(), write(), ou ioctl()). Tout nœud de l’arbre de fichiers: soit appartient au même périphérique que son père, soit est la racine de l’arbre des fichiers d’un autre périphérique (on dit que les périphériques sont montés en différents points de l’arbre) 44 Les fichiers / mnt (/mnt) cdrom (/mnt/cdrom) floppy (/mnt/floppy) usr (/usr) Serveur NFS (network filesystem) bin (/usr/bin) local (/usr/local) QuickTimeᆰ et un dホcompresseur TIFF (non compressホ) sont requis pour visionner cette image. LAN QuickTime ᆰet un dホcompresseur TIFF (non compressホ) sont requis pour visionner cette image. 45 Les fichiers Montage de périphériques ou affichage de périphériques montés : la commande mount Invocation sans paramètres : affichage simple $ mount /dev/sda7 on / type ext3 (rw) none on /proc type proc (rw) none on /proc/bus/usb type usbfs (rw) none on /sys type sysfs (rw) none on /mnt/floppy type supermount (rw,sync,dev=/dev/fd0,fs=ext2:vfat,--) /dev/sda1 on /mnt/win_c type ntfs (ro,umask=0,nls=iso8859-15) /dev/sda2 on /mnt/win_d type vfat (rw,umask=0,iocharset=iso885915,codepage=850) /dev/sda5 on /usr type reiserfs (rw,notail) yfiler:/vol/user on /nfs/user type nfs (rw,tcp,addr=147.215.1.8) xfiler:/opt on /nfs/opt type nfs (rw,addr=147.215.1.2) nfsd on /proc/fs/nfsd type nfsd (rw) 46 Les fichiers Invocation avec paramètres : mount [-t type] [-o options] desc mpoint où desc est un descripteur de périphérique (entrée dans /dev si attaché à la machine) et mpoint un chemin valide et libre (non déjà monté). Le type de système de fichiers doit souvent être spécifié; les options contrôlent divers paramètres de montage (lecture seule, synchrone / asynchrone, accès pour les utilisateurs ordinaires, …) Exemple : montage d’un CDROM (format ISO 9660): [root@mandribule ~]# ls -l /mnt/cdrom total 0 [root@mandribule ~]# mount -t iso9660 /dev/hda /mnt/cdrom mount: périphérique de type bloc/dev/hda est protégé en écriture, on le monte en lecture seulement [root@mandribule ~]# ls -l /mnt/cdrom total 61 dr-xr-xr-x 10 root root 4096 sep 26 22:37 i586/ -r--r--r-- 35 root root 29009 sep 21 13:10 release-notes-fr.txt -r--r--r-- 35 root root 29017 sep 21 13:07 release-notes.txt [root@mandribule ~]# 47 Les fichiers Remarques: Le montage « cache » toute la hiérarchie de fichiers dont le point de montage est la racine Il faut normalement être administrateur pour réaliser un montage; mais l’autorisation peut être conférée via l’option « users » dans le fichier /etc/fstab Le fichier /etc/fstab contient les entrées des systèmes de fichiers habituellement montés sur la machine: $ cat /etc/fstab /dev/sda7 / ext3 defaults 1 1 /dev/hda /mnt/cdrom auto umask=0,users,iocharset=utf8,noauto,ro,exec 0 0 /dev/sda1 /mnt/windows ntfs umask=0,nls=utf8,ro 0 0 none /proc proc defaults 0 0 /dev/sda6 /usr reiserfs notail 1 2 /dev/sda5 swap swap defaults 0 0 $ 48 Les fichiers Si un montage est spécifié dans /etc/fstab, il suffit de passer le point de montage en argument à mount pour monter le périphérique. C’est également le seul moyen d’autoriser un utilisateur à monter un périphérique s’il a l’option « users » - exemple : $ mount -t iso9660 /dev/hda /mnt/cdrom mount: seul l'usager ROOT peut faire cela $ mount /dev/hda /mnt/cdrom mount: seul l'usager ROOT peut faire cela $ mount /mnt/cdrom $ ls -l /mnt/cdrom total 61 dr-xr-xr-x 10 root root 4096 sep 26 22:37 i586/ -r--r--r-- 35 root root 29009 sep 21 13:10 release-notes-fr.txt -r--r--r-- 35 root root 29017 sep 21 13:07 release-notes.txt $ mount -a a pour effet de monter tous les systèmes déclarés dans /etc/fstab, sauf ceux ayant l’option « nonauto ». 49 Les fichiers Démontage d’un système de fichiers: par la commande umount (unmount) $ mount /dev/sda7 on / type ext3 (rw) none on /proc type proc (rw) /dev/sda1 on /mnt/windows type ntfs (ro,umask=0,nls=utf8) /dev/sda6 on /usr type reiserfs (rw,notail) none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw) /dev/hda on /mnt/cdrom type iso9660 (ro,nosuid,nodev,users,iocharset=utf8) $ umount /mnt/cdrom $ mount /dev/sda7 on / type ext3 (rw) none on /proc type proc (rw) /dev/sda1 on /mnt/windows type ntfs (ro,umask=0,nls=utf8) /dev/sda6 on /usr type reiserfs (rw,notail) none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw) $ Remarque: le démontage est très important Remonter deux fois de suite un système de fichiers non démonté (suite à interruption d’alimentation électrique par ex.) peut entraîner une perte irréversible d’information. 50 Les systèmes de fichiers Système de fichiers (SF) = convention de codage des fichiers sur un support physique Hypothèses: support à accès aléatoire, unités d’allocation de taille fixe, le contrôleur de périphérique présente le périphérique sous forme d’un tableau contigu d’unités d’allocation unités d’allocation groupées en blocs, de taille fixe Linux supporte des SF très variés: Ext2, Ext3, FFS, NTFS, FAT, NFS, ISO 9660, … Les systèmes natifs pour les partitions de disques durs sont Ext2 et Ext3. Deux grands schémas de codages différents utilisés dans les SF (en général): codage à accès séquentiel et à accès aléatoire. 51 Les systèmes de fichiers à accès séquentiel Fichier codé sous forme d’une liste chaînée de blocs Un fichier = un numéro de premier bloc Un répertoire = une liste de champs <nom de fichier, taille, droits, dates, …, numéro de premier bloc> Méthode utilisée par le système FAT (File Allocation Table) de Microsoft dans MSDOS et les « vieux » Windows (3.X, 9X) Infos Répertoire disque racine X fin libre 3 1 4 2 X N … X Bloc 1 ... Bloc N N Avantages : économie d’espace, implémentation aisée Inconvénients : lenteur, fragmentation 52 Les systèmes de fichiers à accès aléatoire Fichier codé sous forme d’un tableau d’index de blocs Un fichier = une entrée dans la table d’index : un i-node Un i-node = <nom de fichier, taille, droits, dates, …, tableau d’index de blocs> Un répertoire = une liste d’entrées dans la table d’index Méthode utilisée par le système Ext (origine: Minix) Infos Répertoire Table d’index disque racine Bloc 1 … … f1 f2 fm fi (superbloc) (/) . alloué ... Bloc N X libre 1 9 X X X X … X Avantage: accès aléatoire Inconvénients: surconsommation, fichiers de tailles limitées 53 Les systèmes Ext2 et Ext3 Idée de Ext2 = utiliser un arbre B+ (schéma transparent suivant) pour : Dimensionner les index en rapport avec la distribution des tailles des fichiers Substituer les dernières entrées du tableau d’index par des pointeurs d’indirection vers un nouveau tableau Léger sacrifice de performances pour les fichiers (marginaux) de très grande taille + ajout d’un test pour savoir si on sort de l’indexation simple Idée de Ext3 = journaliser Ext2, càd ajouter un journal d’évènements à Ext 2 pour permettre la récupération de fichiers en cas d’erreur ou d’interruption d’alimentation. 54 Les systèmes Ext2 et Ext3 Bloc 1 ... Répertoire racine (/) F1 F2 ... ... ... ... ... … Fi … Table d’i-nodes Infos disque … ... … Fj Fm ... … F1 à Fi-1 : pointeurs directs Fi à Fj-1 : indirection simple Fj à Fm : indirection double ... ... Bloc N 55 Droits d’accès aux fichiers A tout fichier (au sens large: fichier, lien, répertoire) sont associés : Le numéro d’utilisateur de son propriétaire Le numéro de groupe de son propriétaire Des droits d’accès, stockés sur 12 bits : 3 bits de droits de l’utilisateur (U) 3 bits de droits de son groupe (G) 3 bits de droits des autres utilisateurs (O) 3 bits spéciaux: 1 bit spécial « sticky » (collant) 1 bit spécial « set UID » 1 bit spécial « set GID » 56 Droits d’accès aux fichiers Les groupes de bits U,G,O spécifient les droits du propriétaire, du groupe et des autres utilisateurs en lecture, écriture, et exécution sur le fichier. Un et un seul de ces groupes est utilisé in fine pour décider des droits d’accès dans cet ordre : S’il y a concordance avec le login → on utilise le groupe U S’il y a concordance avec le groupe → on utilise le groupe G S’il n’y a concordance ni avec l’un, ni avec l’autre → on utilise le groupe O Le groupe de bits spéciaux modifie les règles de transfert d’identité lorsque l’utilisateur qui accède au fichier n’est pas son propriétaire. 57 Droits d’accès aux fichiers Exemple : affichage des droits d’accès par fichier avec ls -l: $ ls -l total 12 lrwxrwxrwx 1 index.html -rw-r--r-- 1 -rw-r-xr-- 1 -rw-r--r-- 2 drwx------ 4 $ groupe propriétaire hilairex sshdist5 hilairex hilairex hilairex hilairex 10 fév sshdist5 2 sshdist5 36 sshdist5 287 sshdist5 4096 Compteur de liens : 2 ici, le fichier est référencé dans un autre répertoire Fichier ordinaire (-) : le propriétaire peut lire et écrire, le groupe peut lire et exécuter, les autres peuvent lire seulement. fév fév fév fév 7 18:42 alias2index.html -> 7 7 7 2 18:39 18:44 18:43 17:16 index.html script script.sh tmp/ Lien symbolique (l): aucun droit n’est ajouté/perdu par rapport au fichier désigné (ici, index.html) Répertoire (d): l’utilisateur conserve ses droits en lecture, écriture et exécution; le groupe et les autres ne peuvent rien faire 58 Les bits spéciaux SetUID et SetGID Ils permettent d’exécuter un fichier sous l’UID et/ou le GID de l’utilisateur qui en est le propriétaire. Exemple: $ ls -l -r-xr-xr-x 1 hilairex sshdist5 36 fév 7 18:44 script Sera exécuté par un utilisateur dupont du groupe users en tant que dupont du groupe users -r-sr-xr-x 1 hilairex sshdist5 36 fév 7 18:44 script Sera exécuté par un utilisateur dupont du groupe users en tant que hilairex du groupe users -r-xr-sr-x 1 hilairex sshdist5 36 fév 7 18:44 script Sera exécuté par un utilisateur dupont du groupe users en tant que dupont du groupe sshdist5 Remarque: se rencontre souvent sur des commandes système pour lesquelles le propriétaire est root:wheel. Exemple: ls -la /usr/bin/passwd -r-sr-xr-x 1 root wheel 75636 Sep 27 10:12 /usr/bin/passwd 59 Le bit spécial sticky Ce bit n’a d’effet que sur les répertoires. S’il est positionné, les utilisateurs ayant la permission d’écriture dans le répertoire perdent la possibilité de supprimer ou renommer les fichiers qui ne sont pas les leurs. Exemple: Utilisateur xavier : $ touch /tmp/toto && chmod 666 /tmp/toto && ls -l /tmp/toto -rw-rw-rw1 xavier wheel 0 26 fév 22:52 /tmp/toto Utilisateur test : $ echo "J'en rajoute" >> /tmp/toto $ cat /tmp/toto J'en rajoute $ rm /tmp/toto rm: /tmp/toto: Permission denied $ mv /tmp/toto /tmp/ilestamoi mv: rename /tmp/toto to /tmp/ilestamoi: Permission denied $ chown test /tmp/toto chown: /tmp/toto: Operation not permitted $ 60 La commande chmod Elle permet de modifier les droits d’accès à un ou plusieurs fichiers. Seuls le propriétaire du fichier et l’administrateur ont ce pouvoir. chmod droits fichiers… On peut spécifier les droits en forme littérale ou numéraire. En fome littérale (conseillée) : les droits de lecture (r), écriture (w), et exécution (x) sont passés pour U,G, et O précédés par + s’ils sont conférés, - s’ils sont révoqués, et éventuellement séparés par des virgules. Exemple : ls -l toto -r--rw-r-x 1 xavier xavier 379 Feb 9 20:08 toto 61 La commande chmod Ajout du droit d’écriture pour l’utilisateur, révocation de tous les droits pour les autres: chmod u+w,go-rwx toto ls -l toto -rw------1 xavier xavier 379 Feb 9 20:08 toto Les bits SetUID et SetGID doivent être passés comme u+sx et g+sx ou +sx (seul). Le sticky bit est passé comme +t. chmod +sx,ugo+r toto ls -l toto -rwsr-sr-x 1 xavier xavier 379 Feb 9 20:08 toto 62 La commande chmod En forme numérale, les droits sont passés sous la forme de 3 ou 4 chiffres en système octal. Les trois derniers chiffres représentent les droits attribués pour chaque groupe U,G,O, dans cet ordre. Les droits sont des combinaisons de logiques entre les valeurs 1=exécution, 2=lecture, et 4=écriture. Les bits SetUID, SetGID et sticky peuvent être utilisés suivant le même principe, avec la convention SetUID=4000 (octal) , SetGID=2000, sticky bit=1000. Exemple: $ chmod 756 $ ls -l toto -rwxr-xrw$ chmod 6756 $ ls -l toto -rwxr-srw- toto 1 xavier toto xavier 379 Feb 9 20:08 toto 1 xavier xavier 379 Feb 9 20:08 toto 63 La commande chown chown login:group fichiers… Elle assigne l’utilisateur login de groupe group comme propriétaire des fichiers spécifiés. Remarque: Il faut en principe être administrateur pour exécuter chown. Au mieux, les autres utilisateurs peuvent s’approprier un fichier, mais jamais l’attribuer de force à quelqu’un d’autre. Exemples: $ ls -l toto -rw-rw-rw1 xavier xavier 379 Feb $ whoami xavier $ chown secours toto chown: toto: Operation not permitted $ su Password: # chown secours:wheel toto # ls -l toto -rw-rw-rw1 secours wheel 379 Feb 9 20:08 toto 9 20:08 toto 64