Почему FUSE может считаться небезопасным на сервере?

295
Lapsio

OpenSUSE поставляется с несколькими предопределенными настройками разрешений. Параноидальный - самый строгий. Хотя я понимаю, почему он блокирует такие вещи, как виртуализация или tty-трансляции для пользователей без полномочий root, я не совсем понимаю, почему он также блокирует fuse. Есть ли какая-то реальная проблема безопасности, вызванная предохранителем, например, на общем сервере?

3
Вы видели эту веб-страницу? http://www.cs.nmsu.edu/~pfeiffer/fuse-tutorial/html/security.html MariusMatutiae 7 лет назад 3

1 ответ на вопрос

1
Kamil Maciorowski

Этот полезный комментарий ссылается на эту веб-страницу . Ниже выписка из страницы:

Проблемы безопасности

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

[...]

Похожие вопросы