Наша небольшая компания работает с Ubuntu Server 11.10, к которой у нескольких людей есть доступ к SSH. Иногда используются и терминальные терминалы. Как мы можем локально регистрировать все команды Bash, а также отметку времени пользователя и времени?
Мы можем предположить, что никто не гнусен и активно пытается избежать регистрации, но мы по-прежнему предпочитаем, чтобы пользователи не иметь прямой доступ к записи в свои файлы журналов. Одновременные сеансы должны выполняться правильно.
Для оболочек BASH отредактируйте общесистемный файл конфигурации времени работы BASH:
sudo -e /etc/bash.bashrc
Добавить в конец этого файла:
export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'
Настроить регистрацию для " local6 "с новым файлом:
sudo -e /etc/rsyslog.d/bash.conf
И содержимое ...
local6.* /var/log/commands.log
Перезапустить rsyslog:
sudo service rsyslog restart
Выход из системы. Войдите! Voila!
Но я забыл о вращении журнала:
sudo -e /etc/logrotate.d/rsyslog
Существует список файлов журналов, которые вращаются одинаково ...
/var/log/mail.warn
/var/log/mail.err
[...]
/var/log/message
Итак, добавьте новый файл журнала bash-команд в этот список:
/var/log/commands.log
Сохранить.
В этом отношении может быть полезной система учета процессов, особенно пакет acct, который предоставляет команды lastcomm и ac.
Команды ac выписывают статистику о времени подключения пользователей в часах. Это время, в течение которого пользователь был подключен к системе, либо удаленно через SSH, либо через последовательный терминал, либо на консоли.
Последняя команда отображает информацию о ранее выполненных командах. Самые последние записи указаны в верхней части списка. Также отображается общее количество процессорного времени, которое каждый процесс использовал.
Старый учебник, который может быть полезен здесь:
Другие команды учета, такие как last и т. д., можно найти в этом учебнике:
http://www.techrepublic.com/article/system-accounting-in-linux/1053377
Здесь вы можете найти скрипт для регистрации всех команд bash / встроенных в текстовый файл или syslog-сервер без использования патча или специального исполняемого инструмента.
Очень просто развернуть, так как это простой сценарий оболочки, который нужно вызвать один раз при инициализации bash .
Это бесплатно, и я надеюсь, что это соответствует вашим потребностям.
Вы можете использовать snoopy.
Snoopy logger может хорошо подходить для вашей цели.
Раскрытие информации: я поддерживаю snoopy.
Чтобы следить за несколькими сеансами, не переписывая файл истории, вам нужно будет поместить «shopt -s histappend» в файл запуска Bash. См. Также этот вопрос по той же проблеме.
попробуйте это (приведенные выше решения не будут работать на 100% с bash 4.3):
export HISTTIMEFORMAT="%Y-%m-%d %T "
export PROMPT_COMMAND='trap "" 1 2 15; history -a >(tee -a ~/.bash_history | while read line; do if [[ $line =~ ^#[0-9]*$ ]]; then continue; fi; logger -p user.info -t "bash[$$]" "($USER) $line"; done); trap 1 2 15;'
это ведет к регистрации и предотвращает ведение журнала временных меток, которые используются для файла истории bash. ловушка необходима, так как bash будет посылать сигналы в «subjob» после нажатия strg + c несколько раз (проверено с bash 4.3). это заставит выйти из текущего пользователя (например, войти в систему с помощью sudo)
Вы также можете попробовать установить acct. Acct хранит подробный контрольный журнал о том, что делается в ваших Linux-системах.
sudo apt-get install acct