Есть ли способ определить, какой пользователь выполнил команду в истории Bash?


1

Мы работаем на серверах CentOS, доступных через SSH более ста сотрудникам, каждый из которых имеет свой собственный логин. Выполнение обычной historyкоманды bash показывает все команды, выполняемые всеми сотрудниками, однако не указывает, каким сотрудником выполнялась команда. Возможно ли, чтобы история показывала не только команду bash, которая была запущена, но также и каким пользователем SSH она была запущена?


6
Откуда вы взяли, что historyкоманда bash показывает все команды, запущенные всеми пользователями в системе? Показывает только историю текущего пользователя.
Spiff

Если в одну и ту же учетную запись входит несколько человек, тривиальным решением является создание личной учетной записи для каждой. Если им нужно запустить что-то с определенными привилегиями, sudoучитывает это, а также реализует аудит, если вы этого хотите.
tripleee

Ответы:


1

Похоже, что вы хотите больше аудита в вашей системе в целом, однако, в отношении Bash и истории, вы можете включить отметку времени. Это в сочетании с последней командой и настраиваемым grep должно помочь определить, какой именно пользователь совершил преступление. э-э, команда.

  1. включить историю времени.

Со страницы GNU Bash:

HISTTIMEFORMAT

Если эта переменная установлена ​​и не равна нулю, ее значение используется в качестве строки формата для strftime для печати отметки времени, связанной с каждой записью истории, отображаемой встроенной историей. Если эта переменная установлена, отметки времени записываются в файл истории, поэтому они могут быть сохранены в сеансах оболочки. При этом используется символ комментария истории, чтобы отличать метки времени от других строк истории.

Справочник по форматированию строки времени

  1. Используйте последнюю команду

Последний покажет время входа / выхода пользователя. Это сузит ваш поиск до нескольких пользователей.

  1. grep конкретные пользователи, соответствующие выше для конкретной команды.

что-то вроде:

grep "command" /home/{user_a,user_b}/.history

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

  1. создать функцию Bash для выполнения всего вышеперечисленного

Создайте функцию histuser (), которая будет принимать один аргумент: имя команды, и выполните поиск выше, возвращая имя конкретного пользователя. Если вы хотите, чтобы это было сделано, напишите мне. Мне легко, но не дешево.


0

Вы можете попробовать это

cat /home/user_you_are_looking_for/.bash_history

3
конечно, если предположить, что они не
удалили

Это просто показывает историю bash для пользователя. Он не ищет команду. Вопрос заключается в следующем: «Возможно ли, чтобы история показывала не только команду bash, которая была запущена, но также и каким пользователем SSH она была запущена?»
JakeGould

0

Согласно этому ответу на сайте «Unix & Linux Stack Exchange», вы можете использовать getentдля прокрутки домашний каталог каждого пользователя и поиска команды / шаблона в этих выходных данных:

getent passwd |
cut -d : -f 6 |
sed 's:$:/.bash_history:' |
xargs -d '\n' grep -H -e "[command/pattern you are looking for]" 

Или вы можете использовать grepдля поиска по всей истории Bash, как это:

grep -e "[command/pattern you are looking for]" /home/*/.bash_history
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.