Автор стандартной Си-библиотеки Cosmopolitan и платформы Redbean объявил о реализации механизма изоляции pledge() для Linux. Изначально pledge разработан проектом OpenBSD и позволяет выборочно запретить приложениям обращения к неиспользуемым системным вызовам (для приложения формируется подобие белого списка системных вызовов, а остальные вызовы запрещаются). В отличие от доступных в Linux механизмов ограничения доступа к системным вызовам, таких как seccomp, механизм pledge изначально разработан с оглядкой на максимальное упрощение применения...Подробнее: https://www.opennet.dev/opennews/art.shtml?num=57505
FreeBSD обгадили pledge(), хотя работа там уже большая проделана, думаю этот проект тоже не взлетит, никто ревьювить не будет, как и во фре. Время впустую.// b.
Сабжу похрен будет его кто ревьюить или нет. У них там своя либа и свой враппер, поэтому они для желающих изображают "а линукс, типа, тоже умеет pledge()" путем трансляции.Можете ревьюить, можете не ревьюить, а чтобы это получить есть я и есть вон тот автор. Третий в этой схеме лищний и оно состоится если 2 участника кодинга так решили, независимо от ващих ревью. Насколько оно надо - вопрос интересный, конечно. А эти клоуны из фри предложили чего-то лучше? Или как обычно промямлили "не надо, вот еще - кодить?!"
Оно не будет адски тормозить со всеми этими проверками?
Будет но что ты называешь адски? Это зависит от твоего самоощущения.
> После сборки и запуска модифицированного приложения...
> Утилита pledge ... не требует root-доступа
> Реализация не требует внесения изменений в ядро
> ...транслируются в правила SECCOMP BPF...Юзера пускают с BPF в ядро, чтобы фильтровать этого самого юзера?!
P.S. И вообще, что значит "модифицированного приложения"? Огораживаемое приложение надо сначала модифицировать?
> P.S. И вообще, что значит "модифицированного приложения"? Огораживаемое приложение надо
> сначала модифицировать?Это может иметь смысл для компонентов системы. Хэккер обнаружил технологическое отверстие, проник в систему и ничего толком не может сделать.
> технологическое отверстие, проник в системуЗначит, псевдо-защита уже не сработала, если прошла удалённая атака.
Подменять "ошибка в программе" на "защита" - так себе приём риторики. Складывается впечатление, что оратор не видит разницы.
Хорошо. "Хэккер" ошибочно попал на твой комп. Он не хотел, но попал.
Ну вот, попал он и пишет привычно:perl.exe --skompilirovat-sploet
а тот ему в ответ "диск Ц не обнаружен"
По такой же технологии некто тигар на freebsd вырусы на хостинге тролил, мол, "пингвин не обнаружен". Но это весьма сыкотный способ сдерживания малвари.
> это весьма сыкотный способ сдерживания малвари.Так то да. Но в условном банке есть СБ, камеры, сигнализация, сейф с ключами. А тут эксперт предлагает, что если вон тот охранник проморгал, надо молча повиноваться и кассу в сумки выгружать.
Да, необычное окружение - может поломать вредителю планы, демаскировать его и проч. Скажем вводит вредитель ls чтобы понять куда попал, а ему - опа, intrusion detected. А зачем вебсерве нормальный ls?Еще мне out of band тулсы нравятся. А просто потому что с точки зрения "если б я атаковал" я бы не хотел чтобы в меня "уровнем ниже" палочкой тыкали вот так. Значит как-то так и стоит делать.
> Значит, псевдо-защита уже не сработала, если прошла удалённая атака.Ну конечно, многоступенчатые системы защиты, несколько линий обороны и прочие ненужно придумали лохи.
> может иметь смысл для компонентов системыЕсли твой "Хэккер" уже в системе, сдались ему системные компоненты, он будет свои использовать, ведь сабжу рут не нужен.
> он будет свои использовать, ведь сабжу рут не нужен.Боюсь, это слишком сложный сценарий атаки, что бы я мог его понять.
> это слишком сложный сценарий атаки, что бы я мог его понять"Учись, студент!" (с)
Я и так могу с ещё более меньшим содержанием смысла произвольные слова скомбинировать.
> Боюсь, это слишком сложный сценарий атаки, что бы я мог его понять.На mirai позырь. Делает такой себе "libc-типа" минимальный прямо из сисколов ядра. Поэтому ему плевать какие там версии либ, даже какой libc плевать. Запускать это, конечно, не стоит, но идеи на цитаты растащить в более мирных целях - почему нет?
Так тут вызовы в ядре фильтруются, какая разница, если ли связывание с libc. Как бы для зловредов сисколы - это так себе достижение, позавчерашний день. Они массово не используется, поскольку Микрософт постоянно их меняет и эвристикам антивирусов команды перехода в шлюз не нравятся. В Linux такой проблемы нет. Если в мирных целях, то мне понятно, что условный "антивирус" в идеале ни с чем из системы линковаться не должен - это лишние вектора атаки на него.
> Так тут вызовы в ядре фильтруются, какая разница, если ли связывание с libc.Если вот именно в ядре, и мы в его контексте - тогда по идее упс.
> Как бы для зловредов сисколы - это так себе достижение, позавчерашний день.
> Они массово не используется, поскольку Микрософт постоянно их меняетMirai линуксный и нацелен на IoT. А там в сислибах и архитектурах зоопарк, маздайным "футуристичным" кодерам ЭТО и не снилось. Пусть они вообще покажут такой кросс, потом что-то рассказывают. Они шагу с своего е...го х86 ступить не могут. Название пакости намекает у кого позавчерашний день. Но интересно оно как забавная технология кросса в основном. В остальном ничего этакого.
> и эвристикам антивирусов команды перехода в шлюз не нравятся. В Linux
> такой проблемы нет. Если в мирных целях, то мне понятно, что
> условный "антивирус" в идеале ни с чем из системы линковаться не
> должен - это лишние вектора атаки на него.Ну да. На него тот же LD_PRELOAD например начнет действовать и его на...т точно так же как все остальное. А так то антивирусы сами руткит здорово напоминают, в целях самозащиты. Это как бы логично, и как бы причина по которой у меня никогда не будет ни винды, ни проприетарного антивируса, потому что blob-only софт с подобными привилегиями и возможностями лично я в моих системах тупо не потерплю.
> проник в систему1) предлагаю вам уточнить - что значит "проник в систему" ?
иначе разговор ни о чем. а точнее - каждый о своем.2) и можно ли с этой позиции повысить свои привилегии ?
>> проник в систему
> 1) предлагаю вам уточнить - что значит "проник в систему" ?
> иначе разговор ни о чем. а точнее - каждый о своем.Предлагаю оставлять при цитировании контекст: "Это может иметь смысл для компонентов системы".
Сначала определяем потенциально уязвимые компоненты. Например, клиент DNS получает данные из внешнего мира по сети, значит, при переполнении буфера/стека (они есть - пока не доказана корректность) может исполнить произвольный код. Нужна ли для работы DNS возможность загрузить драйвер или смонтировать файловую систему? Не нужна, значит имеет смысл запретить. В таком случае при эксплуатации уязвимости злоумышленнику будет затруднительно установить в систему руткит режима ядра. Теперь рассмотрим ssh сервер - вот тут уже не так всё однозначно и ограничения могут помешать легитимному пользователю.
> 2) и можно ли с этой позиции повысить свои привилегии ?
В моём понимании привилегии - это аппаратная фишка, кольца защиты, а не права пользователей. При эксплуатации уязвимости код может выполняться в ядре. И даже в этом случае возможно ограничить его в правах, но в общем случае потребуется механизм уровнем ниже, чем pledge.
> может исполнить произвольный код.ок. вот что значит "проник в систему". пусть так будет.
а далее "произвольный код" (поскольку он произвольный, вышел в режим ядра, а хаксор хитер и коварен) отключает к биллгейтсовой матери SElinux, AppArmor и что там еще навешено, пусть будет pledge. на этом все.
>> может исполнить произвольный код.
> ок. вот что значит "проник в систему". пусть так будет.
> а далее "произвольный код" (поскольку он произвольный, вышел в режим ядра, аКод никуда на ходит, а располагается в памяти. Исполняет его процессор. При этом действуют механизмы защиты.
> хаксор хитер и коварен)
Довольно унылая на самом деле хитрость - сделать вид, что якобы можно из 3-го кольца изменить память ядра.
>> а далее "произвольный код" (поскольку он произвольный, вышел в режим ядра, а
> Код никуда на ходит, а располагается в памяти. Исполняет его процессор. При
> этом действуют механизмы защиты.это были данные. они сперва оказались в памяти ядра,
а потом почему-то выполнились как код. как вам такой сценарий ?>> хаксор хитер и коварен)
> Довольно унылая на самом деле хитрость - сделать вид, что якобы можно
> из 3-го кольца изменить память ядра.есть документированные интерфейсы между юзерлэндом и ядром - сисколлы и всякие
нетлинки с BPE (BFE ? забыл как ее. помню что родом из Беркли).
>>> а далее "произвольный код" (поскольку он произвольный, вышел в режим ядра, а
>> Код никуда на ходит, а располагается в памяти. Исполняет его процессор. При
>> этом действуют механизмы защиты.
> это были данные. они сперва оказались в памяти ядра,
> а потом почему-то выполнились как код. как вам такой сценарий ?Это сценарий с отличной от нуля вероятностью. Полная вероятность события «проникновения» является суммой вероятности всех сценариев.
>>> хаксор хитер и коварен)
>> Довольно унылая на самом деле хитрость - сделать вид, что якобы можно
>> из 3-го кольца изменить память ядра.
> есть документированные интерфейсы между юзерлэндом и ядром - сисколлы и всякие
> нетлинки с BPE (BFE ? забыл как ее. помню что родом из
> Беркли).Начали во здравие, кончили за упокой. Осталось понять, прочему при вызове 60-го шлюза завершается поток исполнения, а не вся система.
Всего лишь до уровня первопня на i9-11xxx
Это как бы от программы сильно зависит. Скажем чтобы активно считать вообще не надо системные вызовы делать.
Если программа которую Вы используете "лезет" туда, куда не следует, то ИМХО необходимо в консерватории что подкручивать.
А вот как подкручивать, это уже варианты различные.
> программа ... "лезет" туда, куда не следуетУже дырища в системе, поздно лечить.
чой-та не понял...можно ли этой штуковиной скрыть для приложения системный файл и запретить приложению выход в интернет?
а то не могу песочницу найти простенькую...
$ firejail --blacklist=/etc --noprofile --net=none bash
Чем это лучше unshare -n? Он же про другое спрашивает. Вот как в венде, пока программе не разрешишь доступ в сеть, она никуда не пойдёт.
Тем, что firejail точно имеет SUID флаг в любом дистрибутиве.
Человек спросил про изоляцию, я ответил, а от куда ты это всё домыслил, я хз.
Но ведь в винде только входящие порты запрещены
Если галочку поставить?
> Чем это лучше unshare -n?Умеет в довольно продвинутые профайлы. Которые для популярных штук написаны не вами. И кроме unsharing'а умеет и в ограничения SECCOMP и т.п..
Пикантный нюанс состоит в том что чтобы непривилегированый юзер мог в такие вещи, права сперва надо подбросить (если такое разрешить в произвольном виде всем юзеры смогут создавать в системе хаос). И на этом бывало парочку стебных вулнов :)
> Вот как в венде, пока программе не разрешишь доступ в сеть, она никуда не пойдёт.и даже сервер DNS не сможет запросить (и получить ответ) ?
ps: стандартный бикон из кобальта умеет DNS туннель.
виндовые локальные фаерволщики, вы бесполезны и не нужны.
Еще половина малвари просто просит браузер сходить на урлу. Предполагая что браузеру это скорее всего можно. Почему-то.
> просит браузер сходить на урлукстати ! если от имени "текущий юзер", и этот юзер - я,
то uMatrix, настроенный на паранойю, даст интересный эффект
("новый" урл просто не откроется). но это не для всех решение.
> $ firejail --blacklist=/etc --noprofile --net=none bashон SUIDный и проблемный по безопасности ...
https://www.opennet.dev/opennews/art.shtml?num=57337
https://www.opennet.dev/opennews/art.shtml?num=54564
и т.д.
для тех приложений которым доверяешь еще можно, но песочницы обычно про другое...
Прекратите сами себя накручивать - использование firejail вполне безопасно. Даже если в теории у вас внезапно окажется древнее ядро, имеющее уязвимость, то вероятность того, что потенциально опасное приложение попытается не просто утянуть у вас данные, а именно применить нужный эксплойт... Короче все это работает в зависимости от фазы луны и вероятность плачевного исхода близится к нулю.
В любом случае - использование изоляции, гораздо надёжнее, чем светить чёрти какому приложению свои данные на диске.
>пока программе не разрешишь доступ в сеть, она никуда не пойдётТак приведённое выше "--net=none" не запретит программе никуда не идти?
Всё запущенное внутри изоляции, тупо не увидит сетевой интерфейс.
> Так приведённое выше "--net=none" не запретит программе никуда не идти?Куда ж ты пойдешь на машине без сети. В новом namespace сети - тупо интерфейсов изначально нет. Даже локалхоста, насколько я помню. Ходить некуда пока в namespace явно не помещен какой-то интерфейс все же позволяющий куда-то ходить.
локалхост там есть, но он не связан с интерфейсом реальной системы
> локалхост там есть, но он не связан с интерфейсом реальной системыПо-моему, lo создавать надо самому, если это на уровне именно создания namespace через unshare(). Firejail что-то такое может и на автомате делать.
> можно ли этой штуковиной скрыть для приложения системный файлДа, в описании написано, что можно указать списки директорий для чтения, записи и создания файлов (отдельно).
> и запретить приложению выход в интернет?
Ну конкретно за маршруты, чтобы только в Интернет нельзя было выйти -- нет. А вот работу с сетью целиком -- да.
Т.е. ещё нужно активировать BPF в котором будет работать вирусня имеющая привилегии выше root? Спасиб.
Привилегии - в процессоре. Привилегированный режим процессора, или режим ядра, он же 0-е кольцо защиты. У пользователей - права. Они ортогональны. Можно придумать код для ядра, который будет давать пользователю root отлуп. Можно придумать драйверок, который позволит делать гостю что угодно.
> Можно придумать код для ядра, который будет давать пользователю root отлуп.Уже давно придумали, называется SELinux. Логинишься рутом, а тебе даже в /tmp писать нельзя. Был когда-то даже публичный сервер для демонстрации возможностей. Вроде так и не сломали.
>> Можно придумать код для ядра, который будет давать пользователю root отлуп.
> Уже давно придумали, называется SELinux.Кхе. Отсталые и вечнодогоняющие бзды и тут утянули инновации себе:
security.bsd.suser_enabled: processes with uid 0 have privilegecommit 68239103ca69ad700547a0a80b8af367f735e0d1
Author: rwatson <rwatson@FreeBSD.org>
Date: Mon Jun 5 14:53:55 2000 +0000o Introduce kern.suser_permitted, a sysctl that disables the suser_xxx()
returning anything but EPERM.
o suser is enabled by default; once disabled, cannot be reenabled
o To be used in alternative security models where uid0 does not connote
additional privileges
Они даже CAPs-ы вроде не смогли...
>>> Можно придумать код для ядра, который будет давать пользователю root отлуп.
>> Уже давно придумали, называется SELinux.
> Кхе. Отсталые и вечнодогоняющие бзды и тут утянули инновации себе
> Date: Mon Jun 5 14:53:55 2000 +0000
>
Еще и машину времени угнали, чтобы точно никто не догадался ...
Надо отметить, что утилита-обёртка не может полностью заменить явный вызов pledge в коде, поскольку не позволяет последовательно сужать доступ к классам системных вызовов согласно логике программы.
Сразу видно человека не разбирающегося в теме
Буду рад развёрнутому ответу.
По-моему, проблема в том, что тому же браузеру, самой уязвимой программе на моём ПК, нужны все возможные разрешения. Да, с каждым днём мы всё дальше от unix-пути
Но вы же можете скачивать страницы через wget, а просматривать через less. Немножко неудобно, но зато unix-way
> можете скачивать страницы через wgetв которых ничего нет, кроме (адресов) скриптов.
Такие страницы не индексируются.Скачать скрипты, скачать json ответы. Смотреть их через less
Нормальный такой unix-way уровня tar/gz где для получения списка файлов нужно весь архив разжать
Мы же любим unix-way?
Ты в опаснасте? Тебя злая дядя такать пистолет и заставлять использовать тара-гзу? Ты моргать два раза, есля ето так.
>>зато unix-wayНачала 80х годов прошлого века.
Проиграл с клоуна.
> По-моему, проблема в том, что тому же браузеру, самой уязвимой программе на моём ПК,
> нужны все возможные разрешения.Ну оно их и получает. Вопрос только где и почему :). Так что вот тут оно видит Downloads и совершенно пустую ос. А вон там типок даже вывесил Zoom-у "камеру" через V4L2 loopback :D. И видит в результате зум "его морду, типа". А то что это фэйк-мувик с фэйк-камеры... ну... в этом мощь абстракций и состоит. Если кто хочет камеру, ее можно дать. Что он там увидит это не говорит.
> По-моему, проблема в том, что тому же браузеру, самой уязвимой программе на моём ПК, нужны все возможные разрешения.Отнюдь не все. Вот пример использования pledge и unveil для разных процессов огнелиса в OpenBSD:
https://cvsweb.openbsd.org/cgi-bin/cvsweb/ports/www/mozilla-.../
https://justine.lol
Вот что скажу: это прекрасный хакер в лучшем смысле этого слова.
Justine Alexandra Roberts Tunney. Это имя надо запомнить.
Модератор freehck опять мое сообщение удалил, про добавление этого механизма изоляции в systemd. :-(В systemd уже есть изоляция сервисов на основе namespaces, а переставленный в новости механизм был бы хорошим дополнением.
Дело в том, что "интегрировать в systemd" -- это здесь такая дежурная шутка. Потому не всегда понятно, что имеет ввиду автор сообщения. Я когда-то написал, что может иметь смысл добавить в пакетный менеджер функцию контроля за целостностью системы, наверное, тоже восприняли как "шутку".
// disclaimer: я другой анон но разделяю взгляды того анона, поэтому...> Дело в том, что "интегрировать в systemd" -- это здесь такая дежурная
> шутка. Потому не всегда понятно, что имеет ввиду автор сообщения.При том 90% шутников - некомпетентные ламы заучившие в лохматые годы команды и решившие что других вариаинтов нет и быть не может. Им плевать что линух за годы ушел сильно вперед, что там куча фич. Так то clone() и unshare() довольно забавно сделаны. Namespaces вращаются вокруг них. Чем процесс от треда в линухе отличается? У процесса unshare()'d немного больше. А у контейнеров - еще немного больше. В принципе комбо флагов вроде даже можно получить "внеклассовые" абстракции. То что это никто не делает - ну, есть устаканившиеся варианты, они понятны пиплу, ими и пользуются.
> Я когда-то написал, что может иметь смысл добавить в пакетный менеджер функцию
> контроля за целостностью системы, наверное, тоже восприняли как "шутку".А в какой пакетный менеджер это надо добавлять? У редхата есть, для дебиана отдельная утилса есть, а у какого-нибудь арча пакетник что так рудиментарный что эдак.
А что до системды: лично я тоже использую урезание прав системным сервисам системдой. Оно может и сисколы порубать, и юзера выставить, и unshare того или иного namespace сделать. Там есть свои тупняки, но, вообще, можно конфижком на полэкрана нехило доступ в систему порубать, при том вот именно unix way-ем такое не особо то и соберешь - просто потому что в процессе сборки изолированой арены нужные части системы уже недоступны. А зачем вебсерваку уметь вызывать баш? Чтобы скриптокиду было удобнее систему ломать? А вот хрен ему, удобно админу должно быть, хакерам наоборот. Иначе нахрен такая безопасность нужна?
Заодно там же всякие шедулеры и приоритеты им можно поставить и проч и все такое прочее. Идея всегда-резидентной привилегированой запускалки которая может отвесить все нужные сисколы в верном порядке, не развалив арену и не завися от внешних компонентов (которые в контейнерах становятся недоступны) имхо сама по себе ОК. Поцтер просто вовремя не угомонился и чересчур разогнался. Скажем нетворкд вышел странной хренью, но он вообще опционален.
>> Я когда-то написал, что может иметь смысл добавить в пакетный менеджер функцию
>> контроля за целостностью системы, наверное, тоже восприняли как "шутку".
> А в какой пакетный менеджер это надо добавлять?В том случае Михаил Шигорин кого-то озадачил вопросом "предложите что-то конкретное". Я предложил. Он так и не ответил. Наверное, решил, что шучу. А может я забыл.
> У редхата есть, для
> дебиана отдельная утилса есть, а у какого-нибудь арча пакетник что так
> рудиментарный что эдак.К примеру, нажал я в mc на каком-то подкаталоге из /usr "удалить" и потом "ввод". Что будет дальше у Редхата и Дебиана? А если удаляем ld-linux.so? Или же кто-то наконец скомпилировал Z0mbie.Mistfall под Linux, когда мы узнаем о факте заражения? Всё это в принципе может решать "пакетник", поскольку именно у него есть вся необходимая информация, а наличие посторонних "антивирусов" (в кавычках - потому что без сигнатур толку может быть мало) не всем нравится. Но потом я узнал, что под "целостностью системы" некоторые понимают удовлетворение зависимостей пакетиков, а под "удовлетворением зависимостей" - присутствие записи в БД, а не наличие валидных файлов.
> В том случае Михаил Шигорин кого-то озадачил вопросом "предложите что-то конкретное". Я
> предложил. Он так и не ответил. Наверное, решил, что шучу. А может я забыл.Тут что угодно может быть. Он периодически пытается допустим дебианщиков подъ...ть, с потугами доказать что альт типа-лучше. Но дебианщики так то умеют проблемы решать и по факту обычно оказывается если не тот, то альтернативный способ как нечто делать, и он тоже работает, в результате демо получается неубедительным.
> К примеру, нажал я в mc на каком-то подкаталоге из /usr "удалить"
> и потом "ввод". Что будет дальше у Редхата и Дебиана?1) Нормальные люди под рутом в общем случае не сидят. Поэтому, в 99% случаев будет -EPERM от системы на подобные потуги.
2) Если вдруг я ну вот лох-лох, не выспался там, и под рутом все же вот это влупил - ну, это печально, однако все что мне грозит это ребут в rootfs или, если совсем уж все плохо (например /boot снес) - бут с флешки. А дальше - очень небольшое жонглирование с снапшотом - и вот уже OS опять на месте. Минуты за две. В примерно том виде как была. Заведомо логически консистентном. Как максимум это может быть немного устаревшим вариантом, ему может быть надо апдейты опять накатить или переделать недавние изменения конфигов (все важные изменения логично снапшотить).И да, это все не пакетный менеджер а ФС обеспечивает. У нее это лучше получается. Заодно в принципе есть и некий список "недавних изменений". И лично я спер идею убунтуев, когда есть уровень менеджмента, он на 1 уровень выше /. Его в нормальном виде не видно, но при желании моунтабельно - и оттуда как раз можно снапшотами порулить.
> А если удаляем ld-linux.so?
initrd оно так то будет похрен, а операционка на флехе даже и выпиленый /boot вернуть может.
> Или же кто-то наконец скомпилировал Z0mbie.Mistfall под Linux,
> когда мы узнаем о факте заражения?Надежнее всего бутанув с readonly носителя отдельную копию операционки, конечно, заведомо нормальную. Потому что если в ОС подозрение на руткит, доверять ей уже не стоит.
От некоторых развеселых экспонатов даже это не поможет. Вон тот хайтек патчащий фирмвари винчей и отдающий "не те" сектора плевать хотел. Однако, кмк у именно меня он "почему-то" облажается в парсинге, а я озадачусь вопросом WTF. Что такое JTAG я, таки, знаю. Так что в этом случае ценный экспонат, вероятно, улетит всем мыслимым аверам, для максимизации урона. Сделать невкусным соотношение gain/loss для атакующего - кажется мне удачной идеей.
> Всё это в принципе может решать "пакетник",
ИМХО, это все же не его задача. ФС со снапшотами это может делать намного фундаментальнее, куда меньше зависит от живости ОС и ее начинки - а менеджмент системы при этом начинает напоминать привычные виртуалки, с теми же терминами и свойствами вместо очередного наколенного кастома.
> поскольку именно у него есть вся необходимая информация,
В принципе да, НО...
1) Уметь repair снесенного usr значит что он должен хранить все скачаные архивы. Плюс 100500 к жрачу места системой на хранение полных архивов.
2) Ах да, снапшоты имеют интересную фичу: core set блоков только один, место занимает только "дельта". Если эту концепцию понять, потом все просто, логично и эффективно. И это понимают все кто продвинуто работал с виртуалками.
3) Пакетнику для работы нужна рабочая система. Он обычная программа. Конечно, можно его статически отстроить и проч. Но тогда фиксить его сам станет отдельной канителью для майнтайнеров с трекингом внутренних либ и дублированием его сущностей. Можно наверное в initrd положить. Но это порядком увеличит initrd - и это НЕ есть консистентное состояние: оно еще зависит от файлов с статусом пакетов и проч описывающими что установлено и т.п..
4) А продолб этого состояния в системе с пакетником так то довольно неприятный опыт. Снапшот что, он пакетник и его состояние синхронно откатит в взаимно-консистентное состояние. Врядли кто снапшотил уже порушеную систему.
5) Full reinstall всего что было в usr займет неиллюзорное время сравнимое с полным инсталлом системы. Именно поэтому продвинутый народ оперирует "образами", "снапшотами", "send" и тому подобным. Так тупо в цать раз быстрее. Откат снапшота не ворочает большую часть блоков, только указатели переставляет в вид когда теперь это прошлый view. А пакетник, таки, будет все 100500 гигабайтов телепать от и до.
6) В как минимум дебиановском пакетнике можно повесить хук делающий что угодно после инсталла пакета. В том числе и снапшот можно сделать. Нужно ли - вопрос номер два.
7) Side effect of CoW: "копирование" виртуалки с 20Гб диском, или даже образа винча на 2 терабайта чтобы "fsck" на нем прогнать занимает примерно секунду, и нового места это не занимает. Это тоже частный случай "unshare", но в этом случае блоков ФС: копия изначально референсится на те же блоки, по мере расхождения CoW делает свое дело. Только он это делает плавно. И те цать блоков которые fsck изменил "в run time" меня не парят как "занимаемое место". В отличие от идеи копировать 2 терабайта по настоящему. А видимость независимой копии, вот, есть. Конечно как и в случе с VM дельта может отрастать, если это не контролировать.> под "целостностью системы" некоторые понимают удовлетворение зависимостей пакетиков,
Целостность системы весьма многогранный аспект. Есть еще допустим логическая консистентность: данные и конфигурация должны соответствовать бинарям. Ну вот представляете, автор может допустим формат конфига поменять в энной версии. У вас был старый usr, старый конфиг. Потом после апдейта пакета вы пропатчили конфиг. Стал новый usr, новый конфиг. Но если откатывать абы как, можно получить скажем новый usr/старый конфиг. И оно таки сломается. А когда после дурного отката это сделают цать программ сразу, станет интересно.
> а под "удовлетворением зависимостей" - присутствие записи в БД, а не
> наличие валидных файлов.Полная фактическая верификация, видите ли совершенно не бесплатная по скорости операция, чтобы ее при обычном инсталле пакета ворочать. Ну то-есть да, при желании что-то такое сделать можно, но тормозило бы оно дико. Поэтому как максимум имеет смысл отдельной утилсой или опцией чекера выделенного под такую задачу.
Более того - у MSI на вот подобной почве бывает неиллюзорное горе от ума.
- Инсталлю это, это и это...
- Ой, не получилось, давай-те ка я rollback сделаю!
- Упс. Оказывается, файл роллбэка или исходник пакета были повреждены. ERROR! FAIL! ПОЛУНДРА!11В чем проблема? В такой системе вообще ничего не ставится и не удаляется. И черт его знает как это вышибить кроме как реинсталлом системы. Это то что вы получаете за идиотскую оверинженерию пакетника. Он становится тормозным, хлипким, и потом оказывается что те задачи лучше и консистентнее решались на других уровнях вообще.
>> К примеру, нажал я в mc на каком-то подкаталоге из /usr "удалить"
>> и потом "ввод". Что будет дальше у Редхата и Дебиана?
> 1) Нормальные люди под рутом в общем случае не сидят. Поэтому, в
> 99% случаев будет -EPERM от системы на подобные потуги."Пакетник" тоже может дать отлуп - он знает, что вот эти файлы именно такой версии необходимы для корректной работы системы. Тогда перезагрузка не потребуется. РэдХат куда-то в эту сторону и движется с атомарным обновлением системы и доступом "только чтение" - такой подход проще.
> "Пакетник" тоже может дать отлуп - он знает, что вот эти файлы
> именно такой версии необходимы для корректной работы системы.Это что, на каждый сискол мнение пакетника спрашивать? И сколько MIOPS/core получится? 0.0(0) примерно? Пакетник не часть ядра и не компонент миднайта. Хотя при сильном желании наверное можно какой-то плагин к миднайту сделать, но...
... но в стабильных дистрах придумали сильно более простой способ. В пределах релиза системные либы - той версии какой условиились, и ВЕСЬ СОФТ билдуется под НИХ. И софт в репах как правило по версиям лочится. Майнтайнеры по ходу дела бэкпортят секурити фиксы и проч. Это вообще совсем не как в винде но имеет ряд плюсов. В частности, поставив систему, можно лепить апдейты на все и вся не глядя практически - и ничего не сломается. А если вместо программы версии 1.2 влепят 3.3 выкаченый автором - ну а вот не факт что оно конфиг от 1.2 вообще сожрет, может автор все перепахал два раза?! Вот только я сегодня покодить хотел, вон тот проект, а вовсе и не разгребать такой факап за апдейтером. И вот тут отличие от винды очень на руку. Это с одной стороны относительно секурно и ВСЕ компоненты в системе патчатся одной софтиной, вовремя. С другой - не ломает систему. Да, это компромисс.
> Тогда перезагрузка не потребуется.
Если моя система еще работает я тоже могу снапшот подпихнуть без ребута. Но вот это при сносе usr уже не гарантировано.
> РэдХат куда-то в эту сторону и движется с атомарным обновлением
> системы и доступом "только чтение" - такой подход проще.Кому оно надо было - и без всяких редхатов подобное сто раз делали. А вот именно редхат в технологиях пакетников вообще очень так себе господа. Во всяком случае что up2date, что yum, что dnf у них были тормозным, глюкавым сблювом, куском наколенной питонятины жрущей ресурсы и временами раздристывающее свою базу пакетов не хуже MSI installer. Почему за цать лет нельзя столь важный системный компонент сделать нормально а не вебмакаками я не знаю. Для меня это был аргумент развидеть редхаторбразных к чертям. Наверное по примерно тем же причинам альты взяли фронтом к rpm-у все же дебиановский apt, избавив себя от множества "радостей".
>> "Пакетник" тоже может дать отлуп - он знает, что вот эти файлы
>> именно такой версии необходимы для корректной работы системы.
> Это что, на каждый сискол мнение пакетника спрашивать?Нет. Самый очевидный вариант - нотификации ФС.
> И сколько MIOPS/core получится?
Касаемо pledge эти вопросы ведь никого не волновали. ;)
> 0.0(0) примерно? Пакетник не часть ядра и не компонент миднайта. Хотя
> при сильном желании наверное можно какой-то плагин к миднайту сделать, но...Я не готов предметно обсуждать детали реализации, поскольку она никому не нужна.
> Нет. Самый очевидный вариант - нотификации ФС.Нотификации приходят постфактум, в этот момент уже поздно отлуп возвращать. К тому же пакетник может быть не в форме после выноса /usr
Для эффективной реализации тут скорее напрашивается какой-то ядерный интерфейс где юзермод решает allow/deny но такого в ядре вроде нет и не понятно чего делать если хелпер в юзермоде упал например.
> Касаемо pledge эти вопросы ведь никого не волновали. ;)
Имхо это сильно менее позорно будет, чем БД пакетника на каждый чих лукапать. В нормальной ситуации обычные программы под обычным юзером вообще не могут "write" в систему.
> Я не готов предметно обсуждать детали реализации, поскольку она никому не нужна.
Ну да. А не нужна она потому что на прогу пытаются навесить не свойственный ей род занятий.
А так - у меня в usr _все_ файлы припасаны к тому или иному пакету. Лишний файл это баг. Отсутствующий файл это баг. Этот каталог просто не рулится мной мануально вообще. Даже самосбор это либо пакет собраный билдсистемой, либо checkinstall хотя-бы. А так чтобы вот именно левый или отсутствующий файл - ну нет, я как раз проникся прелестью унификации управления через пакетник, все только через него. Но он не ACL и не "system files protection". Это менеджер софта. И системного и не очень - там никакого особого деления на систему и не-систему нет. Я сам решаю что для меня "система" по большому счету.
>> Касаемо pledge эти вопросы ведь никого не волновали. ;)
> Имхо это сильно менее позорно будет, чем БД пакетника на каждый чих
> лукапать.ИМХО позорно другое. Для Виндоса, где как бы нет исходников ОС, одних только антируткитов написано штук десять. Проактивок всяких, наверно, и не счесть - они там что-то фильтруют и делают это грамотно (я слышал даже про откат состояний системы, и если люди за такое платят, значит оно не шибко тормозит). А здесь почему-то приходится объяснять, что я нигде не писал про запросы к БД пакетника, и мне бы в голову не пришла такая деталь реализации.
> 3) Пакетнику для работы нужна рабочая система. Он обычная программа. Конечно, можно
> его статически отстроить и проч. Но тогда фиксить его сам станет отдельной канителью для майнтайнеров с трекингом внутренних либ и дублированием его сущностей.Ну-ну.
https://github.com/freebsd/pkg/blob/master/mk/static-lib.mk
% ldd -f "%o\n" /usr/local/sbin/pkg
libelf.so.2
libjail.so.1
libssl.so.111
libcrypto.so.111
libarchive.so.7
libbz2.so.4
libz.so.6
liblzma.so.5
libprivatezstd.so.5
libm.so.5
libutil.so.9
libmd.so.6
libthr.so.3
libc.so.7
libbsdxml.so.4% ldd /usr/local/sbin/pkg-static
ldd: /usr/local/sbin/pkg-static: not a dynamic ELF executable
Просто поменьше пихтончика и свистелок с перделками в пакетник пихать надо (или делать зависимости опциональными).Но вы конечно можете рассказать, что это унылая отсталость, а настоящий пакетник должен иметь зависимости от 100500 сторонних либ, которые (почему-то) нужно "трекать" только для сборки статик-версии (ведь у динамически слинкованой есть автозащита от поломки при обновлении либ, ага).
Как я успел понять из недавней темы про руткит с LD_PRELOAD, в GNU/Linux сформировалась некая религия вокруг glibc. Линковаться с библиотекой следует не так как того требует задача, а согласно учению гуру. Отсюда и остальные артефакты мышления: перегрузить боевую систему "на пару минут" и восстановиться из резервной копии это норма, а уведомление об удалении файла и дублирование жизненно важных so-шек - это слишком поздно и много места занимает (и лучше бы он ответил "как в венде" -- мне тоже такое решение не нравится, как не надёжное).
хорошим дополнением именно за счет простоты настройки
Космополитан, лол. :3
Угадайте, кто в первую очередь будет использовать этот pledge. Гугля.