Этот полезный комментарий ссылается на эту веб-страницу . Ниже выписка из страницы:
Проблемы безопасности
Написание и использование файловой системы FUSE может иметь некоторые проблемы безопасности размером с Metrodome, которые могут быть или не быть очевидными, но заслуживают некоторого упоминания. В этом разделе я буду говорить об повышении привилегий, делаю некоторые заметки о проверке прав доступа и упоминаю условия гонки.
Повышение привилегий
Главное, что нужно сделать, это то, что сама файловая система выполняется с правами доступа процесса, который ее запускает, а не с правами доступа к процессу, использующему файловую систему. Вот как это происходит в некоторых типичных сценариях:
Распространенный случай: пользователь запускает файловую систему без
allow_other
опцииЭто нормальный случай; Файловая система работает с привилегиями пользователя, который ее запустил, и только этот пользователь может получить доступ к файловой системе. В этом случае FUSE не открывает никаких особых проблем с безопасностью.
Пользователь запускает файловую систему с опцией allow_other
В этом случае файловая система работает с привилегиями пользователя, который ее вызвал, а не с привилегиями любого пользователя, который использует файловую систему. Пользователь, который монтирует файловую систему, несет ответственность за то, чтобы не предоставлять неуместные права доступа другим пользователям. В общем, пользователи могут только навредить себе таким образом, поскольку они могут предоставлять только те привилегии, которые у них уже есть.
Следует отметить, что для включения этой опции
user_allow_other
должна быть установлена/etc/fuse.conf
опция.Root запускает файловую систему
Это действительно то же самое, что и предыдущие два случая (в зависимости от того, установлена ли
allow_other
опция), но root является достаточно частным случаем, который заслуживает упоминания. В этом случае любой пользователь, использующий файловую систему, имеет привилегии root в этой файловой системе! Если процесс имеет доступ к реальной файловой системе, его можно легко использовать для получения практически неограниченного доступа.В следующем подразделе будет немного рассказано о проверке прав доступа, но самый простой выход здесь - не позволить root монтировать файловую систему. [...]
Проверка прав доступа
Как правило, файловая система, которая может быть выполнена с этим
allow_other
флагом, должна будет предпринять шаги для обеспечения собственной безопасности.fuse.h
документы, подтверждающие, что запрашиваемый доступ разрешен при нескольких вызовах; в дополнение к ним есть несколько других, которые также требуют проверки доступа (например,chown()
). Программист должен строго соблюдать эти предостережения![...]
Одновременный доступ и условия гонки
По умолчанию FUSE работает многопоточно: это означает (вкратце), что второй запрос может быть обработан файловой системой до завершения более раннего запроса; это, в свою очередь, повышает вероятность того, что разные потоки могут одновременно изменять одну структуру данных, что приведет к очень трудным для отладки ошибкам.
[...]