Aller au contenu

Introduction

Il existe à la fois des systèmes d’exploitation libres et propriétaires. Peut être avez vous entendu parlé du système d’exploitation Linux créé en 1991 par le Finlandais Linus Torvalds.

Ce système d’exploitation fait partie d’une large famille d’OS (Operating system) appelée UNIX.

Dans ce cours nous étudierons uniquement les systèmes d’exploitation de type UNIX.

1) Fonctions principales des systèmes d’exploitation

L’OS ou système d’exploitation, est un logiciel qui sert d'interface entre les programmes exécutés par l'utilisateur et les ressources matérielles d'un ordinateur.

Un OS gère notamment :

  • les fichiers
  • la mémoire
  • les applications
  • les entrées/sorties

Un OS contient notamment :

  • Un noyau (kernel) : c’est la partie la plus importante de l’OS.
  • Un système de fichiers

L'interface textuelle permettant à l'utilisateur d'interagir avec les applications et l'OS est appelée interpréteur de commandes (shell).

2) Le système de fichiers dans les OS de type UNIX

Dans un OS de type UNIX, le système de fichiers qui vous permet de stocker vos données sur votre disque dur est organisé sous la forme d’un arbre où le dossier / correspond à la racine.

image

3) Chemins absolus et chemins relatifs

Pour indiquer où se trouve un fichier (ou d'un répertoire) dans l'arborescence, il existe deux méthodes, indiquer un chemin absolu ou indiquer un chemin relatif.

  • Un chemin absolu se décrit depuis la racine notée /. Par exemple, dans l'arborescence Linux de la figure du dessus, le chemin absolu du fichier fiche.ods sera /home/elsa/documents/fiche.ods. Ici, le répertoire elsa est un répertoire enfant de home, et documents est un répertoire enfant de elsa.

Il est possible d'indiquer le chemin non pas depuis la racine, mais depuis un répertoire quelconque.

  • Le chemin relatif permettant d'accéder au fichier photo_1.jpg depuis le répertoire max est images/photo_vac/photo_1.jpg ou encore ./images/photo_vac/photo_1.jpg. On remarque l’absence du / au début du chemin (c'est cela qui nous permettra de distinguer un chemin relatif d'un chemin absolu). Un chemin relatif se décrit depuis le répertoire courant. Le symbole . désigne le répertoire courant.

Imaginons maintenant que nous désirions indiquer le chemin relatif pour accéder au fichier gdbd_3.jpg depuis le répertoire photos_vac. Comment faire ? Il faut remonter d'un niveau dans l'arborescence pour se retrouver dans le répertoire images et ainsi pouvoir repartir vers la bonne branche.

Pour ce faire, il faut utiliser 2 points .. ; cela donne ../ski/gdbd_3.jpg. On dit que le répertoire images est le répertoire parent du répertoire ski. Le symbole .. désigne le répertoire parent du répertoire courant.

On peut remonter de plusieurs niveaux en enchaînant les symboles .. . Par exemple, depuis le répertoire grub, le chemin relatif ../.. mène à la racine.

Remarque

Sous Windows les séparateurs seront (backslash) et non pas / .

4) Le shell

Le shell permet à l'utilisateur de communiquer avec l'OS à partir d'une interface en ligne de commandes. Le terminal est une fenêtre d'invite de commandes contenant le shell.

Le Shell permet notamment de naviguer dans l'arborescence et de la modifier en ajoutant/supprimant des répertoires et/ou des fichiers tout cela sans passer par une interface graphique.

Les commandes de base à connaître :

Commande Utilisée pour
cat Afficher le contenu d’un fichier
cd Changer de répertoire courant
cp Copier des fichiers et des répertoires
ls Afficher le contenu des répertoires
mkdir Créer des répertoires
mv Déplacer ou renommer des fichiers
pwd Afficher le nom du répertoire courant
rm Effacer des fichiers
rmdir Effacer des répertoires
touch Créer des fichiers

Lors du prochain TP, nous allons nous familiariser avec certaines de ces commandes.

5) Gestion des droits et permissions

J'ai repris cette section de ce cours : https://frederic-junier.gitlab.io/parc-nsi/chapitre9/cours-systeme/systeme-cours-git/#gestion-des-droits-et-permissions

Gestion des droits et permissions

Le système d'exploitation gère les droits et permissions sur les fichiers (dont les répertoires) pour les différents utilisateurs.

Pour un fichier, on distingue :

trois types d'utilisateurs :

  • le propriétaire (ou owner) noté u
  • le groupe principal (ou group) noté g
  • un autre utilisateur (ou other) noté o

trois types de permissions :

  • lecture (caractère r si attribué ou - sinon)
  • écriture (caractère w si attribué ou - sinon)
  • exécution (caractère x si attribué ou - sinon)

droits unix

