Droit et permission d'accès aux fichiers
Linux est un sytème multi-utilisateurs. De ce fait, tout le monde ne peut pas tout faire, excepté l’administrateur (root), qui à le droit de lire et d’écrire sur tous les fichiers et tous les répertoires, ainsi que d’executer n’importe quelle tâche inhérente au système. Il faut donc établir des règles et a fortiori donner des privilèges à certains utilisateurs et en priver à d’autres.
Droit d’accès aux fichiers
Nous avions vu lors de la courte [introduction à Linux->art22] que lorsque nous répertorions les fichiers à l’aide de la commande
ls -l
nous avions une multitude d’informations concernant ces fichiers. En l’occurrence, nous avions vu que la commande suivante renvoyait
Ce qui nous intéresse ici ce sont la première (-rw-r–r–), la troisième et la quatrième colonne(toute les deux contiennent nadir). La première colonne est relative aux droits du fichier, la troisième au nom du propriétaire du fichier, enfin la quatrième au nom du groupe propriétaire. L’objectif de cette page est donc d’étudier de manière détaillée les droits d’accès aux fichiers, leur appartenance ainsi que la modification de ces droits.
Description
Regardons un autre exemple que celui présenté plus haut
Regardons la première colonne. Celle ci fournit des informations sur les droits.
- le premier caractère de cette colonne est un d, un - ou un l, d signifie qu’il s’agit la d’un répertoire(example: images est un répertoire), - signifie qu’il s’agit d’un fichier(example: index.php est un fichier) et l un lien
- ensuite il y a trois groupements de trois caractères(rwx,r–,r-x, etc …) soit neuf caractères au total: ce sont les groupements de permission
- pour un fichier r signifie readable(en lecture), w writable(en écriture) et x executable
- pour un répertoire r signifie readable(lire le contenu du réperoire avec ls ou dir), w writable(création, déplacement et suppression de fichiers) et x executable(accès aux fichiers commande cd)
Par exemple, r-x signifie que le fichier est en lecture et executable mais pas en écriture. Un fichier possèdant l’attribut rw- est en lecture et en écriture mais pas executable, etc… Le premier groupement correspond au droit du propriétaire(user), le second au droit du groupe propriétaire(group) le troisième aux autres(others). Le fichier index.html est
- rwx lecture + écriture + executable pour le propriétaire(user)
- rwx lecture + écriture + executable pour le groupe(group)
- r– lecture pour les autres(others).
Le système de fichiers est agencée de telle manière à ce qu’un fichier ou répertoire appartienne à un utilisateur(propriétaire) et à un groupe. Tout fichier possède trois groupements:
- u user, c’est à dire le propriétaire
- g group le groupe
- o others et les autres.
La réunion de ces trois groupements forment l’ensemble de tous les utilisateurs que l’on définit par a(all users). On définit également la notion de groupe primaire de l’utilisateur(propriétaire) qui n’est rien d’autre en fait que le groupe contenant uniquement l’utilisateur. C’est le cas par exemple du répertoire suivant
TMP est un répertoire(d) dont le propriétaire est nadir et dont le groupe est primaire(le groupe est nadir).
Remarques
Le propriétaire et le groupe propriétaire peuvent àªtre différents, en effet le groupe propriétaire n’est pas forcément le groupe primaire du propriétaire (groupe contenant que le propriétaire) et le propriétaire n’est pas forcément membre du groupe. Lorsque l’on crée un fichier ou un répertoire le propriétaire est celui qui l’a crée et le groupe est le groupe primaire de l’utilisateur.
Changement de propriétés
Changement de propriétaire
La commande chown(change file owner) permet de changer de propriétaire. Seul le propriétaire actuel du fichier ou du répertoire peut lancer cette commande. à€ noter évidemment que le super-utilisateur root possède tous les droits sur tous les fichiers! On l’utilise comme suit:
chown nouvel_utilisateur nom_de_fichier
pour un fichier. Pour changer le propriétaire d’un répertoire et de ses sous-répertoires, on utilise l’option -R
chown -R nouvel_utilisateur nom_de_repertoire
Regardons l’exemple suivant. Je crée un fichier fonction.php. Je suis root.
Nous vérifions le propriétaire et le groupe du fichier
root est bien le propriétaire et le groupe primaire. root va donner la propriété du fichier {fonction.php} à nadir
vérifions les droits
le propriétaire est à présent nadir. Regardons dans le cas d’un répertoire. On crée en root un répertoire nommé PHP dans lequel on crée un fichier test.php
On vérifie les droits du répertoire et du fichier crée
le propriétaire du répertoire PHP et du fichier test.php est root. Changeons de propriétaire, nadir sera désormais propriétaire.
nadir est bien devenu le propriétaire du répertoire PHP ainsi que du fichier test.php
Changement de groupe propriétaire
La commande chgrp permet de changer de groupe propriétaire. Ce changement de groupe peut àªtre opéré par le super utilisateur root ou par le propriétaire lui màªme si et seulement si ce dernier est membre du groupe. chgrp fonctionne comme suit pour les fichiers
chgrp nouvel_utilisateur nom_de_fichier
et comme cela pour les répertoires
chgrp -R nouvel_utilisateur nom_de_repertoire
Reprenons les exemples précédent en changeant les groupes du fichier {fonction.php} et du répertoire PHP contenant le fichier test.php. Le groupe propriétaire était root, il sera à présent nadir.
nadir est bien le groupe propriétaire.
Changement simultané de propriétaire et de groupe propriétaire
On peut évidemment vouloir combiner les deux actions précédentes c’est à dire modifier le propriétaire et le groupe propriétaire de manière simultanée. On utilise la commande chown, pour un fichier cela donne
chown nouvel_utilisateur.nouveau_groupe nom_de_fichier
pour un répertoire
chown -R nouvel_utilisateur.nouveau_groupe nom_de_fichier
On peut utiliser dans le cas où le propriétaire et le groupe propriétaire sont les màªmes(groupe primaire) la commande
chown nouvel_utilisateur.nom_de_fichier
pour les fichiers
chown -R nouvel_utilisateur.nom_de_fichier
pour les répertoires. On considère encore l’exemple précédent dans lequel nadir était devenu propriétaire et groupe propriétaire. On veut à présent que le répertoire PHP soient de la propriété de nadir et de groupe propriétaire root
donne le résultat escompté.
Changement de droit des fichiers
Le changement de droit des fichiers peut àªtre opéré évidemment par le super-utilisateur root (il peut tout faire !!!) et par le propriétaire lui-màªme. On distingue trois type de modifications concernant les droits des fichiers:
- + l’ajout de droits
- - la suppression de droits
- = la fixation de droits
On distingue également trois types d’utilisateurs:
- u user, c’est à dire le propriétaire
- g group le groupe
- o others et les autres
et leur regroupement est défini par
- a all, tout les utilisateurs.
Les trois types de modifications +,-,= seront opérés sur les sur les groupes u,g,o,a en octroyant les droits r,w,x.
Pour modifier les droits d’un fichier on utilise chmod, comme suit:
chmod {utilisateur modification droit(s) nom_du_fichier}
ou si vous préférez
chmod [u g o a] [+ - =] [r w x] {nom_du_fichier}
En pratique créons le fichier {test.php}
Nous allons enlever(-) le droit de lecture(r) aux autres (o others):
Fixons(=) les droits de lecture et d’écriture(rw)sur le fichier {fonction.php} pour le user et le groupe(ug)
Enfin enlevons tout les droits sauf à l’utilisateur:
Pour les répertoires on procède comme précédemment en ajoutant l’option récursive -R:
chmod -R [u g o a] [+ - =] [r w x] {nom_du_repertoire}
On peut vouloir changer les droits de fichiers ou de répertoires non pas avec l’attribut [u g o a] [+ - =] [r w x] mais en fixant un attribut octal [0-7 0-7 0-7] …. Ca va àªtre plus clair
On fonctionne en base octale(numérotation de 0 à 7), la correspondance en base binaire est assez évidente.
Supposons que vous vouliez rendre le fichier {fonction.php} rwx pour le user et le groupe propriétaire et aucun droit pour other cela donne:
Si on veut tout les droits pour le user et aucun pour les autres cela donne:
Enfin si vous voulez seulement les droits de lecture et d’exécution pour le user et rien pour les autres, vous avez:
Les droits spéciaux
SETUID Regardons les droits du fichier {/usr/bin/passwd}
Il apparait un s. Cela signifie que le fichier est setuid. Etre setuid signifie que lorsque le programme est exécuté, il est avec le droit du propriétaire. Dans l’exemple précédent, lorsque le groupe {bin} excute la commande passwd, durant cette execution les membres de {bin} auront les droits de root.
SETGID De manière identique, un exécutable est setgid, et s’exécuter avec les droits du groupe auquel il appartient.
STICKY Un utilisateur ayant les droits d’écriture au sein d’un répertoire peut effacer n’importe quel fichier de ce répertoire. Cela peut s’avérer dangereux dans le cas où un répertoire est partagé par plusieurs personne. De ce fait, on introduit le sticky bit et dès lors l’utilisateur ne peut effacer que les fichier qui lui appartiennent. C’est le cas par exemple du répertoire {/tmp}.
Si vous avez trouvé cet article ou ce site utile et souhaitez soutenir notre travail, veuillez envisager de faire un don. Merci !
Aidez-nous