Вопрос или проблема
Я хотел бы иметь различную историю 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.
Один из подходов, который я нашел:
- Gist: DeveloperChris/LocalHistoryVSCODE.md Создание файлов истории по проекту/папке в Visual Studio Code – VSCODE
Чтобы разумно подойти к этому вопросу, нам потребуется больше логики, чем можно поместить в настройки 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
может быть рискованным, и существует более безопасный и продуманный путь решения этой проблемы.
-
Глобальные переменные среды: Вы можете установить переменную VSCODE_WS
в settings.json
для определения текущей рабочей области:
"terminal.integrated.env.linux": {"VSCODE_WS": "${workspaceFolder}"}
После этого в вашем .bashrc
файл должен проверять значение VSCODE_WS
для установления специфичного HISTFILE
.
-
Быстрая запись истории: Используя 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
, что ограничивает потенциальную утечку данных.
Применение
Теперь, когда мы понимаем теоретические принципы и видели пример, стоит обсудить практическое применение. Рекомендуется определить безопасное место для хранения файлов истории, например, в специальный каталог внутри домашней директории пользователя. Это может уменьшить риск случайной утечки данных. Например, вы можете использовать следующую конфигурацию:
-
Более безопасное решение: Вместо сохранения истории команд непосредственно в рабочей области, используйте переменные окружения для создания структурированной структуры хранения. Установите HISTFILE
в уникальную директорию, например, ${env:HOME}/history/.bash_history_${workspaceFolderBasename}
.
-
Проверка и мониторинг: Регулярно проверяйте содержимое истории команд на предмет наличия конфиденциальных данных. Инструменты автоматического аудита могут помочь в этом процессе, особенно если ваши проекты связаны с конфиденциальной информацией.
-
Текущий мониторинг: Настройте системы мониторинга доступа к каталогам с историями, чтобы быть осведомлённым о любых аномалиях, таких как несанкционированный доступ.
-
Использование различных оболочек: Если вы работаете с несколькими типами оболочек (Bash, ZSH и др.), убедитесь, что они работают с изолированными файлами истории, чтобы избежать смешения данных.
Подытоживая, организация отдельной истории команд Bash для Visual Studio Code — это не только удобство, но и вопрос безопасности. Внедряя этот процесс, важно быть последовательным и учитывать все возможные риски, чтобы гарантировать безопасную работу и сохранить конфиденциальность данных.