Security — Аудит действий пользователя в shell (bash/sh), sudo
Ведение логов шелла пользователя root через связку auditd и pam
Для того чтобы включить ведение логов пользователя root через связку auditd и pam нужно добавить в файл /etc/pam.d/system-auth-ac строку.
Лог будет вестись в /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, в него добавляется строка следуещего вида
Данный вариант настройки определяет ведение лога шелла в /var/log/bash.log в виде
Лог по умолчанию будет вестись для каждого пользователя в системе. Следует обратить внимание что если пользователь сменит шелл на sh, то в логе зафиксируется только смена шелла, лог шелла запущенного внутри шелла вестись небудет.
Настройка ведения логов sudo
Для ведения лога команды sudo следует добавить в /etc/sudoers
Параметр log_year приводит к добавлению года в лог-файл, содержимое лога представлено в листинге
листинг /var/log/sudo.log
Для того чтобы включить ведение логов пользователя root через связку auditd и pam нужно добавить в файл /etc/pam.d/system-auth-ac строку.
session required pam_tty_audit.so disable=* enable=root
Лог будет вестись в /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
1 2 3 4 5 6 |
|
Данный способ фиксирует все нажатия пользователя на клавиатуре, что приводит к образованию небольшого мусора в в отчете. В частности при использовании midnight commander.
Также следует учесть что данный метод не фиксирует команды выбранные из истории шелла. Выглядеть это будет как показано в приведенном ниже листинге
1 2 3 4 5 |
TTY Report |
Данный момент следует учитывать при использовании данного метода. Но при всем этом данный способ ведет лог всей консоли.
листинг
1 2 3 4 5 6 7 8 9 |
TTY Report |
Из данного листинга видно что 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
__LAST_COMMAND="$(history 1)" |
Также следует внести изменения в файл /etc/rsyslog.conf, в него добавляется строка следуещего вида
local5.* /var/log/bash.log
Данный вариант настройки определяет ведение лога шелла в /var/log/bash.log в виде
1 2 3 4 5 6 7 8 |
Apr 11 10:59:25 zarin sirin: -- CMD -- /home/sirin sirin@zarin.expressweb[6503]: 228 |
Лог по умолчанию будет вестись для каждого пользователя в системе. Следует обратить внимание что если пользователь сменит шелл на sh, то в логе зафиксируется только смена шелла, лог шелла запущенного внутри шелла вестись небудет.
Настройка ведения логов sudo
Для ведения лога команды sudo следует добавить в /etc/sudoers
1 2 |
Defaults loglinelen=0 |
Параметр log_year приводит к добавлению года в лог-файл, содержимое лога представлено в листинге
листинг /var/log/sudo.log
1 2 3 4 |
Апр 11 12:14:55 : sirin : TTY=pts/4 ; PWD=/home/sirin ; USER=root ; COMMAND=/bin/nano |