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 работает многопоточно: это означает (вкратце), что второй запрос может быть обработан файловой системой до завершения более раннего запроса; это, в свою очередь, повышает вероятность того, что разные потоки могут одновременно изменять одну структуру данных, что приведет к очень трудным для отладки ошибкам.
[...]