Используя Linux, я хотел бы отслеживать исполняемые файлы, которые выполняются от моего имени, включая всю командную строку (на практике каждый exec * () выполняется как мой собственный пользователь). Предполагается, что программа, которую я не контролирую, для выполнения задачи выполняет программу, которую я передаю, но я хочу убедиться, что она это делает, и какие опции она использует. Программа, которой я не управляю, подлый и, кажется, меняет поведение в зависимости от имени программы, которую она должна выполнить для задачи, поэтому я не могу передать сценарий оболочки, который бы регистрировал информацию и вызывал реальное программа.
Могу ли я получить информацию обо всех exec * (), выполненных моим пользователем в системе в Linux, включая полную командную строку? Если не считать ps
цикла, то есть. Я бы предпочел сделать это непосредственно в системе, в которой я работаю, и мне не требуется root-доступ, но при необходимости я могу создать систему, в которой у меня есть root-доступ, установить программы и провести там исследование.
Использование Ubuntu 12.4 LTS.
источник
audit
дает ответ , но «целая командная строка» в оболочке также может повлиять на дочерний процесс, используя параметры перенаправления / конвейера и envvar, а также содержащие подстановки / расширения, несущественное цитирование и расстояние, и структуры управления, какdoa && dob
, и вы не получите их.Ответы:
Вам необходимо настроить
auditd
записьexecve
событий. Пример на RHEL5:Я игнорирую предупреждение об арке, и это не имеет значения, но вы можете использовать
-F arch=b64
или-F arch=b32
установить его, если хотите.Результатом вышесказанного является:
Это очевидно быстро и грязно, но это основы того, как вы это делаете. Что именно нужно делать, вероятно, сильно зависит от того, что именно вы пытаетесь сделать. Вы можете уменьшить поток аудита, используя различные фильтры в
auditctl
команде, но я не знаю этой информации, поэтому не знаю, что включить. Если вам нужно что-то более конкретное, я бы посоветовал вам проверить страницу руководства или оставить комментарий к этому ответу, и я обновлю его еще немного.Надеюсь, что это поможет вам в правильном направлении.
РЕДАКТИРОВАТЬ:
Поскольку ваш вопрос связан с просмотром конкретного пользователя, я могу показать вам, что:
Идентично вышесказанному, но только тот
execve
, кто работает с эффективным идентификатором пользователя,16777216
будет зарегистрирован. Если вам нужно указать значение пользователяloginuid
(от которого он изначально вошел в систему), тогда вы будете использоватьauid
вместо этого:Фильтры AUID / loginuid были бы полезны, например, если пользователь сделает
su
илиsudo
root. В этой ситуации будет много вещей, запущенных от имени пользователя root, но вас интересует только то, что было запущено данным пользователем.auditctl
также позволяет стек фильтров , так что вы можете фильтровать какeuid
иauid
:источник
Вы спросили что-то простое. Я сделал пример с,
mplayer
но я думаю, что он может быть адаптирован к другим ситуациям:Как вы можете видеть, это очень просто: он анализирует первый аргумент, так как это файл, журнал создается в центральном файле
$LOG
и объединяется в файл (который всегда имеет одинаковое имяmplayer.log
в одном и том же каталоге.Таким образом, пользователь может получить последний фильм, который он прочитал в каждой директории.
источник