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

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

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

19
задан 7 January 2012 в 21:19

7 ответов

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

Сохранить.

27
ответ дан 25 May 2018 в 15:23
  • 1
    Забыл о вращении журнала, который я добавил к ответу. – user 7 January 2012 в 22:13
  • 2
    Этот способ работает, но я мог бы придумать метод вокруг него (возможно, с csh, .bash_logout). Я бы пошел с решением Сабакона. Это были отличные чтения: linuxjournal.com/article/6144 и beginlinux.com/blog/2010/01/… – user 8 January 2012 в 08:19
  • 3
    Я считаю, что это может быть легко отключено пользователем, просто сбросив или отменив PROMPT_COMMAND или выполнив команду в оболочку non-bash. – Stefan Lasiewski 10 December 2013 в 00:19
  • 4
    Есть ли что-то особенное в local6? Что оно относится к? – Benubird 25 February 2014 в 17:26
  • 5
    @Benubird похоже, что есть несколько предустановленных уровней объекта, из которых 8 являются local0-local7: en.wikipedia.org/wiki/Syslog . 0 означает «аварийный», 7 означает «отладка», а «6» просто застенчиво 7 «нормальных рабочих сообщений». – munchybunch 16 May 2014 в 10:16

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

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

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

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

acct

Другие команды учета, такие как last и т. д., можно найти в этом учебнике:

http://www.techrepublic.com/article/system-accounting-in-linux/1053377

4
ответ дан 25 May 2018 в 15:23
  • 1
    lastcomm довольно бессмысленна как командный регистратор. Он записывает только исполняемый файл, который был запущен. Никакие аргументы, переключатели или пути не регистрируются. – Phil_1984_ 15 October 2016 в 22:25

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

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

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

3
ответ дан 25 May 2018 в 15:23
  • 1
    Это хороший ответ, но предпочтительнее включать шаги и сценарий в текст ответа, вместо того, чтобы ссылаться на ваш блог. Можете ли вы изменить свой ответ, чтобы включить это? – Tom Brossman 22 September 2012 в 21:28
  • 2
    Сайт недоступен – Gaia 12 May 2018 в 21:47

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

Snoopy logger может хорошо подходить для вашей цели.

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

2
ответ дан 25 May 2018 в 15:23
  • 1
    Пожалуйста, предоставьте инструкции по установке и использованию в ответе. – muru 6 November 2014 в 04:45
  • 2
    Подробные инструкции по установке доступны на странице snoopy github, которая сейчас является основным ресурсом snoopy: github.com/a2o/snoopy . Я снова предоставляю инструкции по установке в других местах, поскольку основное местоположение поддерживается по дизайну, а другие нет. BTW Readme был обновлен, чтобы быть более структурированным. – Bostjan Skufca 6 November 2014 в 05:31
  • 3
    Может быть и так. Но даже без краткого изложения шагов, необходимых для использования этого, это ответ только для ссылок и, вероятно, будет удален. – muru 6 November 2014 в 05:35
  • 4
    Ну, я представил указатель на альтернативное и жизнеспособное решение. Если это не то, о чем этот сайт, то он обязательно должен быть удален вместе с моей учетной записью. – Bostjan Skufca 6 November 2014 в 05:38
  • 5
    @BostjanSkufca не нужно обижаться. Это всего лишь вещь в Stack Exchange, которая имеет как минимум разумные автономные ответы. Если вы так категорически против того, чтобы добавлять шаги, это ваше желание. Мой downvote остается. Кто-то, вероятно, поддержит это. – muru 6 November 2014 в 05:52

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

0
ответ дан 25 May 2018 в 15:23

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

0
ответ дан 25 May 2018 в 15:23

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

sudo apt-get install acct
0
ответ дан 25 May 2018 в 15:23

Другие вопросы по тегам:

Похожие вопросы: