TGViewer
ServerAdmin.ru ServerAdmin.ru @srv_admin · 32.6K subscribers
Post #5878 1.67K
На днях задачка небольшая была по сохранению команд пользователя в консоли. В ней ничего особенного, раньше делал подобное, но всё равно запишу по горячим следам, чтобы не забыть. Немного подработал решение.

Есть одиночная VPS, где крутятся сайты. Доступ к исходникам по SFTP. Разработчики попросили сделать SSH доступ. На всякий случай решил добавить сохранение набранных консольных команд. Решений этой задачи много. Я в своё время делал подборку.

Мне не захотелось ставить какие-то сторонние программы. Централизованной системы управления нет. Поэтому рассматривал 2 варианта, которые я уже раньше использовал:

▪️Через настройку PROMPT_COMMAND
▪️С помощью auditd

Последнее более целостное и надёжное решение. Но лично мне не нравится смотреть логи auditd. Очень ненаглядно, много лишнего. Постоянно вспоминать надо, как сделать выборку, чтобы что-то найти. Решил в итоге использовать первый вариант.

Для этого пользователю, чьи команды мы будем сохранять, добавляем в ~/.bashrc:

export PROMPT_COMMAND='EX_CODE=$?; logger -p local6.debug "{\"user\":\"$(whoami)\",\"path\":\"$(pwd)\",\"command\":\"$(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//")\", \"status\":\"$EX_CODE\"}";'


Тут всё просто. Используем возможности bash в виде PROMPT_COMMAND. Значение этой переменной выполняется каждый раз перед появлением приглашения на ввод команды в оболочке. То есть вы ввели какую-то команду, она выполнилась, отработала команда в PROMPT_COMMAND и снова появилось приглашение на ввод. В этот момент мы просто используя logger записываем в системный лог некоторые переменные и очищенный вывод команды history 1, которая выводит последнюю введённую команду. В итоге получаем то, что надо.

Выведем эти логи в отдельный лог-файл. Для этого добавляем конфигурацию в rsyslog. Создаём файл /etc/rsyslog.d/command-audit.conf:

# cat > /etc/rsyslog.d/command-audit.conf <<'EOF'
local6.debug  /var/log/command-audit.log
EOF

Перезапускаем rsyslog:

# systemctl restart rsyslog

Заходим пользователем по SSH, что-то делаем в консоли и смотрим результат в файле /var/log/command-audit.log:

2026-10-01T20:03:43.038407+03:00 debian13 devbitrix01: {"user":"devbitrix01","path":"/var/www","command":"free -m", "status":"0"}
2026-10-01T20:03:47.192911+03:00 debian13 devbitrix01: {"user":"devbitrix01","path":"/var/www","command":"htop", "status":"0"}


Мне нравится такой формат - просто и наглядно. Ещё и в json сразу обёрнут. У обычного пользователя доступа к этому логу нет, изменить он его не сможет. При желании этот лог легко отправить в централизованное хранилище с помощью любого сборщика логов (vector, alloy и т.д.), если оно используется.

Ничего дополнительно на сервер ставить не надо, что очень удобно. Я не люблю донастраивать и что-то менять в уже введённых в эксплуатацию серверах. Обычно все подобные вещи делаю сразу в момент настройки, чтобы можно было всё проверить.

☝️ Важно понимать, что этот аудит легко отключить самим пользователем, или просто обойти. Он банально может обнулить переменную PROMPT_COMMAND. То есть это не инструмент повышения безопасности, а скорее просто модернизированная версия history для удобства пользователей, особенно если их несколько и администратора.

❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.

———
ServerAdmin: 📱 Telegram | 🌐 Сайт | 📲 MAX 😩

#ssh #webserver
  • 👍 38
More from @srv_admin
  1. Oct 1, 2026Делал на днях некоторые покупки компьютерных комплектующих и периферии. От новых цен натур…
  2. Oct 1, 2026Вся правда о безопасности контейнеров 8 октября в 11:00 приходите на стрим «Лаборатории Ка…
  3. Oct 1, 2026В сентябре постоянно то тут, то там гремели новости об ужасных уязвимостях Mikrotik. CVE с…
  4. Sep 30, 2026Post #5872
  5. Sep 29, 2026Что крупные заказчики проверяют на пилоте NGFW Чем крупнее сеть, тем выше требования к NGF…
  6. Sep 28, 2026Компания Microsoft давно анонсировала возврат настройки по управлению размещением панели з…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →