Запретить пользователям совершать git как неправильный пользователь
Я использую git и Codebase для проекта.
Я только что сделал тест, и я могу зафиксировать репозиторий git с другим адресом электронной почты и набором имен, который заставляет его отмечать фиксацию как другой пользователь. Я переместил это в хранилище, и он появился, когда этот пользователь совершил, даже если это был я.
Есть ли способ запретить пользователям совершать или нажимать кому-то еще детали пользователя (эффективно, чтобы они не могли "подделывать" коммиты как принадлежащие другому пользователю)?
Edit:
Я предполагаю, что эта аутентификация должна произойти на этапе толкания коммитов на сервер, поскольку в локальной рабочей копии это просто репозиторий, к которому пользователь имеет полный доступ, чтобы делать все, что захочет. Поэтому я должен спросить Codebase, возможно,?
Изменить 2:
Git config в соответствии с запросом:
(репо/.git/конфигурации)
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = [email protected]:<redacted company name>/<redacted project name>/test.git
[branch "master"]
remote = origin
merge = refs/heads/master
Ответы
Ответ 1
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' '[email protected]'" ssh-rsa ...
Результат всего этого состоит в том, что ваш update
script будет иметь переменные окружения GV_AUTHOR_NAME
и GV_AUTHOR_EMAIL
, доступные и может проверять их против фиксации и выхода с ошибкой, если они не совпадают.
Ответ 2
Извините, мое сообщение удалено, прежде чем я отправил свое последнее обновление:
Вы можете совершать как кто-то еще, когда у вас есть свои учетные данные.
Чтобы уточнить, сценарий, о котором вы спрашиваете, выглядит следующим образом:
Пользователи Foo и Bar могут передать репо. Вы хотите, чтобы пользователь Foo не перешел на репо в качестве пользовательской панели.
В этом случае пользовательская панель должна защитить свой частный SSH-ключ, точно так же, как защитить пароль. Поскольку это используется для аутентификации вашей фиксации.