Sign commit
Как избежать "commit spoofing"?¶
В Git очень легко притворится другим пользователем, достаточно проделать:
$ git config user.name "Ivan Ivanov"
$ git config user.email "ivanov-email@truedev.ru"
$ touch badcode.js
$ git add .
$ git commit -m 'add some bad code as jim'
$ git push
По умолчанию Git, а, следовательно, и GitHub, не проверяет авторство коммитов. Пока у вас есть права на запись в репозиторий, вы можете загружать код от имени любого допустимого пользователя репозитория. К счастью, существует решение этой проблемы... signed commits
Любые коммиты, которые вы делаете непосредственно через редактор веб-интерфейса GitHub, автоматически подписываются.
Рассмотрим, как мы можем настроить нашу локальную машину так, чтобы по умолчанию подписывать наши коммиты в git CLI, чтобы они отображались как verified на GitHub.
- Генерация gpg ключа
Ключ можно сгенерировать используя скрипт или инструкция по связке gpg+yubikey
- Добавьте дополнительные Email адреса
Следуйте приведенной ниже процедуре, чтобы добавить в ключ любые дополнительные адреса электронной почты, которые вы используете с GitHub:
$ gpg --edit-key FB3F3623BCF1390C
$ gpg> adduidReal Name: Aleks Volodin
Email address: myemailaddress@mypersonaldomain.com
Comment: GitHub key
Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O [Enter]Q [Enter]
Если вы подключаетесь к корпоративному gitlab например, с корпоративным email, то можно добавить дополнительный email, который есть в ключе gpg как основной здесь. Email нужно будет подтвердить.
- Загрузите ваш ключ в GitHub
Скопируем ключ в буфер $ gpg --armor --export FB3F3623BCF1390C | pbcopy
Теперь перейдем в раздел ключей SSH и GPG на странице настроек GitHub, нажмите кнопку New GPG Key
, вставьте содержимое ключа (включая строки BEGIN и END) в поле и нажмите кнопку Add GPG Key
.
- Настройка GPG Agent описана тут
- Настройка Git чтобы мог подписывать коммиты
Теперь если сделать новый коммит и запушить то мы увидим
Verified
:
Protected Branches¶
Вот как это сделать:
- Перейдите в GitHub’s Branch Protection settings для вашего репозитория (https://github.com/ВАША-ОРГАНИЗАЦИЯ/ВАШ-РЕПОЗИТОРИЙ/settings/branches).
- Нажмите кнопку "Add a new rule" для вашей основной ветви (например, master).
- Выберите опцию "Require signed commits", а также другие параметры, которые применимы к вашей организации, затем нажмите "Сохранить изменения".
Теперь github будет разрешать только signed commits в ветку master