Когда я только начинала работать с VPS, было какое-то благоговение перед
sudo
Но только со временем я поняла, как важно вести логи всех sudo и root-команд, особенно если вы не единственная, кто работает с сервером. Или если вы — сами себе DevOps, и хотите спать спокойно, зная, что можно отследить, кто и когда что выполнял.
Зачем логировать sudo и команды от root?
Ответ простой: безопасность и аудит.
Если кто-то выполняет команды с
sudo
root
- когда это произошло,
- что именно запускалось,
- из-под какого пользователя,
- с какого IP-адреса (если удалённый доступ).
Это особенно важно для:
- команд с правами;
sudo
- автоматических скриптов, которые работают от имени ;
root
- разборов «что пошло не так» после сбоя.
Где и как уже логируются команды sudo?
По умолчанию команды
sudo
/var/log/auth.log
/var/log/secure
Попробуйте:
sudo cat /var/log/auth.log | grep sudo
Пример вывода:
Aug 14 15:03:22 vps sudo: adminuser : TTY=pts/0 ; PWD=/home/adminuser ; USER=root ; COMMAND=/usr/bin/apt update
Но это лишь часть. Если вы хотите вести отдельный журнал или добавить детализацию, придётся настроить чуть глубже.
Настройка sudoers для ведения логов
Откройте конфигурационный файл sudo:
sudo visudo
Это безопасный способ редактировать
/etc/sudoers
Добавьте в конец:
Defaults logfile="/var/log/sudo.log"
Теперь всё, что будет запускаться с
sudo
/var/log/sudo.log
📌 Важно: убедитесь, что
logfile
Как логировать все команды root-пользователя
sudo
root
su -
auditd
Установка:
sudo apt install auditd -y
Пример правила, логирующего запуск любых команд от root:
sudo auditctl -a always,exit -F arch=b64 -F uid=0 -S execve -k root_cmds
Проверка логов:
sudo ausearch -k root_cmds
Всё будет сохранено в
/var/log/audit/audit.log
💡 Советы:
- добавьте правило в , чтобы оно сохранялось после перезагрузки;
/etc/audit/rules.d/
- убедитесь, что хватает места на диске под такие логи.
Как обезопасить sudoers файл от ошибок
Ошибки в
/etc/sudoers
sudo
🔐 Правило №1: редактируйте только через
visudo
🔐 Правило №2: не давайте
NOPASSWD
Вот пример строки, которую я добавляю:
adminuser ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx
То есть пользователь
adminuser
nginx
Также можно создать отдельный файл:
sudo nano /etc/sudoers.d/adminuser
И прописать туда доступ. Так безопаснее, чем лезть в основной
/etc/sudoers
Примеры из жизни
Была у меня ситуация: на одном из серверов начались сбои в
nginx
/var/log/auth.log
sudo
nginx -s stop
reload
С тех пор я:
- включаю отдельный лог-файл через ;
sudoers
- логирую -команды через
root
;auditd
- и стараюсь описывать в точные команды, а не «всё подряд».
sudoers.d
Проверка и анализ sudo-логов
Для удобства рекомендую использовать такие команды:
sudo grep "COMMAND=" /var/log/auth.log
Или если у вас включён отдельный файл:
tail -f /var/log/sudo.log
Можно даже настроить отправку алертов в Telegram, если кто-то запускает нестандартные команды — но это тема для отдельной статьи.
Итого
Если у вас VPS — вы за него отвечаете. И чем раньше вы начнёте вести учёт команд, тем спокойнее будете спать. У меня это стало стандартной практикой на каждом новом сервере: настройка
sudoers
auditd
Пусть
root
VPS с запасом прочности
Оплатите год — получите 13 месяцев надежных ресурсов.