Проверка git push из окон устанавливает автора как неизвестного

Недавно я установил новый gitosis в своей частной сети на сервере Ubuntu. Все остальные клиенты в сети работают под управлением Windows XP, кроме одного клиента Linux.

У меня есть следующая настройка в gitosis.conf:

[group MyProjectTeam]
writable = MyProjectRepo
members = user1 user2 user3

Я также поместил файлы ключей user1.pub, user2.pub и user3.pub в keydir. Ключи были сгенерированы на сервере Ubuntu с использованием ssh-keygen и распространены среди соответствующих пользователей. Копия открытых ключей помещается в keydir.

Первые два пользователя являются пользователями Windows XP, они используют msysgit + TortoiseGit для работы с репозиторием, а один пользователь находится на компьютере с Linux для доступа к репозиторию, используя версию git для командной строки по умолчанию.

Теперь все настроено хорошо, и каждый может делать то, что от него ожидается, он может тянуть, пушить, фиксировать - все выглядит нормально, кроме тех случаев, когда мы проверяем логи !!!

Используя user3 на машине с Linux, я попробовал команду «git log» и получил следующий вывод:

commit 1b249e239d270b814aab31eed7dc6f04ceceba32
Author: User3 <Admin@ubuntu-server.(none)>
Date:   Fri Sep 11 07:26:58 2009 +0530

    modifed by user3

commit 646f8b11a715273dc26280fc1da2507c997f981c
Author: unknown <Admin@.(none)>
Date:   Fri Sep 11 07:10:56 2009 +0530

    modified by user2

commit 9f86dc7a6bfafc1c1e520d6de3dac7c613ac85cb
Author: unknown <Admin@.(none)>
Date:   Fri Sep 11 06:50:22 2009 +0530

    modified

commit b1a3b64005795f9592aae05c422c70a03dbb9b58
Author: admin <Admin@ubuntu-server.(none)>
Date:   Fri Sep 11 06:18:54 2009 +0530

    test file added by admin

Это неправильно. Этот журнал должен быть в состоянии сказать мне, кто является автором Push. Я чувствую, что он дает правильные значения для пользователей в Linux, поскольку их имя пользователя и адрес электронной почты также добавляются в информацию о пользователе Linux, но для клиентов Windows это неверно, поэтому их имена отображаются неправильно. Но даже если я исправляю имена на компьютере с Windows, это может быть скомпрометировано путем эмуляции имени другого пользователя, чтобы избежать этого, я не хочу полагаться на имена пользователей.

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

Может быть, git's hook pre-receive может помочь здесь, но я не знаю, как его использовать... кто-нибудь может помочь?

Спасибо, Ракеш

ОБНОВЛЕНИЕ:

Спасибо за ответы.

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

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

Вот почему я подумал, почему бы не записать имя файла закрытого ключа, например. Я установил имя файла как user1.ppk для пользователя1, аналогично user2.ppk для пользователя2. в таких случаях, даже если кто-то попытается выдать себя за другого, у него ничего не получится, потому что имена ключей, которые используются для проверки, скажут мне правду.

Любые идеи???

С уважением, Ракеш

ОБНОВЛЕНИЕ 2:

Спасибо за помощь. Squelch, спасибо, что нашли время, чтобы объяснить так много деталей. Я думаю, что паутина телевидения имеет много информации, читая это прямо сейчас.

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

Я хочу что-то вроде SVN + SSH, где мы используем туннелированное имя пользователя в ключевом файле, и оно записывается с помощью SVN.


person Rakesh    schedule 12.09.2009    source источник


Ответы (3)


Вы пытались установить имя пользователя с помощью следующих команд:

// global settings
$ git config --global user.name "FirstName LastName"
$ git config --global user.email "[email protected]"

or

// for a specific project
$ git config user.name "FirstName LastName"
$ git config user.email "[email protected]"

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

person alexandrul    schedule 17.09.2009

Расширяя ответы alexandrul, существует несколько процессов, происходящих, когда пользователь обращается к репозиторию.

  • Пользователь подключается через SSH как пользователь «Git» (или как там называется ваш пользователь gitosis), используя свою пару ключей для аутентификации. Думайте об этом как о пользователе «Git», имеющем несколько ключей для доступа к хосту.
  • Пользователь «Git» имеет ограниченную учетную запись, которая может получить доступ только к репозиториям, управляемым администратором gitosis.
  • Gitosis использует имя открытого ключа в /keydir, которое сопоставляется с ключом подключенных пользователей и разрешает доступ только к тем репозиториям, членами которых они являются. Имена произвольны и являются просто маркерами для идентификации ключа.
  • Git не знает и не заботится о подключенном пользователе, а просто применяет коммиты локально как пользователь «Git» на хосте под управлением gitosis.
  • Настоящий пользователь git идентифицирует себя в коммите, который не может иметь никакого отношения к аутентифицированному имени SSH.

Как вы обнаружили, gitosis может аутентифицировать только то, что у пользователя есть право на подключение и что у него есть доступ только к тем репозиториям, членом которых он является. Он не проверяет правильность имени в фиксации, и один пользователь вполне может выдавать себя за другого в репозитории, если у него есть доступ.

Это вопрос неявного доверия с вашей стороны, что ваши пользователи не злоупотребляют системой, в конце концов, вы уже разрешили им доступ к репозиторию. Журналы раскрывают, какой пользователь, прошедший проверку подлинности ssh, был подключен, когда был сделан конкретный толчок, если вы подозреваете нарушения.

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

person Squelch    schedule 25.09.2009

Проблема заключается в ваших пользователей Windows. Если вы попросите их предоставить вам вывод из

$ git config --list 

при запуске в папке проекта вы, вероятно, увидите, что они не указали свои имена пользователей и адрес электронной почты.

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

Если у вас, вероятно, будут другие пользователи Windows в будущем, можно использовать ловушку предварительного получения, которая проверяет действительное имя пользователя и адрес электронной почты, чтобы избежать этого. Все, что ему нужно сделать, это отклонить push с сообщением, чтобы пользователь сначала сделал настройки.

См. Предыдущий вопрос SO для справки. по этому последнему пункту.

person Squelch    schedule 24.09.2009