Для определения приложений, создающих расходующие дисковое пространство файлы в домашнем каталоге пользователя, подготовлен фоновый процесс whomade, отслеживающий появление новых файлов при помощи механизма fanotify. Проект написан на языке С++ и распространяется под лицензией GPLv3...Подробнее: https://www.opennet.me/opennews/art.shtml?num=63761
Так ведь в ntfs создатель и без помощи демонов известен.
ну и кто мне понасоздавал вот это вот11/08/2025 14:05 335,149 481a175f-cf20-4ad2-8548-d0d4eaa1ca5e.tmp
22/08/2025 22:36 0 602a6864-4320-4e8c-a888-5c212a639d78.tmp
11/08/2025 14:05 292,514 bd22900a-d2de-47a1-9700-5bd3e078d27e.tmp?
Можешь подсказать, а то их уже под три сотни там таких?Поделка, как я понимаю, запоминает процесс (и не один лишь ненужно-pid)
https://github.com/microsoft/ProcMon-for-Linux/blob/main/pro... - для linuxhttps://github.com/microsoft/ProcMon-for-Linux/blob/main/pro... - для windows
Надеюсь поможет Вам.
А ссылки обе на Линукс
Вас не смущает, что ссылки ведут на github microsoft? procmon разработал Марк Руссинович ещё лет 20 назад в составе набора своих утилит Sysinternals. Потом уже портировали на Линукс https://www.opennet.me/opennews/art.shtml?num=53387
> А ссылки обе на ЛинуксТипичный юзер винды. Какие-то левые утили от майкрософт - сосватал, ссылки не проверил, все как обычно.
> Надеюсь поможет Вам.Алло! Утилита же другого типа взаимодействия...
Но, проблема тут в том что и там и там мин.для виндов и линуксов/пользователей не компилирующих(а, компилирующим - у лично не вычитывающих исходный код, причём весь...)
- качать некий блоб с считай троянских сайтов. Ещё же и требующую повышенных прав, что очень удобно для любых типов зловредов.
Так ведь он в любой ФС известен. Но только вот какие именно он процессы использовал для создания файлов - неизвестно.
Кто то даже заголовок ни осилил...
> Так ведь в ntfs создатель и без помощи демонов известен.И вот вижу я что 100500 файлов создал "SYSTEM" или "Administrator" и о чем мне это все говорит, интересно? Не, даже какой процесс это создал - хз. А system и adminsitrator юзаются более 9000 процессов по 100500 поводов. И вот чем вы тут гордиться пытаетесь?
> Не, даже какой процесс это создал - хз.svchost.exe
Не благодари
Потому сервисов д.б.минимум запущенно. Только те кто точно не создаёт файлы.А, когда создаёт кто то - проактивную защиту давно придумали, и вообще тогда не нужны никакие линукс хаки типа этой поделки.
Правда, это не у zog Торвальдса... - даже Firewall полноценно ниасилившего, за 30 лет... Или скорей не пожелавшего своим пользователям-пингвинам-в-т.ч.среднестатистично-умом такой предоставлять из коробки. Но у zog и в обычно их же корпорациях - всё есть, в т.ч. свои не публичные наработки тут.
> Так ведь в ntfs создатель и без помощи демонов известен.Меня лично больше файловые-потоки напрягали, когда под виндой(но, файловые-потоки и под линуксом же не случайно введены... ну да всё для заботы о удобстве пользователя, только тут не обнаружишь их незапланирвоанной автором ОС проактивной защитой, по кр.мере open-source же(или есть osc?), отсутвующей [в ядре]), сохраняешь чтонибудь из троянистого лучше с internet доступом [потенциально] например, в т.ч.страницу из браузера(в т.ч.скачанного даже с их офсайтов) - получи скрытые потоки данных в нагрузку. Да, идеально троянам хранить чтонибудь.
> Данные хранятся в БД SQLite3А расширенные атрибуты, значит, нафиг?
Атрибуты чего? БД хранит лишь кортежи имя файла/имя процесса.
Атрибуты ФС. Это ясно из контекста, да и термин однозначный.
> Атрибуты ФС.И какое отношение этот демон может иметь к атрибутам ФС? Вырази свою мысль полнее, я тебя не понимаю.
>> Атрибуты ФС.
> И какое отношение этот демон может иметь к атрибутам ФС? Вырази свою
> мысль полнее, я тебя не понимаю.Попробуй подумать. Ну вот записывается информация в базу данных, чтобы потом периодически её удалять, когда файл исчезнет. Хотя достаточно записать, кто создал, прямо в атрибуты файла (которые кривой файловый менеджер обнулит, но это уже не по адресу). Можно даже без доступа пользователя на изменение, типа метки selinux.
И на каких ФС это работает? Вот я действительно ничего про это не знаю. Кинь ссылкой где всё это разжёвано.
Ммм на всех? Сложно сказать. https://en.wikipedia.org/wiki/Extended_file_attributes
Забавно. Я не сталкивался. Гляну потом повнимательней. Это может упростить мне жизнь, на самом деле, если действительно работает.
О да, меня вот расстраивает, что записанные в атрибуты хэши с информацией об источнике файла файловые менеджеры не показывают из коробки. Но и знаю, что они там есть, и открываю окошко из контекстного меню, когда надо. Можно много чего интересного сделать на самом деле, только отсутствие поддержки в ФМ удручает. Ни xdg, ни dublincore нет.
Хм. А ведь работает. Спасибо, аноним, за наводку. Это позволит мне вообще выкинуть БД со всеми БД-шными проблемами. И отдельный поток для периодической очистки БД тоже. Одни плюсы.
Ну нормально это через eBPF делается, может, ещё чего придумаешь улучшить.
Да, правильно такие вещи в xattr писать. Надо посмотреть стандарты, возможно для этого уже предусмотрен трибут. Только PID не нужен, надо писать абсолютный путь к бинарнику. Сам давно пол зуб только:wget --xattr
И все ссылки известны.
Правда надо помнить о опциях --xattrs для tar, cp , чтобы эти атрибуты не терялись.
Dolphin показывает.
А чего обнуляет при копировании? Ни dublincore, ни xdg, ни кастомные вроде хешей у меня не показывает без индексирования. Зачем индексировать, если можно прямо из иноды получить в большинстве случаев. А инода она вот уже найдена вместе с файлом.
> Забавно. Я не сталкивалсяВо времена OS/2 даже журнал бумажный издавался, "Extended Attributes". В полуоси это дело активно использовалось графической оболочкой, например, можно было назначать свои иконки любым файлам, ну и прочую доп.инфу. И всё это хранилось в EA.
Хотя линь и винда поддерживают EA — DE их почти не использует, видимо из-за современных тенденций к упрощению.
ага, иконки исполняемых файлов в виде папок или документов :) спасибо, не надо.
Это да, например zip для OS/2 тоже поддерживал расширенные атрибуты, так что можно было заархивировать файл и кому-нибудь переслать, так что у того человека который его разархивирует — он будет с той же иконкой.
Сейчас это выглядит как уязвимость, а тогда была крутая фича.)
tar --xattrsЭто уязвимость? Тени пальцем как ее эксплуатировать.
Активно используют XATTR:
* system.posix_acl_access
* security.capability
* security.ima
* security.evm
* security.selinux
* user.xdg.origin.url
* user.xdg.referrer.urlИ требование к системам уровня B2 - все метки безопасности хранить вместе с файлом, в файловой системе, как его атрибуты.
Атрибут программы создавший файл также определен в стандартах:
* user.creator
* user.xdg.publisherhttps://www.freedesktop.org/wiki/CommonExtendedAttributes/
https://wiki.archlinux.org/title/Extended_attributes
> Это уязвимость? Тени пальцем как ее эксплуатировать.Речь шла конкретно про хранение иконки файла в EA, как в OS/2.
Т.е., например, можно назначить исполняемому файлу безобидную иконку.
Либо, если в системной библиотеке чтения изображений есть уязвимость — можно сформировать картинку, которая эксплуатирует эту уязвимость. Тогда, если пользователь откроет папку с разархивированным файлом — файловый менеджер прочитает иконку из EA и потенциально выполнит код.
Это не есть уязвимость XATTR.Если просто рисунок в архиве содержит вирус. Пользователь разархивировал папку с этим рисунком. Зашёл в эту папку, файловый менеджер с помощью уязвимой либы создал иконку и запустил экспорт с заражённого рисунка...
Здесь надо:
1. Использовать проактивную защиту на уровне ядра OS.
2. Проверять на вирусы архивы.
3. Обновлять уязвимые либы.
Атрибуты файловых систем активно используются в GNU/Linux
* Использование старых ATTR необходимо, чтобы обеспечить безопасность по уровню C2
* Использование ACL необходимо для организации GPO и доменных политик
* Использование CAP необходимо, чтобы обеспечить безопасность по уровню B3 хотя теперь повсеместно частично используется вместо s-бита.
* Использование расширенных XATTR стандарт для хранения ссылок на скачанных файл, хеша файла, его цифровой подписи, ...
> Хотя достаточно записать, кто создал, прямо в атрибуты файлатак файл с таким же именем может создать кто-либо другой (владелец, процесс). Цель утилиты трекать историю создания файлов и т.д. Вопрос толька накуя, когда есть аудит лог?
Я думал, установить, кто создал в последний раз. Там не очень надёжно логирует, насколько я понял. Я попросил чатгпт навайбкодить, чтобы было чётко, он выдал
#include <linux/bpf.h>
#include <linux/ptrace.h>
#include <linux/fs.h>
#include <linux/uaccess.h>
#include <linux/sched.h>
#include <linux/bpf_helpers.h>SEC("tracepoint/syscalls/sys_enter_openat")
int trace_openat(struct trace_event_raw_sys_enter *ctx) {
char comm[TASK_COMM_LEN];
struct file *file;
char *filename;
int ret;// Get the current process name
bpf_get_current_comm(&comm, sizeof(comm));// Get the filename from the syscall arguments
filename = (char *)ctx->args[1];// Set the xattr (assuming the file descriptor is valid)
ret = bpf_set_xattr(filename, "user.created_by", comm, sizeof(comm));
if (ret < 0) {
return 0; // Error handling
}return 0;
}char _license[] SEC("license") = "GPL";
clang -O2 -target bpf -c your_ebpf_program.c -o your_ebpf_program.o
bpftool prog load your_ebpf_program.o /sys/fs/bpf/your_ebpf_program
bpftool prog attach /sys/fs/bpf/your_ebpf_program tracepoint syscalls:sys_enter_openat
getfattr -n user.created_by filename
надо, чтобы кто-нибудь проверил
> Там не очень надёжно логирует, насколько я понял.так атрибуты можно редактировать (заменить current process), чтобы ввести в заблуждение. А в случае с аудит логом - нет.
Не могу понять, почему это проблема. На практике подобного не будет никогда. А так, у меня есть похожая программа, которая следит, чтобы порождённые процессы помимо пида и команды имели записанный родительский пид и не терялись (смерть прародителя не важна). Если это не так, родитель (шелл однострочник) перезапускается новым прародителем (любым из). Пару лет крутилось тысячи процессов в день, никаких проблем (целиком благодаря sqlite). А так, конечно, линукс позволяет не только крыть команду, но и запустить другой процесс с тем же пид. Использовать для этого аудит? Увольте, лишнее.
> Не могу понять, почему это проблема.заметать следы работы с файлами, вы же там доп. инфу храните в каких-то целях.
> Использовать для этого аудит? Увольте, лишнее.
тут надо задать главный вопрос - "зачем оно вам?", с аудитом все ясно, а вот с вашими расширенными атрибутами хранить доп. инфу чего ради? Если нет цели, которую преследует аудит, то это зря потраченное место на диске. А если вы хотите сделать аналог легкого аудита (аудита только файлов), то к вашему механизму по определению нет доверия, ибо атрибуты может менять владелец файла (процесс и т.д.), отсюда и самообман эдакий.
Основная цель, как видится, всё же, пользователю понимать, кто это тут нагадил файлами и не прибрался -- не всегда угадаешь. И куда. А потраченное место на диске, к примеру, замечательно экономит время при последующих обращениях (не надо считать хэши, чтобы установить соответствие локальной копии удалённой, или искать принадлежность, запуская разные программы в данном случае). Вероятность того, что злонамеренная программа затрёт, конечно, не нулевая, но близко к тому и подобное едва ли попадётся. К тому же, пользователь (и любая пользовательская программа) может изменять только пользовательские расширенные атрибуты, при желании, лишить его этой возможности не проблема. Но это всё не вопрос безопасности. Любой локально исполняющийся код потенциально может иметь встроенный руткит и обойти любой rbac при желании.
>не надо считать хэшиИ это если они вообще есть, я проставляю каталогу различную информацию об архиве файла источника. Откуда получен, время, размер, и так далее. Здорово помогает при работе с данными. Аргументация, с которой удалили поддержку расширенных атрибутов из Хрома, не выдерживает никакой критики -- она просто смешная.
> Здорово помогает при работе с данными.Тогда это уже не ФС, а объектное какое-то хранилище. И оно будет медленнее работать чем обычная простая ФС. Я к тому, что вы сегодня будете добавлять расширенные атрибуты, а завтра еще вам понадобится всякие FTS (полнотекстовой поиск) по этим атрибутам. И чем больше будет нарастать этой инфы, тем сложнее будет контролировать всякую там целостность, рекаввери при сбоях и т.д. - короче, гемор. Чем проще - тем лучше.
А, ещё можно как MS: поиск [мета-данных] - уже с помощью встроенного ИИ (под-zog, как его тут создавшего),
имеющего доступ к индексной информации да и самим файлам на ПК пользователя(и предположительно и в подсетях), в индексной же информации скрыто храня свои наблюдения (как читал на их же сайте, типа "не скрываемая" информация но, фиг же встретишь), и доп-но засирая диски и доп.загружая ПК и disk io. А, точней лучше контроллировать пользователей ОС под предлогом этого улучшения поиска, конечно же всё же во благо удобств... хавающих их любой ценой.
> Основная цель, как видится, всё же, пользователю понимать, кто это тут нагадил файлами и не прибрался -- не всегда угадаешь.А толку следить за условно /tmp если его можно чистить по определению? А то, что в хомяке кто-то что-то нагадил, так может это и нужно для последующего вызова программы, мы же иначе должны тупо знать за все файлы каждой программы, гадит она или нет. То есть детектить гадит программа или нет - для этого достаточно ее запустить, поработать с ней и посмотреть куда-что она нагадила и все (как это сделать? - отслеживать все ее действия с файлами, средст для этого предостаточно, стрейс какой-нибудь), а дальше что? мы же ничего не изменим, программа дальше будет гадить, эта инфа нужна в одноразовых случаях и хранить ее в атрибутах считаю избыточным.
> Вероятность того, что злонамеренная программа затрёт, конечно, не нулевая, но близко к тому и подобное едва ли попадётся.
всякие лог ванишеры всегда затирали логи и меняли время изменения и т.д., думаю понятно для чего это делается.
> при желании
я просто не вижу смысла дублировать функциональность, если уже есть "систем трейсер"-ы всякие, как с точки зрения отладки, так и безопасности.
> Любой локально исполняющийся код потенциально может иметь встроенный руткит и обойти любой rbac при желании.
Никто не спорит, архитектура Фон-Неймана - не безопасТна по дизайну.
> user.created_byСтандартный атрибут надо использовать:
* user.creator
* user.xdg.publisherhttps://www.opennet.me/openforum/vsluhforumID3/137628.html#150
>которые кривой файловый менеджер обнулит, но это уже не по адресу)не не, раскрывай мысль, чем потом копировать чтобы расширенные атрибуты не дропались
Ответ "не копируй" устроит? Явно не кдеешный dolphin (kio наверно) -- он сохраняет для файлов с каких-то пор, но обнуляет каталоги. И не помойка mc (стоит птичка сохранять, а толку то, позорище). Понятно не nnn. Есть человеческие фм, вот ranger не подвёл. Если двухпанельники больше по душе, vifm норм. Или mv вон при перемещении файлов между разделами сохраняет расширенные аттрибуты, cp с --preserve=all (-a) тоже, те же rsync и tar имеют ключи, сохраняющие аттрибуты. Лишний повод освоить шелл.
>И не помойка mcне надо так о раритете
>вот ranger не подвёл
да, стоит, превью роликов работает
Забавно, что для cp нужно писать --preserve=all, а не просто -p.
>Ответ "не копируй" устроит?
Нет. У меня припекает что фс=бд с одной стороны, а с другой
все мои расширенные атрибуты дропаются простыми операциями с файлами.
Будто нужна meta_бд о бд на бд, но это на бред же
> У меня припекает что фс=бднет и не должна быть.
> Будто нужна meta_бд о бд на бд, но это на бред жераспределенные ФС (lustre) именно такие, там есть "мета-нода".
Так они и должны дропаться при копировании. Чтобы в копию записался тот кто этот файл создал, т.е. cp там или ваш файловый менеджер.
Причём это ещё и уязвимость - создал файл, скопировал консольной командой в др.файл, удалил, переименовал назад - вот даже и эта утилита уже и опозорится...
В чём тут уязвимость, если файл один и тот же в итоге? Если хочется знать наверняка, birth time файла не подделаешь -- прибито ко времени создания иноды (в отличие от modification time, который хоть меняться не должен, но исключительно для удобства пользователя существует). Саму иноду тоже не подделаешь без прав суперпользователя и сомнительных действий и эта инфа доступна любой программе. Лично я проставляю архивам время самого свежего файла в архиве, время загрузки (обычное применение mtime) значения не имеет. Тем же самым однострочником на баше переодически проходишься с find и все архивы понятно когда созданы изначально, какой смысл знать когда файл загружен?
nocomment... Ok, один: прочти хотя бы заголовок.
Если делает копию, то он делает это осознанно. И заголовок при этом обновит инфу. Про то, что можно идентифицировать файл однозначно, я уже написал. Но это лишено смысла, если данные идентичны.
nocomment... Ok, один: прочти хотя бы заголовок статьи.
Если делает копию, то он делает это осознанно. И заголовок при этом обновит инфу. Про то, что можно идентифицировать файл однозначно, я уже написал. Но это лишено смысла, если данные идентичны.
> Атрибуты чего? БД хранит лишь кортежи имя файла/имя процесса.Интересно скуль им для этого зачем? КМК key-value типа tokyocabinet, или кто там кому модный нравится типа lmdb и проч - был бы сильно быстрее для такого?
Или даже вот реально дописать в xattr файла процесс который его создал.
Это всё какое-то мёртвое и ненадёжное. У lmdb часто неподходящие ограничения, leveldb в плане ограничений получше, но по надёжности вообще самое плохое. Я gdbmtool в шелле для подобного использую (dbm в питоне), удобно и прекрасно. Производительностью не интересовался. Что случится, если ядро словит панику, или питание отключится прямо в этот момент, лучше не думать (ни разу не было, впрочем). В этом отношении sqlite сложно переплюнуть, он наиболее надёжный и файл бд выживает под любыми падениями (если не дообмазываться прагмами, конечно).
> Это всё какое-то мёртвое и ненадёжное.Эээ в смысле "мертвое"? Оно работает, свои функции выполняет, шустрое как черти что. Куда резвее скулайта во всяком случае.
> У lmdb часто неподходящие ограничения, leveldb в плане ограничений получше,
> но по надёжности вообще самое плохое.Его по моему биткоин юзает. Что там плохое то?
> Я gdbmtool в шелле для подобного использую (dbm в питоне),
gdbm жутко сливает tokyo cabinet по всем мыслимым аспектам AFAIK. Насколько я помню его даже qdbm делает.
> удобно и прекрасно. Производительностью не интересовался.
Ну да, мы все знаем что "питоннетормозит". А что с ним будет если вон там 100К файлов на скорость создавать? Поэтому системщина на питоне - ну, э, лол.
> разу не было, впрочем). В этом отношении sqlite сложно переплюнуть, он
> наиболее надёжный и файл бд выживает под любыми падениями (если не
> дообмазываться прагмами, конечно).Просто юзать сиквель в режиме откровенной key-value базы - весьма неэффективно. Куча интерпретации скуля оптом - чтобы что?!
Хотя в этом смысле в xattr записать может быть проще всего. ФС особенно современные сами по себе как базы key-value в общем то. Что с кем случится при крахе? Ну вы и выбирайте между синхронными операциями/транзакциями и перфомансом. Есть гибридный вариант - если дофига валится, открывать транзакцию на батч, и синкать его. При этом потеряется "последние эн секунд при крахе". Зато перфоманс приличный и не тупило как черти что от синков.
Аналитику считать сложнее. И, теоретически, эта информация может понадобиться и после удаления файла. По хорошему нужна поддержка обеих мест хранения.
> А расширенные атрибуты, значит, нафиг?А если они не поддерживаются фс либо отключены?
>> А расширенные атрибуты, значит, нафиг?
> А если они не поддерживаются фс либо отключены?Бедный FAT, он пролетает...
Следующим вопросом будет, кто занимал 200ТБ с 1 до 3 ночи..... а файлик то в 3 ночи и стрёли. вместе с, естественно, атибутами....но правда для этого чудо программа должна еще и размеры хранить и их изменения во времени, и соотв статистику выводить... причём желательно не писать историю если изменение меньше чем ХХХ, дабы самой не попасть со своей базой в свой же топ с +1 байт +2 байта.
Проактивная защита - и никто ничего никогда никуда не может писать, куда не положенно ему. Не? Шло 3-тье тысячелетие [в линуксе]...
А я вот как раз хотел бы поглядеть, кто (какие процессы) что создавали **и удаляли** у меня в какой-то папке. Так что мне нужна история, длиной хотя бы в несколько часов. И чтобы можно было увидеть сразу все файлы, как они по времени расположились.Из базы такой список получить — один запрос. А сгребать это из атрибутов файлов — для существующих — целое дело, для удалённых — нереализуемо.
Так что, наверное, хранение этой инфы в атрибутах — полезно, но есть и другие сценарии использования.
Для этого уже есть всё, что нужно, и в ядре, и в юзерспейсе. То, что кто-то не умеет пользоваться операционной системой и городит костыли — проблемы этих кого-то. У нас продакшен системы под таким аудитом. Все возможные файловые операции на сервере известны и при возникновении невозможных сервер изолируется выключением порта на свиче.
> и при возникновении невозможныхЕсли невозможная операция происходит - ей невозможно же противодействовать по определению.
Если же говорить про несанкционированные то, изолирование сервера = успешная DDOS атака...
Отличная замена ls -la, да ещё и с гуй. Всегда искал!
Ну это вряд ли.
Заглянул в CMakeLists.txt и собирать это как-то расхотелось.
чувак зачем-то вместо объектных файлов архивы линкует
чувствуется колхоз
>чувак зачем-то вместо объектных файлов архивы линкуетМеня удивили файлы README.md и CHANGELOG.md в add_executable(). И непонятно откуда берется цель sqlite3 в target_link_libraries().
> Меня удивили файлы README.md и CHANGELOG.md в add_executable()думаю, это для того, чтобы они в дереве проекта в IDE отображались
Объектные файлы лучше не линковать - гимора не оберёшься, add_library(... OBJECT ...) - это очень хрупкаяя вещь, напр. от C++ модулей она разваливается.
от модулей и компиляторы пока что разваливаются
В clang вся базовая функциональность работает и время компиляции сокращает. Не полностью, но работает. import std не работает, и в cmake под специальным вредительской переменной "пропишите "лицензионный ключ", который мы специально периодически меняем, чтобы вы эту фичу даже и не думали всерьёз заюзать". import <...>; не работает совсем.
> В clangдальше не читал
название subj и заголовок статьи крайне неудачны, видно из комментов.
народ просто не понимает (не удивительно), что отслеживается не пользователь, создавший файл, а процесс.
whatcreated а не whomade было бы лучше, как вариант.
ну и в заголовоке заменить "кто" на "программу"
> в заголовоке заменить "кто" на "программу"Или на "что". Этого будет достаточно, но я согласен очень полезно, потому что с толку сбивает.
A.Stahl, ты конечно молодец, что почитал доки и сделал свою реализацию, но вообще-то, хоть мне и неловко сейчас тебе это говорить, однако такой процесс уже есть, и он называется auditd.Минуточку внимания:
% apt-get install auditd
% auditctl -w /srv/watcher -p wa -k file-creation
% touch /srv/watcher/f1
% ausearch -k file-creation
time->Sat Aug 23 06:27:29 2025
type=PROCTITLE msg=audit(1755930449.930:203): proctitle=746F756368006631
type=PATH msg=audit(1755930449.930:203): item=1 name="f1" inode=106694349 dev=fc:00 mode=0100644 ouid=0 ogid=0 rdev=00:00 nametype=CREATE cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0
type=PATH msg=audit(1755930449.930:203): item=0 name="/srv/watcher" inode=106700802 dev=fc:00 mode=040755 ouid=0 ogid=0 rdev=00:00 nametype=PARENT cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0
type=CWD msg=audit(1755930449.930:203): cwd="/srv/watcher"
type=SYSCALL msg=audit(1755930449.930:203): arch=c000003e syscall=257 success=yes exit=3 a0=ffffff9c a1=7ffef733c719 a2=941 a3=1b6 items=2 ppid=494441 pid=495433 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts12 ses=52246 comm="touch" exe="/usr/bin/touch" subj=unconfined key="file-creation"
> такой процесс уже есть, и он называется auditd.Это хорошо, но теперь прикрути туда БД и какой-то механизм для настройки всего этого.
То, что за гаражом валяются какие-то колёса и ты знаешь где купить хороший японский двигатель не означает что у тебя есть машина.
> Это хорошо, но теперь прикрути туда БДА зачем нужна БД, если всю необходимую информацию можно получить через ausearch.
> механизм для настройки всего этого
Так auditctl же.
freehck, ты конечно молодец..-p [r|w|x|a] ... This is deprecated. Convert watches to the syscall form.
-w path The -w form of writing watches is for backwards compatibility and is deprecated due to poor system performance. Convert watches of this form to the syscall based form.Больше интересует разница в "system performance" auditctl vs fanotify и какая(возможно они используют одинаковый механизм, хз), скорее это главный вопрос, который относится к обоим подходам. А то включил такой аудит и сидишь с довольным фейсом "какой ты молодец", а оно "под капотом" добавляет n999999 ms задержку на любой чих.
> deprecatedСпасибо за предупреждение, конечно, однако пока это не появилось в LTS-релизе Ubuntu, мне в целом всё равно.
> Больше интересует разница в "system performance"
Да не сильно оно влияет. Ты ж не все сисколлы обвязываешь, а прямо конфигурируешь, за какими следить, а за какими нет.
У меня ИБшники на первой работе через auditd пачку сисколлов собирали -- по ощущениям разницы вообще не было никакой.
Ну то бишь по ощущениям об отзывчивости системы. Собственные ощущения были вида "вот же пасут меня по всем фронтам".
А у меня ausearch говорит <no matches>
Алсо, ausearch отрабатывает за 10 секунд! Невероятно долго.
>addDir(DirAction::ADD, DirType::MONITOR, "/home/astahl/.config");
>addDir(DirAction::ADD, DirType::MONITOR, "/home/astahl/.cache");
>addDir(DirAction::ADD, DirType::IGNORE, "/home/astahl/.cache/mozilla");Зачем вы новость на опеннет написали, если программа сделана исключительно для вашего личного пользования. И выкиньте нахрен эту библиотеку для парсинга опций командной строки, она не поддерживается, малофункциональная и глючная. Есть гораздо лучшие альтернативы:
1. https://github.com/CLIUtils/CLI11
2. https://git.code.sf.net/p/tclap/code
3. https://github.com/bfgroup/Lyra
4. https://github.com/saveman/octargsИ инлайнить либы в репозиторий - это очень некрасиво. Освойте CMake наконец.
Это обычные плейсхолдеры, чтобы пользователь сразу понял что туда вводить. Их можно менять. Их нужно менять.>эту библиотеку для парсинга опций командной строки
Она работает. Никаких нареканий у меня нет. Чем твои варианты лучше?
>инлайнить либы в репозиторий - это очень некрасиво.
Для мелких некритичных либ -- самое оно.
Это вам локальная модель так навайбкодила? Потому что ни один программист так не напишет в продакшн-коде.
>Она работает. Никаких нареканий у меня нет. Чем твои варианты лучше?Вы забыли (или никогда не знали) пословицу всех технооптимистов/материалистов/редукционистов/программистов: "you are only as good as your tools". "Меня устраивает" - не оправдание, а дешёвая отмазка, не выдерживающая никакой критики. "Не хватает денег" - уже более сильное оправдание, но оно не очень применимо к библиотеке для парсинга командной строки.
> "Меня устраивает" - не оправдание, а основной принцип UNIX, начиная с первой же версии.// очевидный фикс
UNIX была коммерческой ОС. Коммерсы с принципом "меня всё устраивает" с рынка вылетели бы ... а всякие QNX, AIX и прочие и поныне продаются за бабло вме6сто того чтобы "нас всё устраивает, а вы - валите на линукс или винду".
> AIX и прочие и поныне продаются за бабло вме6сто того чтобы "нас всё устраивает, а вы - валите на линукс или винду".IBM практически прямым текстом говорит именно это — валите на линукс или винду — любому, кто хочет купить AIX. И не знает как сделать так, чтобы на линукс и винду свалили наконец те, кто уже купил и десятки лет использует. И что-то у них проблем с прибылями нет.
> И что-то у них проблем с прибылями нет.Вообще-то есть. Прибыль за 2015 13.1 млрд долларов, а в 2022 1.6 млрд
Когда будут убытки — тогда и будут проблемы. За остальным советую читать не строчку про прибыль в википедии, а публикуемый отчёт для SEC, там видно и откуда берутся деньги, и куда они исчезают.
> UNIX была коммерческой ОС. Коммерсы с принципом "меня всё устраивает" с рынка
> вылетели бы ... а всякие QNX, AIX и прочие и поныне
> продаются за бабло вме6сто того чтобы "нас всё устраивает, а вы
> - валите на линукс или винду".UNIX не была "коммерческой" ОС.
во-первых, законодательство не разрешало at&t ее продавать (до 1982).
во-вторых, коммерческих задач, тех, что BICARSA GLAPPR, at&t на Unix и близко не планировала решать.
вообще странно называть коммерческой ос, распространявшуюся по принципу "оплати цену ленты, на тебе исходники и @бись с ними, как хочешь. и не звони нам больше"
Набор софта, который они поставляли с Unix, был именно из серии "меня все устраивает", инструменты, используемые внутри самой at&t: writer,s workbench, documenter's workbench, programmer's workbench. вывод на фотонаборный автомат и т.п.
и с рынка она прекрасно вылетела, кроме тех мест, где она идет вместе с шибко специфическим железом, вроде ibm power.
QNX я вообще не знаю зачем ты приплел, он к unix вообще отношения не имеет. ты бы еще minix вспомнил, отличный пример ОС, более распространенной, чем линукс и винды.
Ну это твоё личное, искажённое мнение.
> Ну это твоё личное, искажённое мнение.не то, что ты, брат анон,
уж ты то меня уел аргументами, аргументами!
Твоя правда. У меня есть похожая шляпа на питоне, но там код получше и функциональность побогаче (раз в 100). А вся работа по написанию заняла те же полчаса. Есть ещё индексатор для поиска: изначально идея была fuzzy search для похожих имён, но в конечном итоге достаточно перестановок и замен/удаления символов. Без индекса перебор часы, с индексом 10 секунд, меня устраивает.
В индексе случаем не dafsa?
Да не, там простая сериализация в messagepack и cжатие, всё равно перебирать всё для поиска. Индексы просто раздельные немного, чтобы сразу десятки гигабайт памяти не кушать. Это тот случай, когда временное наколенное решение работает достаточно хорошо даже после стократного увеличения объёмов.
>query = std::format(R "SQL(INSERT INTO {0:}(dirname) SELECT '{1:}' WHERE NOT EXISTS(SELECT 1 FROM {0:}WHERE dirname = '{1:}')) SQL ", table_name, dir);У вас случайно нет знакомого Little Bobby Tables?
Интересно, хоть кто-то из критикующих прислал пулл-реквест?
Типа "критикуя, предлагай" и никак иначе? Я помню этим нашу оппозицию, пока она ещё была, постоянно попрекали. Нет, я не прислал пулл-реквестов и не пришлю. Я высказал свое мнение, автор может принять его к сведению или проигнорировать и это нормально.
auditd - не, не слышал
Если настоящей целью является очистка хомяка от всякого хлама, то я выбрал принципиально другой подход: весь рут ("/") монтируется в tmpfs; хомяк тоже в tmpfs; избранные папки бинд-маунтятся в долгосрочное хранилище. Таким образом после рестарта системы я получаю чуть ли не свежеустановленную ось, при этом только некоторые папки переживают перезагрузку (например ~/.config/chromium). И никакой аудит не задействуется. Пусть там хоть тысячи прог понасоздадут свой мусор в хомяке -- после перезагрузки мусор исчезнет, а папки из белого списка останутся. В интернете этот подход гуглится по словам impermanence nix.
вы, / в ro монтируйте сразу
да можно просто комп не включать - никто не нагадит в хомяк!
можно было и в коментах не гадить!
Потом в этом деле главное не записать пароли от биткоина в ~/bitcoin, который после ребута успешно исчезнет
Использую похожий метод через bash-обёртку для bubblewrap (UNS, без рут/SUID) с поддержкой профилей. Но черные списки вместо белых. Программа "маскируется" через симлинк с её именем на эту обёртку в user-writeble директории, добавленной в начало PATH. Обёртка понимает какую программу (и с каким профилем) запускать по аргументу $0. Хомяк монтируется из директории с именем программы, вложенной в центральную. Типа `bwrap --bind ~/apps/firefox ~/ ... firefox`. Мусор выборочно монтируется как tmpfs в её профиле и по завершении работы программы исчезает.
Соответственно не нужна предварительная настройка, можно использовать один обобщенный профиль для всех по умолчанию, и выборочно настраивать только те программы, которые создают много мусора. И нет риска потерять созданные процессом файлы, например, при переименовании путей после обновления программы. Все файлы записанной программы останутся в её отдельной директории, удалятся только явно смонтированные как временные.
Молодец, изобрёл очередной immutable дистрибутив. Их и так развелось уже.
А какая-нибудь libmdbx не лучше будет для такой достаточно простой задачи?
https://www.opennet.me/openforum/vsluhforumID3/121987.html#9
Нет, не будет.1. Во-первых libmbdx - это продукт человека, последовательно озвучивающего совершенно ужасную общественную позицию, которая в поддержку сил, которые нам скотобойню готовят, поэтому её сразу обходим стороной - использование этого продукта бустит карьеру его автора, а те, у кого такая общественная позиция, бустинга карьеры не заслуживают. При этом существенных недостатков в vanilla lmdb нет, поэтому сразу же заменяем в вашем предложении mbdx на lmdb.
2. Вот lmdb как раз можно заюзать, но вместе с dafsa, иначе на хранени путей разоришься. стоковая реализация dafsa в одноимённой либе к сожалению не имеет встроенной функции цепляния к листьям метаинформации. Но есть идентификатор листа, и его можно использовать как ключ хочешь в LMDB, а хочешь вообще perfect hash table сделай.
3. если используешь другие реализации, то в некоторых можно напрямую прицепить к листьям метаданные
Забыл добавить: в моей реализации чего-то подобного всё ещё lzma2-компрессией накрывалось.
> 1. Во-первых libmbdx - это продукт человекатак он по заказу "товарищмайора" делал :)
>> 1. Во-первых libmbdx - это продукт человека
> так он по заказу "товарищмайора" делал :)А, он поэтому устроил кидалово с полной сменой апи в новой версии?
>поэтому её сразу обходим стороной - использование этого продукта бустит карьеру его автора, а те, у кого такая общественная позиция, бустинга карьеры не заслуживают
>Please don't use my work, if you are associated with Adolf Hitler, Stepan Bandera, George Soros, Michael HodorkovskyДа-да, обходите стороной
Я пока не пойму... А systemtap запретили уже что ли? Или он не подходит для выполнения тех задач, что задумывал автор этой проги?
как это собрать?
opt.addUsage(" -h --help Print parameters list");
opt.addUsage(" -w --who <filename> Who created this file?");
opt.addUsage(" -a --add <dir> Add dir to monitor");
opt.addUsage(" -r --remove <dir> Remove dir from monitor list");
opt.addUsage(" -i --ignore <dir> Add dir to ignore");
opt.addUsage(" -p --pay_attention <dir> Remove dir from ignore list");
opt.addUsage(" -l --lists Print monitor/ignore lists");
opt.addUsage(" -n --non_daemonize Run without daemonizing");
opt.addUsage(" -s --stop Stop and quit");
opt.addUsage(" -c --clean DB cleanup");
В сишной экосистеме правда всё так плохо с библиотеками?
Болезный где ты тут Си увидел?
Ящитаю что все файлы должны иметь цифровые подписи
А то поналезет лишнего и не узнать чьё.
В винте системные файлы подписаны, можно проверить левое или нет(ито подделать можно) а в лине никаких документов ни на что нет.
Да и пользователю полезно - нашли у него заррещёнку, открыли свойства...упс, ни дата ни ид компа ни программы на нём с инкриминируемым не совпадает и финиш махинации)
Твоё "ящитаю" глубоко ошибочно.
Твоя оценка без аргументации ничего не стоит.
> цифровые подписиНе смеши мои тапочки, втройне - в век квантовых компьютеров - годных только для ускорения ИИ вычисления, удалённо-прямому подключения [его] к мозгам других людей, и быстрому взлому всяких шифровок и подписей... какое совпадение.
Вот как раз в квантовых кп все десцствия будут запротоколированны в отличии от сегодняшних счётообразных пк кооторые только 2 цифры переворачивать могут.
> Ящитаю что все файлы должны иметь цифровые подписи1) Вот этот конфиг программ - должен иметь подпись? Потому что я окно подвинул и его позиция там засэйвилась?
2) Очевидно ключ для подписывания для этого - в памяти висел, и доступен текущему юзеру? Чтоб тот файл им подписать?
3) Окей, и что при этих условиях помешает атакующему - подписать этим ключом - какой он там хотел файл? Вот чем он от "той программы" так уж отличается, чтоб ей можно - а атакующему нельзя?> А то поналезет лишнего и не узнать чьё.
Ничего что программы при работе файлы создают?
> В винте системные файлы подписаны, можно проверить левое или нет(ито подделать можно)
Ну скажи мне кто вот этим 123556.tmp в C:\TEMP нагадил?
> а в лине никаких документов ни на что нет.
Вообще-то в лине как раз все системные файлы - в нормальных дистро (deb-based, rpm-based) можно проверить vs пакетный менеджер, что сие такое, какому пакету приписано, совпадает ли хэш, вот это все. А в винде с этим... у нее вообще пакетов - нет. А то что там какие-то цифровые подписи - так они на всем и вся какие-то - есть. Вот только у атакующих тоже потом дофига всего подписано. А майкрософт - делает козью морду, "отзывать ключ секурбута не будем - иначе загрузка виндов сломется!". Все чего подписи MS реально стоят.
> Да и пользователю полезно - нашли у него заррещёнку, открыли свойства...упс, ни
> дата ни ид компа ни программы на нём с инкриминируемым не
> совпадает и финиш махинации)Когда это все кого смущало? Пользователь не может качнуть условным торентом или чем там еще запрещенку чтоли?
Кто о чём а бедных о взломах, как бы поломать да урвать.
Заниматься трейсами и подписями должны фс с ядром, особенно когда в лине всё что не в ядре безбожно тормозит.> Ну скажи мне кто вот этим 123556.tmp в C:\TEMP нагадил?
Запусти "whomade -C:\TEMP\123556.tmp" и посмотри сам.
> 3) Окей, и что при этих условиях помешает
То же что мешает хацкать ядро.
Лично мне нереализуемые в реале идеи всегда нравились так что инициатору плюс, пиши ещё)