ubuntu-fr

Communauté francophone des utilisateurs de Kubuntu

[[droits]]

Piste: » droits


Droits d'accès sous Linux : gérer les accès aux fichiers

Les systèmes d'exploitation inspirés d'Unix (dont Linux fait partie) possèdent la capacité de définir de façon poussée la gestion de droits d'accès aux divers fichiers de votre OS.

Les droits d'accès définissent la possession d'un fichier ou d'un répertoire1) à un utilisateur et à un groupe d'utilisateurs. Ils gèrent aussi quelles actions les utilisateurs ont le droit d'effectuer sur les fichiers, selon qu'ils sont propriétaire du fichier, membre du groupe propriétaire du fichier ou ni l'un ni l'autre. La possession et la gestion des permissions associées s'effectue individuellement avec chaque fichier.

Les sections "Les propriétaires" et "Les permissions" expliquent de façon générale ce que sont ces attributs auxquels vous devrez faire face dans votre vie linuxienne. Notez que ce document présente, dans les sections "Changer les propriétaires" et "Changer les permissions", des moyens de modifier la propriété et les permissions d'un fichier à l'aide de la ligne de commande. Certaines de ces opérations peuvent être accomplies de manière graphique à l'aide de votre gestionnaire de fichiers préféré (Nautilus, Konqueror, Thunar, etc.).

Les propriétaires

Par la propriété d'un fichier, on désigne à quel utilisateur appartient le fichier, qui le possède. À partir de cette possession (ou non), il sera ensuite possible de définir des permissions d'accès sur le fichier.

La possession d'un fichier se définit sur trois niveaux :

  • Le premier est le propriétaire du fichier. C'est l'utilisateur à qui appartient le fichier.
C'est en général le créateur du fichier. Ainsi, un fichier créé lors d'un sudo par exemple, appartiendra à l'utilisateur root et vous serez potentiellement amené à devoir changer le propriétaire de ce fichier pour pouvoir vous en servir avec votre compte normal.
  • Le second niveau est le groupe propriétaire du fichier. Si un utilisateur est membre d'un certain groupe qui possède la propriété d'un fichier, l'utilisateur aura aussi certaines permissions particulières sur ce fichier.
  • Le troisième niveau est les autres, le reste du monde. Bref, tout un chacun n'étant ni propriétaire du fichier, ni membre du groupe propriétaire du fichier.

Faisons une analogie avec les voitures. Le propriétaire serait la personne à qui est immatriculée la voiture. Le groupe propriétaire est l'ensemble des personnes qui sont inscrites en tant que conducteurs secondaires de la voiture chez l'assureur. Enfin, les autres correspond à toutes les autres personnes n'étant ni détenteur de l'immatriculation ni inscrites en tant que conducteurs de la voiture chez l'assureur.

Certains logiciels ont besoin de pouvoir écrire dans des fichiers particuliers pour bien fonctionner, et cet accès est autorisé en fonction de l'inclusion ou non d'un utilisateur dans un groupe de membres précis. C'est le cas entre autre (mais pas exclusivement) de Virtualbox. Pour savoir comment gérer l'inclusion ou l'exclusion d'un utilisateur à un groupe d'utilisateurs, référez-vous au document traitant de la gestion des comptes utilisateurs sous Ubuntu.

Changer les propriétaires

chown, pour le propriétaire

La commande chown (change owner, changer le propriétaire) permet de changer le propriétaire du fichier. Seuls le super-utilisateur ou le propriétaire actuel d'un fichier peut utiliser chown. La commande s'utilise de la façon suivante :

~$ chown nouveau_propriétaire nom_du_fichier

Quand l'utilisateur actuel n'est pas le propriétaire actuel du fichier, il sera nécessaire de faire précéder la commande par sudo, puisqu'elle devra être effectuée avec les droits d'administration.

Imaginons un fichier foo.txt possédé par utilisateur1. La propriété de ce fichier doit passer à utilisateur2. En étant connecté au compte utilisateur1, l'exécution de cette commande passera la propriété de fichier.txt à utilisateur2 :

~$ chown utilisateur2 foo.txt

chgrp, pour le groupe propriétaire

Pour changer le groupe propriétaire, la commande à utiliser est chgrp (change group, changer le groupe). Encore une fois, seuls le super-utilisateur ou le propriétaire actuel d'un fichier peut utiliser chgrp (un membre du groupe ne peut pas changer le groupe propriétaire). La commande s'utilise de la façon suivante :

