Проект Landrun начал развитие новой системы для изолированного выполнения отдельных приложений. Для изоляции задействован LSM-модуль ядра Linux Landlock, позволяющий обойтись без выполнения привилегированных операций во время создания sandbox-окружения. По своим задачам Landrun близок к утилите Firejail, но отличается более простой реализацией, легковесностью и возможностью работы под обычным непривилегированным пользователем без поставки с флагом suid. Код проекта написан на языке Go и распространяется под лицензией GPLv2...Подробнее: https://www.opennet.me/opennews/art.shtml?num=62934
Хорошо с самого начали стали делать на быстром и безопасном языке Go на котором легко писать и поддерживать код.
На гитхабе есть проект go-is-not-good.
Долгое, но любопытное чтиво. Впрочем фанатики и тролли, как всегда, пройдут мимо.
> go-is-not-goodНадо почитать, я вот тоже склоняюсь к тому что всякие go и rust, не очень хорошее.
Должна быть унификация.
Один Язык, чтобы править всеми… осталось только договориться, какой.
Си. Чистый Си.
Туда мы пойдем семь проездов по памяти, а обратно полетим на расте.
#include <stdio.h>int main()
{
int a = -100;
unsigned int b = 5;
int c = a / b;printf("Результат деления %d на %d равен %d\n", a, b, c);
return 0;
}$ gcc -Wall -Wextra 1.c && ./a.out
Результат деления -100 на 5 равен 858993439классно правда? Впрочем С++ ещё хуже.
вас не учили что неявное приведение типов плохо?
c = a / (int)b;
А есть языки, в которых неявное приведение работает очень даже хорошо. Почему бы не пользоваться ими, вместо того чтобы жрать кактус и писать бойлерплейт?
В нормальный языках будет ошибка компиляции. В си будет порождён бинарник с мусором. Уже по этой причине - си однозначно плохой язык.
Что приведённым выше примером вы хотите сказать, на ЯП отличимых от Си это нормальный код? Или вы хотите сказать, что данная бредятина является нормой для Си?
>на ЯП отличимых от Си это нормальный код?В нормальных языках ошибочный код просто не компиллируется
Ты не пройдёшь.-Wconversion -Werror
Да, в Go такой код даже не скомпилируетсяvar a int = -100
var b uint = 5
var c int = a / bТут уже на третьей строке ошибка компиляции.
На чистом Си писать - сумасшествие! С++ лучше, если убрать исключения и добавить строгую типизацию.
ada конечно
хотя импортозамещение же
потому рая
Но чтобы сразу и все, как сказал Главкодер.
Как вы докажете, что есть только один истинный Язык? а всё остальное язычество (простите).
Чистый Си являет нам истинность и язычество в одном лице.
Ибо нет языка больше кроме Си!
Там последний пост от 18го года(уже 6 лет!) и он не открывается. Всё остальное вообще уже протухшее и не актуальное. Куча однотипных жалоб на "нет дженериков" которые добавили 3 года назад в 1.18.
Go отличный язык и экосистема у него богатая. Если интересует язык лучше чем go где реально поправили мешающие вещи(а не этот бредовый перечень), то есть V. Но с экосистемой там пока печально
Список большой, весь не читал, но то, что написано, в основном не исправили: defer, nil, обработка ошибок, слабая ситема типов, наличие указателей, требование к обязательному использованию символов. Самое главное, что в отличии от дженериков это даже не собираются исправлять
Там написан сок мозга от волшебных на всю голову идиотов, уж извините за прямоту :-)
Даже generics зря вкрутили. Не, даже так - ну вот вкрутили ... И?!?!?! И нах никому не надо! И так будет по всему тому списку :)
Вообще то, кому не нравится - вокруг Ёзыков же на любой вкус, вот и идте ... туда :)
>Даже generics зря вкрутили. Не, даже так - ну вот вкрутили ... И?!?!?!Правильно, вместо добавления generic нужно просто объявить весь код на go deprecated, и переключится на другой язык
>Вообще то, кому не нравится - вокруг Ёзыков же на любой вкус, вот и идте ... туда :)Проблема не в том, что в голанге много чего нет. Проблема в том, что язык с технологиями устаревшими ещё в конце восьмидесятых усиленно толкается в массы.
>Правильно, вместо добавления generic нужно просто объявить весь код на go deprecated, и переключится на другой языкБуду вам премного благодарен! Звиздуйте в раст или куда там нынче модно :)
>Проблема не в том, что в голанге много чего нет.
Ого! Ты типа НЕ безнадёжен?! :)
>Проблема в том, что язык с технологиями устаревшими ещё в конце восьмидесятых усиленно толкается в массы.
Скорее же ставь треугольные колёса на свой велик!!! :)
Go - просто сказка для программинга во времена "компьютер - это сеть" если кто помнит солнечные девизы :) Ну а если вы родились уже после - поищите :)
> На гитхабе есть проект go-is-not-good.Пояснение: для тех кто в хайп
> Впрочем фанатики и тролли, как всегда, пройдут мимо
Да, точно, там достойное сборище троллей-блогеров, которые не втыкают почему есть вилка и почему есть ложка... если не ООП и не обмазка абстракциями, то всё - "отстой", причем с "авторитетами" там "полный порядок", просто кишат "авторитеты"... полное 100% "доверие".
Ну и то, что 10 летней давности - ваще не проблема... главное ведь нагадить на вентилятор мнениями "авторитетных" блоггеров, которые будут "определенно поумней гугла"
Уж лучше был бы фанатиком и троллем и прошел правда мимо, спасибо конечно, но лопайте сами
>Да, точно, там достойное сборище троллей-блогеров, которые не втыкают почему есть вилка и почему есть ложка... если не ООПХорошо, делайте язык без ООП, но с ФП. Хотя-бы на уровне окамла
>и не обмазка абстракциями, то всё - "отстой"В этом то и проблема, что абстракций на голанге почти нет. Отказались от исключений, но зато вместо ошибок нетипизированный err. Ни эффектов, ни полиморфных вариантов, ни алгебраических типов данных, ни монад, ни чего-то другого - ничего. Не забывайте писать
if err != nil {
return _, err
}
> Ни эффектов, ни полиморфных вариантов, ни алгебраических типов данных, ни монад, ни чего-то другого - ничего.Это то, о чем я говорил, - есть ложка, а есть вилка и у каждого свое предназначение.
Смысл всех этих абстракций вы перечислили, по большому счету нужен только в интерпрайзах, и если внимательно покопать, то всё это сделанно исключительно чтоб Маша не сделала глобальную переменную "Cool", которую Вася тоже умудрился придумать в совместном проекте. Го же специализируется не на интерпрайзном уровне как Жаба, Шарп... а как инстурмент "стрельнул и забыл", в контейнерах, лямбдах, там где "do one thing but do it best". Смысл языка - простота и легкость и гибкость
Ага. Язык со сборкой мусора - лучший выбор для системного программирования.
Не нравится отключи. Твой написанный на коленке коллектор для раста в разы хуже.
А что, если я на Си/С++/Зиг пишу?
Там коллекторы хорошие.
Пожалуй, да, new/delete лучше.
Для системного программирования.
> лучший выбор для системного программированияДля системного програмирования достаточно даже Баша... вообще-то, ну если вы конечно знаете определение "системного програмирования"
> Для системного програмирования достаточно даже Баша...Напишите это под новостью об очередной уязвимости в GRUB (например). Но речь, ведь, шла не о "достаточности".
> Напишите это под новостью об очередной уязвимости в GRUB (например).Тролим или не втыкаем ?
Какое отношение имеют уязвимости к опеределию "системного програмирования" ?
какое отношение определение имеет к системному программированию?
> какое отношение определение имеет к системному программированию?Какое отношение тролли имеют вообще к програмированнию ?
никакого, за это их и выперли из мейнтейнеров ядра, а какое это имеет отношение к теме?
> никакого, за это их и выперли из мейнтейнеров ядра, а какое это
> имеет отношение к теме?while true {
https://www.opennet.me/openforum/vsluhforumID3/136379.html#35
}
Уязвимости имеют отношение к достаточности.
А к системному программированию имеет отношение GRUB, написанный, в т.ч., на sh.
Тут же задача просто все настроить и запустить.
опять никому не нужный софт
А вы хоть сами писали на нём? По-моему, это вообще wo-язык. Пока продерёшься через тонну бойлерплейта, уже забудешь, о чём шла речь несколько страниц назад.
8-оТы эта ... к доктору сходи ... если гошка нечитаем - у тебя реально проблемы с головой :(
Если го -- читаемый, то эталоном читаемости надо назначить брейнфайк: 8 символов и ничего лишнего. Красота!
Изолированные приложения можно переместить на другой сервер без остановки или поменять версии библиотек. Очень удобно.
Почему просто либо не запускать не доверенные приложения, либо запускать их под отдельным пользователем или на отдельной системе?
1) для работы часто требуется запускать ПО к которому ноль доверия, но без которого работа не работает
2) ты удивишься как многое может выудить в системе софт работая под другим пользователем из того чего ему не стоит знать
3) запускать такой софт в виртуалке или на другом железе конечно можно, но это лишний оверхед, можно и в контейнере, но это то же самое только больше места на диске займёт
>либо не запускать не доверенные приложения,весь код проверить невозможно, особенно проприетарный
>либо запускать их под отдельным пользователемпопробуй текстовой редактор запустить под отдельнымпользователем, расскажешь про проблмы с правами
>или на отдельной системе?Не у всех есть десяток неиспользуемых компьютеров
Системе, а не машине.
Я сам тут пишу что-то подобное, но на питоне. Вылезли гигантские проблемы даже без изоляции сторонних приложений, а даже на самоизоляции.
systemd-run позволяет делать то же самое но есть из коробки
firejail позволяет описать это в конфиге а не в команде
чем это будет лучше?P.S.: не тролю, правда интересно..
Оба требуют передачи привилегий. systemd-run через Polkit, firejail - через setUID bit.
> systemd-runесть не везде
> firejail позволяет описать это в конфиге а не в команде чем это будет лучше?То же самое, - не везде есть, а с LSM единстевенное что нужно - линуксовый кернел и работать будет без рута, учитывая что в Го легко в статику, а значит очень портабельно в пределах платформы
>> systemd-run
>есть не вездеТо есть сабж — исключительно для локалхостов на девуанах? Ок, действительно им такое нужно.
>>> systemd-run
>>есть не везде
> То есть сабж — исключительно для локалхостов на девуанах? Ок, действительно им такое нужно.- Alpine Linux?
- "Не, не слышал..."
> Продакшен
> muslЧто ещё интересного расскажете?
А смысл? Безполезно.
>firejail... заявили что берут $Subj как один из бакэндов ... Как ты думаешь - почему? ;-)
>позволяющие использовать подсистему ядра Landlock для изоляции без suid-бита и повышения привилегийНеэффективно. landlock в данный момент не позволяет ограничивать сисколлы, это работа сейчас для seccomp-BPF, который, как и всё BPFное, требует привилегий.
И да, firejail с самого начала следовало использовать не костыли, а на лету генерировать apparmor-профили. Но apparmor очень хреново документирован, их дока - полнейшая помойка.
>apparmorА что он хоть кому то нужен? Кому нужно _формальная_ сертификация (с бумагами и штампами, ага) - всё равно на selinux-е ... ;-P
:)
А кому была нужна именно защита уровня приложений (а не совершенно бесполезный мандатный доступ) - куды бечь?
selinux в targeted - единственное _реалистичное_ применение этой технологии - а)забивание гвоздей кривым микроскопом b) слишком сложен для смертных (поэтому и не используется никем кроме rhbm)apparmor был более здоровым подходом - "ок, мандатный доступ не получился, давайте сделаем хотя бы ограничение доступа приложениям из списка с помощью изначально для этого предназначенного инструмента".
Но что-то снова пошло не так...
И да, кому-то нужен - от suse до бабуинты.
service apparmor stop && service apparmor teardown ихнее всьо
>А кому была нужна именно защита уровня приложений (а не совершенно бесполезный мандатный доступ) - куды бечь?Хорошего ответа для линукса у меня нет :(
Есть много ответов уровня такси-бЭ - $subj к приеру :)Кста, те кто на фряхе - вы всё ещё jail пользуете? Оно живое ещё?
>selinux в targeted - единственное _реалистичное_ применение этой технологии - а)забивание гвоздей кривым микроскопом b) слишком сложен для смертных (поэтому и не используется никем кроме rhbm)
А никто и не делает формальную (прям с бумажкой!) сертификацию на EAL/FIPS на чём то другом кроме RHEL-a :)
Ну ОК - лично я уж лет 15 такого не видел, может и не прав.>apparmor был более здоровым подходом ...
>Но что-то снова пошло не так...Аудит с ним пройти - это ... Тут и с полностью сертифицированным инструментарием взпотеешь :(
>И да, кому-то нужен - от suse до бабуинты.
>service apparmor stop && service apparmor teardown ихнее всьоВозможно. Я ж говорю: мне лично не встречался, когда попробовали сами прикинуть (пытались денег сЪЫкономить) как то совсем оно ... не то чтоли...
PS: Дошло. Я всё что выше говорил - говорил про сервера! Я _про_сервера_! Как оно на десктопе в промышленных масштабах - я не в курсе, у нас там винда \ яббл.
>те кто на фряхе - вы всё ещё jail пользуете? Оно живое ещё?Пользуем, а что ему сделается? Хотя, общая тенденция именно у фри не радует давно уже... Однако есть и другие BSD, и солярки, если линуксоидизация (привет KMS) вообще прижмёт...
selinux защищает всю систему. Он нужен исключительно для герметичных образов, где все бинарники ставятся разработчиком образа ОС, напр. гуглом или сисадминами NSA. Пользователь на таких системах 1. программы сам не ставит. 2. использует заведомо оговоренные программы заведомо оговоренным способом. То есть аналитик NSA или CIA на рабочей станции - чтобы инфу налево не смог скопировать. Или пользователь ведроида - чтобы DRM работало лучше (чтобы было труднее обойти без сжигания efuse). Вот предназначение selinux.
Соответственно, сертификации - они как раз с прицелом на то, что сисадмины дали образ - вот, используем его, а данные не сливаем налево не сливаем, и рабочую машину в посторонних целях не юзаем. Собственно, для чего selinux и создавался.На персональных машинах ему не то что бы не место, просто не подходит он для этого.
>Собственно, для чего selinux и создавался.
>На персональных машинах ему не то что бы не место, просто не подходит он для этого.Возможно и так, но вот ваша Fedora - почему то считает наеборот :) чЁтаГто?!? (С)
> На персональных машинах ему не то что бы не место, просто не подходит он для этого.Да как раз наоборот, именно на локалхостах он больше всего и нужен! С рабочей машины я максимум на Stack Overflow хожу, и в прод через VPN с 2FA и все джамп-хосты ещё попробуй залезь. А вот со своего локалхоста я что только ни открываю. Украдут через дырку в браузере логины-пароли от банкинга и будет головняка на месяц деньги вернуть, если не на три. Вот это реальный риск.
>Он нужен исключительно для герметичных образов, где все бинарники ставятся разработчиком образа ОС, напр. гуглом или сисадминами NSA.Ну то есть как это реально работает в любой финансовой, биржевой, медицинской или говернметской среде - ты ни разу не видел? Но мнение имеешь? :)
Предсказуемо важное мнение для тех кто на этом работает :-D
Сложный процесс изобретения jail продолжался.
Что, jail в bsd по вашему уже сейчас может предоставить аналогичную функциональность?
Он >80% от всего что надо ещё в нулевые умел, аЧпеТа!(С) :)
Потом я спрыгнул, но всё-же в курсе что прикрутили к примеру сеть ... чего он нынче "не умеет" - я не в курсе, алЁ фряшники! - нуна чутка разЪяснений! Есть тут кто?
Есть, а тебе что надо-то конкретно?
А маны почитать с минуту - вообще никак, да?
>Механизм Landlock позволяет непривилегированным программам ограничить использование объектов ядра Linux, таких как иерархии файлов, сетевые сокеты и ioctl ... без suid-бита и повышения привилегий.Т.е., произвольный непривилегированный процесс может управлять доступом к ресурсам ядра других процессов.
Бред какой-то!
Ты ничего не понимаешь. landlock - это та вещь, которая вообще должна была быть изначально из коробки.
не управлять, у делать exec дочерного процесса с привелегиями ниде чем он сам
Не "других", а своего собственного, либо собственных дочерних.
Т.е. если кто-то другой запустил прогу, а не этот ландрас, то ничего изолироваться не будет?! Это как ворота в пустыне. Спасибо, уж лучше аппармор.
Они все так работают (firejail, bubblewrap/flatpak).
Главная проблема всех этих jail-ов: как их встраивать в готовый дистрибутив с готовым пакетным менеджером?
Конретно firejail от пакетов не зависит, изолирует уже установленный софт через профили.
О чём и речь. Firejail изолирует malware, но никак не изолирует /usr/bin/malware или ./malware.
Нет же, как раз будет изолирован /usr/bin/malware. ./malware нет.
А вот и нет. Будет изолирован только процесс, вызванный из специально сконфигурированной оболочки командой, требующей поиска пути в PATH. А вот вызов с указанием пути, в т.ч. с абсолютным путём (/usr/bin/*), будет пропущен как есть.
читаем внимательно:> ... работы под обычным непривилегированным пользователем
потому ограничения только на дочерние процессы
>/usr/bin/malwareЕсли вам кто-то от рута поставил malware - то это Game Over, не находите?
> О чём и речь. Firejail изолирует malware, но никак не изолирует
> /usr/bin/malware или ./malware.Если у меня /usr/bin/malware в системе лежит - изолировать что-то уже поздняк, ибо какой-то м...к получил рут в системе и делает там что хочет :). Как вы от рута изолироваться собрались?
Изоляция нужна только чтобы специально подготовленные данные, полученные от злоумышленника, не имели слишком много возможностей после эксплуатации уязвимости. А вообще, рута ограничивают всевозможные rbac и selinux, обойти их совершенно отдельная ресурсоёмкая задача, посильная только преступнику уровня state.
То то на XDA Developers "преступники уровня state" рутилки делают. selinux обошли так: пропатчили 2nd-stage bootloader, который почему-то оказался доступен на запись ... после чего после перезагрузки патченный bootloader патчит ФС, и восстанавливает себя.
При физическом доступе не оч интересно.
Рут тут вообще ни при чем.Речь шла о том, что все эти джейлы встраиваются в систему через симлинк с именем программы по пути /usr/local/bin (или ~/.local/bin), добавленного в начало переменной PATH. То есть проскочить мимо песочницы супер тривиально. Достаточно вам (или любому запущенному процессу вместо вас) вызвать, например, веб-браузер по абсолютному пути, и вы даже не заметите, что браузер запущен в обход песочницы. Тоже самое, если запустить его из окружения, в котором переменная PATH настроена иначе.
Различные MAC-средства (SELinux, AppArmor, Tomoyo) предотвращают такие казузы, а эти джейлы-запускалки (bubblewrap, firejail и т.п.) - нет. (Flatpak использует bubblewrap, но таскает своё окружение (и собранное под него ПО) с собой.)P.S. Само-собой, что песочницы не предназначены для запуска недоверенного кода. Это никогда не безопасно. Они нужны, чтобы уменьшить риск эксплуатации уязвимостей в доверенном коде.
>Различные MAC-средства (SELinux, AppArmor, Tomoyo) предотвращают такие казузыС SELinux понятно, там это через аттрибуты файлов, а как AppArmor и Tomoyo в этом помогут? Тем более, что следующим шагом можно скопировать бинарник, и путь у него поменяется
>Достаточно вам (или любому запущенному процессу вместо вас) вызвать, например, веб-браузер по абсолютному пути, и вы даже не заметите, что браузер запущен в обход песочницыПри наличии песочницы, это уже работает. Суть в том, что недоверенный код запускается уже внутри песочницы сразу, а доверенный что попало не запускает
> С SELinux понятно, там это через аттрибуты файлов, а как AppArmor и Tomoyo в этом помогут? Тем более, что следующим шагом можно скопировать бинарник, и путь у него поменяется1) Помогает блокировка альтернативных, обычно разрешенных на запись пользователю, мест запуска. Например, через mount.FS noexec или отдельным AA-профилем для /{home,tmp}/**.
2) Но можно и через атрибуты файлов. См. man 7 apparmor_xattrs.> При наличии песочницы, это уже работает.
Наличия недостаточно. Нужно правильно встроить. Я уже объяснял, почему. "Перехват" вызова "голой" программы через переменную PATH - это несерьезно.
> Суть в том, что недоверенный код запускается уже внутри песочницы сразу, а доверенный что попало не запускает
Доверенный код, запущенный в песочнице, может косвенно вызвать другую (в т.ч. недоверенную) программу через доверенный механизм (например, DBus+Portal). И другой родительский процесс (системный менеджер), запущенный от рута, мимо нашей песочницы, породит, что попросят.
Отлично! Теперь GIMP и прочие замечательные опенсорс приложения заиграют новыми красками.
Просто парад "крепостестроения". Вторая новость за неделю.
Читаешь идеи проекта и ловишь себя на мысли, что всё это делает SELinux.
Мог бы делать, но почему-то не делает. Почему бы?
Как не делает? Ты его в новых rhel вообще выключи попробуй! ;-)PS: Я - могу. Но не буду. Порешили порешить(С)
> Как не делает? Ты его в новых rhel вообще выключи попробуй! ;-)Красношапки не касался. Если там это работает -- молодцы, что сказать. Но мне интереснее -- не десктопного использования. Например, интернет отрубить подозрительному приложеньицу. Для этого до сих пор не придумано ничего подходящего, работающего из коробки.
> Код проекта написан на языке GoЗначит продолжим использовать firejail, спасибо что написали :). Экосистема с телеметрией в компилере от гугли - такое себе.
Можно собрать gccgo?
можно, разрешаю. (работать правда не будет, но собирать-то никто не против)
>> Код проекта написан на языке Go
> Значит продолжим использовать firejail, спасибо что написали :).Но это не надолго снежинка :) Текст новости надо _читать_ ВНЕЗАПНО! :-)))
А там:
"... в кодовую базу Firejail уже приняты изменения, позволяющие использовать подсистему ядра Landlock для изоляции без suid-бита..."
Чем это отличается от bubblewrap, который также не требует suid?
Без suid он требует включения user namespace, что огромный вектор для атак на всю систему с учётом постоянно всплывающих в ядре уязвимостей, которые можно эксплуатировать при включённом user namespace.
этот требует еще недописанного толком нового модуля ведра. Что, что может тут пойти не так?!(диды вообще-то не по желанию левой пятки сделали jail и его линуксные костылеаналоги работающим только от рута)
landlock никогда не будет дописан. Он изначально дизайнился как расширяемый.
Без user namespace ты пятую точку выставляешь в дыру, каждый раз, когда открываешь веббраузер.
>По своим задачам Landrun близок к утилите Firejail,Firejail из коробки ограничивает доступ не ко всем ресурсам, что делает побег из песочницы очень простым
мне сегодня syncthing изолировали. ещё одна местная разработка.