Я хотел бы изменить настройки истории для всех пользователей в системах, которыми я управляю. Я хотел бы, чтобы он содержал информацию от соединительного терминала, как изwho
sysadmin:/ # who
sysadmin pts/0 Mar 26 07:11 (sysadmin.doofus.local)
В настоящее время я изменяю свою историю следующими способами. Я знаю, что многие из этих настроек были рассмотрены здесь несколько раз. Однако я давно вытащил этот код из « Рецептов системного администрирования Linux»: Джульетта Кемп .
shopt -s histappend
PROMPT_COMMAND='history -n;history -a'
HISTSIZE=100000
HISTFILESIZE=100000
HISTTIMEFORMAT="%m/%d/%y %T "
shopt -s histappend
устраняет проблему, когда у вас есть несколько открытых терминалов, информация может быть потеряна.
PROMPT_COMMAND='history -n;history -a'
расширяется, чтобы в режиме реального времени добавлять в историю несколько терминалов.
HISTSIZE=100000
HISTFILESIZE=100000
продлевает срок history
хранения
HISTTIMEFORMAT="%m/%d/%y %T
«Предисловие каждой строки истории с отметкой времени
Что вы обычно получаете с history
835 ls
836 cd ..
Мои измененные текущие history
результаты
5853 03/26/12 07:16:49 ls
5854 03/26/12 07:16:50 ll
Возвращение из history
я хотел бы видеть
5853 03/26/12 07:16:49 sysadmin.doofus.local ls
5854 03/26/12 07:16:50 sysadmin.doofus.local ll
001 03/26/12 05:11:29 demo_user.doofus.local cd
002 03/26/12 05:11:30 demo_user.doofus.local ll
Я не "женат", чтобы увидеть DNS
имя. Я бы хотел, чтобы он был там только в том случае, если он извлекает его из who
другого места, не выполняя поиск или запрос любого рода. Я был бы счастлив с IP-адресом.
002 03/26/12 05:11:30 192.168.0.2 ll
Почему? Я управляю несколькими системами с идентификатором пользователя, который совместно используют несколько пользователей одной группы для выполнения своих повседневных задач. Это позволило бы мне соотнести их реальное местоположение и фактического пользователя в организации с тем, что они делали в истории.
Я знаю, что это не оптимально, и хотел бы изменить его, но, когда вы находитесь на корабле размером с круизный лайнер, вы не пытаетесь сделать крутые повороты. (Примечание: когда вы делаете это, пассажиры пытаются выбросить вас за борт)
В любом случае, пока я не смогу перевести их на лучшее решение, мне бы хотелось иметь эту возможность отслеживания.
Кроме того, если у вас есть какие-либо рекомендации относительно того, что я в настоящее время использую для своих history
модификаций, я хотел бы услышать это.
Спасибо,
Редактировать: 1
Я не хочу запускать другие программы или настраивать что-либо дополнительно «в пределах разумного».
Я хочу добавить 0
накладные расходы, если я должен добавить, он должен быть маленьким.
Я действительно доверяю своим пользователям. Я просто хотел бы (если что-то случится) увидеть, кто из, скажем, 10 пользователей, вошедших в систему с одним и тем же пользователем: пароль сделал это. Или, возможно, это был не пользователь, он мог быть забыт cron
в системе, которая выполняет подключение как пользователь, чтобы что-то сделать. Или приложение Ex: BMC Control-M
подключается ssh
и выполняет задачи. Это не столько поиск "плохих пользователей", сколько возможность найти его с минимальными усилиями.
Изменить 2:
Системы работают на SLES и RHEL
/proc
/dev
и пользовательские/home
каталоги. Это добавляет накладные расходы. Принимая во внимание,history
что уже записывается, и информация об их соединении известна системе, соединяющей IP и т. Д. ... Эта информация, если она еще не доступна "статически", может быть установлена таким образом или сохранена в переменной или файле и введена вhistory
записи и снижение производительности будет очень маленьким или 0.auditd
. Я не уверен, что его журналы дадут вам достаточно информации. Сложность того, что вы хотите, заключается именно в том, почему общие учетные записи так осуждены.auditd
очень похоже, чтоinotify
вы должны сказать ему, что следить за изменениями. Отдельные файлы, каталоги и т. Д. Я не хочу переходить на этот уровень конфигурации. На самом деле (я делаю), но по сути дела это не волнует. Я долженpuppet
справиться с этим.auditd
поставляется с дополнительной нагрузкой и временем для настройки. Если учетная запись изменяет что-то, я все же хотел бы оглянуться назад в истории и посмотреть, кто или что входит в систему и пытается.PROMPT_COMMAND=
просто запускает обычные команды перед следующим приглашением, вы не могли бы написать функцию, вызывающую sed / awk, которая работает в последней строке файла истории, чтобы добавить информацию. затем вызвать эту функцию,PROMPT_COMMAND=
чтобы добавить данные? это было бы хакерски, но надо делать работу.Ответы:
По предложению Луи, мы можем немного больше работать с историей. Добавьте строку в системный RC-файл BASH, возможно, /etc/bash.bashrc.
Настройте ведение журнала для «local6» в системном журнале. Может быть, что-то вроде этого:
Перезапустите системный регистратор. Возможно, настроить ротацию файла журнала. Выйти; авторизоваться; и история теперь записывается в /var/log/commands.log в таком формате:
дата и время hostger logger: имя пользователя [audit_pid]: команда [return_val]
Это может быть улучшено по вкусу.
источник
Следующие параграфы описывают идею в целом и устарели в некоторых аспектах, но вы можете использовать, а затем использовать последние с этой страницы. Давайте используем большой файл ~ / .bash_history.archive (отдельно от HISTFILE = ~ / .bash_history). А затем при выходе из каждого сеанса bash добавляем в него новые строки истории.
Первая проблема с этим подходом была: как заставить bash вызывать этот скрипт при каждом выходе? Конечно, если вы выходите из него, набирая «выход», вы можете использовать псевдоним «выход», но для этого я использую комбинацию клавиш Ctrl-D, и я не смог найти способ переназначить его чему-либо, но не встроенную функцию выхода.
Итак, первая попытка была: запретить Ctrl-D путем
export IGNOREEOF=10
и определить двойную комбинацию Ctrl-X для вызова функции выхода.
Но правильный подход - использовать tramp выхода bash, который является идеальным решением, потому что он вызывается независимо от того, как вы выходите из bash: Ctrl-D, выход, закрытие окна xterm.
trap 'archive_history' EXIT
Следующим шагом является определение начальной строки в нашей bash_history, чтобы мы могли сохранять только новые строки и убедиться, что мы добавляем в файл истории.
Это все, что нам нужно при запуске bash - теперь мы знаем, с какой строки истории начинается текущая (свежая) история. Чтобы сохранить историю, добавьте следующий кусок в ваш ~ / .bashrc.
Файл ~ / .inputrc должен содержать следующие строки, чтобы переопределить ярлык выхода для Ctrl-x x. С первой попытки вы можете почувствовать, что это ужасный путь, но потом вы привыкнете - поверьте мне.
Кроме того, если ваш сеанс bash является сеансом входа в систему, и вы выходите, вызвав '
logout
', то вы можете добавить следующую строку в ваш~/.bash_logout
После того, как все упомянутые действия будут выполнены, вы можете найти свой
~/.bash_history.archive
файл, содержащий разделы, подобные этимкоторый в целом может быть прочитан как обычный файл истории, если вы хотите.
источник