Регистрация команд терминала - PullRequest
2 голосов
/ 07 декабря 2008

Есть ли способ регистрировать (/ var / log) команды, выполняемые пользователями в оболочке Unix?

Ответы [ 3 ]

6 голосов
/ 07 декабря 2008

Предполагая, что вы делаете это в целях безопасности, взгляните на учет процессов. Вы не сказали, какой вариант UNIX вы используете, но для Linux посмотрите на http://www.gnu.org/software/acct/ Остерегайтесь того, что вы сгенерируете много данных, поскольку учет процессов записывает данные о каждой команде, выполняемой во всей системе (это особенность ядра). Возможно, в вашем дистрибутиве уже есть утилиты; в Debian проверьте пакет 'acct'.

Если вы просто пытаетесь записать, что вы сделали, чтобы вы могли вернуться и посмотреть на это позже, сценарий (как в другом ответе) или экран (с -L) предоставят лучшее решение. Однако они не будут работать для аудита безопасности, потому что обходить их тривиально: просто запустите сценарий оболочки. Кроме того, редактирование строк создает беспорядок в файлах. Приложения Curses (например, текстовый редактор) еще хуже.

Кроме того, если вы заставляете своих пользователей, например, с помощью сценария, вы можете получить информацию (например, сообщения электронной почты), которую вы можете перехватывать незаконно.

4 голосов
/ 07 декабря 2008

Процесс учета - это путь, несмотря на то, что он занимает много места на диске. Это не то, что я бы оставил запущенным, если у вас нет очень грубого окна, но это очень полезно для решения проблем, поскольку он в основном отслеживает каждый процесс, утверждая, что более простые инструменты «снимок пс» не могут соответствовать.

Вы в основном включаете его с помощью accton /var/account/pacct, а затем ядро ​​записывает детали каждого процесса, который завершается, включая:

  • имя процесса (к сожалению, не аргументы).
  • время начала.
  • прошедшего времени.
  • время процессора пользователя и системы.
  • код выхода.
  • память, ввод-вывод, статистика неисправностей и подкачки.
  • идентификатор процесса.
  • идентификатор родительского процесса.

и несколько других вещей.

Вы отключили его с голым accton, так что все вы, люди, которые смеялись над Windows за использование кнопки Start для выключения, ХАХ !! : -)

Существует два варианта записей, которые могут быть зарегистрированы: v1 и v3 - убедитесь, что вы используете новейшее программное обеспечение для учета процессов и записи v3, поскольку они содержат более полезную информацию. Файл /usr/include/linux/acct.h показывает, что вы можете получить оттуда.

Все записи имеют фиксированный размер (независимо от версии) и просты в обработке.

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

Следует обратить внимание на поля comp_t - на самом деле это странный тип экспонента / мантисса для хранения большого диапазона значений в 16 битах - алгоритм довольно прост для превращения его в long:

comp_t ct = ?;
long val = (ct & 0x1fff) << (((ct >> 13) & 0x7) * 3);

Другое дело, что некоторые значения указываются в тактах, а не в секундах, поэтому вам нужно разделить на значение, возвращаемое sysconf (_SC_CLK_TCK).

0 голосов
/ 07 декабря 2008

тупая идея с макушки моей головы:

script скопирует сеанс в файл. Вы можете отправить его в именованный канал, который читается процессом регистрации - единственное, вы получите выходные данные и команды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...