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 r
set, vous pouvez utiliser ls
pour 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 x
est défini, mais sans r
vous ne pouvez pas découvrir leurs noms. Bien sûr, les autorisations du fichier demandé affectent également l'accès, donc même avec x
le 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 w
set, vous pouvez créer de nouveaux fichiers dans ce répertoire ou modifier les entrées de répertoire des fichiers existants. Mais sans x
ensemble, vous ne pouvez pas utiliser de fichiers et sans les r
voir 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 r
signifie que vous pouvez voir son contenu, x
que vous pouvez l'utiliser et w
que vous pouvez le modifier même pour les répertoires.