Гид по технологиям

Как просмотреть историю sudo в Linux

• 8 min read • Linux • Обновлено 29 Nov 2025
Как просмотреть историю sudo в Linux
Как просмотреть историю sudo в Linux

Содержание

  • Системный журнал аутентификации
  • Как извлечь только записи sudo
  • История команд оболочки
  • Просмотр через journalctl (systemd)
  • Графические просмотрщики журналов (GNOME, KDE, MATE)
  • Разбор формата записей и примеры разбора
  • Полезные команды для фильтрации и отчётов (grep/awk/sed/jq)
  • Настройка логирования sudo (sudoers, rsyslog, journald)
  • Централизованная запись и ротация логов
  • Что искать при расследовании (SOP)
  • Роли и чек-листы (админ, аудитор, пользователь)
  • Безопасность и приватность логов
  • Часто задаваемые вопросы

Системный журнал аутентификации

Большинство дистрибутивов Linux ведут отдельный журнал аутентификации — в Debian/Ubuntu это /var/log/auth.log, в RHEL/CentOS/Fedora/SUSE часто используется /var/log/secure или /var/log/audit/audit.log (если установлен auditd). Эти файлы содержат записи о попытках входа, вызовах sudo и связанных событиях.

Откройте файл с правами root, например так:

sudo nano /var/log/auth.log

Примечание: путь может отличаться в зависимости от дистрибутива. Если запись лог-файла для sudo изменена в sudoers, проверьте её в /etc/sudoers или в файлах в /etc/sudoers.d.

Журнал аутентификации: пример команды и вывода

Важно: raw-файл логов часто содержит много строк, не относящихся к sudo, поэтому разумно фильтровать его по ключевым словам (см. следующий раздел).

Как извлечь только записи sudo

Вместо прокрутки используйте grep для фильтрации. Примеры команд:

sudo grep -i "sudo" /var/log/auth.log

Или, чтобы получить только последние N строк с sudo и записать в файл отчёта:

sudo grep -i "sudo" /var/log/auth.log | tail -n 200 > ~/sudo-report.txt

Если ваш дистрибутив использует /var/log/secure:

sudo grep -i "sudo" /var/log/secure

Чтобы включить временной диапазон, можно сочетать с awk или использовать journalctl (ниже). Пример с awk, выводящим строки за определённую дату (формат даты — образец для log, может отличаться):

sudo awk '/^Jun 20/ && /sudo/ {print}' /var/log/auth.log

Полезный трюк: подсчёт сколько раз пользователи запускали sudo:

sudo grep "sudo" /var/log/auth.log | awk '{print $1,$2,$3,$9}' | sort | uniq -c | sort -nr

Здесь формат вывода может отличаться: подстройте индексы awk под вашу строку лога.

Содержимое журнала, отфильтрованное по sudo

История команд оболочки

Файлы истории оболочки содержат команды, введённые конкретным пользователем в интерактивной сессии. Для Bash обычно ~/.bash_history, для zsh — ~/.zsh_history, для других оболочек — свои файлы.

Откройте историю конкретного пользователя:

sudo nano /home/USERNAME/.bash_history

Ограничения истории оболочки:

  • запись происходит при завершении сессии (если shell завершился корректно); команды из ещё открытой сессии могут отсутствовать;
  • пользователи могут очистить или изменить файл истории;
  • записи не содержат меток времени, если не включена соответствующая опция (HISTTIMEFORMAT для Bash).

Чтобы включить метки времени в Bash, добавьте в ~/.bashrc:

export HISTTIMEFORMAT="%F %T "

После этого новые строки будут содержать временные метки.

Просмотр через journalctl (systemd)

Если система использует systemd, journalctl предоставляет централизованный журнал. Чтобы получить все записи, связанные с sudo:

sudo journalctl -u sudo.service -e

Но чаще удобнее фильтровать по исполняемому файлу:

sudo journalctl -e /usr/bin/sudo

Примеры полезных опций:

  • последние N строк: –lines=100
  • временной фильтр: –since=”2025-06-01” –until=”2025-06-02”
  • вывод в формате JSON для дальнейшей обработки: -o json

Пример:

sudo journalctl --lines=50 -o short-iso /usr/bin/sudo

Если вы хотите искать по конкретному пользователю:

sudo journalctl _UID=$(id -u username) /usr/bin/sudo

или по полю _PID, _COMM и т.д. Формат полей systemd можно уточнить через man journalctl.

Пример вывода journalctl, подсвеченные ошибки sudo

Графические просмотрщики журналов

Если вы работаете на рабочей станции с графическим окружением, можно использовать встроенные средства просмотра логов.

GNOME Logs

GNOME Logs (Logs) отображает журналы systemd и системные логи. Откройте «Приложения» и найдите «Журналы» или «Logs». Перейдите в вкладку «Security» (Безопасность) и введите в поиск «sudo», чтобы получить записи, связанные с привилегированными вызовами.

