2012-08-22 28 views
12

Thử nghiệm với git, tôi đã thiết lập Gitlab cho kho lưu trữ tự lưu trữ và có vẻ tuyệt vời.Gitlab/Gitolite có thể thực thi đúng tên người dùng/email

Một điều làm tôi thất vọng là có vẻ như bất kỳ ai cũng có thể thực hiện cam kết với bất kỳ ai khác (ví dụ: giả mạo cam kết).

ví dụ: Tôi đã thiết lập người dùng của tôi trong Gitlab với truy cập khóa công khai

  • User1
  • User2

Bây giờ chỉ những người dùng có thể đẩy - sử dụng phím SSH tin của họ - nhưng có vẻ như không có gì ngăn cản User2 điều chỉnh gitconfig của họ để cam kết dưới tên của User1 và đẩy điều đó lên?

Lịch sử trong gitlab và git -show cho thấy có duyên như bất cứ điều gì văn bản gitconfig của User1 là. Tôi muốn Gitlab để đóng dấu tên người dùng liên kết với các khóa ssh đẩy vào lịch sử thay vì vậy tôi biết có khóa ssh được sử dụng để đẩy.

Kịch bản là repo sẽ được sử dụng trong môi trường nhóm và có vẻ như thận trọng khi không cho phép các cam kết giả mạo.

Tôi đã đọc và hiểu rằng thông thường người ta có thể thay đổi quy trình làm việc để có một kho lưu trữ may mắn và chỉ có các ủy viên đáng tin cậy có thể đẩy điều đó - nhưng ở giai đoạn này trong khi học git tôi muốn tập trung hơn/SVN loại công việc.

Có thể sử dụng móc này không?

Có một số similar question trả lời cho gitosis nhưng ngay cả khi xuất hiện để chỉ thực thi người nhận là từ một loạt người dùng không ngăn User1 giả mạo như User2 - theo như tôi có thể nói.

PS: Có lẽ tôi đang đặt câu hỏi sai - có cách nào trong gitlab khám phá khóa ssh nào (và do đó người dùng thực) được sử dụng để đẩy mã vào repo không? Nó không xuất hiện như vậy từ những gì tôi có thể tìm thấy.

Trả lời

4

Update 2015

Như chủ đề này đề cập đến, GitLab Doanh nghiệp có số móc git của nó liên quan đến một dự án một cách để kiểm soát email:

Tới dự án cài đặt -> móc git và kiểm tra xác nhận của email của tác giả.

Bất kỳ email nào không khớp với người dùng đã biết đều bị từ chối.


câu trả lời gốc (2012)

Một cách để đạt được một phần điều khiển người dùng id là làm cho gitolite (mà gitlab dựa vào) từ chối việc đẩy mạnh nếu ít nhất một trong những cam kết đẩy không cam kết bởi người đẩy nó.

Khi bạn đẩy, bạn được xác thực (hoặc dựa trên tên khóa công cộng được đăng ký bởi Gitolite hoặc bằng cách khác như kết nối LDAP).
Bạn có thể thêm móc pre-receive sẽ kiểm tra tất cả các cam kết mới và tìm kiếm ít nhất một cam kết theo đúng tên (ví dụ: id của người dùng đang nhấn cam kết).
Xem ví dụ này pre-receive hook làm ví dụ.

+0

Tôi đã thử điều này và nó rất gần như hoạt động nhưng tôi nhận được một giá trị kỳ lạ cho $ GL_USER. Các móc chạy nhưng lỗi với "_remote: không có cam kết tìm thấy với firstname_lastname_gmail_com_1345598530 như committer name_". Tôi không biết chuỗi số cuối cùng đến từ đâu - một số thứ bên trong gitlab? Gitlab không xuất hiện để hỗ trợ bất cứ điều gì khác hơn [móc web của họ] (https://github.com/gitlabhq/gitlabhq/issues/476) vì vậy có lẽ điều này sẽ không làm việc cho Gitlab? – fiat

+0

sau khi tìm hiểu thêm, giá trị $ GL_USER của _firstname_lastname_gmail_com_1345598530_ là cột định danh của bảng 'khóa' trong cơ sở dữ liệu gitlab lưu trữ khóa người dùng ssh. Dường như nó được tạo tự động và không thể đặt từ giao diện người dùng. – fiat

+0

@fiat Tôi xác nhận: 'GL_USER' được đặt bằng tên khóa công khai, được Gitlab đặt tên theo cách đó và được đăng ký bởi gitolite. – VonC

Các vấn đề liên quan