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

8

Существует ли элегантный способ записи всех команд, представленных во всех оболочках на компьютере? Это в контексте нечасто используемого сервера Ubuntu, единственным пользователем которого я являюсь. (Существует несколько учетных записей пользователей, используемых автоматизированными системами.)

Мне бы хотелось, чтобы это было ненавязчивым и с минимальными накладными расходами, поэтому мне бы очень понравилось, если бы существовал простой метод, включающий что-то подобное script.

jl6
источник

Ответы:

9

С незапамятных времен (фактически начиная с того времени, когда людям приходилось платить реальные деньги за использованный ими компьютерный цикл), в Unix и его клонах была acctвстроена система, называемая Process Accounting ( ). Это позволило системным администраторам точно знать, что делали их пользователи, и поэтому могли выставить им счет соответственно.

В acctобъектах все еще существуют в большинстве систем Unix и Linux до сих пор.

Этот сайт: http://www.cyberciti.biz/tips/howto-log-user-activity-using-process-accounting.html рассказывает, как его включить.

Majenko
источник
Может ли это также использоваться для регистрации того, какой пользователь выполняет sudo и su, а какие из команд root впоследствии?
Даниэль Бек
Я считаю, что он регистрирует каждый запуск команды, вводимый пользователем, tty и т. Д. Вы можете сопоставить команды на tty с пользователем, который вошел в этот tty, чтобы отследить, через каких пользователей они проходили или через sudo.
Majenko
Спасибо, я совершенно не знал об этой функции. Быстрое чтение справочных страниц показывает, что ведение журнала продолжается до тех пор, пока не будет достигнуто условие нехватки дискового пространства - следовательно, возможно, потребуется сценарий logrotate.
JL6
я думал, что процесс учета только что зарегистрировал, какая программа работала, а не команда со всеми ее аргументами?
Sirex
2

Вот очень хороший и быстрый способ регистрации всех команд оболочки :

Шаг 1:

Используйте ваш любимый текстовый редактор, чтобы открыть / etc / bashrc и добавить следующую строку в конце:

export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'

Шаг 2:

Задайте системному журналу прерывание local6 в файл журнала, добавив следующую строку в файл /etc/syslog.conf:

local6.*                /var/log/cmdlog.log

[См. Полный пост в блоге здесь]

плачь волк
источник
Я предупреждаю, что пользователь мог бы отключить это, сбрасывая переменную, и, поскольку она выполняется «перед выдачей каждой первичной подсказки», этот факт не будет зарегистрирован.
dmckee --- котенок экс-модератора
2

Вы могли бы использовать Snoopy .

Его очень просто установить и удалить (модуль ядра или исправления не требуются). Обратите внимание, что это неправильное решение для аудита, и его легко можно обойти.

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

Бостян Скуфча
источник
Bostjan Skufca также предоставил дополнительные инструкции по установке Snoopy в Ubuntu здесь, а также в дополнительном комментарии в той же теме здесь .
Карел
+1 для снупи; это обеспечивает хороший журнал команды и аргументов в /var/log/auth.log
Дэвид Гудвин