web-dev-qa-db-fra.com

Exécuter vs lire le bit. Comment fonctionnent les autorisations de répertoire sous Linux?

Dans mon CMS, j'ai remarqué que les répertoires ont besoin du bit exécutable (+x) défini pour que l'utilisateur les ouvre. Pourquoi l'autorisation d'exécution est-elle requise pour lire un répertoire et comment fonctionnent les autorisations de répertoire sous Linux?

402
Nick.h

Lors de l'application d'autorisations aux répertoires sous Linux, les bits d'autorisation ont des significations différentes de celles des fichiers normaux.

  • Le bit de lecture (r) permet à l'utilisateur concerné de lister les fichiers dans le répertoire
  • bit d'écriture (w) permet à l'utilisateur concerné de créer, renommer ou supprimer des fichiers dans le répertoire, et de modifier les attributs du répertoire
  • Le exécutez le bit (x) permet à l'utilisateur affecté d'entrer dans le répertoire et d'accéder aux fichiers et répertoires à l'intérieur
  • bit collant (T, ou t si le bit d'exécution est défini pour les autres) indique que les fichiers et répertoires de ce répertoire ne peuvent être supprimés ou renommés que par leur propriétaire (ou racine)
378
Chris Down

Tout d'abord, pensez: Qu'est-ce qu'un répertoire? Ce n'est qu'une liste d'éléments (fichiers et autres répertoires) qui y vivent. Donc: répertoire = liste de noms.

bit de lecture = S'il est défini, vous pouvez lire cette liste. Ainsi, par exemple, si vous avez un répertoire nommé poems:

  • Vous pouvez ls poems et vous obtiendrez une liste des éléments qui y vivent (-l ne révélera aucun détail!).
  • Vous pouvez utiliser la complétion en ligne de commande, c'est-à-dire touch poems/so <TAB> poems/somefile.
  • Vous ne pouvez pas faire de poems votre répertoire de travail (c'est-à-dire cd dedans).

Bit d'écriture = Si défini, vous pouvez modifier cette liste, c'est-à-dire que vous pouvez {ajouter, renommer, supprimer} des noms dessus. Mais! Vous ne pouvez le faire que si le bit d'exécution est également défini.

Execute bit = Faites de ce répertoire votre répertoire de travail, c'est-à-dire cd. Vous avez besoin de cette autorisation si vous souhaitez:

  • accéder (lire, écrire, exécuter) aux éléments qui y vivent.
  • modifier la liste elle-même, c'est-à-dire ajouter, renommer, supprimer des noms dessus (bien sûr, le bit d'écriture doit être défini dans le répertoire).

Cas intéressant 1: Si vous avez des autorisations d'écriture + exécution sur un répertoire, vous pouvez {supprimer, renommer} les éléments qui y vivent même si vous n'avez pas de permission d'écriture sur ces éléments. (utilisez un peu collant pour éviter cela)

Cas intéressant 2: Si vous disposez d'une autorisation d'exécution (mais pas d'écriture) sur un répertoire ET que vous disposez d'une autorisation d'écriture sur un fichier vivant à l'intérieur, vous ne pouvez pas supprimer le fichier (car cela implique de le supprimer de la liste) . Cependant, vous pouvez effacer son contenu, par ex. s'il s'agit d'un fichier texte, vous pouvez utiliser vi pour l'ouvrir et tout supprimer. Le fichier sera toujours là, mais il sera vide.

Sommaire:

Lire bit = Vous pouvez lire les noms sur la liste.
Bit d'écriture = Vous pouvez {ajouter, renommer, supprimer} des noms dans la liste SI le bit d'exécution est également défini.
bit d'exécution = Vous pouvez faire de ce répertoire votre répertoire de travail.

PS: L'article mentionné par Kusalananda est une bonne lecture.

274
Baldrick

J'ai préparé ce tableau avec toutes les autorisations possibles et leurs effets pratiques.

linux directory permissions

(*) Seuls les noms de fichiers: les autres attributs tels que la taille ou la date ne sont pas accessibles. Par exemple. vous pouvez utiliser la touche de tabulation pour la saisie semi-automatique mais pas la commande ls.

Quelques réflexions :

  • Avec X non défini , R et W sont pour la plupart inutiles.
  • [~ # ~] x [~ # ~] seul la désactivation de RW vous donne un faux sentiment de sécurité car vous pourriez lire aveuglément et écrire le contenu des fichiers et accéder aux sous-répertoires. Vous devez être sûr que tous les enfants directs du répertoire ont des autorisations explicites.
  • Vous utiliserez rarement d'autres valeurs que:
    • 0 : Pas d'accès.
    • 1 : accès minimum permettant la traversée.
    • 5 : Autorise la lecture/écriture, mais ne modifie pas la structure de l'arborescence de répertoires elle-même.
    • 7 : Accès complet.
49
David

Voici un bon article à ce sujet.

Sommaire:

Un répertoire avec son jeu de bits x permet à l'utilisateur de cd (changer de répertoire) dans ce répertoire et d'accéder aux fichiers qu'il contient.

Détails:

  • Lire (r)

    La possibilité de lire les noms des fichiers stockés dans ce répertoire.

  • Écriture (w)

    La possibilité de renommer des fichiers dans le répertoire, de créer de nouveaux fichiers ou de supprimer des fichiers existants, si vous disposez également des autorisations Exécuter. Si vous n'avez pas de perms d'exécution, alors les perms d'écriture n'ont aucun sens.

  • Exécuter (x)

    La possibilité de cd dans ce répertoire et d'accéder aux fichiers de ce répertoire.

Voici quelques exemples qui devraient faciliter la compréhension:

# "Full Access".  Reegen can list, create, delete, rename, delete,
# and stat any files in dir.
# Access to file contents is subject to the permissions
# of the file itself.
# New files can be created, any file can be deleted, regardless of
# file permissions.
drwx------  1 reegen    reegen          4096 Jan 01 2003  dir

# Reegen can do everything in the "Full Access" list except create,
# delete, or rename files in this directory.
dr-x------  1 reegen    reegen          4096 Jan 01 2003  dir

# Reegen can do everything in the "Full Access" list except list the
# filenames in this directory.  If she suspects there is a file
# named "program" she can list it, but cannot do an 'ls'
# of the directory itself.  She can access any file (file
# permissions permitting) if she knows its name.  She can
# create new files, or rename/delete existing ones.
d-wx------  1 reegen    reegen          4096 Jan 01 2003  dir

# Reegen cannot create or delete any files in this directory.
# She can access any file (permissions permitting) if she
# knows its name already.
d--x------  1 reegen    reegen          4096 Jan 01 2003  dir

Il y a encore plus d'informations dans le article Hacking Linux Exposed .

45
Kusalananda

Extrait de du livre de Robert Love "Programmation système LINUX" chapitre 1 permission-

enter image description here

6
alhelal

Pour toute opération accédant à un fichier ou un répertoire, il doit d'abord résoudre le chemin d'accès au fichier ou au répertoire. La résolution nécessite que l'utilisateur dispose d'une autorisation d'exécution sur tous les répertoires du chemin, à l'exception du composant de chemin final. Ainsi, pour les répertoires, vous pouvez penser que le bit d'exécution signifie "résoluble".

Prendre le chemin /a/b/c.txt à titre d'exemple, disons que l'utilisateur a 1) exécuter l'autorisation sur / et /a; 2) a l'autorisation de lecture sur /a/b; 3) autorisation de lecture et d'écriture sur /a/b/c.txt.

  • L'utilisateur ne lira pas (liste) /a, car il ne dispose d'aucune autorisation de lecture. Mais la résolution du chemin d'accès n'échoue pas.

  • L'utilisateur pourra lire (liste) /a/b, car l'utilisateur dispose de l'autorisation d'exécution sur /, /a et autorisation de lecture sur /a/b. Notez que lors de la lecture de /a/b, le nom de fichier c.txt est visible, mais les métadonnées (par exemple, la taille du fichier) et le contenu ne le sont pas, car le nom de fichier est stocké avec le répertoire, pas avec le fichier, mais les métadonnées sont stockées dans l'inode du fichier.

  • L'utilisateur ne lira pas /a/b/c.txt, car lors de la résolution du chemin à partir de / à /a à /a/b, il échoue à /a/b puisque l'utilisateur ne dispose pas de l'autorisation d'exécution.

Voir aussi comment un chemin d'accès est résolu en un fichier .

4
Dagang

Une analogie utile consiste à considérer chaque fichier comme un livre et chaque répertoire comme une pièce où les livres sont conservés.

Il existe des règles pour pouvoir lister tous les noms dans une pièce: le bit de lecture pour les répertoires. Règles pour retirer un livre de la salle: le bit d'écriture pour les répertoires. Et les règles pour entrer dans une pièce et l'explorer: le répertoire résultant exécute le bit.

Ces règles sont distinctes et différentes des règles de chaque livre. Il existe des règles pour permettre à quelqu'un d'ouvrir un livre et de lire son contenu: le ou les bits de lecture pour chaque fichier. Il existe des règles pour modifier le contenu d'un livre: le ou les bits d'écriture pour chaque fichier. Et pour exécuter un fichier: le ou les bits d'exécution de chaque fichier.

J'écris des bits car il y a trois bits pour chaque action. Il y a un bit de lecture pour le propriétaire, un bit de lecture pour le (s) groupe (s) et un bit de lecture pour tous les autres (autres). Si l'un de ces trois bits est défini pour un utilisateur spécifique, cet utilisateur a le bit de lecture actif. Peu importe comment ce bit a été trouvé actif par ser ou g roup ou o ther, il a le même effet résultats.

Ainsi, un utilisateur pourrait être autorisé à entrer dans une pièce et retirer des livres de la bibliothèque, mais pas autorisé à lire le contenu du même livre.

C'est pourquoi un bit read pour les répertoires est requis: pour contrôler qui est autorisé à lister le contenu de la salle (titres de livres).

Et le bit exécuter est utilisé pour contrôler qui peut entrer dans la salle des livres.

2
Isaac

La signification de Exécuter pour les répertoires est assez claire. Comme il n'y a pas d'autorisation Traverse, contrairement à Windows, vous devez surcharger quelque chose. Les concepteurs ont choisi Exécuter, ce qui provoque une confusion sans fin. En tant que responsable de la sécurité informatique, attribuer des droits d'exécution à quelque chose que vous n'avez pas l'intention d'exécuter semble douteux.

0
NemoX