Вопрос или проблема
Я знаю, что команда script
может использоваться для записи всего ввода с клавиатуры и вывода на экран в файл, но это нужно вызывать каждый раз при начале сеанса терминала. Я храню версии своих файлов .bash_history с отметками времени, чтобы старые команды не пропали после достижения $HISTSIZE. Моя команда $HISTFILE в .bashrc выглядит как HISTFILE=~/.bash_history_$(date '+%Y%m%d_%H_%M_%S_%N').txt
. Это удовлетворяет мою необходимость создавать журналы выполненных команд, но не записывает вывод в файл. Есть ли что-то, что я могу добавить в .bashrc или .profile, чтобы записывать весь ввод stdin и вывод stdout & stderr в файл с отметкой времени? Это было бы удобно для мониторинга активности пользователей, но мне это нужно просто для ссылки в будущем.
РЕДАКТИРОВАНИЕ:
Я обнаружил, что если я помещу
script /ramdisk/consoleOutput_$(whoami)_$(date +'%Y_%m_%d_%H_%M_%S_%N').txt ; exit
в конец ~/.profile, для тестового пользователя это будет работать так, как мне нужно.
Дополнительный ;exit
после команды script
завершает сеанс терминала. Набирая “exit”, когда пользователь вошел в систему, завершает сеанс script
. Когда он выходит из ~/.profile, дополнительный “exit” затем завершает сеанс SSH/терминала. Я планирую создать дополнительную функциональность, которая будет chown
файл на root и chmod 600
, чтобы только root мог его читать. Затем он будет перемещен в безопасное место.
Более того, цветовая разметка видна с помощью cat
и more
. Открытие в редакторе показывает управляющие символы, использованные для генерации цвета. Меня это устраивает.
Если ваша цель – мониторинг системы, вам нужен pam_tty_audit
. Как следует из названия, pam_tty_audit
является pam модулем, который при правильной конфигурации вызывается всякий раз, когда пользователь открывает сеанс (и получает TTY). Модуль записывает весь ввод и вывод и отправляет все, что он записывает, демону auditd. Вы можете затем выполнять запросы к демону auditd для просмотра журналов.
Red Hat предоставляет отличный Руководство по безопасности, чтобы начать работу с pam_tty_audit
, Конфигурирование PAM для аудита.
Для дистрибутивов, не основанных на RHEL или Fedora, руководство все еще работает, но может потребовать небольших корректировок для имен файлов в /etc/pam.d/
.
Обратите внимание, что это не совсем надежно. Есть способы выполнения команд без TTY. Например, при подключении по ssh вы можете сделать ssh foo.example.com bash -i
, и поскольку была указана команда, TTY не выделяется. Хотя есть вещи, которые вы можете сделать, чтобы предотвратить это.
Также нужно убедиться, что доступ к журналу защищен. pam_tty_audit
записывает ВСЮ активность TTY, это включает в себя пароли, которые вы вводите.
Если вы действительно хотите, вы могли бы создать программу (или shell-скрипт), которая вызывает script
, записывая в файл “typescript” с отметкой времени (в свою очередь вызывая вашу настоящую оболочку), и сделать эту программу вашей оболочкой по умолчанию в /etc/passwd
.
Есть несколько подводных камней:
- возможно, вам придется добавить эту программу в
/etc/shells
- делая это, устанавливается переменная окружения
SHELL
, которая используется различным образом. Переопределите это, чтобы избежать зацикливания (и других неправильных действий):
#!/bin/sh SHELL=/bin/bash export SHELL script -c "$SHELL" $HOME/consoleOutput_$(whoami)_$(date +'%Y_%m_%d_%H_%M_%S_%N').txt
Ответ или решение
Запись всех входных и выходных данных терминала в локальный файл по умолчанию для каждой сессии – основная задача, состоящая из нескольких этапов и возможных решений. Вы уже указали, что команда script
позволяет делать это, но ее необходимо запускать вручную при каждом открытии терминала. Давайте рассмотрим более автоматизированные решения, включающие редактирование конфигурационных файлов и использование модуля PAM для аудита.
1. Использование команды script
Вы правильно отметили, что команда script
может быть использована для записи вводимых данных и вывода на экран. Для автоматизации процесса можно добавить выполнение этой команды в файл конфигурации вашей оболочки, например, в ~/.bashrc
или ~/.profile
.
Пример записи в .profile
:
# Записать ввод и вывод в файл
script -q ~/consoleOutput_$(whoami)_$(date +'%Y_%m_%d_%H_%M_%S_%N').txt
На этом этапе важно учесть, что если вы добавите эту команду в .profile
, то при выходе из сессии тоже будет завершаться запись. Чтобы избежать некорректного поведения, можно обернуть команду в условие, проверяющее, не является ли оно интерактивным сеансом.
2. Настройка PAM с использованием pam_tty_audit
Альтернативным и более безопасным подходом является использование модуля PAM pam_tty_audit
. Этот модуль автоматически записывает все действия на TTY, включая ввод и вывод команд, в отдельные файлы. Чтобы настроить pam_tty_audit
, выполните следующие шаги:
-
Убедитесь, что модуль установлен. В большинстве дистрибутивов его можно найти в стандартных репозиториях.
-
Откройте файл конфигурации PAM для вашей службы, например
/etc/pam.d/common-session
(или соответствующий файл для вашей системы). -
Добавьте следующую строку:
session required pam_tty_audit.so
-
После этого убедитесь, что доступ к логам ограничен. Модуль будет записывать все действия в системные логи, которые могут содержать конфиденциальные данные.
3. Создание собственного исполняемого скрипта
Если вам нужно более сложное решение, вы можете создать собственный скрипт, который будет вызывать script
и затем запускать вашу оболочку. Этот скрипт можно установить как основной оболочкой пользователя:
#!/bin/sh
SHELL=/bin/bash
export SHELL
script -q -c "$SHELL" "$HOME/consoleOutput_$(whoami)_$(date +'%Y_%m_%d_%H_%M_%S_%N').txt"
- Сохраните этот скрипт, например, как
start_session.sh
. - Измените права доступа:
chmod +x start_session.sh
. - Добавьте путь к этому скрипту в
/etc/shells
. - Измените оболочку пользователя в
/etc/passwd
.
Заключение
Каждый из предложенных подходов имеет свои плюсы и минусы. Использование script
легко реализуется и может быть настроено под конкретные нужды пользователя. Однако он требует дополнительных действий для автоматизации. В то время как pam_tty_audit
позволяет лучше контролировать и отслеживать действия, его настройка требует больших усилий и обеспечения безопасности, поскольку он может записывать чувствительные данные.
Выбор подхода зависит от ваших конкретных требований и уровня доступа к системе. Надеюсь, это руководство поможет вам создать надежный метод записи активности терминала.