🦊 Как создавать зашифрованные git-репозитории с помощью git-remote-gcrypt |

🦊 Как создавать зашифрованные git-репозитории с помощью git-remote-gcrypt

Мануал

Git, безусловно, является наиболее используемой системой контроля версий.

То, что она является “распределенной”, означает, что каждый пользователь может клонировать свою собственную полную копию репозитория, над которой он может работать даже в автономном режиме, передавая изменения на удаленный только по мере готовности.

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

Инструмент git remote-gcrypt разработан с этой целью.

В этом руководстве мы рассмотрим, как установить и использовать git-remote-gcrypt в некоторых наиболее используемых дистрибутивах Linux и как с его помощью создавать зашифрованные git-репозитории.

Установка

Git-remote-gcrypt – это скрипт на bash, разработанный на github; он упакован и доступен в репозиториях наиболее распространенных дистрибутивов Linux вместе с GPG, который он использует для шифрования данных.

Оба пакета можно установить с помощью менеджера пакетов вашего дистрибутива. в Fedora, например, мы используем dnf:

sudo dnf install git-remote-gcrypt gpg

Чтобы установить пакет на Debian или одну из его многочисленных производных, мы должны выполнить команду:

sudo apt install git-remote-gcrypt gpg

Создание зашифрованного репозитория

Чтобы начать работу с git-remote-gcrypt, первым делом создадим локальный репозиторий (назовем его “test-git-remote-gcrypt”) и переключимся в него:

git init test-git-remote-gcrypt && cd test-git-remote-gcrypt

Теперь нам нужно создать репозиторий для использования в качестве удаленного.

В рамках данного руководства я создам его на Github (неважно, публичный он или частный):

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

Процедура та же, что и всегда; единственное, что нам нужно изменить, это URL удаленного хранилища, который мы должны обозначить префиксом gcrypt:: (в примере ниже я использовал ssh для связи с удаленным хранилищем, но то же самое справедливо и для “https”):

🦊 SSH или HTTPS для Git: что из них использовать?

git remote add origin gcrypt::git@github.com:egdoc/test-git-remote-gcrypt

Указание пары ключей GPG для шифрования

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

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

Как зашифровать / расшифровать файл в Linux с помощью gpg (Kali Linux)

Чтобы указать пару ключей, которую мы хотим использовать, нам нужно выполнить следующую команду из локального каталога репозитория:

git config remote.<remote>.gcrypt-participants <gpg-public-key-fingerprint>

Где, конечно, “<remote>” – это место для имени удаленного сервера (“origin”, в данном случае), а <gpg-public-key-fingerprint> должен быть заменен на отпечаток открытого ключа (ключей), который мы хотим использовать.

Можно указать несколько отпечатков (через пробел, между кавычками), чтобы дать доступ к хранилищу нескольким пользователям с разными ключами.

Чтобы получить отпечаток открытого ключа, можно просто выполнить следующую команду:

gpg --list-keys

В принципе, это все.

Теперь мы можем создать фиктивный файл, закоммитить изменения и отправить в удаленный репозиторий:

touch dummyfile
git add dummyfile
git commit -m "first commit"
git push origin master

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

Наконец, изменения будут перенесены на удаленный сервер.

Важно помнить, что при каждом push в удаленный репозиторий используется опция –force, поэтому мы рискуем потерять удаленные коммиты.

Чтобы избежать этого, мы всегда должны выполнять pull перед push.

Заключение

В этом руководстве мы узнали, как создавать зашифрованные git-репозитории с помощью помощника git-remote-gcrypt.

Хотя вам следует просто избегать размещения конфиденциальной информации в git-репозиториях, особенно если они размещены на внешних, ненадежных платформах, иногда возможность прозрачно передавать зашифрованное содержимое в репозиторий может пригодиться.

Например, одной из таких ситуаций является использование pass: этот менеджер паролей имеет преимущество в управлении паролями с помощью стандартных инструментов, таких как GPG (для шифрования) и git (для синхронизации), однако имеет “слабое” место в том, что пароли хранятся в файлах, которые должны иметь осмысленные имена, что потенциально раскрывает метаданные (например, ваш зашифрованный пароль хранится в файле с именем сайта, для которого он предназначен: это эффективно раскрывает, что у вас есть аккаунт на этой платформе).

Пожалуйста, загляните в manpage git-remote-gcrypt, чтобы проверить полный список опций, которые вы можете использовать с помощником.

см. также:

Пожалуйста, не спамьте и никого не оскорбляйте. Это поле для комментариев, а не спамбокс. Рекламные ссылки не индексируются!
Добавить комментарий