Проблема

Необходимо установить, какие команды вводились в терминале (bash/zsh/Cmd/PowerShell) — для форензики инцидента или аудита действий пользователя.

Причины

1. Стандартная история оболочки (`~/.bash_history`, `~/.zsh_history`) перезаписывается при превышении лимита (`HISTSIZE`).
2. Пользователь намеренно очистил историю (`history -c` / `cat /dev/null > ~/.bash_history`).
3. Для Windows Cmd: история хранится только в текущей сессии (F7 / `doskey /history`), после закрытия теряется. PowerShell сохраняет в файл `(Get-PSReadlineOption).HistorySavePath`.
4. Нет централизованного логирования — без syslog/auditd/Event Tracing восстановить команды post factum практически невозможно.

Решение


#### 1. Просмотр истории команд в терминале Linux (активная сессия)
Если сессия ещё открыта — используйте встроенную команду:
bash
history

Для форензики лучше выгрузить в файл:
bash
history > /tmp/history_export_$(date +%Y%m%d_%H%M).txt


#### 2. Восстановление истории команд из файла (даже после перезагрузки)
- Bash: `cat ~/.bash_history`
Если файл повреждён или частично перезаписан — попробуйте восстановить удалённые записи через `strings`:
bash
strings ~/.bash_history | grep -E '^(sudo|cd|ls|rm|nmap|ssh)'

- Zsh: `cat ~/.zsh_history`
(файл может быть бинарным — используйте `strings`)

#### 3. Просмотр истории PowerShell (Windows)
powershell
Get-History | Format-Table -AutoSize

Путь к файлу сохранённой истории (все сессии):
powershell
Get-Content (Get-PSReadlineOption).HistorySavePath


#### 4. Как увидеть команды в терминале, если история очищена (форензика)
- auditd (Linux):
bash
ausearch -i -k terminal_history | grep -E 'comm=|exe=' 

(требуется заранее настроенное правило audit.rules для отслеживания execve)
- Sysmon (Windows): Событие EventID 1 (Process Creation) — покажет командную строку любой запущенной утилиты.
- Журнал sudo:
bash
cat /var/log/auth.log | grep 'COMMAND='

(на CentOS/RHEL — `/var/log/secure`)

#### 5. Легальный мониторинг на будущее
Если нужно в пентесте или операционной работе постоянно логировать все команды без установки стороннего ПО:
bash
<h2 id="bash">bash</h2>
cat /etc/profile.d/secure_history.sh
export HISTTIMEFORMAT="%F %T "
export HISTSIZE=10000
export HISTFILESIZE=20000
export HISTFILE="/var/log/secure_bash_history/$(whoami)_history"
EOF

powershell
<h2 id="powershell">PowerShell</h2>
Set-PSReadlineOption -HistorySavePath "C:\Logs\PowerShellHistory_$env:USERNAME.txt"


Важно

- Не пытайтесь читать `/proc//fd/0` у чужого процесса — это может быть расценено как нарушение ст. 272 УК РФ (неправомерный доступ к компьютерной информации).
- Для анализа телеграм-бота или веб-шелла — смотрите не терминал, а логи веб-сервера (access_log + error_log), так как команды передаются через HTTP.