6 votes

Comprendre les autorisations d'accès aux répertoires sous UNIX

J'ai essayé d'apprendre Unix et Terminal un peu mieux, et j'ai rencontré des comportements que je ne comprends pas. J'espère que quelqu'un pourra m'expliquer ce qui m'échappe.

Dernièrement, j'ai expérimenté les permissions sur les répertoires. D'après ce que j'ai (cru) comprendre, la permission de lecture signifie que vous pouvez voir le contenu d'un répertoire (c'est-à-dire, ls directory devrait énumérer le contenu du répertoire) ; l'autorisation d'écriture signifie que vous pouvez créer, modifier ou supprimer des fichiers dans le répertoire (c'est-à-dire, touch directory/newfile ou vi directory/fileimade ou rm directory/fileihate tout devrait fonctionner) ; et l'autorisation d'exécution signifie que vous pouvez faire du répertoire votre répertoire de travail (c'est-à-dire, cd directory devrait fonctionner)

Mais ce n'est pas ce que je constate.

Si j'ai r-- sur un répertoire, je reçois des erreurs lorsque j'essaie d'utiliser la fonction cd directory o touch directory/newfile comme prévu. Mais si je lance ls directory -- bien, je n'obtiens pas d'erreur, mais aucun fichier n'est listé, même si je sais qu'il y a des fichiers que je possède et/ou sur lesquels j'ai des droits dans le répertoire. Donc, ls s'est exécutée avec succès, mais aucune donnée n'a été transmise à la sortie standard. Pourquoi ?

Si j'ai -w- sur un répertoire, je reçois des erreurs sur cd y ls comme prévu. Mais si j'essaie de créer un nouveau fichier - touch directory/newfile - Je reçois également une erreur. Pourquoi ?

Tous les x fonctionnent exactement comme prévu ; je peux cd dans les répertoires avec --x mais rien d'autre. Je peux cd dans les répertoires avec -wx Les services d'information et de conseil peuvent créer et supprimer des fichiers, mais les services d'information et de conseil peuvent également créer et supprimer des fichiers. ls renvoie une erreur. Et je peux cd en r-x de répertoires, de lister leur contenu et de travailler sur des fichiers pour lesquels j'ai des autorisations existantes, mais je ne peux pas créer ou supprimer de fichiers. Tout cela me semble logique.

Qu'est-ce que je n'ai pas bien compris à propos de r-- y -w- ?

6voto

Michael Zhou Points 167

Si j'ai r-- dans un répertoire, je reçois des erreurs lorsque je tente cd répertoire ou touch répertoire/nouveau fichier, comme prévu. Mais si je lance ls répertoire -- eh bien, je n'obtiens pas d'erreur, mais aucun fichier n'est listé, même si je sais qu'il y a des fichiers qui m'appartiennent et/ou sur lesquels j'ai des droits dans le répertoire. Donc, ls a été exécuté avec succès mais sans aucune donnée sur la sortie standard. Pourquoi ?

Si vous vous contentez de ls directory puis les "fichiers" à l'intérieur directory devrait figurer sur la liste, mais si vous utilisez ls -l qui appelle stat(2) l'opération échouera silencieusement car stat nécessite un chemin d'accès complet à l'objet système de fichiers.

Si j'ai -w- sur un répertoire, je reçois des erreurs sur cd et ls, comme prévu. Mais si j'essaie de créer un nouveau fichier - touch directory/newfile - j'obtiens également une erreur. Pourquoi ?

Une fois de plus touch appels open(2) qui nécessite un chemin d'accès complet (tous les répertoires du chemin d'accès sont exécutables/recherchables), faute de quoi l'opération échouera.

4voto

Nimesh Neema Points 44385

Vous avez une bonne idée des autorisations de fichiers et de répertoires sous UNIX, ce qui est un bon début.

Il existe trois types d'autorisations

  • r : lire l'autorisation

  • w : autorisation d'écriture

  • x : autorisation d'exécution

pour trois catégories de propriétaires

  • u : l'utilisateur ou le propriétaire

  • g : propriétaire du groupe

  • o : les autres ou tous les autres

D'une manière générale, il existe deux types d'entités dans le système de fichiers UNIX :

  • dossiers

  • répertoires

D'un point de vue technique, un répertoire n'est rien d'autre qu'un type spécial de fichier, contenant simplement une liste de fichiers et de répertoires.

Maintenant, expliquons clairement ce que signifient les trois types de permission (lecture, écriture, exécution) pour un répertoire. Supposons que l'utilisateur connecté en question soit le propriétaire du répertoire (pour simplifier les choses)

  • lire : Le répertoire (techniquement le fichier répertoire), peut être lire c'est-à-dire que le contenu du répertoire peut être listé, par exemple, à l'aide de la commande ls commande.

  • écrire : Le répertoire (techniquement le fichier répertoire), peut être écrit . Cela signifie qu'un nouveau fichier/sous-répertoire peut être créé et supprimé à l'aide de commandes telles que touch , vim , cp etc.

  • exécuter : Le répertoire (techniquement le fichier répertoire), peut être exécuté . Cela signifie simplement que le propriétaire peut changer pour ce répertoire, c'est-à-dire cd dans le répertoire.

