Когда я только начинала работать с VPS, было какое-то благоговение перед
sudoНо только со временем я поняла, как важно вести логи всех sudo и root-команд, особенно если вы не единственная, кто работает с сервером. Или если вы — сами себе DevOps, и хотите спать спокойно, зная, что можно отследить, кто и когда что выполнял.
Зачем логировать sudo и команды от root?
Ответ простой: безопасность и аудит.
Если кто-то выполняет команды с
sudoroot- когда это произошло,
- что именно запускалось,
- из-под какого пользователя,
- с какого 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-пользователя
sudorootsu -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/sudoerssudo🔐 Правило №1: редактируйте только через
visudo🔐 Правило №2: не давайте
NOPASSWDВот пример строки, которую я добавляю:
adminuser ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx
То есть пользователь
adminusernginxТакже можно создать отдельный файл:
sudo nano /etc/sudoers.d/adminuser
И прописать туда доступ. Так безопаснее, чем лезть в основной
/etc/sudoersПримеры из жизни
Была у меня ситуация: на одном из серверов начались сбои в
nginx/var/log/auth.logsudonginx -s stopreloadС тех пор я:
- включаю отдельный лог-файл через;
sudoers - логирую-команды через
root;auditd - и стараюсь описывать вточные команды, а не «всё подряд».
sudoers.d
Проверка и анализ sudo-логов
Для удобства рекомендую использовать такие команды:
sudo grep "COMMAND=" /var/log/auth.log
Или если у вас включён отдельный файл:
tail -f /var/log/sudo.log
Можно даже настроить отправку алертов в Telegram, если кто-то запускает нестандартные команды — но это тема для отдельной статьи.
Итого
Если у вас VPS — вы за него отвечаете. И чем раньше вы начнёте вести учёт команд, тем спокойнее будете спать. У меня это стало стандартной практикой на каждом новом сервере: настройка
sudoersauditdПусть
root