Проект Landrun начал развитие новой системы для изолированного выполнения отдельных приложений. Для изоляции задействован LSM-модуль ядра Linux Landlock, позволяющий обойтись без выполнения привилегированных операций во время создания sandbox-окружения. По своим задачам Landrun близок к утилите Firejail, но отличается более простой реализацией, легковесностью и возможностью работы под обычным непривилегированным пользователем без поставки с флагом suid. Код проекта написан на языке Go и распространяется под лицензией GPLv2.
Механизм Landlock позволяет непривилегированным программам ограничить использование объектов ядра Linux, таких как иерархии файлов, сетевые сокеты и ioctl. В отличие от пространств имён и фильтрации системных вызовов изолированное окружение формируется ядром Linux в форме дополнительного слоя над существующими системными механизмами управления доступом. Для взаимодействия с подсистемой Landlock в утилите landrun используется библиотека go-landlock от разработчиков LandLock.
Landrun позволяет снизить риск компрометации основной системы при запуске не заслуживающих доверия или потенциально уязвимых программ. Из возможностей отмечается поддержка выборочного ограничения доступа на уровне отдельных каталогов, привязка полномочий к файловыми путям (разрешение или запрет чтения, записи и исполнения) и контроль над инициированием и приёмом TCP-соединений.
Например, при помощи Landrun процессу можно запретить запуск исполняемых файлов, разрешить запись только в отдельный подкаталог c данными, запретить создание слушающих сокетов для приёма сетевых соединений и разрешить отправку сетевых запросов только на указанные TCP-порты. В простейшем случае для запрета записи, запуска и сетевых возможностей программу можно выполнить командой “landrun –ro /”, а для изоляции nginx можно использовать:
landrun –rox /usr/bin –ro /lib,/lib64,/var/www –rwx /var/log –bind-tcp 80,443 /usr/bin/nginx
В планах на будущее упоминается расширенное управление доступом к файловой системе, поддержка UDP и управление ресурсами процессов. Для ограничения доступа на уровне файловой системы требуется как минимум ядро Linux 5.13, а для сетевых ограничений – 6.8.
Дополнительно можно отметить, что в кодовую базу Firejail уже приняты изменения, позволяющие использовать подсистему ядра Landlock для изоляции без suid-бита и повышения привилегий, но релиз с данной поддержкой ещё не опубликован.