immortalday 01.08.2010 22:17
Security — Аудит действий пользователя в shell (bash/sh), sudo
Ведение логов шелла пользователя root через связку auditd и pamДля того чтобы включить ведение логов пользователя root через связку auditd и pam нужно добавить в файл /etc/pam.d/system-auth-ac строку.
1 |
|
Лог будет вестись в /var/log/audit/audit.log Для просмотра логов можно использовать команду aureport --tty -ts today
Параметры ключа -ts следующие: now, recent, today, yesterday, this-week, week-ago, this-month, this-year
листинг команды aureport --tty -ts today
Данный способ фиксирует все нажатия пользователя на клавиатуре, что приводит к образованию небольшого мусора в в отчете. В частности при использовании midnight commander.
Также следует учесть что данный метод не фиксирует команды выбранные из истории шелла. Выглядеть это будет как показано в приведенном ниже листинге
Данный момент следует учитывать при использовании данного метода. Но при всем этом данный способ ведет лог всей консоли.
листинг
Из данного листинга видно что root вошел в шелл sh из шелла bash, просмотрел просмотрел полный список файлов в текущем каталоге, и перешел в каталог /media/sda2 и вышел из sh обратно в bash.
История сохраняемая в файл .bash_history не содержала бы истории пользователя после перехода его в шелл sh, а просто зафиксировала бы что он вошел в sh и все.
Ознакомится с документацией по pam_tty_audit.so можно через команду man pam_tty_audit.so
Ведение логов шелл пользователя через trap и rsyslog
Настройка в данном варианте будет выглядеть следующим образом.
В директорию /etc/profile.d/ надо добавить файл blog.sh, например вот так nano /etc/profile.d/blog.sh с содержимым из листинга
листинг blog.sh
Также следует внести изменения в файл /etc/rsyslog.conf, в него добавляется строка следуещего вида
1 |
|
Данный вариант настройки определяет ведение лога шелла в /var/log/bash.log в виде
1 |
Apr 11 10:59:25 zarin sirin: -- CMD -- /home/sirin [email protected]<6503>: 228
|
Лог по умолчанию будет вестись для каждого пользователя в системе. Следует обратить внимание что если пользователь сменит шелл на sh, то в логе зафиксируется только смена шелла, лог шелла запущенного внутри шелла вестись небудет.
Настройка ведения логов sudo
Для ведения лога команды sudo следует добавить в /etc/sudoers
1 |
|
Параметр log_year приводит к добавлению года в лог-файл, содержимое лога представлено в листинге
листинг /var/log/sudo.log
digiwhite 01.08.2010 22:25 #
+ 1 -
Вообще-то неплохо было бы убрать 95% поста под кат, чтобы не вываливалось это все на главную.
на панели форматирования есть кнопочка cut Ставишь курсор перед тем местом, с которого всё должно быть скрыто с главной и жмёшь cut.
Продолжу) Как время\возможность будет, работу еще никто не отменял. Кого что интересует?
хорошо)) от тематики ресурса отходить небуду)) про всякие AIX\Solaris\т.п. писать видимо тут не в тему будет.
Автор просто монстр - две статьи за день при температуре 40+ за бортом! Так держать!
В последнее время подобные фразы вызывают у меня желание убить сказавшего... Самара, +40, и еще будет +45
С нашей влажностью, жара в 35 которая почти месяц стояла... тут всех вымотала... ппц
Отмечу ещё один недостаток способа trap+syslog: неверное время команды в логах, отсутствие последней введённой команды вплоть до возможности не получить её в логах вообще(kill -9 $$). У вводящего команды также есть возможность начать команду с пробела, и тогда она не попадёт в хистори и следовательно в логи.
Пояснение насчёт времени:
время X - Yминут: логин на сервер(время записывается в логи)
время X: ввод команды 1 (в логи пишется команда из предыдущей сессии или ничего не пишется - команда history выдаст ошибку)
время X + Zминут: ввод команды 2 и запись в лог команды 1 с временем X+10минут.
Как следствие, время ввода команды 1 остаётся неизвестным.
Пояснение насчёт времени:
время X - Yминут: логин на сервер(время записывается в логи)
время X: ввод команды 1 (в логи пишется команда из предыдущей сессии или ничего не пишется - команда history выдаст ошибку)
время X + Zминут: ввод команды 2 и запись в лог команды 1 с временем X+10минут.
Как следствие, время ввода команды 1 остаётся неизвестным.