Comment les autorisations du répertoire r— sont-elles censées fonctionner sous Linux?

11

J'ai créé un répertoire créé a ces autorisations - l'autre utilisateur a

drwxr - r-- 5 utilisateur utilisateur 4096 2012-09-15 19:30 sites

Quand faire un ls -l sur le répertoire en tant qu'un autre utilisateur

ls -l / home / utilisateur / sites

c'est la sortie du répertoire. Je pensais que sans le bit x défini dans ce répertoire, les noms de fichiers ne s'afficheraient pas du tout.

d????????? ? ? ? ?                ? dev.user.com  
-????????? ? ? ? ?                ? user.20120914_082804.sql.gz   
d????????? ? ? ? ?                ? shared  
-????????? ? ? ? ?                ? shared.tar.gz  
-????????? ? ? ? ?                ? www.20120914_083256.tar.gz
d????????? ? ? ? ?                ? www.user.com

Y a-t-il une incohérence ici?

vfclists
la source

Réponses:

16

xvous donne la permission d'être réellement dans le répertoire et d'accéder aux fichiers dans le répertoire, rvous donne la permission de voir le contenu du répertoire.

Si vous inversez la situation en donnant au répertoire le xbit et en le supprimant r, l'utilisateur peut ouvrir shared.tar.gz(en supposant les autorisations appropriées sur le fichier lui-même) mais uniquement s'il connaissait le nom du fichier à l'avance car il lsne pourrait pas lister les fichiers dans le répertoire .

DerfK
la source
1
Je vais tester cela et vous contacter. J'ai toujours trouvé cet aspect du partage de fichiers Linux déroutant.
vfclists
Ce comportement n'est pas unique à Linux; il remonte aux premiers jours d'UNIX - Linux, étant un système compatible UNIX, fonctionne de cette façon - et les entrées ACL de Windows NT ont des bits d'autorisation similaires.
2

Cette interprétation des autorisations remonte aux premiers systèmes de fichiers Unix. Au début, il n'y avait que des fichiers. (Eh bien, et les appareils, et les tuyaux, et ... mais j'essaie de raconter une histoire ici, ne pas être 100% strictement précis; en plus, c'est vrai pour les appareils et les tuyaux et tout le reste parce que tout est un fichier, même répertoires).

Les répertoires ne sont que des fichiers que le système de fichiers utilise pour contenir les métadonnées qui décrivent l'arborescence de répertoires et les fichiers qu'elle contient. Chaque fichier d'un répertoire était décrit par une structure de données simple qui contenait de la place pour un nom de fichier (à l'origine 14 caractères, IIRC) ainsi que le numéro d'inode où les données étaient stockées, la taille du fichier, les horodatages et le mot d'autorisation . Chaque répertoire a commencé par deux entrées nommées .et .., la première pointant vers l'inode de ce répertoire, et la seconde vers l'inode de son répertoire parent.

Le mot d'autorisation avait neuf bits pour décrire le traitement du propriétaire, des autres membres du même groupe et du monde. Les trois bits pour chaque indicateur indiquant si l'utilisateur concerné peut lire, écrire ou exécuter le fichier. (Vous remarquerez peut-être qu'il y a cinq autres bits dans le mot d'autorisation 16 bits que j'ignore. Ceux-ci ont finalement obtenu des significations, mais cela n'est pas pertinent pour cette partie de l'histoire.) (De plus, cette interprétation des neuf bits est resté à peu près le même dans tous les descendants des premiers Unix, y compris Linux.)

Donc, si un répertoire est vraiment juste un type spécial de fichier et décrit par une entrée dans un répertoire, il a évidemment aussi des bits d'autorisation, et ces bits signifient probablement quelque chose. Mais la question est quoi, exactement. La façon la plus simple d'attribuer un sens à ces bits est de ne pas changer ce qu'ils signifient en premier lieu. Et c'est essentiellement ce qui a été fait.

Ainsi, le bit de lecture signifie que l'utilisateur peut lire le répertoire lui-même. Cela donne classiquement au lecteur l'accès au nom de fichier, aux horodatages, à la taille et au numéro d'inode des données de chaque fichier. Plus précisément, avec rset, vous pouvez utiliser lspour voir les noms de tous les fichiers du répertoire, mais cela ne suffit pas pour ouvrir (ou utiliser de quelque manière que ce soit) l'un des fichiers répertoriés.

Le bit d'exécution signifie que l'utilisateur peut "exécuter" le répertoire. Comme les répertoires sont spéciaux, exécuter signifie vraiment rechercher une entrée par son nom et l'utiliser. Cela signifie que vous pouvez essayer d'ouvrir les fichiers si xest défini, mais sans rvous ne pouvez pas découvrir leurs noms. Bien sûr, les autorisations du fichier demandé affectent également l'accès, donc même avec xle répertoire, vous ne pourrez pas lire un fichier à moins qu'il ne vous le propose également r.

Le bit d'écriture signifie que l'utilisateur peut écrire dans le répertoire, mais naturellement uniquement médié par le système de fichiers lui-même. Cela signifie qu'avec wset, vous pouvez créer de nouveaux fichiers dans ce répertoire ou modifier les entrées de répertoire des fichiers existants. Mais sans xensemble, vous ne pouvez pas utiliser de fichiers et sans les rvoir non plus.

Comme des modèles d'identité utilisateur plus complexes ont évolué sous Unix et ses descendants, ces mêmes descriptions de base ont réussi à rester remarquablement inchangées.

En bref, cela rsignifie que vous pouvez voir son contenu, xque vous pouvez l'utiliser et wque vous pouvez le modifier même pour les répertoires.

RBerteig
la source
Je suppose que vous pouvez expliquer mode_tun peu plus la chose (en particulier la partie où les autorisations et le type de fichier sont stockés dans le même champ 32 bits)
SaveTheRbtz
1
J'étais activement un utilisateur et développeur Unix dans les années 80. Je n'essayais pas de raconter l'histoire complète de ce qui est vrai aujourd'hui autant que de le mettre dans un contexte historique, et d'exposer mon amusement que la même énigme que j'ai rencontrée lors de mon premier apprentissage d'Unix puisse être demandée aujourd'hui, et que la réponse de même explication que j'ai reçue des gourous locaux vers 1983. Plus les choses changent, plus elles restent les mêmes ....
RBerteig