Как зашифровать репозиторий с помощью `git-crypt`?

  1. Установите git-crypt: Зависит от вашей ОС, обычно через пакетный менеджер (например, apt-get install git-crypt или brew install git-crypt).
  2. Инициализируйте git-crypt: git crypt init (создает файл .gitattributes).
  3. Определите файлы для шифрования: В файле .gitattributes укажите шаблоны файлов, которые нужно зашифровать (например, secrets/* filter=git-crypt diff=git-crypt).
  4. Зафиксируйте изменения .gitattributes: git add .gitattributes; git commit -m "Configure git-crypt".
  5. Создайте ключ: git crypt generate-key (для симметричного шифрования) ИЛИ используйте PGP (смотрите документацию git-crypt).
  6. Поделитесь ключом (если требуется): Если работаете в команде, передайте ключ доверенным членам команды (например, через безопасный канал). git crypt export-key и импорт на другой машине git crypt unlock .
  7. Проверьте: Файлы, соответствующие шаблонам в .gitattributes, должны быть зашифрованы в репозитории и расшифрованы в рабочей директории после git crypt unlock.

Чтобы зашифровать репозиторий с помощью git-crypt, необходимо выполнить следующие шаги:

  1. Установка git-crypt:

    Сначала убедитесь, что git-crypt установлен в вашей системе. Способ установки зависит от вашей операционной системы:

    • Debian/Ubuntu: sudo apt-get install git-crypt
    • macOS (через Homebrew): brew install git-crypt
    • Windows (через Chocolatey): choco install git-crypt
    • Другие системы: Обратитесь к документации git-crypt для получения инструкций.
  2. Инициализация git-crypt в репозитории:

    Перейдите в корень вашего репозитория и выполните команду:

    git crypt init

    Эта команда создает файл .gitattributes в вашем репозитории, который будет использоваться для определения, какие файлы следует шифровать.

  3. Определение файлов для шифрования:

    Отредактируйте файл .gitattributes, чтобы указать файлы, которые должны быть зашифрованы. Используйте шаблон pattern filter=git-crypt diff=git-crypt. Например, чтобы зашифровать все файлы .env, добавьте следующую строку:

    *.env filter=git-crypt diff=git-crypt

    Вы можете использовать различные шаблоны для выбора файлов, например:

    • secret.txt filter=git-crypt diff=git-crypt (один файл)
    • config/* filter=git-crypt diff=git-crypt (все файлы в каталоге config)
    • *.key filter=git-crypt diff=git-crypt (все файлы с расширением .key)

    Закоммитьте изменения в .gitattributes:

    git add .gitattributes
    git commit -m "Добавлено шифрование файлов .env"
  4. Создание ключа для шифрования:

    Существует два основных способа создания ключа:

    1. Сгенерировать ключ для конкретных пользователей (рекомендуется для командной работы):

      Используйте команду для добавления пользователей, которые смогут расшифровывать репозиторий. Вам понадобится адрес электронной почты каждого пользователя, связанный с его ключом GPG:

      git crypt add-gpg-user <user's email address>

      Например:

      git crypt add-gpg-user alice@example.com
      git crypt add-gpg-user bob@example.com

      Эта команда шифрует ключ репозитория для каждого указанного пользователя. Убедитесь, что у пользователей есть корректно настроенный GPG ключ и он доступен.

    2. Сгенерировать общий секретный ключ (менее безопасно, используйте с осторожностью):

      Используйте команду:

      git crypt export-key -o .git/git-crypt/key

      Затем безопасно передайте файл .git/git-crypt/key всем, кто должен иметь доступ к зашифрованным файлам. Важно: Никогда не коммитьте этот файл в репозиторий! Храните его в безопасном месте и передавайте по защищенному каналу (например, через зашифрованное сообщение или лично).

  5. Разблокировка репозитория:

    После клонирования репозитория или после смены ключа необходимо его разблокировать. Способ зависит от используемого метода:

    1. При использовании ключей GPG:

      git crypt unlock автоматически использует ваш приватный ключ GPG для расшифровки. Убедитесь, что ваш приватный ключ GPG доступен.

    2. При использовании общего секретного ключа:

      Поместите файл .git/git-crypt/key в соответствующую директорию (она может быть создана). Затем выполните:

      git crypt unlock .git/git-crypt/key

    После успешной разблокировки вы сможете видеть зашифрованные файлы в расшифрованном виде.

  6. Не забудьте добавить правило игнорирования для файла ключа (только при использовании общего секретного ключа):

    Добавьте файл .git/git-crypt/key в файл .gitignore, чтобы случайно не закоммитить его в репозиторий:

    echo ".git/git-crypt/key" >> .gitignore
    git add .gitignore
    git commit -m "Добавлено игнорирование файла ключа"

Важные замечания:

  • После настройки git-crypt все изменения в зашифрованных файлах будут автоматически шифроваться перед коммитом.
  • git-crypt шифрует только содержимое файлов, но не имена файлов или структуру каталогов.
  • При работе в команде используйте ключи GPG для каждого участника, а не общий секретный ключ. Это значительно безопаснее.
  • Регулярно обновляйте свои ключи GPG и храните их в безопасном месте.
0