Эта статья — часть Большого Мануала по настройке lamp-сервера на debian.
Предыдущая часть цикла — Cинхронизируем время на сервере.
Следующая часть цикла — Ставим и немного настраиваем mysql-сервер (или Percona Server), создаём базы данных.
Описывать все случаи, когда вам могут понадобиться логи запущенных команд на сервере можно бесконечно долго. Тут от банального «следить за тем, что творят девелоперы» до пессимистичного «если меня взломают».
Есть прекрасная библиотека, которая перехватывает все вызовы execve(). В итоге, если эту библиотеку вкорячить в систему, перед всеми вызовами execve будет делаться запись в лог. Имя библиотеке — snoopy. Что самое приятное — в дебиане она собрана очень аккуратно и прикручивать руками её не нужно.
К сожалению, есть проблема с вызовом execv() — они не всегда логгируются. Авторы описывают эту ситуацию примерно так: «хрень какая-то, они работают фиг пойми как. Но мы уже чиним».
С другой стороны, execv() из шелла напрямую используется… эээ… примерно никогда. Поэтому, snoopy с вероятностью в 99.9% логгирует всё, что запущено из шелла или крона.
Установка примитивная:
По ходу установки нас спросят «Install snoopy library to /etc/ld.so.preload?». Отвечаем «Yes», чтобы логгировать всё автоматически.
После этого идем и смотрим в /var/log/auth.log:
Dec 22 16:53:26 dev snoopy[23508]: [uid:0 sid:22292 tty:/dev/pts/0 cwd:/root filename:/usr/bin/tail]: tail -1 /var/log/auth.log
22 декабря, в 16:53:26 пользователь с uid0 запустил команду «tail -1 /var/log/auth.log». «dev» в данном случае — hostname машины, snoopy[23508] — pid процесса snoopy, из которого была сделана запись в лог, /dev/pts/0 — терминал, в котором была запущена команда. Интерактивные сессии можно найти в w:
...
root pts/0 x.x.x.x 15:07 0.00s 0.04s 0.00s w
...
В общем-то всё. Почитывайте grep snoopy /var/log/auth.log на тему всякой фигни и радуйтесь =)
Как обычно, нужно понимать, что на вызове библиотеки вы теряете такты процессора. В отличии от многих остальных подобных утилит — не очень много, но если у вас процессор всегда забит на 100% — то хорошего из этой затеи не выйдет.
Так что не советую ставить подобные утилиты на машину с большим IO (если у вас уже есть wa на процессоре — то станет ещё хуже, если команд выполняется много).
В целом же, утилитка висит и никому не мешается.
А почему не auditd?
И до него дойду, вместе с acct.
Подобные snoopy библиотеки — простой и быстрый способ начать писать в лог запущенное пользователями из шелла. Acct/auditd для этой цели — оверхед. К тому ж настраивать их надо.
Данный пост в RSS не попал. можно как-то пофиксить?
Он в 2012 году написан, я просто добавил его в оглавление цикла.