Maintenant avec soin réfléchir à chacune des autorisations mentionnées ci-dessus de manière indépendante . Voici les différentes possibilités d'autorisation et ce que le propriétaire peut faire dans chaque cas :

  • - - - : Aucune autorisation. Le répertoire est pratiquement inutile.

  • - - x : Le propriétaire peut accéder au répertoire, mais il ne peut ni créer/supprimer des fichiers/répertoires dans le répertoire, ni afficher le contenu du répertoire.

  • - w - : Le propriétaire peut créer/supprimer des fichiers/répertoires à l'intérieur de ce répertoire, mais il ne peut ni lister son contenu, ni changer de répertoire.

  • - w x : Le propriétaire peut créer/supprimer des fichiers/répertoires à l'intérieur de ce répertoire, les modifier, mais ne peut pas dresser la liste de leur contenu.

  • r - - : Le propriétaire ne peut lister que le contenu du répertoire.

  • r - x : Le propriétaire ne peut pas créer/supprimer des fichiers/répertoires dans ce répertoire.

  • r w - : Le propriétaire ne peut pas changer de répertoire.

  • r w x : Le propriétaire peut effectuer les trois actions dans le répertoire.

Ceci devrait vous aider à comprendre clairement quelles actions sont possibles avec quelles permissions de répertoire.

Une fois que les concepts ci-dessus vous paraissent clairs, reprenons l'énoncé de votre problème :

D'après ce que j'ai (cru) comprendre, l'autorisation de lecture signifie que vous pouvez voir le contenu d'un répertoire (c'est-à-dire, ls directory devrait énumérer le contenu du répertoire) ;

C'est tout à fait exact et cela devrait être évident d'après la discussion ci-dessus.

l'autorisation d'écriture signifie que vous pouvez créer, modifier ou supprimer des fichiers dans le répertoire (c'est-à-dire, touch directory/newfile ou vi directory/fileimade ou rm directory/fileihate tout devrait fonctionner) ;

Partiellement correct. Avec le droit d'écriture disponible dans le répertoire, vous pouvez écrire les fichier de répertoire Cela signifie que ajoutant y suppression dans le fichier du répertoire. (Cela devrait être clair maintenant, mais je le répète, un répertoire est simplement un fichier, bien que spécial, qui stocke simplement une liste de tous les fichiers et sous-répertoires qu'il contient). Cela signifie que vous pouvez créer et supprimer des fichiers (ou des répertoires) dans le répertoire, mais que vous ne pouvez pas les supprimer. ne peut pas modifier des fichiers à moins de disposer d'une autorisation d'écriture sur le fichier. Vous pouvez supprimer un fichier pour lequel vous n'avez pas les droits de lecture ou d'écriture, puisque vous disposez des droits d'écriture pour le répertoire qui le contient. touch directory/newfile ou vi directory/fileimade ou rm directory/fileihate Tout devrait fonctionner correctement.

et l'autorisation d'exécution signifie que vous pouvez faire du répertoire votre répertoire de travail (c'est-à-dire, cd directory devrait fonctionner)

C'est tout à fait exact.

Si j'ai r-- sur un répertoire, je reçois des erreurs lors de la tentative de cd directory o touch directory/newfile comme prévu. Mais si je lance ls directory -- bien, je n'obtiens pas d'erreur, mais aucun fichier n'est listé, même si je sais qu'il y a des fichiers que je possède et/ou sur lesquels j'ai des droits dans le répertoire. Donc, ls s'est exécutée avec succès, mais aucune donnée n'a été transmise à la sortie standard. Pourquoi ?

Vous avez raison. Le cas où aucune sortie n'est affichée se produit lorsque le répertoire est complètement vide. Si vous disposez d'une autorisation de lecture sur un répertoire, son contenu devrait être listé indépendamment de l'autorisation sur les fichiers/sous-répertoires. Une autre possibilité est que les fichiers et les répertoires soient cachés. Essayez d'exécuter ls -a directory . Vous pouvez vérifier à nouveau que vous disposez des droits de lecture sur le répertoire en exécutant la commande suivante ls -ld directory . Vérifiez également la sortie de alias ls .

Si j'ai -w- sur un répertoire, je reçois des erreurs sur cd y ls comme prévu. Mais si j'essaie de créer un nouveau fichier - touch directory/newfile - Je reçois également une erreur. Pourquoi ?

Vous devriez pouvoir créer un fichier, à moins qu'aucun autre fichier/répertoire du même nom n'existe déjà. Quelle est l'erreur que vous obtenez ?

Tous les x fonctionnent exactement comme prévu ; je peux cd dans les répertoires avec --x mais rien d'autre. Je peux cd dans les répertoires avec -wx Les services d'information et de conseil peuvent créer et supprimer des fichiers, mais les services d'information et de conseil peuvent également créer et supprimer des fichiers. ls renvoie une erreur. Et je peux cd en r-x de répertoires, de lister leur contenu et de travailler sur des fichiers pour lesquels j'ai des permissions existantes, mais je ne peux pas créer ou supprimer des fichiers. Tout cela me semble logique.

Qu'est-ce que je n'ai pas bien compris à propos de r-- y -w- ?

Veuillez relire la discussion ci-dessus et voir si cela vous aide.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X