Как регистрировать все команды Bash всеми пользователями на сервере?

19

Наша небольшая компания работает с Ubuntu Server 11.10, к которой у нескольких людей есть доступ к SSH. Иногда используются и терминальные терминалы. Как мы можем локально регистрировать все команды Bash, вместе с меткой пользователя и времени?

Мы можем предположить, что никто не гнусен и активно пытается избежать регистрации, но мы по-прежнему предпочитаем, чтобы пользователи не имели прямого доступа к записи в свои файлы журналов. Одновременные сеансы должны выполняться правильно.

    
задан Tin 07.01.2012 в 16:19
источник

7 ответов

27

Для оболочек 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

Сохранить.

    
ответ дан user8290 07.01.2012 в 16:45
источник
4

В этом отношении может быть полезной система учета процессов, в частности пакет acct , который предоставляет команды lastcomm и ac.

Команды ac распечатывают статистику о времени подключения пользователей в часах. Это время, в течение которого пользователь был подключен к системе, либо удаленно через SSH, либо через последовательный терминал, либо на консоли.

Последняя команда отображает информацию о ранее выполненных командах. Самые последние записи указаны в верхней части списка. Также отображается общее количество процессорного времени, которое каждый процесс использовал.

Старый учебник, который может быть полезен здесь:

Ссылка

В этом учебнике можно найти другие команды учета, такие как последние и т. д.:

Ссылка

    
ответ дан Sabacon 07.01.2012 в 18:17
3

Вы можете найти здесь скрипт для регистрации всех bash / встроенные в текстовый файл или сервер syslog без использования патча или специального исполняемого файла.

Очень простое развертывание, так как это простой сценарий оболочки, который нужно вызвать один раз при инициализации bash .

Это бесплатно, и я надеюсь, что это соответствует вашим потребностям.

    
ответ дан Francois Scheurer 13.09.2012 в 13:35
1

Вы можете использовать snoopy .

Snoopy logger может хорошо подходить для вашей цели. Он не предназначен для того, чтобы быть неизбежным решением каротажа, а скорее полезным инструментом для добросовестных администраторов, которые предпочитают отслеживать свои собственные действия.

Раскрытие информации: я поддерживаю snoopy.

    
ответ дан Bostjan Skufca 06.11.2014 в 00:15
0

Чтобы позаботиться о нескольких сеансах, не переписывая файл истории, вам нужно будет положить «shopt -s histappend» в файл запуска Bash. См. Также этот вопрос по той же проблеме.

    
ответ дан pdp 05.03.2014 в 16:28
0

попробуйте это (приведенные выше решения не будут работать на 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)

    
ответ дан Hans-Joachim Kliemeck 12.10.2014 в 23:26
0

Вы также можете попробовать установить acct. Acct сохраняет подробный контрольный журнал того, что делается в ваших Linux-системах.

sudo apt-get install acct
    
ответ дан user571354 08.08.2016 в 02:01