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.
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 fichierfiche.ods
sera/home/elsa/documents/fiche.ods
. Ici, le répertoireelsa
est un répertoire enfant dehome
, etdocuments
est un répertoire enfant deelsa
.
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épertoiremax
estimages/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)
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étairejunier
, pour groupejunier
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étaireroot
, pour grouperoot
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 commandechmod
.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 deugo
: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
surfichier
pour tous les utilisateurs. On aurait pu écrirechmod 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 commandechmod -R ugo=rx repertoire
. On peut vérifier qu'on ne peut plus supprimer les fichiers contenus dansrepertoire
.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 commandechown
ou son groupe principal avec la commandechgrp
: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