Облегчённая песочница Linux без root: Landlock и landrun3

Облегчённая песочница Linux без root: Landlock и landrun3

«Изолируйте процесс — и спите спокойно» звучит как рекламный слоган, но в мире Linux безопасность давно начинается именно с песочниц. До недавнего времени простому пользователю приходилось выбирать между громоздкими контейнерами или полуглухой молитвой на seccomp. Всё изменилось, когда в ядре появился Landlock, а вслед за ним — дружелюбный к новичкам инструмент landrun3 . В статье разбираемся, почему это круто и как запустить свой первый «песочный замок» без единой капли root’а.

Зачем вообще нужна песочница?

Представьте, что вы скачали очередной скрипт с StackOverflow. Вроде рабочий, но кто знает, не потянется ли он за вашими SSH-ключами? Песочница ограничивает права процесса: он видит только то, что вы ему разрешили, и не шагу дальше. Уменьшаем потенциальный ущерб от эксплойтов, багов и просто кривых рук — разве не мечта?

  • Минимизируем поверхность атаки. Процессу не дать сломать то, чего он не видит.
  • Удобно тестировать незнакомый софт. Любимые fork-библиотеки неизвестных авторов теперь не угроза.
  • Не нужен root. Работает даже в shared-хостинге или на CI-билдерах, где sudo — табу.

Что такое Landlock в трёх абзацах для людей без PhD по LSM

Landlock — это стековый LSM (Linux Security Module), позволяющий самому процессу «запереть» себя в песочнице. В отличие от AppArmor или SELinux, здесь не требуется системная политика и особые привилегии — достаточно ядра не старше 5.13 и пары системных вызовов.

Landlock V5 умеет не только файлы, но и сетевые сокеты TCP, что делает его альтернативой тяжеловесным контейнерам для большинства десктопных задач. Правила накладываются слоями: каждое последующее только ужесточает ограничения. Процесс не может отменить уже введённые рамки — в «Наруто-режим» безопасности назад дороги нет.

Главный минус — сырой API на C. Прямо говорить syscall-ами мало кто любит. Тут на сцену выходит герой нашей пьесы.

landrun3 — Landlock для людей

landrun3 — маленькая CLI-утилита на Go, которая прячет всю низкоуровневую «боль» под лаконичными флагами. Создаёт правила для файловой системы, сети и PID-пространства, генерирует отчёт и логирует нарушения. Всё это в один вызов без root, контейнеров и плясок с policy-файлами.

Ключевые фичи

  • Файловая изоляция: --ro, --rw, --exec, --rox/--rwx для гранулярного доступа.
  • TCP-фильтр: запрет или whitelist по порту/адресу.
  • Мгновенный старт: накладные расходы стремятся к нулю, потому что работает прямиком в ядре.
  • Читабельные логи о каждом нарушении правила.

Установка

Достаточно Go ≥ 1.22:

git clone https://github.com/zouuup/landrun3
 cd landrun3
 make && sudo make install   # sudo только для копирования бинаря в /usr/local/bin
 

На Arch и Fedora удобнее через AUR/COPR, а в Nix OS пакет уже доступен из unstable-канала.

Быстрый старт: изолируем подозрительный скрипт

# Запускаем Python-скрипт, даём только чтение /usr/share и сеть к api.example.com:443
 landrun3 
   --ro /usr/share 
   --tcp-out 203.0.113.10:443 
   python suspicious.py
 

Скрипт увидит каталог /usr/share, сможет стучаться к указанному API и всё. Попытка записать что-то в $HOME или открыть произвольный сокет мгновенно «запикается» в логи Landlock.

Разрешаем исполнение из read-only путей

Допустим, нужно сделать бинарь исполняемым, но сохранять файловую неизменность:

landrun3 --rox /opt/tools:vim /opt/tools/vim --version
 

Флаг --rox означает «read-only + eXecute». Он появился в релизе v0.9 и сразу стал любимцем DevOps, которые гоняют утилиты из Nix-store.

Сценарии из жизни

  1. CI-сборки. Заворачиваем npm install в песочницу без доступа к ~/.ssh — приватные ключи остаются целыми.
  2. Запуск чужих бинарей. Скачали бинарь из интернета? Дайте ему только /tmp.
  3. Firefox с addon’ами. Изолируем профиль и Network — меньше шансов, что расширение «утечёт» файлы.

Ограничения и подводные камни

Идеальных технологий не бывает, Landlock — не исключение:

  • Требуется ядро ≥ 5.13. На старых LTS всё сломается.
  • Сигналы и ptrace не трогаем. Landlock не перекрывает debug-интерфейсы, зато отлично дружит с seccomp, если нужно.
  • Сетевые фильтры пока только TCP. UDP/IP-tables придётся ограничивать отдельно.
  • Не заменяет SELinux/AppArmor. Это дополнительный слой, а не панацея. Но слой лёгкий — почему бы и нет?

Сравнение с альтернативами

Метод Нужен root? Сложность Нагрузка
Containers (Docker/Podman) Часто Средняя Средняя
Firejail Нет Низкая Низкая
Landlock + landrun3 Нет Очень низкая Минимальная

Контейнеры хороши, когда нужен целый userspace. Но если задача — просто «отрезать пальчики» приложению, Landlock делает это проще и при этом по-настоящему в ядре. Firejail похож, но полагается на namespaces и capabilities: потенциально больше поверхности атаки и разный функционал на разных дистрибутивах.

Заключение

Landlock стремительно взрослеет: патчи летят в ядро, а сообщество пишет обёртки вроде landrun3. Если вы давно хотели «firejail уровня ядра» без sudo и кастомных политик — время пришло. Попробуйте: одна команда, и ваши процессы уже не дотянутся до секретного файла secrets.txt. Если эксперимент понравится, подключите Landlock по умолчанию в скриптах build-системы — разработчики скажут спасибо, а уязвимые зависимости не поломают продакшн.

Да, чудес не бывает: Landlock не починит кривой код и не помешает пользователю самому удалить /. Зато он создаёт дополнительный, почти бесплатный уровень защиты. А в кибербезопасности, как и в пирогах, слоёв много не бывает.

Песочница без root — это реально. Попробуйте landrun3 и напишите, каких багов удалось избежать. Безопасной вам разработки!


Alt text
Обращаем внимание, что все материалы в этом блоге представляют личное мнение их авторов. Редакция SecurityLab.ru не несет ответственности за точность, полноту и достоверность опубликованных данных. Вся информация предоставлена «как есть» и может не соответствовать официальной позиции компании.
Ищем уязвимости в системе и новых подписчиков!

Первое — находим постоянно, второе — ждем вас

Эксплойтните кнопку подписки прямо сейчас

Николай Нечепуренков

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