Как подписывать коммиты в Git
Spoofing пользователей в GitHub
В github есть одна небольшая проблема. Мы можем выдать добавленный коммит за авторство любого другого человека. Для этого надо всего лишь выполнить несколько комманд:
$ git config user.name "John Doe"
$ git config user.email "[email protected]"
$ touch badcode.js
$ git add .
$ git commit -m 'add some bad code as jim'
$ git push
Вот и все. Теперь John Doe сильно удивится, увидев свой коммит, который он никогда не делал.
Как от этого защититься?
GPG подпись коммитов
Чтоб подписывать коммиты и GitHub показывал плашку Verified
нужно сделать следующее:
1. Устанавливаем необходимое
$ brew install gnupg pinentry
2. Генерируем ключи
$ gpg --gen-key
Real name: Firstname Lastname
Email address: firstname.lastname@gmail.com
You selected this USER-ID:
"Firstname Lastname <[email protected]>"
Change (N)ame, (E)mail, or (O)kay/(Q)uit? O [Enter]
┌──────────────────────────────────────────────────────┐
│ Please enter the passphrase to │
│ protect your new key │
│ │
│ Passphrase: ________________________________________ │
│ │
│ <OK> <Cancel> │
└──────────────────────────────────────────────────────┘
$ gpg --list-secret-keys --keyid-format LONG
В выводе вы должны увидеть нечто похожее на:
/Users/username/.gnupg/pubring.kbx
------------------------------
sec rsa2048/FB3F3623BCF1390C 2020-10-05 [SC] [expires: 2022-10-05]
ВНИМАНИЕ: FB3F3623BCF1390C - это id вашего ключа. У вас он будет отличаться
3. Загружаем на GitHub
$ gpg --armor --export FB3F3623BCF1390C
В ответ вы получите публичную часть ключа:
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQENBF97dRABCADXumQFHIPd2CMYwWpSskzP/Un7BmxPbFdDEYQYUqbVFO1eZgl2
...
=uoVP
-----END PGP PUBLIC KEY BLOCK-----
Теперь переходим в раздел SSH and GPG keys и добавляем полученный публичный ключ.
4. Настраиваем gpg-agent
В файл конфига вашего шелла (.zshrc или .bashrc) добавляем запуск агента:
# This check to make sure the GPG Agent is running and if not, starts it
if [[ -f "~/.gnupg/.gpg-agent-info" && -n "$(pgrep gpg-agent)" ]]; then
source ~/.gnupg/.gpg-agent-info
export GPG_AGENT_INFO
else
eval $(eval $(gpg-agent --daemon --options ~/.gnupg/gpg-agent.conf))
fi
Теперь создаем несколько файлов конфигурации:
~/.gnupg/gpg-agent.conf
# Allows gpg-agent to use the OSX keychain to store the gpg key's
# passphrase so you don't have to type it each time you commit to
# git
pinentry-program /usr/local/bin/pinentry-mac
~/.gnupg/gpg.conf
use-agent
batch
no-tty
Перезапускаем gpg-agent
$ gpg-connect-agent reloadagent /bye
5. Настраиваем git для подписи
Осталось только сказать git, что можно подписывать коммиты:
$ git config user.signingkey FB3F3623BCF1390C
$ git config commit.gpgsign true
Теперь делаем коммит и пуш и проверяем, что у нас появился значек Verified
в веб-интерфейсе GitHub.
Комментарии: