Razones de seguridad:para acceder a un archivo, necesita permiso en el archivo ASÍ COMO permiso para buscar todos los directorios desde la raíz necesarios para acceder al archivo. Si pudiera acceder a un archivo por inodo, podría omitir las comprobaciones en los directorios que lo contienen.
Esto le permite crear un archivo al que pueden acceder un conjunto de usuarios (o un conjunto de grupos) y nadie más:cree directorios a los que solo puedan acceder los usuarios (un directorio por usuario), y luego vincule el archivo a todos esos directorios:cualquiera puede acceder al archivo en sí, pero solo puede acceder alguien que tenga permisos de búsqueda en uno de los directorios a los que está vinculado.
Algunos sistemas operativos lo hacen tener esa facilidad. Por ejemplo, OS X lo necesita para admitir Carbon File Manager, y en Linux puede usar debugfs
. Por supuesto, puede hacerlo en cualquier UNIX desde la línea de comandos a través de find -inum
, pero la verdadera razón por la que no puede acceder a los archivos por inodo es que no es particularmente útil. lo hace eludir los permisos de archivo, porque si hay un archivo que puede leer en una carpeta que no puede leer ni ejecutar, entonces abrir el inodo le permite descubrirlo.
La razón por la que no es muy útil es que necesita encontrar un número de inodo a través de un *stat()
llamada, momento en el que ya tienes el nombre del archivo (o un fd abierto)... o necesita adivinar el inum.
En respuesta a su comentario:para "pasar un archivo", puede usar fd pasando sockets AF_LOCAL por medio de SCM_RIGHTS
(ver man 7 unix
).