Мониторинг активности пользователей в Linux

Контроль активности пользователей в Linux – часть повседневной безопасности: кто заходил, какие команды гонял, сколько CPU/IO съел, были ли неудачные логины. Базовый стек без агентов – process accounting (acct / psacct) плюс классика last/lastb. Ниже – установка, команды и примеры вывода.

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

  • Понять, какие команды реально крутятся на shared-хосте
  • Оценить время сессий и пики входов
  • Найти неудачные попытки SSH (брутфорс, чужие ключи)
  • Собрать историю для разбора инцидента (не замена auditd/SIEM, но быстрый слой)

Process accounting пишет учёт выполненных процессов. Поверх него работают утилиты ac, lastcomm, sa, accton. Отдельно wtmp/btmp дают last и lastb – это уже про логины, не про каждую команду.

Установка: acct vs psacct

На Debian/Ubuntu/Linux Mint пакет называется acct:

sudo apt update
sudo apt install acct
sudo systemctl enable --now acct
# на части релизов сервис может называться psacct
systemctl status acct || systemctl status psacct

На RHEL/CentOS/Fedora – psacct:

sudo dnf install psacct   # или yum
sudo systemctl enable --now psacct

Файл учёта обычно /var/log/account/pacct или /var/account/pacct / /var/log/pacct – зависит от дистрибутива. Смотрите unit-файл сервиса, если путь «не тот».

Команды process accounting

ac – время подключений

Считает connect time пользователей (из wtmp). Полезно для «кто сколько сидел», не для CPU.

ac
# total      5.42

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

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

Читает pacct и показывает исполнявшиеся команды, пользователя, tty, время CPU.

lastcomm
# ls            user1   pts/1     0.01 secs Sun Nov  3 14:22
# grep          user2   pts/2     0.03 secs Sun Nov  3 14:30

lastcomm user1
lastcomm python

Удобно искать «кто гонял rm/scp/curl» после инцидента. Помните: shell-builtin и некоторые короткие процессы могут не попасть в учёт так, как вы ожидаете.

accton – вкл/выкл учёта

Вручную включить запись в файл (обычно делает unit при старте):

sudo touch /var/log/pacct
sudo accton /var/log/pacct
# выключить:
sudo accton off

Минимальный скрипт, если сервис по какой-то причине не поднят:

#!/bin/bash
set -euo pipefail
PACCT=/var/log/pacct
if [ ! -f "$PACCT" ]; then
  touch "$PACCT"
  chmod 600 "$PACCT"
fi
accton "$PACCT"

Надёжнее не cron @reboot, а нормальный systemd unit из пакета. Cron имеет смысл только как костыль на «голом» образе без unit.

sa – сводка по командам

Агрегирует статистику: сколько раз запускали, real/cpu time, среднее.

sa
# 300   1.25re   0.40cp   0av   50python

sa -u          # по пользователям
sa -m          # по пользователям и командам
sudo sa -s     # свести и обновить summary-файлы (зависит от пакета)

last и lastb: сессии и failed logins

Это не acct, а wtmp/btmp, но в мониторинге пользователей без них никуда.

last
# user1   pts/0        192.168.1.5     Sun Nov  3 14:00 - 15:00  (1:00)

last -a
last reboot
last user1

Неудачные попытки входа (нужны права root, файл /var/log/btmp):

sudo lastb
# unknown  pts/2        192.168.1.7     Sun Nov  3 14:30 - 14:31  (00:01)

sudo lastb | head
# плюс смотрите journal/auth.log:
sudo journalctl -u ssh --since today | grep -i fail

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

  • who / w – кто онлайн сейчас
  • lastlog – время последнего входа по учёткам
  • ausearch / auditd – если нужен нормативный аудит execve, файлов, sudo
  • shell history – слабый источник (можно почистить), accounting надёжнее для бинарников

Плюсы и границы

  • Прозрачность – видно команды и нагрузку без тяжёлого агента
  • История – можно смотреть ретроспективно, пока не ротировали pacct
  • Не SIEM – нет алертов «из коробки», нет полной картины shell-builtin и сетевых сессий L7
  • Диск – на busy-хосте pacct растёт, настройте logrotate

Для multi-user серверов и jump-хостов связка acct/psacct + last/lastb – быстрый минимум. Для жёсткого compliance добавляйте auditd, централизованные логи и ограничение sudo; accounting оставляйте как лёгкий слой «кто что запускал».

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


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