Skip to content

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
Если перейти в Github UI можно увидеть, что появился новый коммит, который был добавлен якобы Ivan Ivanov/

По умолчанию Git, а, следовательно, и GitHub, не проверяет авторство коммитов. Пока у вас есть права на запись в репозиторий, вы можете загружать код от имени любого допустимого пользователя репозитория. К счастью, существует решение этой проблемы... signed commits

Любые коммиты, которые вы делаете непосредственно через редактор веб-интерфейса GitHub, автоматически подписываются.

Рассмотрим, как мы можем настроить нашу локальную машину так, чтобы по умолчанию подписывать наши коммиты в git CLI, чтобы они отображались как verified на GitHub.

  1. Генерация gpg ключа

Ключ можно сгенерировать используя скрипт или инструкция по связке gpg+yubikey

  1. Добавьте дополнительные 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 нужно будет подтвердить.

  1. Загрузите ваш ключ в GitHub

Скопируем ключ в буфер $ gpg --armor --export FB3F3623BCF1390C | pbcopy

Теперь перейдем в раздел ключей SSH и GPG на странице настроек GitHub, нажмите кнопку New GPG Key, вставьте содержимое ключа (включая строки BEGIN и END) в поле и нажмите кнопку Add GPG Key. alt text

  1. Настройка GPG Agent описана тут
  2. Настройка Git чтобы мог подписывать коммиты
    $ git config user.signingkey FB3F3623BCF1390C
    $ git config commit.gpgsign true
    
    Теперь если сделать новый коммит и запушить то мы увидим Verified: alt text

Protected Branches

Вот как это сделать: - Перейдите в GitHub’s Branch Protection settings для вашего репозитория (https://github.com/ВАША-ОРГАНИЗАЦИЯ/ВАШ-РЕПОЗИТОРИЙ/settings/branches). - Нажмите кнопку "Add a new rule" для вашей основной ветви (например, master). - Выберите опцию "Require signed commits", а также другие параметры, которые применимы к вашей организации, затем нажмите "Сохранить изменения". alt text Теперь github будет разрешать только signed commits в ветку master