как увидеть историю обычного пользователя из root

Вопрос или проблема

Если я вошёл в систему как root, как я смогу увидеть историю других пользователей. Я пытался использовать su -c, но команда history не возвращает ничего. Например, если я выполню следующую команду от имени root:

root@server:#su -c 'who am i' user1

user1 pts/0        2019-08-12 10:30

root@server:#su -c 'history' user1

эта команда ничего не возвращает.

Я хочу увидеть временные метки в истории пользователя, что невозможно, просто просмотрев /home/user1/.bash_history, и именно поэтому я хочу использовать команду history, чтобы получить вывод с временными метками.

Единственное место, где bash по умолчанию хранит историю команд, – это .bash_history, и в этом файле временные метки не сохраняются. Когда история загружается из файла истории, она загружается с временной меткой, когда оболочка была запущена.

Я не совсем уверен, почему выполнение history из su не работает, но это не имеет значения. Вы не увидите ничего, что бы вы не могли получить, просмотрев файл истории пользователя напрямую.

Я хочу увидеть временные метки в истории пользователя, что невозможно, просто просмотрев /home/user1/.bash_history

Временные метки могут или не могут быть в этом файле. Больше нигде (если пользователь намеренно не использовал другой файл; я предполагаю, вы определили правильный файл). Из man 1 bash:

HISTTIMEFORMAT
Если эта переменная установлена и не пуста, её значение используется как строка формата для strftime(3), чтобы распечатать временную метку, связанную с каждой записью истории, отображаемой встроенной командой history. Если эта переменная установлена, временные метки записываются в файл истории, так что они могут сохраняться между сеансами оболочки. Это использует символ комментария истории для различения временных меток от других строк истории.

Если user1 имел переменную, установленную и не пустую (например, HISTTIMEFORMAT="%F %T: "), записи в /home/user1/.bash_history выглядели бы так:

#1568346641
ls -hls /

где число 1568346641 – это “секунды с 1970-01-01 00:00:00 UTC” (как в date +%s, см. man 1 date). Это те временные метки, которые вы ищете. Если в файле нет таких записей, то уже слишком поздно: информация о временной метке не была сохранена, она потеряна.


На практике вы можете выполнить следующее:

# как root
cp /home/user1/.bash_history /root/user1_history
chmod -w /root/user1_history
HISTFILE="/root/user1_history"
HISTTIMEFORMAT="%F %T: "
history -c
history -r
 history | less

(Последняя команда начинается с пробела, поэтому её не сохранят в текущей истории, которую вы собираетесь увидеть).

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


Обратите внимание, что /home/user1/.bash_history не является надежным способом увидеть, что делал пользователь. Пользователь мог:

  • использовать другую оболочку,
  • использовать другой файл,
  • решить не сохранять файл,
  • заставить оболочку не запоминать определенные команды,
  • подделать “контрафактный” файл.

В зависимости от того, что вы хотите найти, возможно, вам повезет с /var/log/auth.log (Debian и подобные) или /var/log/secure (некоторые другие дистрибутивы, как я полагаю). В моем Debian я могу видеть в логах, кто (и когда) запускал sudo vipw или sudo bash, но я не могу видеть команды, которые они вызвали в оболочке, запущенной с помощью sudo bash. Есть решения, которые могут помочь (например, auditd), но их нужно настраивать заранее.

history – это встроенная команда bash, которая может извлекать:

  • команды, выданные в этой самой сессии bash (так что для недавних команд её нужно запускать из процесса оболочки, который выдал команды).
  • команды, выданные в предыдущих, завершенных сеансах, с использованием файла ~/.bash_history. Это предполагает, что эти команды были сохранены в истории (но это можно отключить, не устанавливая переменную HISTFILE(*)). Кроме того, насколько я знаю, история текущей сессии добавляется в файл истории только когда оболочка завершается.

Другими словами, просмотр файла истории дает вам возможность увидеть команды, выданные в относительно далеком прошлом, и вы не можете увидеть команды, выданные в текущей работающей сессии.

(*) На практике это не сильно ограничивает, большинство запросов на команды сделаны в текущей сессии.

Ответ или решение

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

1. Понимание механизма хранения истории

Bash, по умолчанию, сохраняет историю выполненных команд в файле ~/.bash_history для каждого пользователя. Однако этот файл не содержит временных меток по умолчанию. Для того чтобы хранить временные метки команд в истории, необходимо установить переменную окружения HISTTIMEFORMAT.

Пример установки переменной:

export HISTTIMEFORMAT="%F %T: "

При активированной переменной, временные метки будут добавляться в файл истории в виде строк, начинающихся с символа решетки (#).

2. Просмотр истории других пользователей с временными метками

Попробуйте выполнить следующие шаги:

  1. Скопируйте файл истории пользователя:

    cp /home/user1/.bash_history /root/user1_history
  2. Установите права, чтобы файл не мог быть изменен:

    chmod -w /root/user1_history
  3. Установите переменную HISTFILE и HISTTIMEFORMAT:

    HISTFILE="/root/user1_history"
    HISTTIMEFORMAT="%F %T: "
  4. Отключите текущую историю и загрузите вашу сохраненную историю:

    history -c
    history -r
  5. Теперь вы можете просмотреть историю с человечными временными метками:

    history | less

3. Ограничения и альтернативы

Заметьте, что:

  • История интерактивных сессий: Команда history работает только на текущем сеансе Bash. Если пользователь все еще активен, вы не сможете видеть его команды.
  • Файлы истории могут отсутствовать: Пользователь мог выбрать не сохранять историю (например, сбросив переменную HISTFILE).
  • Различные оболочки: Если пользователь использует другую оболочку (например, zsh или fish), команда history не подойдет.
  • Логи системы: Для внешнего мониторинга операций пользователей вы можете просмотреть системные логи, такие как /var/log/auth.log или /var/log/secure, чтобы увидеть, какие команды были выполнены с правами superuser.

4. Установка аудита

Для более надежной регистрации команд и действий пользователей, рекомендуется рассмотреть применение инструмента auditd. Это позволяет отслеживать действия по заданным правилам и предоставляет детализированные отчеты о выполненных пользователем командах.

Заключение

Просмотр истории команд пользователей из-под root является сложной задачей, учитывающей множество факторов. Важно помнить о правилах конфиденциальности и законодательства. Используйте предложенные методы, чтобы обеспечить выполнение задач, связанных с безопасностью в вашей среде.

Оцените материал
Добавить комментарий

Капча загружается...