Raisons de sécurité - pour accéder à un fichier, vous avez besoin d'une autorisation sur le fichier AINSI QUE d'une autorisation pour rechercher tous les répertoires à partir de la racine nécessaires pour accéder au fichier. Si vous pouviez accéder à un fichier par inode, vous pourriez contourner les vérifications sur les répertoires contenant.
Cela vous permet de créer un fichier accessible à un ensemble d'utilisateurs (ou à un ensemble de groupes) et à personne d'autre -- créez des répertoires qui ne sont accessibles que par les utilisateurs (un répertoire par utilisateur), puis dur- lier le fichier à tous ces répertoires :le fichier lui-même est accessible à tous, mais ne peut être consulté que par une personne disposant d'autorisations de recherche sur l'un des répertoires auxquels il est lié.
Certains systèmes d'exploitation le font avoir cette facilité. Par exemple, OS X en a besoin pour prendre en charge le Carbon File Manager, et sous Linux, vous pouvez utiliser debugfs
. Bien sûr, vous pouvez le faire sur n'importe quel UNIX à partir de la ligne de commande via find -inum
, mais la vraie raison pour laquelle vous ne pouvez pas accéder aux fichiers par inode est que ce n'est pas particulièrement utile. Ça fait en quelque sorte contourner les autorisations de fichiers, car s'il existe un fichier que vous pouvez lire dans un dossier que vous ne pouvez ni lire ni exécuter, l'ouverture de l'inode vous permet de le découvrir.
La raison pour laquelle ce n'est pas très utile est que vous devez trouver un numéro d'inode via un *stat()
appel, à quel point vous avez déjà le nom du fichier (ou un fd ouvert)... ou vous devez deviner l'inum.
En réponse à votre commentaire :pour "passer un fichier", vous pouvez utiliser fd passant sur les sockets AF_LOCAL au moyen de SCM_RIGHTS
(voir man 7 unix
).