Как мне по умолчанию записывать весь ввод и вывод терминала в локальный файл для каждой сессии?

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

Я знаю, что команда 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, выполните следующие шаги:

  1. Убедитесь, что модуль установлен. В большинстве дистрибутивов его можно найти в стандартных репозиториях.

  2. Откройте файл конфигурации PAM для вашей службы, например /etc/pam.d/common-session (или соответствующий файл для вашей системы).

  3. Добавьте следующую строку:

    session required pam_tty_audit.so
  4. После этого убедитесь, что доступ к логам ограничен. Модуль будет записывать все действия в системные логи, которые могут содержать конфиденциальные данные.

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"
  1. Сохраните этот скрипт, например, как start_session.sh.
  2. Измените права доступа: chmod +x start_session.sh.
  3. Добавьте путь к этому скрипту в /etc/shells.
  4. Измените оболочку пользователя в /etc/passwd.

Заключение

Каждый из предложенных подходов имеет свои плюсы и минусы. Использование script легко реализуется и может быть настроено под конкретные нужды пользователя. Однако он требует дополнительных действий для автоматизации. В то время как pam_tty_audit позволяет лучше контролировать и отслеживать действия, его настройка требует больших усилий и обеспечения безопасности, поскольку он может записывать чувствительные данные.

Выбор подхода зависит от ваших конкретных требований и уровня доступа к системе. Надеюсь, это руководство поможет вам создать надежный метод записи активности терминала.

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

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