2009-09-12 469 views
3

我最近在Ubuntu服務器的專用網絡中設置了一個新的gitosis。在網絡中的所有其他客戶端的Windows XP機器,除了一個Linux客戶端從Windows套作者到未知的git push驗證

我有以下的gitosis.conf的設置:

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

我也放在user1.pub,user2.pub和user3.pub密鑰文件在keydir。密鑰是在Ubuntu服務器上使用ssh-keygen生成的,並分發給各個用戶。公鑰的副本放在keydir中。

一兩個用戶,他們使用msysgit + TortoiseGit與倉庫工作Windows XP用戶,一個用戶是Linux機器上訪問使用Git的默認命令行版本的存儲庫。

現在一切都設置好,每個人都可以做任何他們希望,他們能夠拉,推,提交 - 一切看起來除了當我們檢查日誌罰款!

Linux機器上使用用戶3,我試圖「git的日誌」命令,並得到了以下的輸出:

commit 1b249e239d270b814aab31eed7dc6f04ceceba32 
Author: User3 <[email protected](none)> 
Date: Fri Sep 11 07:26:58 2009 +0530 

    modifed by user3 

commit 646f8b11a715273dc26280fc1da2507c997f981c 
Author: unknown <[email protected](none)> 
Date: Fri Sep 11 07:10:56 2009 +0530 

    modified by user2 

commit 9f86dc7a6bfafc1c1e520d6de3dac7c613ac85cb 
Author: unknown <[email protected](none)> 
Date: Fri Sep 11 06:50:22 2009 +0530 

    modified 

commit b1a3b64005795f9592aae05c422c70a03dbb9b58 
Author: admin <[email protected](none)> 
Date: Fri Sep 11 06:18:54 2009 +0530 

    test file added by admin 

這是不正確的。這個日誌應該能夠告訴我誰是Push的作者。我覺得它給Linux上的用戶提供正確的值作爲他們的用戶名和電子郵件也添加在Linux用戶信息中,但對於Windows客戶端來說它不是真實的,所以他們的名字不能正確顯示。但即使我在Windows計算機上修改了名稱,也可以通過模擬其他用戶名來降低這個名稱,以避免這種情況,我不想依賴用戶名。

我想在SSH文件提供的名稱出現在那裏,或用推的同時要添加爲作者的SSH文件的名稱。

可能是Git的鉤預先收到可以幫助在這裏,但我不知道如何使用它...任何人可以幫助?

感謝, 拉克什

UPDATE:

感謝答案。

alexandrul,我還沒有設置全局設置,這是因爲我希望每一個用戶的信息應據實記錄。

靜噪,你是正確的,我可以看到誰是省略了用戶名的用戶,但我怎麼強制他們這樣做。我可以告訴他們配置他們的本地項目項目,並設置用戶名和電子郵件地址,但如果某人使用假的用戶名或嘗試使用其他用戶名和電子郵件地址,基本上會嘗試去扮演其他人?

這就是爲什麼我想爲什麼不記錄私鑰文件的名稱,例如我爲user1設置文件名爲user1.ppk,對user2類似user2.ppk。在這種情況下,即使有人試圖扮演其他人也不會成功,因此用於檢查的關鍵名稱會告訴我實情。

任何想法???

問候, 拉克什

更新2:

感謝您的幫助。 Squelch,感謝您花時間在很多細節上解釋。我認爲電視的蜘蛛網有很多信息,現在閱讀。

截至目前我所做的一件事是:要求我的用戶使用更新他們的配置來包含用戶名和電子郵件地址。但我必須解決這個問題,因爲我無法追逐每個用戶。

我想要類似SVN + SSH的地方,我們在密鑰文件中使用tunnled用戶名,並使用SVN進行錄製。

回答

3

你有沒有試着用下面的命令設置的用戶名:

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

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

編輯:全局設置存儲在HOME環境變量指定的文件夾中,這對每個Windows用戶都應該是唯一的,所以您將擁有關於登錄用戶的真實數據。

2

問題在於你的Windows用戶。如果你問他們從

$ git config --list 

與輸出給您提供在項目文件夾中運行,你可能會看到,他們已經忽略了他們設置的用戶名和電子郵件。

讓他們再次運行命令alexandrul建議,在項目文件夾中,因爲在服務器端沒有多少事情可以做,而沒有規避gitosis設計要做的事情,即在沒有shell帳戶的情況下提供安全的git訪問。

如果將來可能還有其他Windows用戶,則可以使用檢查有效用戶名和電子郵件的預接收掛鉤來避免這種情況。它需要做的就是拒絕推送消息,讓用戶首先進行設置。

有關最後一點的幫助,請參閱Previous SO question

3

在alexandrul的amswers上進一步擴展,當用戶訪問存儲庫時有幾個進程正在進行。

  • 用戶通過SSH以用戶「Git」(或任何您的gitosis用戶被調用)使用其密鑰對進行身份驗證連接。把它想象成用戶「Git」有多個鍵來訪問主機。
  • 用戶「Git」有一個限制帳戶,只能訪問由gitosis admin管理的存儲庫。
  • Gitosis使用/ keydir中的公鑰名稱,它與連接的用戶密鑰匹配,並且只允許訪問他們所屬的存儲庫。這些名稱是任意的,並且只是標記來標識密鑰。
  • Git不知道也不關心連接的用戶,只是在gitosis控制下的主機上以用戶「Git」的身份在本地應用提交。
  • 真正的git用戶在提交中標識自己,這與SSH認證名稱無關。

正如您所發現的,gitosis只能驗證用戶是否有權連接,並且他們只能訪問他們所屬的存儲庫。它不會在提交中檢查有效的名稱,只要有權訪問,一個用戶完全可以在存儲庫中模擬另一個用戶。

這是一個隱含的信任問題,您的用戶不會濫用系統,您已經允許他們訪問存儲庫。如果懷疑有不當行爲,日誌會發現哪些ssh認證用戶連接了特定推送。

我不確定gitosis是否暴露了連接的SSH用戶的名稱,因此可以對提交消息進行簡單的交叉檢查,但我期望一個有天賦的Pythonista可能能夠提出一些建議。或者,向Gitosis的作者Tommi Virtanen發出功能請求。 TV's cobweb

+0

+1 nice answer() – alexandrul 2009-09-27 10:31:22