Source : Wikimedia Commons, Jimbotyson / CC BY-SA (https://creativecommons.org/licenses/by-sa/3.0)

Pour les répertoires, la signification des permissions est précisée dans ce tableau. Attention, si on a le droit d'écriture sur un répertoire on peut supprimer tous les fichiers qu'il contient même ceux dont on n'est pas propriétaire !

Type de permission pour un répertoire
r lecture lister le contenu
w écriture ajouter, supprimer, renommer des fichiers
x exécution entrer dedans

En général le nom d'utilisateur figure dans le prompt de l'interpréteur de commandes / shell, mais la commande id permet de l'afficher avec la liste des groupes auxquels il appartient :

junier@fredportable:~$ id
uid=1000(junier) gid=1000(junier) groupes=1000(junier),4(adm),8(mail),24(cdrom),27(sudo),30(dip),46(plugdev),120(lpadmin),131(lxd),132(sambashare)
junier@fredportable:~$ sudo apt install pandoc
[sudo] Mot de passe de junier :

Certaines commandes, comme l'installation de logiciels avec un gestionnaire de paquets comme apt ne sont exécutables qu'avec les droits du superutilisateur root. Si on appartient au groupe sudo (groupe des administrateurs), on peut élever ses droits et agir comme root en préfixant la commande de sudo. et en saisissant son mot de passe utilisateur. Certains systèmes permettent de devenir directement root avec la commande su en saisissant le mot de passe de root. L'utilisateur root a tous les droits sur le système de fichiers.

Exemples de lectures de permissions

On peut afficher les droits d'un fichier avec la commande ls -l, en considérant les 10 premiers caractères :

  • le premier précise le type de fichier : d pour un répertoire et tiret - pour un autre fichier
  • les 9 caractères suivants dénotent les attributs pour les trois types de permission avec de gauche à droite le propriétaire, le groupe, les autres.

  • Exemple 1 :

    junier@fredportable:~/sandbox$ ls -l histoire-systeme.txt
    -rw-rw-r-- 1 junier junier 1136 août  15 13:56 histoire-systeme.txt
    

    Dans cet exemple le fichier texte histoire-systeme.txt a pour propriétaire junier, pour groupe junier et pour droits :

Lecture Écriture Exécution
Propriétaire oui oui non
Groupe oui oui non
Autres oui non non
  • Exemple 2 :

    junier@fredportable:~/sandbox$ ls -l /bin/python3.8
    -rwxr-xr-x 1 root root 5453504 juil. 16 16:00 /bin/python3.8
    

    Dans cet exemple le fichier binaire /bin/python3.8 a pour propriétaire root, pour groupe root et pour droits :

Lecture Écriture Exécution
Propriétaire oui oui oui
Groupe oui non oui
Autres oui non oui
  • Exemple 3 : pour afficher les informations détaillées d'un répertoires il faut rajouter l'option -d :
    junier@fredportable:/var$ ls -l -d mail
    drwxrwsr-x 2 root mail 4096 avril 23 09:32 mail
    

Dans cet exemple le dossier /var/mail a pour propriétaire root, pour groupe mail et pour droits :

Lecture Écriture Exécution
Propriétaire oui oui oui
Groupe oui oui oui
Autres oui non oui

On peut noter que pour le groupe, le droit d'exécution est positionné à s, qui correspond au sgid : tout fichier créé appartient au groupe propriétaire du répertoire.

Attention, si tout membre du groupe mail peut écrire dans le répertoire var, il peut aussi supprimer un fichier créé par un autre utilisateur même s'il s'agit du superutilisateur root :

junier@fredportable:/var/mail$ ls -l
total 0
-rw-r--r-- 1 root mail 0 août  16 10:27 mail_important
junier@fredportable:/var/mail$ echo 'Bonjour' > mon_message
junier@fredportable:/var/mail$ ls -l
total 4
-rw-r--r-- 1 root   mail 0 août  16 10:27 mail_important
-rw-rw-r-- 1 junier mail 8 août  16 10:28 mon_message
junier@fredportable:/var/mail$ rm mail_important
rm : supprimer 'mail_important' qui est protégé en écriture et est du type « fichier vide » ? y
junier@fredportable:/var/mail$ ls -l
total 4
-rw-rw-r-- 1 junier mail 8 août  16 10:28 mon_message

Modification des droits / permissions

  • Seul le propriétaire d'un fichier (ou répertoire) ou l'utilisateur root peuvent modifier les permissions d'un fichier (ou répertoire) avec la commande chmod.

    La syntaxe est la suivante, on a noté entre crochets les options facultatives :

    chmod [ugo][+-=][rwx] fichier
    

    Voici un exemple commenté :

    • Lorsqu'on crée un fichier, par défaut il a les droits de lecture et d'écriture pour l'utilisateur et son groupe principal et de lecture pour les autres.

      junier@fredportable:~/bac$ touch fichier
      junier@fredportable:~/bac$ ls -l
      total 0
      -rw-rw-r-- 1 junier junier 0 août  16 11:05 fichier
      junier@fredportable:~/bac$ echo "echo exécution" > fichier
      junier@fredportable:~/bac$ cat fichier
      echo exécution
      
    • On ajoute le droite d'exécution à fichier pour son propriétaire et on vérifie que la commande qu'il contient est bien exécutée lorsqu'on écrit ./fichier :

      junier@fredportable:~/bac$ chmod u+x fichier
      junier@fredportable:~/bac$ ./fichier
      exécution
      junier@fredportable:~/bac$ ls -l
      total 4
      -rwxrw-r-- 1 junier junier 16 août  16 11:06 fichier
      
    • On enlève le droit d'écriture au propriétaire et on vérifie qu'on ne peut plus écrire dans `fichier

      junier@fredportable:~/bac$ chmod u-w fichier
      junier@fredportable:~/bac$ echo "echo ajout" > fichier
      bash: fichier: Permission non accordée
      junier@fredportable:~/bac$ ls -l
      total 4
      -r-xrw-r-- 1 junier junier 16 août  16 11:06 fichier
      
    • On ajoute le droit d'écriture au propriétaire et aux autres :

      junier@fredportable:~/bac$ chmod uo+w fichier
      junier@fredportable:~/bac$ ls -l
      total 4
      -rwxrw-rw- 1 junier junier 16 août  16 11:06 fichier
      
    • On enlève le droit de lecture au propriétaire, à son groupe et aux autres :

      junier@fredportable:~/bac$ chmod ugo-r fichier
      junier@fredportable:~/bac$ ls -l
      total 4
      --wx-w--w- 1 junier junier 16 août  16 11:06 fichier
      
    • Pour remettre ce droit de lecture à tous, on peut utiliser le raccourci a au lieu de ugo :

      junier@fredportable:~/bac$ chmod a+r fichier
      junier@fredportable:~/bac$ ls -l
      total 4
      -rwxrw-rw- 1 junier junier 16 août  16 11:06 fichier
      
    • On positionne tous les droits à rwx sur fichier pour tous les utilisateurs. On aurait pu écrire chmod a=rwx fichier.

      junier@fredportable:~/bac$ chmod ugo=rwx fichier
      junier@fredportable:~/bac$ ls -l
      total 8
      -rwxrwxrwx 1 junier junier   16 août  16 11:06 fichier
      
    • On crée un répertoire nommé repertoire avec deux fichiers. On peut noter qu'un répertoire est toujours créé par défaut avec le droit d'exécution pour tous, car celui-ci permet (ou non) de traverser le répertoire.

      junier@fredportable:~/bac$ mkdir repertoire
      junier@fredportable:~/bac$ ls -l -d repertoire/
      drwxrwxr-x 2 junier junier 4096 août  16 11:10 repertoire/
      junier@fredportable:~/bac$ cd repertoire/
      junier@fredportable:~/bac/repertoire$ touch fichier2
      junier@fredportable:~/bac/repertoire$ touch fichier3
      junier@fredportable:~/bac/repertoire$ ls -l
      total 0
      -rw-rw-r-- 1 junier junier 0 août  16 11:10 fichier2
      -rw-rw-r-- 1 junier junier 0 août  16 11:12 fichier3
      
    • On modifie récursivement les droits sur le répertoire repertoire et tous ses fichiers avec l'option -R dans la commande chmod -R ugo=rx repertoire. On peut vérifier qu'on ne peut plus supprimer les fichiers contenus dans repertoire.

      junier@fredportable:~/bac$ chmod -R ugo=rx repertoire
      junier@fredportable:~/bac$ ls -l repertoire
      total 0
      -r-xr-xr-x 1 junier junier 0 août  16 11:10 fichier2
      -r-xr-xr-x 1 junier junier 0 août  16 11:12 fichier3
      junier@fredportable:~/bac$ ls -l -d repertoire/
      dr-xr-xr-x 2 junier junier 4096 août  16 11:12 repertoire/
      junier@fredportable:~/bac$ cd repertoire/
      junier@fredportable:~/bac/repertoire$ rm fichier2
      rm : supprimer 'fichier2' qui est protégé en écriture et est du type « fichier vide » ? y
      rm: impossible de supprimer 'fichier2': Permission non accordée
      
  • Le superutilisateur root peut changer le propriétaire d'un fichier avec la commande chown ou son groupe principal avec la commande chgrp :

        junier@fredportable:~/bac$ ls -l fichier
        -rw-rw-r-- 1 nobody mail 0 août  16 12:05 fichier
        junier@fredportable:~/bac$ sudo chown nobody fichier
        junier@fredportable:~/bac$ ls -l
        -rw-rw-r-- 1 nobody junier    0 août  16 12:05 fichier
        junier@fredportable:~/bac$ sudo chgrp mail  fichier
        junier@fredportable:~/bac$ ls -l
        -rw-rw-r-- 1 nobody mail      0 août  16 12:05 fichier