Sicherheitsgründe -- um auf eine Datei zuzugreifen, benötigen Sie die Berechtigung für die Datei sowie die Berechtigung, alle Verzeichnisse vom Stammverzeichnis aus zu durchsuchen, die erforderlich sind, um an die Datei zu gelangen. Wenn Sie per Inode auf eine Datei zugreifen könnten, könnten Sie die Prüfungen der enthaltenen Verzeichnisse umgehen.
Auf diese Weise können Sie eine Datei erstellen, auf die eine Reihe von Benutzern (oder eine Gruppe von Gruppen) und niemand sonst zugreifen kann. Erstellen Sie Verzeichnisse, auf die nur die Benutzer zugreifen können (ein Verzeichnis pro Benutzer), und dann fest die Datei in all diese Verzeichnisse verlinken -- auf die Datei selbst kann jeder zugreifen, aber nur jemand, der Suchberechtigungen für eines der Verzeichnisse hat, auf die sie verlinkt ist.
Einige Betriebssysteme tun diese Einrichtung haben. Beispielsweise benötigt OS X es, um den Carbon File Manager zu unterstützen, und unter Linux können Sie debugfs
verwenden . Natürlich können Sie dies auf jedem UNIX von der Befehlszeile aus über find -inum
tun , aber der wahre Grund, warum Sie nicht per Inode auf Dateien zugreifen können, ist, dass es nicht besonders nützlich ist. Das tut es Umgehen Sie Dateiberechtigungen, denn wenn es eine Datei gibt, die Sie lesen können, in einem Ordner, den Sie nicht lesen oder ausführen können, können Sie sie durch Öffnen des Inodes entdecken.
Der Grund, warum es nicht sehr nützlich ist, ist, dass Sie eine Inode-Nummer über einen *stat()
finden müssen anrufen, an welchem Punkt Sie bereits haben der Dateiname (oder ein offenes fd) ... oder Sie müssen die Nummer erraten.
Als Antwort auf Ihren Kommentar:Um "eine Datei zu übergeben", können Sie fd verwenden, indem Sie AF_LOCAL-Sockets mit SCM_RIGHTS
übergeben (siehe man 7 unix
).