git push validation из windows устанавливает автора неизвестным - PullRequest
3 голосов
/ 12 сентября 2009

Я недавно настроил новый 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, который использовался при добавлении в качестве автора.

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

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

UPDATE:

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

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

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

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

есть идеи ???

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

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

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

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

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

Ответы [ 3 ]

3 голосов
/ 25 сентября 2009

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

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

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

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

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

3 голосов
/ 17 сентября 2009

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

// global settings
$ git config --global user.name "FirstName LastName"
$ git config --global user.email "user@example.com"

или

// for a specific project
$ git config user.name "FirstName LastName"
$ git config user.email "user@example.com"

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

2 голосов
/ 24 сентября 2009

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

$ git config --list 

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

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

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

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

...