Как мониторить активность пользователей в Linux с помощью psacct и acct
Когда вы администрируете сервер Linux, особенно с множеством пользователей, важно понимать, что именно на нём происходит. Кто сейчас вошёл в систему? Какие команды выполняет? Сколько процессорного времени тратит? И дело не только в любопытстве. Подобная информация — это основа безопасности, отладки и грамотного управления ресурсами.
Для таких задач в Linux есть две классические утилиты — psacct и acct. Обе они открыты, работают в фоне и аккуратно записывают, что делают пользователи и какие ресурсы при этом расходуются.
Многие администраторы используют эти инструменты там, где разработчики постоянно работают прямо на серверах. Это простой и надежный способ держать руку на пульсе.
Что именно делают psacct и acct
Пакет psacct или acct включает несколько утилит для мониторинга процессов и активности пользователей:
- ac — выводит статистику времени подключений (logins/logouts) в часах.
- lastcomm — показывает информацию о ранее выполненных командах.
- accton — включает или отключает учёт процессов.
- sa — даёт свод по ранее выполненным командам.
- last и lastb — показывают список последних вошедших пользователей (и неудачные попытки входа для lastb).
Дальше разберём, как всё это установить и использовать на практике.
Установка psacct и acct в разных дистрибутивах
По сути psacct и acct делают одно и то же, но устанавливаются они по-разному в зависимости от семейства дистрибутива.
- В rpm-дистрибутивах (RHEL, CentOS, Fedora) используется пакет psacct.
- В Debian-подобных системах (Ubuntu, Linux Mint) — пакет acct.
RHEL, CentOS, Fedora
Установка psacct:
sudo yum install psacct
# или на более новых системах
sudo dnf install psacct
Ubuntu, Debian, Linux Mint
Установка acct:
sudo apt install acct
Другие дистрибутивы
Примеры для популярных систем:
sudo apk add psacct # Alpine Linux
sudo pacman -S acct # Arch Linux
sudo zypper install acct # OpenSUSE
Запуск службы psacct/acct
По умолчанию в RHEL-подобных системах служба psacct выключена, её нужно запустить вручную.
Проверим статус:
sudo systemctl status psacct
Скорее всего, вы увидите, что сервис disabled. Тогда запускаем и добавляем в автозагрузку:
sudo systemctl start psacct
sudo systemctl enable psacct
sudo systemctl status psacct
После этого будет создан файл учёта:
/var/account/pacct
В Debian-подобных дистрибутивах служба обычно стартует автоматически после установки пакета, и дополнительно ничего делать не нужно.
ac: общая статистика времени подключений
Команда ac работает с текущим файлом учёта подключений wtmp и показывает, сколько часов пользователи были в системе.
Простейший вызов без аргументов:
ac
Пример вывода:
total 11299.15
Это суммарное количество часов, которое все пользователи вместе провели в системе. Такая цифра полезна для анализа нагрузки, планирования ресурсов и понимания общего уровня активности.
Статистика по дням
Если добавить ключ -d, ac покажет статистику по дням:
ac -d
Вы увидите список дат и количество часов за каждый день. Если, например, на 31 октября или 3 ноября есть необычные пики активности, это повод посмотреть, что в эти дни происходило: обновления, тесты, атака, резервные копии и т.д.
Время работы каждого пользователя
Чтобы посмотреть, сколько часов провёл в системе каждый пользователь, используйте:
ac -p
Время работы конкретного пользователя
Посмотреть суммарное время работы отдельного пользователя можно так:
ac user
Пример:
total 110.31
А чтобы увидеть статистику по дням только для этого пользователя:
ac -d user
Если интересует определённый период, например последний месяц, можно просто ограничить вывод:
ac -d user | tail -n 31
Так удобно отслеживать активность конкретного разработчика или администратора.
sa: свод по выполненным командам
Команда sa выводит свод по всем ранее выполненным командам:
sa
В выводе каждая строка соответствует определённой команде и содержит несколько показателей.
Пример расшифровки:
- 0.04re — реальное время выполнения в минутах по часам системы (wall clock).
- 0.04cp — суммарное CPU-время (пользовательское + системное) в минутах.
- 6546k — среднее использование памяти за время работы команды, в условных единицах (1k).
- fail2ban-client — имя команды.
- Звёздочка * после некоторых имён команд означает, что они выполнялись с правами суперпользователя.
Такая сводка помогает быстро понять, какие команды чаще всего запускаются и какие из них съедают заметную долю ресурсов.
sa -u: статистика по пользователям
Если добавить ключ -u, sa покажет команды с разбивкой по пользователям:
sa -u
Так можно увидеть:
- какие команды запускал конкретный пользователь;
- сколько ресурсов каждая команда у него «съела»;
- чем в целом он загружал систему.
Это удобный инструмент для анализа продуктивности, расследований и поиска «тяжёлых» задач.
sa -m: количество процессов и CPU-время
Ключ -m выводит общее количество процессов и CPU-минут:
sa -m
Если изо дня в день эти значения постоянно растут, стоит проверить, не появилось ли:
- слишком ресурсоёмких задач;
- некорректно настроенных сервисов;
- «утечек» в виде зацикленных процессов.
sa -c: сортировка по потреблению ресурсов
С ключом -c команда sa сортирует данные по проценту использования ресурсов:
sa -c
В результате вы получаете список команд, упорядоченный по их «прожорливости». Это быстрый способ увидеть, что именно загружает CPU и память: какая-то сборка, база данных, бэкап или случайно запущенный процесс.
lastcomm: просмотр выполненных команд
Команда lastcomm показывает историю выполненных команд с учётом информации, которую собирают psacct/acct.
Например, чтобы посмотреть, что запускал пользователь:
lastcomm user
Вы получите список команд, их параметры, время запуска и другую служебную информацию.
В выводе встречается флаг F — он означает, что команда сделала fork, но не выполнила exec, то есть процесс был порождён, но реальная команда не была заменена другим исполняемым файлом (типично для инициализации оболочки).
Можно ограничить вывод только последними строками. Например, показать 20 последних команд пользователя :
lastcomm user | head -n 20
Поиск по логам команд
lastcomm позволяет искать, кто и когда запускал определённые команды. Например, чтобы посмотреть, кто пользовался ls:
lastcomm ls
А если нужно проверить, кто обращался к чувствительным файлам, можно отфильтровать результаты через grep:
lastcomm cat | grep -i "shadow\|passwd"
Так вы увидите, какие пользователи читали файлы shadow или passwd — полезно при аудитах и расследованиях инцидентов.
last и lastb: кто заходил в систему
Отдельно стоит помнить о командах:
- last — показывает список последних успешных входов в систему;
- lastb — список неудачных попыток (обычно читает btmp).
Вместе с psacct/acct это даёт довольно полную картину: кто и когда входил и что делал после входа.
Практические сценарии использования
На практике эти инструменты особенно полезны в нескольких типовых ситуациях.
- Поиск прожорливых задач.
Если сервер начал работать медленнее обычного, посмотрите вывод sa -c: вы сразу увидите команды, которые забрали больше всего CPU-времени. - Безопасность и аудит.
После подозрительного события можно с помощью lastcomm посмотреть, какие именно команды запускались незадолго до этого. В отличие от обычной истории команд в оболочке, эти данные сложнее «подчистить». - Учёт и биллинг.
В средах, где несколько клиентов делят один сервер (например, хостинг), ac -p даёт конкретные цифры по активности каждого пользователя — это можно использовать для отчётности и расчётов. - Разбор инцидентов с пользователями.
Когда кто-то говорит: «Я ничего не делал», у вас всегда есть возможность аккуратно проверить, какие команды реально запускались от его имени — и уже на фактах обсуждать ситуацию.
Управление логами и их размером
У psacct/acct есть один естественный побочный эффект: журналы со временем растут. Основной файл учёта процессов — это:
/var/account/pacct
Чтобы он не разрастался бесконтрольно, имеет смысл подключить его к logrotate. Пример конфигурации в файле /etc/logrotate.d/psacct:
/var/account/pacct {
monthly
rotate 12
compress
notifempty
create 0600 root }root
Что это означает:
- monthly — ротация раз в месяц;
- rotate 12 — хранить до 12 архивов (год истории);
- compress — сжимать старые файлы;
- notifempty — не трогать файл, если он пустой;
- create 0600 root root — создавать новый файл с нужными правами и владельцем.
Так вы сохраняете историю, но при этом держите размер логов под контролем.
Документация и дополнительные возможности
Утилиты psacct/acct поддерживают немало опций и флагов, о которых здесь не шла речь. Чтобы подобрать конфигурацию под свои задачи, обязательно загляните в руководства:
man ac
man sa
man lastcomm
man accton
В них подробно описаны дополнительные ключи, форматы вывода и варианты интеграции с вашей системой мониторинга. Потратив немного времени на изучение документации, можно настроить учёт активности так, чтобы он аккуратно дополнял уже существующие средства наблюдения за сервером.