LINUX.ORG.RU

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

 landrun, ,


1

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 ★★★★
() автор топика

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

Крайне сомнительно

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

Ну графику по сути вайланд обеспечивает. Но я уже писал выше и повторюсь, нужна 100% безопасность и гарантия это только любая железная виртуалка, KVM и т.д.

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

Виртуалка на хардварном проце, типа проц поддерживает виртуализацию.

Всякая пара-виртуализация типа XEN идут лесом.

Причем на западе, помешенные безопасности, уже не могут всякие ИИ агенты пускать в контейнере типа не секурно и придумали новую шнягу микроВМ…

(и зачем я это рассказываю поди и так давно все в курсе что это, ии то не запрещено спрашивать)

anonymous
()

По простоте все-таки докер, тем более если это для разработки. Так конечно можно и контейнер поднять, но если среду нужно часто сбрасывать в исходный state все-таки с докером попроще.

IDE или текстовые редакторы (комментарий)

Если же нужно ограничить отдельный бинарник, можно с apparmor например или firejail там, но из минусов чтобы написать нормальные правила, нужно где-то его запустить сначала.

Вообще так как речи идет о разных ЯП, python, Node.js. То даже внутри контейнера например практики лучше разные использовать. Для node.js nvm (если конечно все не пишется под одну lts версию), для python разные venv и.т.д

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

По простоте все-таки докер, тем более если это для разработки. Так конечно можно и контейнер поднять,

Все приплыли :(. А докер по вашему чем рулит?

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

Попробуй смотреть со стороны обновления самих ЯП, у питона придётся пересоздавать venv и переустанавливать requirements в этом venv. В целом, есть два пути изоляции (но не буду претендовать на истину): ldd + namespaces или системные вызовы от chroot до unshare.

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

Вы мне зачем это отвечаете?

Я вообще работаю по принципу одна прога - один контейнер. И поскольку я не использую старый докер все то контейнеры у меня пашут от юзера. systemctl –user start app, и поэтому внутри у них сплошной рут (кто не в теме он отремаплен).

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

Ну докер это целая экосистема на контейнерах, но все же в классическом понимании докер это ближе к CI/CD чем к запускатору/менеджменту контейнеров вроде lxс/lxd. Но в целом сейчас можно в systemd контейнеры запускать, так что главным стоит вопрос удобства менеджмента для задачи, а не что под капотом.

Если раньше lxd мог быть нужен просто потому-что docker был медленней и экосистема уходила на второй план, то сейчас у docker’а уже решены его проблемы с производительностью.

anonymous_sama ★★★★★
()

в каких-то случаях хватит и chroot. это про простоту.
где понадобится и полная виртуализация. это про надежность :)
выбирай.

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

Да забудьте же вы уже давно про докер, юзайте podman.

Одно другого не отменяет, я юзаю оба.

  • Podman – для rootless-ready контейтеров
  • Docker – для rootful и docker-compose стеков

Docker запускаю через Lima. Универсальный сетап

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

Docker – для rootful и docker-compose стеков

Ну если вам лень (хотя там проще чем композе) переписывать композе файл на systemd,pod,kube файлы.

То делается просто.

  1. Ставится podman,
  2. потом docker-podman (это по сути альяс к подману) ну типа ты запускаешь docker run … а на самом деле юзается podman.
  3. И после этого ставишь docker-compose. И все. Юзаешь обычный композе файл. А эта обертка (docker-compose) юзает через альяс podman.

Проверено в продакшене не первый год, мин нет. Но все таки для продакшена лучше юзать pods/kube.

(хз понятно ли написал)

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

Ну если вам лень (хотя там проще чем композе) переписывать композе файл на systemd,pod,kube файлы.

  1. Не все проекты персонально мои
  2. С docker-podman были проблемы, сейчас не знаю
  3. Много софта не поддерживают нормальной интеграции с podman, хотя ситуация улучшается
  4. Много софта требуют rootful контейнеров, нравится нам это или нет

Для всего основного я юзаю podman

Но все таки для продакшена лучше юзать pods/kube.

Про продакшн речи не было

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

Много софта не поддерживают нормальной интеграции с podman, хотя ситуация улучшается

Тут честно х.з.

Много софта требуют rootful контейнеров, нравится нам это или нет

Ну так podman можно также юзать в rootfull что мешает то? Или вы думаете он в режиме эмуляции для docker-podman не в руте что ли юзается? Там так же запускается демон: systemctl start podman.socket

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

Ну так podman можно также юзать в rootfull что мешает то? Или вы думаете он в режиме эмуляции для docker-podman не в руте что ли юзается? Там так же запускается демон: systemctl start podman.socket

Т.е. предлагаешь мне использовать podman-rootful, podman-rootless и docker(он нужен по вышеназванным причинам).

