Как иметь отдельные .bash_history для каждого рабочей области Visual Studio Code?

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

Я хотел бы иметь различную историю bash для каждой рабочей области в VSCode. Похоже, что установка:

"terminal.integrated.env.linux": { "HISTFILE": "${workspaceFolder}/.bash_history" ...

может быть очень опасной.

Создание журнала истории по рабочему каталогу в bash

… Рано или поздно вы случайно раскроете некоторые конфиденциальные команды в общедоступном архиве или репозитории. На многопользовательской машине, как только вы перейдете в каталог другого пользователя и выполните там несколько команд, они могут изменить ваши файлы и, вероятно, получить доступ к вашему аккаунту. И другие пользователи, или люди, чьи архивы вы загружаете, могут легко обмануть вас, заставив выполнить команды, внедрив их в вашу историю команд shell.

– Gilles ‘SO- stop being evil’
комментировал 24 августа 2016 в 23:15

То есть сохранение истории в вашей рабочей области опасно, потому что вы будете выполнять команды с секретами (пароли, ключи и т. д.), и вы обязательно раскроете вашу историю в tar-архиве или образе docker, даже если она указана в git ignore.

Один из подходов, который я нашел:

Чтобы разумно подойти к этому вопросу, нам потребуется больше логики, чем можно поместить в настройки vscode.

В вашем глобальном файле settings.json:

"terminal.integrated.env.linux":  {"VSCODE_WS": "${workspaceFolder}"},
"terminal

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

Организация отдельной истории команд Bash для каждого рабочей области в Visual Studio Code может быть полезной задачей для тех, кто хочет оптимизировать и обезопасить свои рабочие процессы. Однако такая конфигурация требует тщательного подхода из-за потенциальных рисков, связанных с безопасностью и утечкой данных. Рассмотрим теоретические аспекты, примеры и реализацию этого процесса, чтобы понять, как достичь данной цели, избегая возможных угроз.

Теория

Bash сохраняет историю команд в файле, определяемом переменной окружения HISTFILE. По умолчанию, его расположение фиксировано, что означает, что все введённые в терминале команды будут сохранены в одном и том же файле независимо от контекста, в котором они были введены. Это может привести к смешению историй команд, что может быть неэффективным в случаях, когда разные рабочие области требуют различные наборы операций.

При работе с конфигурациями командной строки в Visual Studio Code возникает возможность определять переменные окружения через файл настроек settings.json. Для разделения истории команд между различными рабочими областями можно установить HISTFILE на уникальный путь в зависимости от рабочей области. Однако, как упоминалось в проблемной постановке, неправильное управление такими файлами может создать серьёзные риски безопасности. Например, вы можете случайно сохранить конфиденциальные данные в репозитории или сделать их доступными для других пользователей.

Пример

Рассматривая данную задачу, важно учитывать, какие подходы могут быть реализованы на техническом уровне. Предложение использовать terminal.integrated.env.linux для задания HISTFILE может быть рискованным, и существует более безопасный и продуманный путь решения этой проблемы.

  1. Глобальные переменные среды: Вы можете установить переменную VSCODE_WS в settings.json для определения текущей рабочей области:

    "terminal.integrated.env.linux": {"VSCODE_WS": "${workspaceFolder}"}

    После этого в вашем .bashrc файл должен проверять значение VSCODE_WS для установления специфичного HISTFILE.

  2. Быстрая запись истории: Используя Bash-опции, такие как shopt -s histappend и персонализированный PROMPT_COMMAND, вы можете обеспечить сохранение истории после каждой команды без создания дубликатов:

    if [[ -v VSCODE_WS ]] && [[ "$VSCODE_WS" != '${workspaceFolder}' ]]; then
        if [[ "$(dirname "${VSCODE_WS}")" == "$HOME/code" ]]; then
            HISTFILE="${VSCODE_WS}/../.bash_history_$(basename "${VSCODE_WS}")"
            shopt -s histappend
            if [[ ! "$PROMPT_COMMAND" =~ "history -a" ]]; then
                PROMPT_COMMAND="history -a;$PROMPT_COMMAND"
            fi
        fi
    fi

Этот пример ограничивает запись историй для проектов в директории ~/code, что ограничивает потенциальную утечку данных.

Применение

Теперь, когда мы понимаем теоретические принципы и видели пример, стоит обсудить практическое применение. Рекомендуется определить безопасное место для хранения файлов истории, например, в специальный каталог внутри домашней директории пользователя. Это может уменьшить риск случайной утечки данных. Например, вы можете использовать следующую конфигурацию:

  1. Более безопасное решение: Вместо сохранения истории команд непосредственно в рабочей области, используйте переменные окружения для создания структурированной структуры хранения. Установите HISTFILE в уникальную директорию, например, ${env:HOME}/history/.bash_history_${workspaceFolderBasename}.

  2. Проверка и мониторинг: Регулярно проверяйте содержимое истории команд на предмет наличия конфиденциальных данных. Инструменты автоматического аудита могут помочь в этом процессе, особенно если ваши проекты связаны с конфиденциальной информацией.

  3. Текущий мониторинг: Настройте системы мониторинга доступа к каталогам с историями, чтобы быть осведомлённым о любых аномалиях, таких как несанкционированный доступ.

  4. Использование различных оболочек: Если вы работаете с несколькими типами оболочек (Bash, ZSH и др.), убедитесь, что они работают с изолированными файлами истории, чтобы избежать смешения данных.

Подытоживая, организация отдельной истории команд Bash для Visual Studio Code — это не только удобство, но и вопрос безопасности. Внедряя этот процесс, важно быть последовательным и учитывать все возможные риски, чтобы гарантировать безопасную работу и сохранить конфиденциальность данных.

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

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