Проверка git commit без подписи gpg - PullRequest
0 голосов
/ 07 июня 2018

Мы начали использовать git в качестве VCS с ранее использовавшимся SVN, и обнаружили, что в git вы легко можете отделить реальный человек от изменений и коммитов.Теперь нам интересно, почему был сделан этот выбор дизайна и есть ли что-то, что мы упускаем из виду.

Давайте рассмотрим следующие вещи:

  1. Каждый зарегистрировал ключ ssh для gitlab * 1006.*
  2. Коммиты не подписаны gpg
  3. Все используют git bash, используя зарегистрированный ключ ssh

Теперь, когда мы все знаем author иcommitter - это просто метаданные для git, и его можно легко подделать следующим образом:

  1. git config --global --add user.email Incognito@fake.com
  2. gitconfig --global --add user.name "Пользователь Incognito"
  3. git commit -m "Вы не знаете, кто я на самом деле" --author = "Max Mustermann"
  4. gitpush

Метаданные для коммита будут выглядеть примерно так:

Author:     Max Mustermann <max.mustermann@company.com>
AuthorDate: Mon Jun 4 13:12:47 2018 +0200
Commit:     Incognito User <Incognito@fake.com>
CommitDate: Mon Jun 4 13:13:26 2018 +0200

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

Вопрос: Нет ли вообще способа узнать настоящего человека без использования подписи gpg?

PS: Нет, мы не доверяемдруг друга, чтобы использовать это, но мы довольно любопытны и хотим понять.

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

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

Но в распределенных каждый является королем / королевой в своем собственном королевстве.Мне не нужно проходить аутентификацию на моем собственном репо на моем компьютере, верно?И потом помните, что хотя нажатие возможно сделать на распределенных VCS, оно на самом деле предназначено для "вытягивания", поэтому никто не испортит мой репо.И от кого я буду тянуть?Люди, которым я доверяю, верно?Таким образом, все еще существует некоторое доверие, но оно находится в другом месте, и, в конечном счете, вы являетесь владельцем собственного репо.Никто не может заставить вас принять в свой репозиторий изменение, которое вам не нравится.Презентация Линуса на git для google от 2007 года объяснила все основы.https://www.youtube.com/watch?v=4XpnKHJAok8

0 голосов
/ 07 июня 2018

Обновление - копирование информации из комментария Торека, поскольку я считаю, что этот контекст достаточно важен, чтобы он был доступен в самом ответе, а не только в комментариях:


Во-первых, вам нужно отделить git от gitlab .Что касается git , то ssh - это только один из возможных протоколов, которые вы можете использовать для подключения к вашему серверу.Ваш ключ ssh или его действительность не имеет значения для git;это между вами и вашим сервером, так как сервер аутентифицирует вас, чтобы он мог решить, авторизованы ли вы для подключения через ssh.

(Сервер может выполнять более детальные проверки авторизации, особенно для хостов, таких как gitlab, вся функция которого заключается в интеграции с git. Тем не менее, это дело хоста, а не git.)

Хостинговые сервисы, такие как gitlab, могут регистрировать активность на основе ключа ssh, а могут и нет.Даже если они это сделают, это только скажет вам, кто выдвинул коммит на этот сервер, который может отличаться от автора или коммиттера.Например:

Допустим, Алиса написала код;она автор.Она отправила копию своей работы Бобу.Боб поместил код в локальный репозиторий Git.Боб является коммиттером.Боб создал пакетный файл и отправил его Синди.Теперь Синди загружает коммит Боба, содержащий код Алисы, в ее локальное хранилище, а затем отправляет на gitlab, используя ее ключ ssh .Теперь самому мерзавцу плевать на роль Синди в этом;она не автор и не коммиттер.Но если gitlab выбирает протоколирование активности на основе ключа ssh, gitlab может регистрировать, что Синди ввела коммит на этот сервер.

Метод создания поддающихся проверке коммитов в git заключается в использовании сигнатур [1].Так что нет, «нет никакого способа узнать реального человека без использования [git-механизма для записи реального человека]».

Обратите внимание, что это вытекает из распределенной природыGit.Без какого-либо внешнего ограничения невозможно сказать, что Синди законно передает работу Алисы и Боба.В SVN есть один четко различимый центральный сервер / Источник истины, и Алиса должна подключиться к этому серверу, чтобы создать коммит, после чего Боб должен подключиться к этому серверу, а Синди должна подключиться к этому серверу.Каждый человек подключается индивидуально к серверу.В отличие от SVN, Git не предполагает, что это должно происходить всегда.Если вы хотите применить такую ​​политику самостоятельно, вы можете сделать это на своем сервере.

-torek


[1] А пока я неНе зная, изменились ли их взгляды, по крайней мере, некоторые из разработчиков git ранее высказали мнение, что подписание тэгов - а не прямое подписание коммитов - является правильным способом сделать это.

...