~$ chgrp nouveau_groupe_propriétaire nom_du.fichier

Quand l'utilisateur actuel n'est pas le propriétaire actuel du fichier, il sera nécessaire de faire précéder la commande par sudo, puisqu'elle devra être effectuée avec les droits d'administration.

Imaginons le même fichier foo.txt possédé par utilisateur1. La propriété de groupe de ce fichier doit passer au groupe groupe2. En étant connecté au compte utilisateur1, l'exécution de cette commande passera la propriété de groupe de foo.txt à groupe2 :

~$ chgrp groupe2 foo.txt

chown, pour changer simultanément le propriétaire et le groupe propriétaire

Pour changer à la fois le propriétaire et le groupe propriétaire, une syntaxe particulière de la commande chown peut être utilisée. Encore une fois, seuls le super-utilisateur ou le propriétaire actuel d'un fichier peut utiliser chown (un membre du groupe ne peut pas effectuer de changement de propriété). La commande s'utilise de la façon suivante :

~$ chown nouveau_propriétaire:nouveau_groupe_propriétaire nom_du.fichier

Quand l'utilisateur actuel n'est pas le propriétaire actuel du fichier, il sera nécessaire de faire précéder la commande par sudo, puisqu'elle devra être effectuée avec les droits d'administration.

Imaginons le même fichier foo.txt possédé par utilisateur1 et appartenant au groupe propriétaire groupe1. Le propriétaire doit devenir utilisateur2 et la propriété de groupe de ce fichier doit passer au groupe groupe2. En étant connecté au compte utilisateur1, l'exécution de cette commande effectuera l'opération demandée :

~$ chown utilisateur2:groupe2 foo.txt

Les permissions

Les permissions désignent ce que les diverses catégories d'utilisateurs (propriétaire d'un fichier, membres du groupe propriétaire d'un fichier et le reste du monde) ont l'autorisation d'effectuer sur un fichier donné. Par exemple, une catégorie d'utilisateurs peut avoir accès en lecture et écriture à un fichier, alors qu'une autre catégorie a accès en lecture seulement à ce même fichier.

Les permissions se définissent sur trois niveaux :

  1. la lecture d'un fichier : cette permission est nécessaire pour pouvoir accéder au contenu d'un fichier (écouter une piste audio, visionner un film, lire un texte, naviguer à l'intérieur d'un répertoire…). Cette permission est notée r (pour read, lire).
  2. l'écriture dans un fichier : cette permission est nécessaire pour pouvoir apporter des modifications à un fichier (corriger un texte et enregistrer les changements ; ajouter, modifier ou supprimer un fichier dans un dossier ; etc.). Cette permission est notée w (pour write, écrire).
  3. l'exécution d'un fichier : cette permission est nécessaire particulièrement pour les logiciels, afin qu'ils puissent être exécutés. Cette permission est notée x (pour execute, exécuter).

Par exemple, l'utilisateur toto dispose des droits de lecture et d'exécution sur le répertoire foo, mais pas la permission d'écriture sur ce répertoire ; toto peut donc exécuter les programmes présents dans ce répertoire et ouvrir les fichiers qu'il contient, mais ne peut pas les modifier ni en créer de nouveaux.

Pour chacune des trois catégories d'utilisateurs (propriétaire, membres du groupe propriétaire et reste du monde) sont définies ces trois permissions :

  • le propriétaire dispose ou non de la permission de lecture, d'écriture et d'exécution sur un fichier ;
  • le membre du groupe propriétaire dispose ou non de la permission de lecture, d'écriture et d'exécution sur un fichier ;
  • tous les autres utilisateurs disposent ou non de la permission de lecture, d'écriture et d'exécution sur un fichier.
