Делает любой знает простой способ контролировать корневую икру процесса

Если Вы собираетесь быть хранящими данными, которые должны быть защищены от кого-то, если они получают физический доступ к дискам. Затем можно быть более обеспечены просто шифрование файловой системы так, чтобы данные, хранившие в файловой системе, были безопасны по умолчанию, и Вы не должны волноваться о безопасном удалении вещей.

13
задан 9 November 2010 в 02:53
4 ответа

Это походит на идеальное задание для auditd. После того как у Вас есть выполнение auditd, обслуживание по умолчанию на современные основанные на Redhat системы, можно создать правило, которое сделает точно, что Вы хотите путем выполнения

auditctl -a task,always -F uid=0

Ломая это правило команды, делая чрезмерное использование страницы справочника, мы находим что:

   -a list,action
          task       Add  a  rule to the per task list. This rule list is used
                     only at the time a task is created -- when fork() or
                     clone() are called by the parent task. When using this
                     list, you should only use fields that are known at task
                     creation time, such as the uid, gid, etc.
          always     Allocate an audit context, always fill it in at syscall 
                     entry time, and always write out a record at syscall exit
                     time.

Поэтому всегда выписывайте запись для этого действия каждый раз, когда ветвление или клонирует выходы системного вызова.

Заключительная опция может считаться строкой фильтра в нашем использовании -F uid=0 просто ограничивает нас случаями, где uid владельца процесса 0.

Обратите внимание, что это правило может быть выполнено во время выполнения путем проверки, что auditd правильно настроен, и добавление правила
-a task,always -F uid=0
в соответствующий файл для Вашего распределения, скорее всего /etc/audit/audit.rules

Просто имейте в виду, что это будет довольно блин шумным, и кто бы ни делает, Ваши обзоры журнала должны будут быть подготовлены к нему.

9
ответ дан 2 December 2019 в 21:27

Я не думаю, что существует очевидный способ, чтобы сделать это, не перекомпилировав Ваше ядро с CONFIG_PROC_EVENTS и/или CONFIG_KPROBES (хотя я хотел бы знать, существует ли способ сделать его, таким образом, у меня есть upvoted Ваш вопрос).

У меня действительно была идея использовать iwatch/inotify для создания каталога внутри/proc, но это, казалось, не работало, ни один не сделал auditctl. Похоже, что Ваш лучший выбор, хотя грязный, состоит в том, чтобы постоянно анализировать PS для разнообразия из сценария. Следующий код Perl сделал бы это, хотя будет склонным для пропавших без вести некоторых и игнорирует ps (поскольку это иначе инициировало бы себя):

perl -e 'my %pids; while(1) { my @pids = `ps -U root -u root`; foreach (@pids) { next if /ps$/; ($pid) = /^\s*(\d+)\D/; if (!$pids{$pid}) { $pids{$pid}++; print "Process $pid created (" . `cat /proc/$pid/cmdline` . ")\n"; } } }
2
ответ дан 2 December 2019 в 21:27

Лучшим способом я могу думать, должен был бы создать от излишне любопытной библиотеки. излишне любопытный очень небольшая общая библиотека, которая сцепляется в /etc/ld.so.preload и повторяется execve() системные вызовы. Это настраивается для входа всех exec()или просто те, которые от корня. В он - текущее воплощение, излишне любопытные журналы к системному журналу каждый раз событие соответствия (syscall к execve()) происходит. Это не большая программа, хотя (пара сотен строк кода, самое большее), и мог быть изменен без так большой трудности выполнить сценарий вместо (или в дополнение к) вход действия. Излишне любопытный записан в C.

Несколько вещей отметить:

  • Если Вы запускаете скрипт каждый раз, когда корневой процесс порожден, Ваш сценарий будет корневым процессом, который должен будет породить сценарий снова, который будет другим корневым процессом и т.д. Будьте осторожны, что Вы не входите в цикл там.
  • На типичном поле Linux существует много процессов, которые выполняются как корень и регулярно метали икру. Например, крон может породить систему cronjobs как корень каждую минуту или несколько минут. Если Вы будете просто искать это для случая, когда пользователь войдет в систему как корень, это будет больше работы.
1
ответ дан 2 December 2019 в 21:27

Вы можете сделать это с помощью exec-snoop (на основе ebpf), точек трассировки, аудита, соединителя процесса netlink и некоторых других механизмов. Я написал здесь сравнение всех методов.

2
ответ дан 5 November 2020 в 07:28

Теги

Похожие вопросы