Dans mon CMS, j'ai remarqué que les répertoires ont besoin de l'exécutable bit ( +x
) défini pour que l'utilisateur puisse les ouvrir. Pourquoi l'autorisation d'exécution est-elle requise pour lire un répertoire et comment fonctionnent-elles dans Linux?
linux
permissions
directory
Nick.h
la source
la source
chmod 771 dirOne
), vous ne pouvez pas lister le contenu de dirOne. MAIS si elle contient un sous-répertoire "dirTwo" avec des droits définis comme (chmod 774 dirTwo
), vous pouvez lister son contenu!Réponses:
Lorsque vous appliquez des autorisations à des répertoires sous Linux, les bits d'autorisation ont une signification différente de celle des fichiers classiques.
r
) permet à l'utilisateur concerné de répertorier les fichiers du répertoire.w
) permet à l’utilisateur concerné de créer, renommer ou supprimer des fichiers du répertoire et de modifier les attributs du répertoire.x
) permet à l’utilisateur concerné d’entrer dans le répertoire et d’accéder aux fichiers et aux répertoiresT
out
si le bit d'exécution est défini pour les autres) indique que les fichiers et les répertoires de ce répertoire ne peuvent être supprimés ou renommés que par leur propriétaire (ou root).la source
+x
sur le répertoire, l'accès aux fichiers inodes est autorisé via ce répertoire spécifique (rien de moins, rien de plus, enfin… peut-chdir
être+x
aussi besoin ). Pour lire ou écrire le contenu d'un fichier, l'utilisateur doit aussi+r
/+w
sur ce fichier, mais il s'agit d'autorisations distinctes (elles ne remplacent rien).+x
sur le répertoire accorde l'accès aux fichiers inodes" - Cela semble être un bon némonique, mais peut-être ne raconte-t-il pas toute l'histoire? Sans le bit d'exécution défini sur un répertoire, vous ne pouvez pas modifier le nom de fichier d'un fichier de ce répertoire. Je me demande pourquoi, car le nom de fichier est stocké dans une entrée de répertoire, pas un inode.D'abord, réfléchissez: qu'est-ce qu'un répertoire? C'est juste une liste d'éléments (fichiers et autres répertoires) qui y vivent. Donc: répertoire = liste de noms.
Lire bit = Si défini, vous pouvez lire cette liste. Donc, par exemple, si vous avez un répertoire nommé
poems
:ls poems
et vous obtiendrez une liste des objets qui y vivent (-l
ne révélera aucun détail!).touch poems/so <TAB> poems/somefile
.poems
votre répertoire de travailcd
.Write bit = Si défini, vous pouvez modifier cette liste, c'est-à-dire vous pouvez {ajouter, renommer, supprimer} des noms. Mais! En réalité, vous ne pouvez le faire que si le bit d'exécution est également défini.
Execute bit = Définissez ce répertoire comme votre répertoire de travail
cd
. Vous avez besoin de cette permission si vous voulez:Cas intéressant 1 : Si vous disposez des autorisations d'écriture + exécution sur un répertoire, vous pouvez {supprimer, renommer} les éléments qui y sont contenus même si vous ne disposez pas d'une interdiction 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 avez l'autorisation d'écriture sur un fichier résidant dans celui-ci, vous ne pouvez pas supprimer le fichier (car il implique de le supprimer de la liste). Cependant, vous pouvez en effacer le contenu. Par exemple, 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 le bit = Vous pouvez lire les noms sur la liste.
Write bit = Vous pouvez {ajouter, renommer, supprimer} les noms de la liste SI le bit d'exécution est également défini.
Execute bit = Vous pouvez faire de ce répertoire votre répertoire de travail.
PS: L'article mentionné par Kusalananda est une bonne lecture.
la source
x
bit pour tout accès à ce fichier: carcat a/b/c/d
, j'ai besoin dux
bit sur tousa
,b
etc
même si je ne les utilise pas en tant que cwd.x
permission sur le répertoire, si vous n'avez pas lax
permission sur le fichier à l' intérieur, vous ne pouvez pas vraiment "exécuter" le fichier. Vous ne pouvez le faire quecat
par exemple, mais vous ne pouvez pas exécuter le fichier lui-même.ls -l
travailler pour un dossier, vous devez avoir à la fois une autorisationr
et unex
permission.J'ai préparé ce tableau avec toutes les autorisations possibles et leurs effets pratiques.
(*) Uniquement 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 :
la source
-W-
fonctionnellement équivalent aux---
annuaires. Pas très intuitif. Bien sûr, ces types de bits de bas niveau ne le sont souvent pas.-W-
, je pourrais renommer le répertoire (dans un répertoire avec un sticky bit) mais pas avec---
. Cela semble être une différenceVoici un bon article à ce sujet.
Sommaire:
Un répertoire avec son
x
bit défini permet à l'utilisateur decd
(changer de répertoire) dans ce répertoire et d'accéder aux fichiers qu'il contient.Détails:
Lire (
r
)Écrire (
w
)Exécuter (
x
)Voici quelques exemples qui devraient faciliter la compréhension:
Il y a encore plus d'informations dans l' article de Hacking Linux Exposed .
la source
Extrait du livre de Robert Love "Programmation du système LINUX" chapitre 1 section permission-
la source
Pour toute opération accédant à un fichier ou à un répertoire, il faut 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 final. Donc, pour les répertoires, vous pouvez penser que le bit d’exécution signifie «résolvable».
Prenons le chemin
/a/b/c.txt
comme exemple, disons que l'utilisateur a 1) exécuter l'autorisation sur/
et/a
; 2) a l'autorisation de lecture sur/a/b
; 3) lire et écrire la permission sur/a/b/c.txt
.L'utilisateur échouera à lire (liste)
/a
, car il n'a pas de permission de lecture. Mais la résolution du chemin n'échoue pas.L'utilisateur sera en mesure de lire (liste)
/a/b
, parce que l'utilisateur a l' autorisation d' exécution sur/
,/a
et l' autorisation de lecture/a/b
. Notez que, lors de la lecture/a/b
, le nom du fichierc.txt
est visible, mais les métadonnées (par exemple, la taille du fichier) et le contenu ne l’est pas, car le nom du fichier est stocké dans le répertoire, pas dans le fichier, mais les métadonnées sont stockées dans l’inode du fichier.L'utilisateur ne parviendra pas à lire
/a/b/c.txt
, parce que lors de la résolution du chemin de/
la/a
à/a/b
, elle échoue à/a/b
car l'utilisateur n'a pas l' autorisation d' exécution.Voir aussi comment un chemin est résolu dans un fichier .
la source
Une analogie utile consiste à considérer chaque fichier comme un livre et chaque répertoire comme une pièce dans laquelle les livres sont conservés.
Il y a des règles pour pouvoir lister tous les noms d'une pièce: le bit de lecture pour les répertoires. Règles pour supprimer un livre de la salle: le bit d'écriture pour les répertoires. Et règles pour entrer dans une salle et explorer: le répertoire résultant exécute bit.
Ces règles sont distinctes et différentes des règles de chaque livre. Il existe des règles permettant à quelqu'un d'ouvrir un livre et de lire son contenu: le ou les bits de lecture de chaque fichier. Il existe des règles pour modifier le contenu d'un livre: le ou les bits d'écriture de 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 existe un bit de lecture pour le propriétaire, un bit de lecture pour le (s) groupe (s) et un bit de lecture pour tout le monde (les autres). Si l'un de ces trois bits est défini pour un utilisateur spécifique, le bit de lecture de cet utilisateur est actif. Peu importe la façon que peu a été révélé actif soit par u ser ou g roupe ou o utres, il a les mêmes résultats efficaces.
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 de lecture pour les répertoires est requis: pour contrôler qui est autorisé à répertorier le contenu de la salle (titres du livre).
Et le bit d’ exécution sert à contrôler qui peut entrer dans la salle des livres.
la source
La signification de Execute pour les répertoires est assez claire. Comme il n’existe pas d’autorisation Traverse, contrairement à Windows, vous devez surcharger quelque chose. Les concepteurs ont choisi Execute, ce qui cause une confusion sans fin. En tant que spécialiste de la sécurité informatique, attribuer des droits d'exécution à quelque chose que vous n'avez pas l'intention d'exécuter, Exécuter semble louche.
la source
GENERIC_EXECUTE
et ce qu'il est.