GNOME: окно логов, вкладка безопасности

KSystemLog (KDE)

В KDE утилита KSystemLog предоставляет фильтр по ключевым словам. Откройте приложение и введите “sudo” в строку фильтра.

KDE: KSystemLog с фильтром sudo

Если KSystemLog запрашивает пароль и отказывает — это поведение связано с попыткой приложения получить привилегии для доступа к защищённым файлам. Можно нажать «Ignore» (Игнорировать), чтобы запустить без привилегий (тогда часть логов будет недоступна).

MATE Log File Viewer

MATE предлагает простой просмотрщик логов (Log File Viewer). Откройте приложение и выберите auth.log. Затем используйте встроенный поиск по слову «sudo».

MATE: просмотр auth.log и поиск sudo

Разбор формата записей и примеры разбора

Типичная строка в /var/log/auth.log может выглядеть так (пример):

Jun 20 09:42:31 hostname sudo:    alice : TTY=pts/2 ; PWD=/home/alice ; USER=root ; COMMAND=/usr/bin/apt update

Пояснения:

  • Дата/время — когда произошло событие;
  • hostname — имя машины;
  • процесс и пользователь — здесь sudo и имя пользователя alice;
  • TTY — терминал, откуда выполнена команда (если применимо);
  • PWD — текущая рабочая директория;
  • USER — целевой пользователь (обычно root);
  • COMMAND — выполненная команда.

Пример парсинга с awk, чтобы получить: дата, пользователь, команда:

sudo grep "sudo" /var/log/auth.log | awk -F"sudo: " '{print $1" | "$2}' | sed 's/; / | /g'

Или более точно с регулярным выражением:

sudo grep "sudo" /var/log/auth.log | perl -ne 'if(/(\w+ \d+ \d+:\d+:\d+) (\S+) sudo: +([^:]+) : .*COMMAND=(.*)$/){print "$1 | $3 | $4\n"}'

(Регулярные выражения и индексы полей зависят от формата ваших логов — подгоняйте под свою систему.)

Полезные команды и шаблоны для отчётов

Быстрые бейслайн-команды:

  • Все записи sudo, отсортированные по пользователю:
sudo grep "sudo" /var/log/auth.log | awk -F"sudo: " '{print $2}' | cut -d":" -f1 | sort | uniq -c | sort -nr
  • Список последних 100 команд, выполненных через sudo, с датой:
sudo grep "sudo" /var/log/auth.log | tail -n 100
  • Экспорт в CSV (простая версия):
sudo grep "sudo" /var/log/auth.log | perl -ne 'if(/^(\w+\s+\d+\s+\d+:\d+:\d+) (\S+) sudo: +([^:]+) : .*COMMAND=(.*)$/){print "$1,$2,$3,$4\n"}' > sudo_history.csv
  • Использование journalctl в JSON и jq для выборки:
sudo journalctl /usr/bin/sudo -o json | jq -r '"\(.__REALTIME_TIMESTAMP) | \(.UID) | \(.MESSAGE)"'

Настройка логирования sudo

В sudo можно задать файл для логов через sudoers. Откройте /etc/sudoers через visudo и проверьте параметр Defaults logfile=…

Пример установки лог-файла:

Defaults logfile="/var/log/sudo.log"

После этого sudo будет писать в указанный файл. Однако многие дистрибутивы по умолчанию логируют через syslog/journal — изменение sudoers полезно, если хотите отдельный файл.

Дополнительно можно включить флаги для логирования команд и окружения:

Defaults log_input, log_output

Эти опции заставят sudo записывать ввод/вывод сеанса (потребует настроенного пэра sudo_logsrvd для безопасного хранения).

Важно: изменение sudoers делайте только через visudo, чтобы избежать ошибок синтаксиса.

Централизованная запись и ротация логов

Для корпоративных систем имеет смысл отправлять логи на центральный сервер (rsyslog, syslog-ng, journal-gateway). Также убедитесь, что настроена ротация логов (logrotate) и что файлы логов не становятся группой записи или доступны анонимно.

Пример конфигурации rsyslog для пересылки на удалённый сервер:

*.* @@logs.example.com:514

Настройка ротации: /etc/logrotate.d/sudo или обновление /etc/logrotate.conf, чтобы лог-файлы не росли бесконтрольно.

