Aller au contenu

11 Cours Exos Droits des fichiers

Droits et permissions⚓︎

(source iamjmm.ovh)

Contexte⚓︎

Les systèmes UNIX étant des systèmes multi-utilisateurs, un ordinateur est partagé entre plusieurs utilisateurs ayant tous un environnement de travail propre, avec des droits et des interdictions.

L'OS permet de gérer ces droit, et un super-utilisateur (root) possède tous les droits, ainsi que la possibilité d'attribuer ou de retirer des droits à certains utilisateurs, ou plutôt groupes d'utilisateurs.

Dans la suite, nous nous intéressons aux droits des fichiers et dossiers.

Différents utilisateurs et différents droits⚓︎

Pour chaque fichier ou dossier, on distingue trois types d'utilisateurs :

  • le propriétaire ou utilisateur courant (u comme user),
  • le groupe propriétaire (g comme group),
  • Les autres utilisateurs (qui ne sont pas propriétaires ou dans le groupe : o comme other)

Concernant les droits :

  • Lecture : noté r comme read.
  • Écriture : noté w comme write.
  • Exécution : noté x comme execute.

Ces droits peuvent différer selon si l'on parle d'un fichier ou d'un dossier :

Pour un fichier, si un utilisateur a le droit :

  • lecture (noté r): il a le droit d'afficher le contenu du fichier.
  • écriture (noté w): il a le droit de modifier le contenu du fichier.
  • exécution (noté x) : il a le droit d'exécuter le fichier s'il s'agit d'un fichier exécutable (script, programme).

Pour un répertoire (ou dossier), si un utilisateur a le droit : - lecture (noté r) : il peut lire le contenu du dossier c'est-à-dire lister les fichiers et sous-dossiers (avec ls). - écriture (noté w) : il peut modifier le contenu du dossier, c'est-à dire créer ou supprimer des fichiers ou sous-dossiers. - exécution (noté x) : il peut traverser le dossier, c'est à dire accéder aux fichiers du répertoire et s'y déplacer (avec cd).

Visualisation des droits⚓︎

Ouvrir JSLinux :

https://bellard.org/jslinux/vm.html?url=https://bellard.org/jslinux/buildroot-x86.cfg

Saisir la commande ls -l pour obtenir des informations détaillées :

On peut lire diverses informations de gauche à droite comme le type (dossier si commence par d, fichier si commence par -), les droits des différents utilisateurs (u, g, o de gauche à droite, un tiret indiquant l'absence de permission), le nombre de liens (lié à l'allocation de mémoire), le propriétaire (root), le groupe propriétaire (root également), la taille en octet, la date de dernière modification, le nom.

Plus de détails ici : http://www.commandeslinux.fr/commande-ls/

Ainsi, pour le fichier hello.c, le propriétaire a les droits en lecture/écriture mais pas en exécution (rw-) ; le groupe et les autres utilisateurs ont uniquement le droit de lecture (r--).

Comme ci-dessous, créer un fichier "unfichier.txt" avec touch, constater sa présence et faire afficher les droits :

Quelles sont les permissions liées à ce nouveau fichier pour chaque groupe d'utilisateur ?

Exercice 1 :⚓︎

(Interprétation de droits)
Interpréter le code suivant :

drwxr-xr-x 2 john friends 4096 jan 28 18:07 unDossier

Petite aide :

Exercice 2 :⚓︎

(Interprétation de droits suite)

Voici un exemple : rwxr--r-- sera traduit par la valeur octale \(400+200+100+40+4 = 744\).
On peut aussi le représenter ainsi : rwxr--r-- correspond en binaire à 111 100 100 , soit \(7\), puis \(4\), puis \(4\), que l'on va écrire \(744\).

Compléter le tableau suivant :

Changement des droits⚓︎

Seuls root et le propriétaire d'un fichier peuvent changer ses permissions d'accès. Ces changements sont possibles via la commande chmod (pour change mode).

Tester le code suivant sur le fichier texte créé au préalable :

Observer les droits du fichier unfichier.txt. Quels sont les changements ? Expliquer.

Autre méthode pour changer les droits sans utiliser la valeur octale (base 8), sachant que :

  • + signifie : « Ajouter le droit » ;
  • - signifie : « Supprimer le droit » ;
  • = signifie : « Affecter le droit ».

Tester et comprendre :

Ainsi que :

Bash
chmod ugo+rwx unfichier.txt

chmod u-x,g-x,o-wx unfichier.txt

chmod u=rwx,g=r,o=- unfichier.txt

Observer les effets et expliquer.

En résumé, on retient chmod [ugo][+-=][rwx] fichier

Exercice 3 :⚓︎

(Valeur octale)
À quels droits correspondent les valeurs octales suivantes : 451 ; 742 ; 254 et 650 ?

Exercice 4 :⚓︎

(Vérification des droits)

  1. Dans JSLinux, créer un fichier mf.txt, l'éditer avec un contenu de votre choix à l'aide de la commande vi, puis quitter en sauvegardant comme dans l'ex 5.

  2. Supprimer le droit d'écriture du propriétaire avec chmod.

  3. Éditer à nouveau le fichier avec vi et essayer de quitter en sauvegardant avec :x
    Que se passe-t-il ? Quitter avec :q!

Changement de propriétaire et changement de groupe⚓︎

Il est possible de changer le propriétaire d'un fichier avec chown (pour change owner) et chgrp (pour change group).

Exercice 5 :⚓︎

(Changements user/group)

  1. Créer un fichier mf avec touch

  2. Créer un nouvel utilisateur nobody avec la commande adduser nobody

  3. Saisir chown nobody mf. Observer le changement de propriétaire.

  4. Créer un nouveau groupe nobodysgroup avec la commande addgroup nobodysgroup

  5. Saisir chgrp nobodysgroup mf. Observer le changement de groupe propriétaire.

Pour finir, voici quelques permissions habituelles (source tuteurs-ens.fr) :