Les répertoires : un cas particulier
Les répertoires sont un cas particulier. Pour accéder au contenu d'un répertoire (pour ouvrir un fichier ou se déplacer dans un sous-répertoire), un utilisateur doit disposer de la permission d'exécution (x) sur ce répertoire. De plus, pour être en mesure de lister le contenu d'un répertoire, l'utilisateur doit avoir la permission de lecture (r) sur ce répertoire. Pour écrire dans le répertoire, la permission d'écriture (w) doit être accordée. L'utilisateur peut disposer de ces permissions selon qu'il est propriétaire du répertoire, membre du groupe propriétaire du répertoire ou faire partie du reste du monde.

  • Un utilisateur ne disposant ni des permissions de lecture ni d'exécution ne pourra aucunement accéder au contenu du répertoire.
  • Un utilisateur ne disposant que de la permission de lecture pourra lister le contenu du dossier. (Par exemple, avec la commande ls dans une fenêtre de terminal.) Il ne pourra pas accéder au dossier avec son navigateur de fichiers.
  • Un utilisateur ne disposant que de la permission d'exécution peut ouvrir un répertoire, mais ne peut pas en voir le contenu. C'est utile, par exemple, pour traverser un répertoire dont on ne doit pas pouvoir lister le contenu.
  • Un utilisateur disposant des droits de lecture et d'exécution pourra lister le contenu d'un dossier et y entrer avec son navigateur de fichiers.

Changer les permissions

L'outil chmod (change mode, changer les permissions) permet de modifier les permissions sur un fichier. Il peut s'employer de deux façons : soit en précisant les permissions de manière octale, à l'aide de chiffres2) ; soit en ajoutant ou en retirant des permissions à une ou plusieurs catégories d'utilisateurs à l'aide des symboles r w et x, que nous avons présenté plus haut. Nous préférerons présenter cette seconde façon ("ajout ou retrait de permissions à l'aide des symboles"), car elle est probablement plus intuitive pour les néophytes. Sachez seulement que les deux méthodes sont équivalentes, c'est-à-dire qu'elles affectent toutes deux les permissions de la même manière.

chmod s'emploie de la manière suivante :

~$ chmod [catégories][+ ou -][permission] nom_du.fichier
  1. [catégories] représente, évidement, la ou les catégories d'utilisateurs à qui on ajoute ou retire des permissions. Des symboles sont utiliser pour représenter ces catégories :
    • u (user, utilisateur) représente la catégorie "propriétaire" ;
    • g (group, groupe) représente la catégorie "groupe propriétaire" ;
    • o (others, autres) représente la catégorie "reste du monde" ;
    • a (all, tous) représente l'ensemble des trois catégories.
  2. [+ ou -] signifie que l'on ajoute (+) ou retire (-) une ou des permissions à la ou aux catérogies d'utilisateurs spécifiées ;
  3. [permissions] représente la ou les permissions que l'on ajoute ou retire à la ou aux catégories d'utilisateurs spécifiées.

Exemples :

  • On ajoute la permission de lecture sur le fichier foo.txt pour le propriétaire du fichier :
    ~$ chmod u+r foo.txt
  • On retire la permission d'écriture sur le fichier foo.txt pour le groupe propriétaire du fichier :
    ~$ chmod g-w foo.txt
  • On ajoute la permission de lecture et d'écriture sur le fichier foo.txt pour le reste du monde :
    ~$ chmod o+rw foo.txt
  • On ajoute la permission de lecture, d'écriture et d'exécution sur le fichier foo.txt pour les propriétaire et groupe propriétaire du fichier :
    ~$ chmod ug+rwx foo.txt
  • On retire la permission d'exécution sur le fichier foo.txt pour le propriétaire, le groupe propriétaire et le reste du monde :
    ~$ chmod ugo-x foo.txt
    ou
    ~$ chmod a-x foo.txt
  • On peut aussi combiner plusieurs actions en même temps : on ajoute la permission de lecture, d'écriture et d'exécution sur le fichier foo.txt pour le propriétaire, on ajoute la permission de lecture et d'exécution au groupe propriétaire, on retire la permission d'écriture au groupe propriétaire, on ajoute la permission de lecture aux autres et on retire la permission d'écriture et d'exécution aux autres :
    ~$ chmod u+rwx,g+rx-w,o+r-wx foo.txt

Il est à noter que seuls le propriétaire du fichier ainsi que le super-utilisateur ont la possibilité de modifier les permissions sur un fichier. (Un membre du groupe propriétaire ne peut pas changer les permissions sur un fichier.) Quand l'utilisateur actuel n'est pas le propriétaire actuel du fichier, il sera nécessaire de faire précéder la commande par sudo, puisqu'elle devra être effectuée avec les droits d'administration.