Что искать при расследовании: пошаговый SOP

  1. Сбор: экспортируйте все записи sudo за период инцидента в отдельный файл.
    • sudo journalctl /usr/bin/sudo –since=”2025-06-20” –until=”2025-06-21” -o short-iso > /tmp/sudo-20250620.log
  2. Идентификация пользователей: подсчитайте, кто запускал sudo и когда.
    • sudo grep “sudo” /tmp/sudo-20250620.log | awk ‘{print $9}’ | sort | uniq -c | sort -nr
  3. Корреляция с командами: найдите подозрительные команды (установка пакетов, изменение конфигураций, создание пользователей, изменение sudoers).
  4. Дополнительные источники: ~/.bash_history каждой подозрительной учётки, /var/log/auth.log, системные логи (daemon, syslog), auditd (если включён).
  5. Снимите образ машины или сохраните журналы в защищённом месте для аудита.
  6. Закройте доступ (измените пароли/ключи, отозовите временные полномочия).
  7. Проведите постинцидентный анализ и обновите политики (минимизация NOPASSWD, настройка MFA для sudo, централизованное логирование).

Критерии приёмки: способы убедиться, что расследование завершено

  • собраны логи за весь период инцидента;
  • подтверждён список пользователей и их команд;
  • приняты меры по устранению уязвимости;
  • документы обновлены (SOP, изменения конфигурации).

Роли и чек-листы

Администратор

  • проверить /var/log/auth.log и journalctl на sudo-записи;
  • просмотреть /etc/sudoers и /etc/sudoers.d;
  • при необходимости временно отозвать привилегии;
  • включить более подробное логирование (если бизнес-процесс позволяет).

Аудитор

  • собрать экспорт логов в неизменном виде;
  • сверить записи sudo с журналами работы приложений и сетью;
  • проверить ротацию и хранение логов;
  • убедиться в наличии политик хранения и доступа.

Пользователь (с привилегиями)

  • понимайте, что все sudo-вызовы логируются;
  • избегайте использования sudo для повседневных задач;
  • не передавайте свой пароль и ключи.

Безопасность и приватность логов

Логи sudo содержат команды и иногда части путей или переменных среды, которые могут содержать персональные данные или чувствительную информацию (токены, имена пользователей). При обработке и хранении логов учитывайте правила конфиденциальности и законодательства (например, GDPR в ЕС): храните логи в защищённой среде, реализуйте контроль доступа и политику удаления старых записей.

Советы по защите:

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

Альтернативные подходы и дополнительные инструменты

  • auditd / ausearch: более детальная аудит- система ядра; полезна если нужно фиксировать создание/удаление файлов, сокетов и т.д.
  • SIEM (Elastic/Graylog/Splunk): централизованный сбор, корреляция и оповещение по событиям sudo.
  • sudo_logsrvd: позволяет сохранять ввод/вывод сессий sudo (подходит для высоких требований к аудиту).

Примеры неудач и когда методика может не сработать

  • Пользователь удалил или подправил ~/.bash_history — историю оболочки нельзя считать надёжным источником сама по себе.
  • Если sudo настроен на логирование в кастомный файл и вы его не знаете, стандартные grep/journalctl могут ничего не найти; проверьте sudoers.
  • Если лог-файлы были перезаписаны или удалены злоумышленником, потребуется восстановление с резервных копий или централизованных логов.

Полезная шпаргалка команд (Cheat sheet)

  • Просмотр auth.log любым pager:
sudo less /var/log/auth.log
  • Фильтрация по sudo:
sudo grep -i "sudo" /var/log/auth.log | less
  • Последние 50 строк из journalctl для sudo:
sudo journalctl -u sudo.service -n 50 --no-pager
  • Экспорт в CSV (простая форма):
sudo grep "sudo" /var/log/auth.log | perl -ne 'if(/^(\w+\s+\d+\s+\d+:\d+:\d+) (\S+) sudo: +([^:]+) : .*COMMAND=(.*)$/){print "$1,$2,$3,$4\n"}' > /tmp/sudo.csv

Часто задаваемые вопросы

Можно ли показывать только последние записи sudo в journalctl?

Да. Например, чтобы показать последние 10 записей:

sudo journalctl --lines=10 -e /usr/bin/sudo

Или задать временной интервал:

sudo journalctl --since=yesterday --until=today -e /usr/bin/sudo

Что если я не использую Bash — возможно ли посмотреть историю sudo?

Да. Логи sudo ведутся независимо от оболочки и записываются в системные журналы. Файлы истории оболочек отличаются: у каждой оболочки — свой файл (~/.history, ~/.zsh_history и т.д.).

KSystemLog требует пароль и отказывает — сломана ли программа?

KSystemLog по умолчанию пытается получить привилегии для доступа к защищённым журналам. Если вы отказываете доступ, приложение всё равно может работать в урезанном режиме (нажмите «Ignore»). При отказе чаще всего просто не будут доступны защищённые файлы логов.


Итог

Просмотр истории sudo — важная часть администрирования и расследования инцидентов. Используйте комбинацию системных логов (/var/log/auth.log или /var/log/secure), journalctl и истории оболочки для полной картины. Настройте централизованное логирование, ротацию и ограничьте доступ к логам, чтобы обеспечить безопасность и соответствие правилам хранения данных.

Image credit: Unsplash

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро