2011-11-23 37 views
15

Tôi đang sử dụng git và Codebase cho một dự án.Ngừng người dùng cam kết git là người dùng sai

Tôi vừa làm một bài kiểm tra và tôi có thể cam kết vào kho git với một địa chỉ email và tên khác nhau làm cho nó gắn thẻ cam kết như là bởi một người dùng khác. Tôi đã đẩy nó vào kho lưu trữ và nó xuất hiện như người dùng đã cam kết mặc dù đó là tôi.

Có cách nào để ngăn người dùng cam kết hoặc đẩy chi tiết người dùng của người khác (có hiệu quả để họ không thể "giả mạo" cam kết là từ một người dùng khác) không?

Edit:

tôi giả sử xác thực này sẽ cần phải xảy ra ở giai đoạn đẩy cam kết đến máy chủ từ trong lao động địa phương sao chép nó chỉ đơn giản là một kho lưu trữ mà người dùng có quyền truy cập đầy đủ, để làm bất cứ điều gì họ muốn với. Đây có phải là điều gì đó tôi nên hỏi Codebase về có thể?

Chỉnh sửa 2:

Git cấu hình theo yêu cầu:

(repo/.git/config)

[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 
+0

Bạn có thể đăng nội dung của tệp .git/config của mình không? –

+0

Bạn đang sử dụng máy chủ nào? Đồng bằng git, gitosis, gitolite, ...? – CodesInChaos

+1

OP sử dụng Codebase, tương tự như GitHub. Nó ở trên cùng của câu hỏi. –

Trả lời

3

Ooops: Mặc dù đây là một kỹ thuật có giá trị, nó giả định bạn có toàn quyền kiểm soát toàn bộ máy chủ. Nếu bạn đang sử dụng một giải pháp lưu trữ tất cả các cược được tắt.

Bạn có thể xác thực tên tác giả và email trong móc update của kho lưu trữ. Bạn có thể nhận được cả hai giá trị như sau:

#!/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) 

Bí quyết, tất nhiên, là tìm hiểu xem các giá trị này có hợp lệ hay không. Dưới đây là một mẹo:

Bạn có thể sử dụng tùy chọn command="" trong cấu hình ssh của mình để tạo một trình bao bọc xung quanh git-receive-pack ánh xạ các khóa ssh để tác giả thông tin. Ví dụ, một cái gì đó như thế này:

#!/bin/sh 

GV_AUTHOR_NAME="$1" 
GV_AUTHOR_EMAIL="$2" 

export GV_AUTHOR_EMAIL GV_AUTHOR_NAME 
eval exec $SSH_ORIGINAL_COMMAND 

Và bạn sẽ sử dụng một cái gì đó authorized_keys dòng như sau:

command="~/bin/gitvalidator 'Lars Kellogg-Stedman' '[email protected]'" ssh-rsa ... 

Kết quả của tất cả điều này là update kịch bản của bạn sẽ có các biến môi trường GV_AUTHOR_NAMEGV_AUTHOR_EMAIL có sẵn, và có thể kiểm tra những chống lại các cam kết và thoát ra với một lỗi nếu họ không phù hợp.

+0

Nó là phong tục để lại một bình luận nếu bạn downvote câu trả lời của ai đó. Điều đó giúp mọi người cải thiện chất lượng câu trả lời của họ theo thời gian. Nếu có điều gì đó sai với câu trả lời này, vui lòng cho tôi biết để tôi có thể khắc phục. Cảm ơn! – larsks

+0

(... mặc dù tôi nghi ngờ điều này chỉ đơn giản là trả thù.) – larsks

+0

Tôi nghĩ rằng tôi sẽ hỏi những người ở Codebase vị trí của họ về điều này là gì, cảm ơn :) – Richard

-3

Xin lỗi bài của tôi đã bị xóa trước khi tôi gửi bản cập nhật mới nhất của tôi:

Bạn có thể cam kết như người khác khi bạn có giấy uỷ quyền.

Chỉ cần làm rõ, kịch bản bạn đang hỏi là như sau:

Người dùng Foo và Bar có thể cam kết gửi lại. Bạn muốn ngăn người dùng Foo cam kết với repo với tư cách là người dùng Bar.

Trong trường hợp này, thanh người dùng sẽ phải bảo vệ khóa SSH riêng của họ, giống như họ sẽ bảo vệ mật khẩu. Như được sử dụng để xác thực cam kết của bạn.

+0

Bạn có thể đặt tên và email của mình thành bất kỳ thứ gì bạn muốn. Nó không quan trọng những gì ssh chính bạn đang sử dụng (hoặc thậm chí nếu bạn đang sử dụng ssh hay không). Khóa SSH hoàn toàn không có gì để làm với tên và địa chỉ email được ghi bởi git. – larsks

+0

Cam kết được thực hiện cục bộ bởi git hoàn toàn độc lập với giao thông được sử dụng. Trong một thiết lập thông thường, nếu bạn đang sử dụng ssh như một phương tiện, thông tin đăng nhập được sử dụng để xác thực người dùng thực hiện thao tác đẩy không cần phải làm gì với nội dung của các cam kết đang được đẩy. –

+0

Anh ta hỏi về Codebase, tương tự như GitHub. Nhìn vào vấn đề liên quan đến những gì thực sự được hỏi sẽ hữu ích khi đánh giá câu trả lời! –

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