Контроль активности пользователей в 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 оставляйте как лёгкий слой «кто что запускал».


