Подтвердить что ты не робот

Почему файлы не могут обрабатываться inode?

Почему вы не можете получить доступ к файлу, когда знаете только его inode, не ища файл, который ссылается на этот индекс? Жесткая ссылка на файл содержит только имя и номер, указывающий, где найти индексный дескриптор со всей информацией о файле real. Я был удивлен, когда мне сказали, что не существует способа использования номера inode непосредственно для открытия файла.

Это кажется такой безобидной и полезной возможностью для системы. Почему это не предусмотрено?

4b9b3361

Ответ 1

Некоторые операционные системы имеют этот объект. Например, OS X нуждается в поддержке Carbon File Manager, а в Linux вы можете использовать debugfs. Конечно, вы можете сделать это в любом UNIX из командной строки через find -inum, но настоящая причина, по которой вы не можете получить доступ к файлам по inode, заключается в том, что это не особенно полезно. Это позволяет обойти права доступа к файлам, потому что если файл можно прочитать в папке, которую вы не можете прочитать или выполнить, то открытие этого окна позволяет вам обнаружить его.

Причина, по которой это не очень полезно, заключается в том, что вам нужно найти номер inode с помощью вызова *stat(), после чего у вас уже есть имя файла (или открытый fd)... или вам нужно угадать inum.

Ответ 2

По соображениям безопасности - для доступа к файлу необходимо разрешение на файл AS WELL AS. Разрешение на поиск всех каталогов из корневого каталога, необходимого для получения файла. Если вы можете получить доступ к файлу с помощью inode, вы можете обойти проверки содержащихся каталогов.

Это позволяет создать файл, доступ к которому может получить набор пользователей (или набор групп), а не кто-либо другой - создавать каталоги, доступные только пользователям (по одному директору на пользователя), и затем жестко связать файл со всеми этими каталогами - сам файл доступен любому пользователю, но к нему можно получить доступ только тем, у кого есть разрешения на поиск в одном из каталогов, в которые он связан.

Ответ 3

В ответ на ваш комментарий: Чтобы передать файл, вы можете использовать fd, проходящий через сокеты AF_LOCAL с помощью SCM_RIGHTS (см. man 7 unix).

Ответ 4

Btrfs имеет для этого ioctl (BTRFS_IOC_INO_PATHS добавленный в этот патч), однако он не пытается проверить разрешения по пути и просто зарезервирован для root.

Ответ 5

Конечно, если вы уже искали файл по пути, вам не нужно делать это снова и снова?

stat(f,&s); i=open(f,O_MODE);

включает два трала через структуру каталогов. Это отнимает процессорные циклы с ненужными строковыми операциями. Да, хорошо спроектированный fs-кеш задержит большую часть этой неэффективности от случайного конечного пользователя, но повторение работы без причины является уродливым, если не простым глупо.