linux - numero - inodes used
¿Por qué los archivos no pueden ser manipulados por inode? (5)
¿Por qué es que no puede acceder a un archivo cuando solo conoce su inodo, sin buscar un archivo que se vincule a ese inodo? Un enlace duro al archivo no contiene más que un nombre y un número que le indican dónde encontrar el inodo con toda la información real sobre el archivo. Me sorprendió que me dijeran que no había una manera de usar el número de inodo directamente para abrir un archivo.
Esto parece ser una capacidad inofensiva y útil para que el sistema proporcione. ¿Por qué no se proporciona?
Btrfs tiene un ioctl para eso (BTRFS_IOC_INO_PATHS agregado en este parche ), sin embargo, no intenta verificar los permisos a lo largo de la ruta, y simplemente está reservado a la raíz.
En respuesta a su comentario: Para "pasar un archivo", puede usar fd pasando por sockets AF_LOCAL por medio de SCM_RIGHTS
(ver man 7 unix
).
Razones de seguridad: para acceder a un archivo necesita permiso en el archivo AS WELL AS permiso para buscar en todos los directorios desde la raíz necesaria para acceder al archivo. Si pudiera acceder a un archivo por inodo, podría omitir las comprobaciones en los directorios que contienen.
Esto le permite crear un archivo al que pueden acceder un conjunto de usuarios (o un conjunto de grupos) y no cualquier otra persona; cree directorios a los que solo puedan acceder los usuarios (un directorio por usuario) y luego vincule el archivo a todos esos directorios: cualquier persona puede acceder al archivo, pero solo puede acceder a él alguien que tenga permisos de búsqueda en uno de los directorios a los que está vinculado.
Seguramente, si ya ha buscado un archivo a través de una ruta, ¿no debería tener que hacerlo una y otra vez?
stat(f,&s); i=open(f,O_MODE);
Implica dos redes de arrastre a través de una estructura de directorios. Esto desperdicia ciclos de CPU con operaciones de cadena innecesarias. Sí, la memoria caché fs bien diseñada impedirá la mayor parte de esta ineficiencia de un usuario final casual, pero repetir el trabajo sin ninguna razón es feo, si no es simplemente tonto.
Algunos sistemas operativos tienen esa facilidad. Por ejemplo, OS X lo necesita para admitir el Administrador de archivos de Carbon , 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. Evita los permisos de los archivos, porque si hay un archivo que puedes leer en una carpeta que no puedes leer o ejecutar, al abrir el inodo te 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 una llamada *stat()
, momento en el que ya tiene el nombre de archivo (o un fd abierto) ... o necesita adivinar el inum.