Упражнение, связанное с безопасностью: для дополнительной безопасности у меня включен традиционный учет Unix (acct). Это может помочь расследовать подозрительную деятельность после факта.

Согласно man-странице /var/log/account это каталог, содержащий pacct (учета процессов), которые содержат данные учета процессов, записанные ядром, предположительно для каждого процесса, который exit ed, пока учет был активен. Имена команд усекаются до 15 символов (это кажется небольшой ошибкой: man 5 acct показывает #define ACCT_COMM 16 не включая дополнительный символ для завершающего NULL в структуре, но я вижу максимум 15 символов вместо 16) ,

Когда я запускаю lastcomm который преобразует самый последний файл pacct в удобочитаемую форму, я получаю строки, где 1-й (крайний левый) столбец не является очевидной командой (имя исполняемого файла на диске), даже когда я игнорирую символы за пределами 15-символьный лимит. Вот некоторые примеры:

kworker/dying
handle-watcher-
WorkerPool/28
ScriptStreamerT
Compositor
CompositorTileW
Chrome_ChildIOT

Некоторые из них выглядят как имена потоков ядра. Есть еще много потоков, которые я вижу (например, top), которых нет в этом списке. Я предполагаю, что отсутствующие являются долго выполняющимися процессами, которые никогда не exit ed, так как acct был включен.

Вопрос: Может ли кто-нибудь объяснить, что представляет собой каждый из перечисленных выше неучтенных процессов?

Для справки, вот скрипт bash, в котором перечислены команды, которые не были найдены на диске, поэтому вы можете запустить его самостоятельно (сначала запустите sudo updatedb )

#!/bin/bash

fullpath_of_cmd() {
    # cmd may be truncated to a max of 15 chars (see "man 5 acct")
    cmd="$1"
    # Search for any file matching this prefix
    # (assumes locate db is up to date)
    paths=$(locate "/$cmd")
    echo "$paths"
}

for cmd in $(lastcomm | cut -d' ' -f1 | sort -u); do
    # echo === $cmd
    paths=$(fullpath_of_cmd "$cmd")
    case "$paths" in
        (*/$cmd*) : cool, found it ;;
        (*) printf "%s -> NOT FOUND (%s)\n" $cmd $paths ;;
    esac
done

1 ответ1

1

Поле comm не обязательно соответствует имени исполняемого файла; он может быть свободно установлен самой программой, записывая в /proc/self/comm в Linux или используя некоторые тайные prctl().

Однако в Linux журнал учета, похоже, включает не только процессы, но и потоки в пользовательском пространстве. (Процессы и потоки в Linux почти одинаковы). Приведенные примеры выглядят в точности как имена потоков, которые будут использовать Chromium или, возможно, какой-нибудь другой браузер на базе WebKit/Blink.

Чтобы увидеть их самостоятельно, запустите htop , нажмите F2, в разделе "Параметры отображения" включите следующее:

  • [✔] Показать пользовательские имена потоков
  • [✔] Показать темы в другом цвете

Нажмите Shift+H, чтобы переключать темы пользовательского пространства; Shift+K для потоков ядра.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .