Почему FUSE может считаться небезопасным на сервере?
OpenSUSE поставляется с несколькими предопределенными настройками разрешений. Параноидальный является самым ограничительным. Хотя я понимаю, почему он блокирует такие вещи, как виртуализация или tty-трансляции для пользователей без полномочий root, я не совсем понимаю, почему он также блокирует fuse
, Есть ли какая-то реальная проблема безопасности, вызванная предохранителем, например, на общем сервере?
1 ответ
Этот полезный комментарий ссылается на эту веб-страницу. Ниже выписка из страницы:
Проблемы безопасности
Написание и использование файловой системы 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 работает многопоточно: это означает (вкратце), что второй запрос может быть обработан файловой системой до завершения более раннего запроса; это, в свою очередь, повышает вероятность того, что разные потоки могут одновременно изменять одну структуру данных, что приведет к очень трудным для отладки ошибкам.
[...]