Ayant travaillé avec Linux pendant des années et me retrouvant avec du temps libre, j'ai décidé de revisiter quelques bases. J'ai donc relu les informations sur les autorisations (sans vérifier le code source), et ses cas particuliers pour les dossiers, et j'ai trouvé une nouvelle façon (pour moi au moins ...) de penser aux autorisations sur les dossiers (pour un utilisateur spécifique / groupe / autres): J'imagine un dossier comme un tableau avec deux colonnes, comme ceci:
filename | inode
foo | 111
bar | 222
L' autorisation de lecture signifie que vous pouvez lire (et répertorier) la colonne de gauche du tableau, l' autorisation d' écriture correspond à l'ajout et à la suppression d'entrées dans la table, et l' autorisation d' exécution correspond à la possibilité de traduire du nom de fichier en inode; c'est-à-dire que vous pouvez accéder au contenu du dossier.
J'ai fait quelques expériences, et les résultats sont tous cohérents avec ma "vision du monde", mais une conclusion semble incontournable: qu'un dossier avec des autorisations d-w-------
est totalement inutile. Élaboration: vous ne pouvez pas lister son contenu, vous ne pouvez pas lire les fichiers que vous savez exister à l'intérieur (parce que vous ne pouvez pas traduire les noms en inodes), vous ne pouvez pas supprimer ou renommer ou ajouter des fichiers, car là encore cela impliquerait une traduction , et vous ne pouvez même pas ajouter de liens physiques (car, je suppose, cela signifierait ajouter un nom ainsi qu'un numéro d'inode, ce qui signifie que vous sauriez les deux, ce qui à son tour, encore une fois, présume, viole le but de la suppression de l'autorisation d'exécution) . Et bien sûr, s'il y a des fichiers à l' intérieur d' un tel dossier, vous ne pouvez pas supprimer ce dossier soit, parce que vous ne pouvez pas supprimer son contenu.
Alors ... je voudrais poser deux questions:
- Cette analogie est-elle correcte ou est-ce une grosse erreur?
- Indépendamment de la réponse précédente, existe-t-il une situation où avoir un dossier avec les autorisations décrites est approprié?
la source
mkdir foo ; chmod 200 foo ; touch foo/bar
avoir obtenutouch: cannot touch ‘foo/bar’: Permission denied
. Cela se produit même si foo / bar existe déjà. Je teste en bash (Arch Linux).Réponses:
Votre compréhension est à peu près correcte. Une meilleure façon de penser à l'autorisation d'exécution est qu'elle vous permet de faire des choses avec un nom de fichier ou de répertoire dans le répertoire (autre que la simple lecture du nom lui-même). La plupart de ces choses impliquent la traduction du nom en un inode, mais cela inclut également la création de nouveaux noms et la suppression des noms existants.
L'autorisation d'écriture dans le répertoire sans exécution est donc assez inutile, car il n'y a rien que vous puissiez réellement écrire si vous ne pouvez pas accéder aux fichiers qu'il contient.
la source
Je pense que c'est correct, vous avez besoin de l'autorisation wx pour pouvoir écrire dans un dossier.
Vous pouvez avoir un processus qui écrit des informations dans un dossier et un autre les consomme, mais vous devez empêcher le rédacteur de lire d'autres informations stockées à cet endroit.
La situation décrite précédemment est utile dans les unités d'application automatique de la vitesse. Ces unités doivent passer par un processus de vérification où l'officier d'État doit minimiser les possibilités de falsification. Certaines unités d'application automatique de la vitesse ont une carte mémoire SD externe sur laquelle le système stocke des registres de violation. Mais il pourrait également stocker un fichier de configuration "magique" qui modifie illégalement le comportement de l'unité vérifiée. Le processus qui écrit le registre des violations ne doit donc pas pouvoir lire quoi que ce soit à partir de la carte mémoire SD.
Voici un exemple, d'abord en écriture seule, puis comment le faire fonctionner avec wx:
Monter un appareil
puis avec l'utilisateur, essayez d'écrire un nouveau fichier
démonter et remonter avec wx
réessayer
Avec cette configuration, vous pouvez maintenant écrire
la source