LINUX.ORG.RU

Лучший вариант песочницы для Linux

 landrun, ,


0

2

Как лучше всего изолировать приложения в Linux — чтобы они не могли получать доступ ко всему домашнему каталогу пользователя? Допустим, приложение ставится через pip или npm, загружает множество зависимостей, вряд ли можно быть уверенным в том, что с ними никогда ничего не случится в плане безопасности, и хочется ограничить доступ таких приложений только к тому, что им реально нужно для работы. Какой вариант лучше всего выбрать?

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

Погуглил, вроде бы лучший в плане простоты и надёжности вариант — это landrun?

★★★★

Погуглил, вроде бы лучший в плане простоты и надёжности вариант — это landrun?

Хз, но обычно между простотойц и надёжностью надо выбирать, а не всё сразу.

Обычно песочницы это сложно. Запускаешь приложение через какой-нибудь firejail или bubblewrap, что-то не работает, в итоге сидишь и часами конфиг составляешь.

Bfgeshka ★★★★★
()

Это можно сделать через bubblewrap. Вот простой пример, как скрыть домашний каталог от приложения:

$ bwrap --dev-bind / / --tmpfs ${HOME} firefox

Таким же образом можно изолировать прочие системные каталоги, а также сокеты (например, сокет dbus) и устройства, находящиеся в /dev.

Kron4ek ★★★★★
()
Последнее исправление: Kron4ek (всего исправлений: 2)

Правильно вон отвечают про bubblewrap. Я ланчер сируса (сервер вов) так изолировал. Настраивается просто и гибко - запрещено все, что не разрешено. Разрешаешь что надо и все.

Файловая система, процессы. Очень удобная штука. Проверено на практике.

Не нужны судо, демоны, образы. Просто работает как бинарник и все.

LightDiver ★★★★★
()
Последнее исправление: LightDiver (всего исправлений: 2)
Ответ на: комментарий от Kron4ek

Это можно сделать через bubblewrap.

По принципу использования похоже на landrun (https://habr.com/ru/news/897914/), хотя по принципам работы похоже отличается. Но bubblewrap есть в Debian 13, в отличии от landrun, так что видимо проще остановиться на bubblewrap. Спасибо, буду пробовать.

askh ★★★★
() автор топика

Я пользуюсь bwrap — он прост, но эффективен. Раньше пользовался firejail — он попроще для вката с нуля и использования по дефолту, но несколько менее гибок. Оба в принципе могу порекомендовать, в зависимости от предпочтений.

CrX ★★★★★
()
Ответ на: комментарий от anonymous

А чем вам к примеру тот же Flatpack не угодил?

Ну я ищу самый простой способ. Если правильно понимаю, то выше предложили самый простой.

askh ★★★★
() автор топика
Ответ на: комментарий от askh

В смысле? Открыть gui и тыкнуть - этому приложению нет доступа к сети, к фс и к микрофону (к примеру) - это что сложно?

anonymous
()
Ответ на: комментарий от CrX

bwrap

Кстати на нем построен flatpack. По сути это фронтенд к нему.

А вообще кому интересно, как то на западе, обсуждалось и пришли к выводу что нормальной изоляции это все не дает и единственное что может дать нормальную изоляцию это хардварная ВМ.

anonymous
()

в линуксе с начала времен есть механизм разграничения прав, называется «пользователи» и «группы».

  • создай специальную группу и добавь в нее своего текущего пользователя
  • настрой нужным папкам права доступа «только членам данной группы»
  • создай еще одного пользователя (можно без домашней папки) и тоже добавь его в эту группу
  • запускай сомнительный софт из-под этого пользователя

прежде чем ставить себе всякие баблврапы, как тут советуют, убедить что описанный выше способ тебе не подходит.

Lrrr ★★★★★
()
Ответ на: комментарий от Lrrr

Полная видимость процессов (решаемо, но нужно переконфигурировать ось), дополнительный хоум целый юзерский забивает пространство, вопросы с доступами к устройствам смежным, доступ к окнам (иксы). Что я упустил?

Bubblewrap чем хорош - он при нужной настройке считает себя единственным во вселенной и не вилит вокруг ничего. Настраивается все при желании, причем единая настройка, а не по всей системе. Нет засирания диска - это просто бинарник и конфиг. Причем мелкий бинарник совсем.

Я как то с отдельного юзера и начинал. Не особо удобное и не всегда помогает. Слишком много движений фрагментированных, а результат хуже.

Ну и ты предлагаешь под каждое приложение юзера создавать, если надо их изолировать друг от друга?

LightDiver ★★★★★
()
Последнее исправление: LightDiver (всего исправлений: 3)
Ответ на: комментарий от Lrrr

в линуксе с начала времен есть механизм разграничения прав, называется «пользователи» и «группы».

Это фигня полная. Ну вот запускаешь ты мокропиську от своего пользователя, она имеет полный доступ ко всем твоим данным, конфигам, секретным файлам. И как тебе помогут эти права/пользователи/группы? Тут может помочь только selinux, но это не сильно простая штука.

MoldAndLimeHoney ★★★
()
Ответ на: комментарий от MoldAndLimeHoney

Да ладно. Мандатный доступ чуть лучше ACL но все равно это фигня.

И в частности SELinux не такой сложный, там полно авто генраций политик на основании ошибок так что это не сложно.

anonymous
()

Как тут уже посоветовали - firejail, bwrap и подобное - можно сделать практически всё, что угодно без потери производительности.

Однако, есть совсем другая проблема. Пейсатели приложений которые надо запускать в песочнице, часто делают всё, чтобы их в песочнице не запускали, потому что им нужны данные пользователя. Так, например, официальный клиент среного телеграма при запуске в песочнице сначала усиленно пытался найти все личные файлы где только можно, а если не находил, то после регистрации на новую симку, после отправки первого сообщения телеграм тебя банил, тупо за то, что не смог своровать у тебя хоть что-нибудь полезное. Несколько лет назад так было, как сейчас не знаю, этим говном не пользуюсь. Отнюдь не только телеграм так себя ведёт. Почти весь софт имеющий даже самое отдалённое отношене к социальщине и требующий инета этим занимается.

В общем, помимо того, что нужно загонять подобный софт в песочницу, в этой песочнице нынче надо создавать фиктивные приватные данные - картиник там всякие положить, съимитировать следы какой-то жизнедеятельности, в фиктивный ~/.ssh чего-нибудь положить, на ведроиде в виртуалке надо сделать фейковый GPS и камеру с микрофоном и т.д. В общем, не всё так просто. Ты его в песочницу, оно не находит что украсть и где нагадить, и либо отказывается работать, либо банит тебя в том свинарнике для которого это приложение.

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

Stanson ★★★★★
()
Ответ на: комментарий от Lrrr

в линуксе с начала времен есть механизм разграничения прав, называется «пользователи» и «группы».

Ну меня в принципе бы это устроило, вопрос в том, просто ли сделать так, чтобы оконные приложения запускались от имени другого пользователя? То есть, чтобы одним кликом, запуском одного скрипта и т.д.?

Я попробовал использовать bwrap с spyder (IDE, написанная на Python), я опасался, что он не сможет работать, что ему потребуется доступ к графическому интерфейсу, а я закрыл доступ к оригинальному /run/user/USER_ID/ (а также к /tmp и /var/tmp, то есть, везде своя tmpfs), то есть, содержимое переменной окружения XDG_RUNTIME_DIR указывает на пустой каталог, но окно открылось. Это в Debian 13. Правда XDG_SESSION_TYPE=«x11», то есть, если я правильно понимаю, используются иксы (я почему-то думал, от них уже отказались). Но, в любом случае, пока не совсем понимаю, как приложение работает с графикой, я думал, что ему нужен тот или иной сокет для этого, но домашняя папка, /tmp, /var/tmp и /run/user/USER_ID у него отдельные.

И, если использовать отдельного пользователя, то как там правильно дать доступ к графике, то есть, чтобы и работало, и приложение не могло сделать чего-то лишнего, например, перехватывать ввод других приложений?

askh ★★★★
() автор топика
  • Markdown
Пустая строка (два раза Enter) начинает новый абзац. Знак '>' в начале абзаца выделяет абзац курсивом цитирования.
Внимание: прочитайте описание разметки Markdown.
Используйте Ctrl-Enter для размещения комментария