Як реєструвати всі команди Bash усіма користувачами на сервері?


21

Наша маленька компанія працює з Ubuntu Server 11.10, до якого пара людей має доступ до SSH. Іноді використовуються і фактичні термінали. Як ми можемо локально ввімкнути всі запущені Bash команди разом із печаткою користувача та часу?

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

Відповіді:


32

Для оболонок 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-command у цей список:

/var/log/commands.log

Зберегти.


Забув про обертання журналу, який я додав у відповідь.

1
Цей спосіб працює, але я міг би винайти метод навколо нього (можливо, з csh, .bash_logout). Я б пішов із рішенням Сабакона. Це були відмінні записи : linuxjournal.com/article/6144 та beginlinux.com/blog/2010/01/…

2
Я вважаю, що це може бути легко деактивоване користувачем шляхом простого скидання чи відміни PROMPT_COMMANDабо виконання до оболонки, що не базується.
Стефан Ласєвський

1
@Benubird, схоже, існує кілька заданих рівнів, 8 з них - локальний0-локальний7: en.wikipedia.org/wiki/Syslog . 0 означає надзвичайну ситуацію, 7 означає налагодження, а 6 - просто сором’язливий 7, "нормальних оперативних повідомлень".
munchybunch

1
@yukashima, тому що журнали можуть стати великими файлами, якщо їх не видалити, обертання означає обертати файли журналів і видаляти старіші, щоб журнали були меншими ...
Badr Elmers

4

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

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

Команда lastcomm відображає інформацію про виконані раніше команди. Останні записи наведені вгорі списку. Також відображається загальна кількість часу процесора, який використовував кожен процес.

Старий підручник, який може бути корисним, тут:

http://www.linuxjournal.com/article/6144?page=0,1

Інші команди бухгалтерського обліку, як останній тощо, можна знайти в цьому підручнику:

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


lastcomm є досить безглуздим як реєстратор команд. Він записує лише виконуваний файл, який був запущений. Аргументи, комутатори чи шляхи не реєструються.
Phil_1984_

3

Ви можете використовувати snoopy .

Snoopy реєстратор може добре відповідати вашим цілям. Він не призначений для неминучого рішення для ведення журналів, а корисним інструментом для старанних адміністраторів, які вважають за краще слідкувати за своїми діями.

Розкриття: Я супроводжувач снупи.


У відповідь надайте інструкції щодо встановлення та використання його.
муру

1
Детальна інструкція з установки розміщена на сторінці snoopy github, яка є головним ресурсом snoopy зараз: github.com/a2o/snoopy . Мені доводиться надавати інструкції з установки в інших місцях, оскільки основне місце розташування підтримується дизайном, а інші - ні. BTW Readme щойно оновлювався для більш структурованості.
Bostjan Skufca

1
Можливо, так. Але навіть без зведення кроків, необхідних для його використання, це відповідь лише за посиланням і, ймовірно, буде видалена.
муру

1
Ну, я дав покажчик на альтернативне і життєздатне рішення. Якщо це не все, про що йдеться на цьому веб-сайті, то він, безумовно, має бути видалений разом із моїм обліковим записом.
Bostjan Skufca

2
@BostjanSkufca не потрібно ображатися. Просто у справі обміну стеками є принаймні обґрунтовані відповіді. Якщо ви настільки рішуче проти додавання кроків, це ваше бажання. Залишився мій голос. Хтось, ймовірно, це викличе.
муру

3

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

Дуже просто розгортати, оскільки це простий скрипт оболонки, який потрібно викликати один раз при ініціалізації bash .

Це безкоштовно, і я сподіваюся, що він відповідає вашим потребам.


1
Це хороша відповідь, але бажано включати кроки та сценарій до основи відповіді, а не посилатися на ваш блог. Чи можете ви відредагувати свою відповідь, щоб включити її?
Том Броссман

2
Сайт наразі недоступний
Gaia

0

Щоб подбати про кілька сеансів, щоб не переписати файл історії, вам доведеться помістити "shopt -s histappend" у файл запуску Bash. Дивіться, також це питання з тієї ж проблеми.


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 буде надсилати сигнали до "підзадачі" після натискання strg + c кілька разів (перевірено з bash 4.3). це змусить вийти з поточного користувача (наприклад, увійшов за допомогою sudo)


0

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

sudo apt-get install acct
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.