Мониторинг активности пользователей в Linux: acct, lastcomm, sa и last

Мониторинг активности пользователей в Linux: acct, lastcomm, sa и last

Понять, кто заходил на сервер, какие команды запускал и сколько процессорного времени съел, можно без тяжёлых агентов. Для этого есть учёт процессов (process accounting) из GNU Accounting Utilities: пакет acct в Debian и Ubuntu, psacct в RHEL и Fedora. Рядом с ним классические last и lastb, которые показывают входы в систему. С ними в Debian 13 и Ubuntu 26.04 есть важное изменение, о нём ниже.

Зачем это нужно

  • Видеть, какие команды реально запускаются на общем сервере или jump host.
  • Оценить, кто сколько сидит на сервере и когда пики входов.
  • Найти неудачные попытки входа по SSH.
  • Собрать историю для разбора инцидента. Это не замена auditd и SIEM, но быстрый первый слой.

Ядро при включённом учёте пишет запись о каждом завершённом процессе в файл учёта. Поверх него работают lastcomm, sa и accton. Утилита ac из того же пакета считает уже не процессы, а время сессий по файлу входов wtmp.

Установка acct и psacct

В Debian и Ubuntu пакет называется acct, в Ubuntu 26.04 это версия 6.6.4. Сервис включает учёт сам:

sudo apt install acct
sudo systemctl enable --now acct
systemctl status acct

В RHEL, Rocky, Alma и Fedora пакет и сервис называются psacct:

sudo dnf install psacct
sudo systemctl enable --now psacct

Файл учёта в Debian и Ubuntu лежит в /var/log/account/pacct, в RHEL в /var/account/pacct. В Ubuntu 26.04 пакет сразу ставит правило logrotate и таймер acct-monthly-report с ежемесячным отчётом, так что файл не растёт бесконечно.

lastcomm: какие команды запускались

lastcomm читает файл учёта и показывает завершённые команды: имя, флаги, пользователя, терминал, процессорное время и время запуска. Можно отфильтровать по команде, пользователю или терминалу:

sudo lastcomm
sudo lastcomm alice
sudo lastcomm python3
# только записи, где совпали все условия
sudo lastcomm --strict-match --command rm --user root

Так удобно искать, кто запускал rm, scp или curl после инцидента. Помните про ограничения: в учёт попадают только процессы, встроенные команды оболочки вроде cd или echo туда не попадают, а вместо аргументов записано только имя команды.

sa: сводка по командам и пользователям

sa сводит файл учёта: сколько раз вызывали каждую команду, сколько ушло реального и процессорного времени, сколько было операций ввода-вывода. Сводку можно сохранить в файлы savacct и usracct.

sudo sa          # сводка по командам
sudo sa -m       # по пользователям: число процессов и минуты CPU
sudo sa -u       # для каждой записи пользователь и команда
sudo sa -c       # с процентами от общего
sudo sa -s       # слить данные в savacct и usracct

accton: включить и выключить учёт вручную

Обычно учёт включает systemd-сервис, но если нужно сделать это руками, есть accton:

sudo accton on                        # файл по умолчанию
sudo accton /var/log/account/pacct    # конкретный файл
sudo accton off

Надёжнее держать включённым штатный сервис acct или psacct, чем запускать accton из cron при загрузке.

ac: время сессий

ac считает время подключений пользователей в часах по файлу /var/log/wtmp:

ac          # общее время
ac -p       # по пользователям
ac -d       # по дням

last и lastb в Debian 13 и Ubuntu 26.04

Классические last, lastb и lastlog читали файлы /var/log/wtmp, /var/log/btmp и /var/log/lastlog. В этих форматах не хватает места под время после 2038 года, и в Debian 13 старые команды из util-linux убрали. Замена такая: last из пакета wtmpdb (вместе с libpam-wtmpdb), lastlog2 вместо lastlog, а вместо lastb команда lslogins --failed. В Ubuntu 26.04 last тоже приходит из пакета wtmpdb, а lslogins там лежит в пакете util-linux-extra.

last                      # входы и перезагрузки
last reboot
last alice
sudo lslogins --failed    # неудачные входы вместо lastb
lastlog2                  # последний вход по учёткам

На системах со старым форматом, например Ubuntu 24.04 или Debian 12, всё работает как раньше: last читает /var/log/wtmp, а sudo lastb показывает неудачные входы из /var/log/btmp. Если wtmp на системе больше не ведётся, ac из пакета acct считать будет нечего.

Неудачные входы по SSH в любом случае видны в журнале. В Ubuntu и Debian сервис называется ssh, в RHEL sshd:

sudo journalctl -u ssh --since today | grep -i fail

Что ещё держать рядом

  • who и w показывают, кто на сервере прямо сейчас.
  • auditd и ausearch нужны, если требуется полноценный аудит execve, файлов и sudo.
  • История оболочки слабый источник: её легко почистить, учёт процессов надёжнее.
  • Файл учёта на нагруженном сервере растёт быстро, проверьте logrotate.

В итоге acct или psacct вместе с last дают быстрый минимум для общих серверов и jump host: какие команды запускались, кем и сколько ресурсов ушло. Для строгого аудита добавляйте auditd и централизованные логи, а на Debian 13 и Ubuntu 26.04 учитывайте, что last теперь из wtmpdb, а lastb заменил lslogins --failed.

Источники и ссылки


Комментарии загружаются…