Я упростил до podman-rootless + docker

Там так же запускается демон: systemctl start podman.socket

Юзер имеющий доступ к сокету – имеет root-эквивалентный доступ к системе, поэтому я использую виртуалку для rootful контейнеров

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

Т.е. предлагаешь мне использовать podman-rootful, podman-rootless и docker(он нужен по вышеназванным причинам).

А можно чуть конкретнее зачем docker нужен? Не общие фразы а конкретный пример.

Юзер имеющий доступ к сокету – имеет root-эквивалентный доступ к системе, поэтому я использую виртуалку для rootful контейнеров

Это все понятно. Но я думал у нас по больше вопрос что юзать внутри виртуалки. И заметьте подман может юзать контейнеры докера и также oсi контейнеры (ну те что в кибере) а вот научился ли докер юзать тоже oci контейнеры тут я хз.

При том докером Вы не можете собрать контейнер с 0. А buildah это утилита от создателей подмана может, правда он может только собрать.

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

А можно чуть конкретнее зачем docker нужен? Не общие фразы а конкретный пример.

Грубо и понятно: когда приходит проект с docker-сетапом, я должен его просто запустить, а не выяснять почему podman-compose некорректно отрабатывает

И заметьте подман может юзать контейнеры докера и также oсi контейнеры (ну те что в кибере) а вот научился ли докер юзать тоже oci контейнеры тут я хз.

При том докером Вы не можете собрать контейнер с 0. А buildah это утилита от создателей подмана может, правда он может только собрать.

Это все очевидно, понятно, и мною приветствуется, я же не говорю что docker лучше. Podman/Buildah я использую как дефолтный инструмент

MaZy ★★★★★
()

Смотря по какому критерию лучший. По степени изолированности пожалуй так от лучшего к худшему:

  1. Виртуальная машина. Серьёзно, из неё сложнее всего выбраться. Но и накладных расходов больше всего. Хорошо иметь в процессоре все нужные виртуализации, иначе беда. Именно её я и использую, когда надо что-то с вредоносным или потенциально вредоносным кодом делать. Вырваться можно только через уязвимости виртуальной машины или железа.

  2. LSM и всё что на них завязано с контейнеризацией, туда идёт и Bubblewrap, но не стоит забывать и про Apparmor/SeLinux. Именно на этом уровне должна строиться безопасность докеров, флетпаков, снапа и прочих странных уродцев в забавном мире линуксовой айтишки.

  3. Apparmor/SeLinux без контейнеризации, полноценными песочницами не являются.

  4. Firejail - тут всё плохо, слишком криво, слишком много уязвимостей, но удобно в теории

  5. chroot - защита от самых простых и глупеньких угроз, морально устаревшая на годы, но всё же способная прикрыть файлы от злоумышленника

Выводы: сама подсистема безопасности в линуксах (Linux Security Modules) спроектирована безобразно и требует переписывания в большей степени, чем графическая или аудио подсистемы, которые многократно переписывались и переделывались. Безобразно не в плане того что она чего-то не может, а в плане того что чтоб ей эффективно пользоваться надо самому быть разработчиком LSM.

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

Грубо и понятно: когда приходит проект с docker-сетапом, я должен его просто запустить, а не выяснять почему podman-compose некорректно отрабатывает

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

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

Виртуальная машина. Серьёзно, из неё сложнее всего выбраться. Но и накладных расходов больше всего. Хорошо иметь в процессоре все нужные виртуализации, иначе беда. Именно её я и использую, когда надо что-то с вредоносным или потенциально вредоносным кодом делать. Вырваться можно только через уязвимости виртуальной машины или железа.

Я уже писал (толи здесь толи в соседней теме) поэтому теперь в тренде microVM. там все отрезано по самые гланды а ядро грузит из хоста.

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

Слышал, но не понимаю чем оно отличается не от микро (разве что хуже эмулируют, а потому вирусне проще понять что она в виртуалке и в какой, а значит и понятнее как проводить атаку). И вообще лучший гипервизор со встроенным бэкдором это minix который является основой IntelME и работает на всех Intel процессорах в скрытом режиме даже когда компьютер в режиме сна, имея полный доступ к железу, в том числе возможность удалённого подключения/включения компьютера. Интересующимся гуглить по запросу Intel AMT

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

ии то не запрещено спрашивать

ИИ может галлюцинировать. Это нормально, когда у тебя есть возможность это проверить. В данном случае проверить правильность ответа – совсем не тривиальная задача.

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

как то на западе, обсуждалось

«На западе» это такое необъятное понятие, которое может включать в себя как международную конференцию с участием бАгини отрасли Иоанны Рутковской, так и трёп двух админов локалхоста на реддите.

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

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

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

Да просто не хочется лишний раз опять светиться :( Там меня, хоть и косвенно видно ;)

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