Notez aussi que pour modifier les propriétaires et les permissions sur un fichier qui lui appartient, un utilisateur doit absolument disposer de la permission d'écriture sur ce fichier. S'il ne dispose uniquement que de la permission de lecture, il ne pourra effectuer aucun changement de droits d'accès sur ce fichier.

Deux autres options bien pratiques :

  • Pour afficher un message si et seulement si les permissions ont changé :
    ~$ chmod -c <option> <fichier> 
  • Pour travaillera récursivement sur tous le fichiers d'un répertoire et de ses sous-répertoires :
    ~$ chmod -R repertoire 
Attention chmod -R mal employé peut rendre votre système définitivement inutilisable. Voir chmod -R /

chown ou chmod : lequel dois-je utiliser ?

On observe souvent dans le forum des demandes d'aide concernant l'accès restreint à des fichiers : comment en ouvrir l'accès à son utilisateur ? Trop fréquemment, la réponse se résume à un automatique chmod 777 sur le fichier, ou encore un chown identifiant:identifiant. Pourtant, comme nous l'avons vu, chown et chmod ont des buts différents : le premier modifie les propriétaires d'un fichier, alors que le second modifie les permissions sur ce fichier. Lequel préférer ? La réponse est aussi simple qu'elle ne l'est pas : ça dépend de ce que vous entendez faire avec votre fichier !

Pour illustrer notre propos, imaginons un fichier foo.txt appartenant à l'utilisateur 'root' et au groupe 'root'. Ce fichier a le mode 420 (soit lecture seule pour le propriétaire, écriture seule pour le groupe propriétaire et aucun accès pour le reste du monde).

  • Avec uniquement chown, le propriétaire d'un fichier est changé, mais les permissions sur ce fichier sont maintenues. Exécutons la commande suivante :
    ~$ sudo chown toto foo.txt

    L'utilisateur 'toto' devient désormais le propriétaire du fichier. 'toto' a maintenant accès en lecture seule à ce fichier (puisque les permissions pour le propriétaire du fichier sont limitées à la lecture seule pour le propriétaire du fichier). Les permissions ne sont pas modifiées.

  • Avec uniquement chmod, les permissions d'un fichier sont modifiées, mais les propriétaire et groupe propriétaire sont maintenus. Exécutons la commande suivante :
    ~$ sudo chmod ug+rw foo.txt
    ~$ sudo chmod o+r foo.txt

    Le propriétaire du fichier et le groupe propriétaire du fichier disposent désormais de l'accès en lecture et écriture sur le fichier foo.txt, et le reste du monde y a accès en lecture seule. L'utilisateur 'toto' n'a donc accès qu'en lecture au fichier, puisqu'il n'est ni le propriétaire ('root') ni membre du groupe propriétaire (groupe 'root') ; il n'a donc que les accès du reste du monde.

Gné??? Allons-y plus simplement avec un comportement typique ;-) :

  1. Si un fichier ou dossier contient des informations relativement sensibles ou privées, utilisez conjointement chown et chmod pour régler des propriétaires adéquats et des permissions qui ne permettent pas l'accès total au fichier.
  2. Si un fichier ou dossier ne contient que de l'information généraliste ou publique, autorisez simplement l'accès en lecture, écriture et exécution au fichier avec chmod et ne vous préoccupez pas des propriétaires.

un petit lien utile sur les droits et leur fonctionnement de "base" :http://www.ac-creteil.fr/reseaux/systemes/linux/debian/deb-tp-droits.html

Contributeurs : AlexandreP, Ner0lph, Sbrunner

1) Dans la suite de ce document, nous n'emploierons plus que le terme « fichier ». De toute façon, c'est bien connu : sous *nix, tout est fichiers… Un répertoire est traité de la même façon qu'un fichier.
2) Quand on vous propose d'effectuer un chmod 777 sur un fichier, cette représentation des permissions est la manière octale. Chaque chiffre correspond à l'ensemble des permissions attribuées à chacune des catégories d'utilisateurs. Cette manière chiffrée est sans doute moins intuitive pour les néophytes. Pour plus d'informations sur la manière octale d'affecter des permissions, rapportez-vous à l'excellent Léa-Linux.

droits.txt · Dernière modification: 2008/10/22 17:12 par pipou24
Le contenu de ce wiki est sous double licence : CC BY-SA et GNU FDL