Остановите пользователей, совершающих git как неправильных пользователей. - PullRequest
15 голосов
/ 23 ноября 2011

Я использую git и Codebase для проекта.

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

Есть ли способ запретить пользователям коммит или толкать чужие данные пользователя (фактически, они не могут«forge» фиксирует как принадлежащий другому пользователю)?

Редактировать:

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

Редактировать 2:

Git config в соответствии с запросом:

(repo / .git / config)

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    ignorecase = true
[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = git@codebasehq.com:<redacted company name>/<redacted project name>/test.git
[branch "master"]
    remote = origin
    merge = refs/heads/master

Ответы [ 2 ]

3 голосов
/ 23 ноября 2011

Ooops : хотя это допустимый метод, он предполагает, что вы фактически имеете полный контроль над сервером.Если вы используете размещенное решение, все ставки отключены.

Вы можете проверить имя автора и адрес электронной почты в хуке репозитория update.Вы можете получить оба значения следующим образом:

#!/bin/sh
set -- refname sha1_old sha1_new
author_name=$(git log --pretty=format:%an $sha1_new)
author_email=$(git log --pretty=format:%ae $sha1_new)

Хитрость, конечно, заключается в том, чтобы выяснить, являются ли они действительными.Вот один трюк:

Вы можете использовать опцию command="" в вашей конфигурации ssh, чтобы создать оболочку вокруг git-receive-pack, которая сопоставляет ключи ssh с информацией об авторе.Например, что-то вроде этого:

#!/bin/sh

GV_AUTHOR_NAME="$1"
GV_AUTHOR_EMAIL="$2"

export GV_AUTHOR_EMAIL GV_AUTHOR_NAME
eval exec $SSH_ORIGINAL_COMMAND

И вы бы использовали строку authorized_keys примерно так:

command="~/bin/gitvalidator 'Lars Kellogg-Stedman' 'lars@seas.harvard.edu'" ssh-rsa ...

В результате всего этого ваш скрипт updateбудет иметь переменные окружения GV_AUTHOR_NAME и GV_AUTHOR_EMAIL и сможет проверить их на соответствие и выйти с ошибкой, если они не совпадают.

0 голосов
/ 23 ноября 2011

Извините, мое сообщение было удалено до того, как я отправил свое последнее обновление:

Вы можете коммитить, как кто-то другой, когда у вас есть его учетные данные.

Просто чтобы уточнить, сценарий, о котором вы спрашиваете,следующим образом:

Пользователи Foo и Bar могут совершать репо.Вы хотите запретить пользователю Foo принимать участие в репо в качестве пользователя Bar.

В этом случае пользователь Bar должен будет защитить свой закрытый SSH-ключ, так же как он будет защищать пароль.Как это используется для аутентификации вашего коммита.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...