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 les permissions d'accès aux divers fichiers et répertoires de votre ordinateur.
Ces droits d'accès définissent la possession d'un fichier ou d'un répertoire à 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 ou répertoire.
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 catégories :
u
). Il s'agit généralement du créateur du fichier. (Prenez note qu'un fichier créé par une commande exécutée à l'aide de sudo
sans paramètre appartiendra par défaut à l'utilisateur root
; vous serez potentiellement amené à devoir changer le propriétaire de ce fichier pour pouvoir vous en servir avec votre propre compte utilisateur.)g
). 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.o
). 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 au nom de laquelle la voiture est immatriculée. 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 correspondent à toutes les autres personnes n'étant ni détenteur de l'immatriculation ni inscrites en tant que conducteurs de la voiture chez l'assureur.
Les permissions désignent ce que les diverses catégories d'utilisateurs (utilisateur 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.
Pour chaque fichier ou répertoire, chacune de ces trois catégories d'utilisateurs (utilisateur propriétaire, membres du groupe propriétaire et reste du monde) sont définies les trois permissions lecture, écritures et exécutions :
Pour chacun :
r
(pour read, lire) :ls
), mais pas d'y accéder (voir exécution ci-dessous).w
(pour write, écrire) :x
(pour execute, exécuter) :x
permet de l'utiliser en tant que tel - y accéder (commande cd
), utiliser les fichiers et sous-répertoires qu'il contient (au delà de la simple liste accessible par le droit en lecture sur le répertoire).
Ces droits sont affichés par une série de 9 caractères, associés 3 par 3 (rwx
rwx
rwx
, ou rwxrwxrwx
) qui définissent les droits des 3 identités (u
, g
et o
). Le caractère -
signifie que le droit est absent.
Plus proche du langage machine et plus rapide à écrire, on les trouve aussi la plupart du temps rédigés en octal, par un nombre allant de 000
à 777
. C'est une représentation plus directe des bits qui stockent cette information. Voir le chapitre dédié sur la page Permissions.
Par exemple, si on dispose des droits de lecture et d'exécution sur un répertoire, mais pas d'écriture (r-x
/ 5
), on peut y exécuter les scripts qu'il contient et ouvrir ses fichiers, mais on ne peut pas les modifier, les renommer, ni en créer de nouveaux.
x
) sur ce répertoire.r
) sur ce répertoire.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.
ls
dans une fenêtre de terminal.) Il ne pourra pas accéder au dossier avec son navigateur de fichiers.Lorsqu'un nouveau fichier est créé, celui-ci obtient automatiquement certaines permissions. On peut si besoin ajuster ce comportement du système.
Par défaut, l'utilisateur propriétaire d'un nouveau fichier ou répertoire est son créateur et le groupe propriétaire, le groupe principal de son créateur. Par exemple, si l'utilisateur toto
, dont le groupe principal est utilisateurs
, crée un nouveau fichier ou dossier, celui-ci appartient à toto:utilisateurs
.
On peut changer ce comportement pour un répertoire en particulier, en positionnant son bit Setgid.
Plus généralement, les bits Setuid et Setgid positionnés sur un fichier exécutable permettent de l'exécuter par défaut avec les permissions de ses propriétaires (respectivement utilisateur et groupe).
Dans le cas d'un répertoire (dont le droit en "exécution" consiste en fait à le parcourir), le bit Setgid permet justement d'utiliser le groupe propriétaire du répertoire comme groupe propriétaire par défaut des données qui y sont créées, plutôt que le groupe principal de l'utilisateur courant (qui exécute la commande).
On positionne un Setgid sur un répertoire grâce à la commande chmod g+s
:
chmod g+s /chemin/du/répertoire
On peut le supprimer grâce à la commande chmod g-s
.
À ce sujet, voir par exemple cette documentation.
Les permissions accordées par défaut sont celles déterminées par un paramètre particulier appelé le masque utilisateur (ou umask). Dans Ubuntu, le umask par défaut est 022
, ce qui accorde les permissions 644
(rw-r--r--
) pour les fichiers, et 755
(rwxr-xr-x
) pour les répertoires :1)
rw-
)r--
)r--
)rwx
)r-x
)r-x
).Le masque utilisateur peut être modifié à différents niveaux :
007
donne tous les droits aux utilisateurs et groupes propriétaires et aucun aux autres (fichiers 660
et répertoires 770
). Il peut être utile dans certains cas de mettre 077
pour restreindre les droits au seul utilisateur propriétaire (600
et 700
).
umask
. Tout nouveau fichier ou dossier créé durant la session courante recevra les droits tels que définis par le masque utilisateur, mais le masque utilisateur par défaut sera de nouveau utilisé à l'ouverture d'une nouvelle session utilisateur.~/.bashrc
(propre à la console et la ligne de commande) ou ~/.profile
(plus généralement) :umask 007
/etc/pam.d/common-session
:session optional pam_umask.so umask=007
/etc/profile
: umask 007
Ces nouveaux masque utilisateurs sont utilisés même après une nouvelle ouverture de session.
Les droits d'accès précisés sur un fichier ou un dossier peuvent être remplacés par d'autres droits d'accès. L'ensemble des opérations est abordé sur la page Permissions.
Comment sont déterminées les droits d'accès sur un volume ?
Par défaut, un nouveau système de fichiers est automatiquement attribué à l'utilisateur root
et au groupe d'utilisateurs root
et les droits qui y sont appliqués sont ceux du masque utilisateur par défaut (voir ci-dessous).
Pour modifier les droits d'accès liés à un système de fichiers, vous devez modifier les droits d'accès de son point de montage. Par exemple, pour modifier les droits d'accès d'un volume /dev/sdb1
monté dans le dossier /media/NouvellePartition/
, vous devez effectuer les modifications de droits sur le dossier /media/NouvellePartition/
comme s'il s'agissait d'un dossier quelconque. Les modifications de droits d'accès sont conservés même après le démontage du système de fichiers.
Ceci s'applique uniquement aux systèmes de fichiers ext2, ext3, ext4, ReiserFS, Reiser4, HFS, HFS+ et autres compatibles avec la norme POSIX.
Ceci concerne essentiellement les systèmes de fichiers FAT (FAT32, exFAT), vFAT et NTFS. Ces systèmes de fichiers ne gèrent pas les droits d'accès selon la norme POSIX.
Ces droits sont émulés par leur pilote spécifique au montage du système de fichiers et ils ne sont pas modifiables tout le temps que celui-ci est monté. Les propriétés et permissions sont déterminées par les options de montage passées à la commande mount
.
Pour modifier les droits d'accès d'un tel système de fichiers, il faut procéder au démontage du système de fichiers, puis à son remontage avec des options différentes.
Contributeurs : AlexandreP, Ner0lph, Sbrunner,Newbies, bcag2, krodelabestiole