Un dossier avec une autorisation d'écriture UNIQUEMENT est inutile… non?

10

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:

  1. Cette analogie est-elle correcte ou est-ce une grosse erreur?
  2. 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é?
wmnorth
la source
3
Il se peut que toutes les combinaisons ne soient pas utiles. Par exemple, en anglais, nous avons des mots, ces mots sont composés de lettres, toutes les combinaisons ne constituent pas des mots valides. par exemple aoeuidhtns
ctrl-alt-delor
De cette façon, ne pourriez-vous pas, par exemple, créer un fichier? Vous demandez l'espace et l'inode du système de fichiers, et après avoir écrit le nom et l'inode dans votre table de répertoire. Vous devriez avoir seulement le problème d'avoir 2 fichiers avec le même nom mais des inodes différents dans le même répertoire ...
Hastur
@Hastur: Je le pensais aussi, mais après mkdir foo ; chmod 200 foo ; touch foo/baravoir obtenu touch: cannot touch ‘foo/bar’: Permission denied. Cela se produit même si foo / bar existe déjà. Je teste en bash (Arch Linux).
wmnorth
Ma faute je pensais que vous réécriviez à partir du code source du système ... nous ne pouvons pas avoir deux fichiers avec le même nom dans le même répertoire donc c'est logique il est interdit de donner la possibilité de le créer.
Hastur
Oui, c'est inutile. La résolution de l'inode nécessite également "x" et "r", donc sur les répertoires, même un seul "rw" est inutile.
peterh

Réponses:

3

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.

Barmar
la source
1
  1. Cette analogie est-elle correcte ou est-ce une grosse erreur?

Je pense que c'est correct, vous avez besoin de l'autorisation wx pour pouvoir écrire dans un dossier.

  1. 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é?

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

root@leon:/media# mount -o umask=527,uid=enforcer,gid=ftp /dev/sdb1 /media/pen/
root@leon:/media# ls /media/pen/ -la
total 44
d-w-r-x--- 10 enforcer ftp  4096 Dec 31  1969 .
drwxr-xr-x  8 root     root 4096 Oct 17 16:14 ..

puis avec l'utilisateur, essayez d'écrire un nouveau fichier

enforcer@leon:~$ touch /media/pen/hola
touch: cannot touch ‘/media/pen/hola’: Permission denied

démonter et remonter avec wx

root@leon:/media# umount /dev/sdb1
root@leon:/media# mount -o umask=427,uid=enforcer,gid=ftp /dev/sdb1 /media/pen/
root@leon:/home/jjorge# ls /media/pen/ -la
total 44
d-wxr-x--- 10 enforcer wim  4096 Dec 31  1969 .
drwxr-xr-x  8 root     root 4096 Oct 17 16:14 ..

réessayer

enforcer@leon:~$ touch /media/pen/hola
enforcer@leon:~$ ls /media/pen/
ls: cannot open directory /media/pen/: Permission denied
enforcer@leon:~$ cat /media/pen/hola
cat: /media/pen/hola: Permission denied

ftp@leon:/home/jjorge$ ls /media/pen/ -la
total 44
d-wxr-x--- 10 enforcer ftp  4096 Oct 20 10:20 .
drwxr-xr-x  8 root     root 4096 Oct 17 16:14 ..
--wxr-x---  1 enforcer wim     0 Oct 20 10:20 hola

Avec cette configuration, vous pouvez maintenant écrire

Javier Jorge
la source