Tạo người dùng SSH với các đặc quyền hạn chế chỉ sử dụng kho Git


12

Tôi có một kho git được lưu trữ trên máy chủ SunOS của mình, mà tôi sử dụng từ xa thông qua ssh

git clone ssh://myUser@mydomain.com/path/to/git

Bây giờ tôi cần thêm nhiều người dùng hơn để có thể truy cập kho lưu trữ đó, nhưng không biết làm thế nào.

Tôi đã thêm một testUser vào ssh, nhưng dường như tôi không thể giới hạn đặc quyền người dùng đó chỉ sử dụng git.

testUser có thể ssh thông qua và duyệt toàn bộ máy chủ.

Làm cách nào tôi có thể tạo người dùng chỉ có thể truy cập git từ xa, để sao chép / kéo / đẩy, v.v ...

cảm ơn

Câu trả lời:


12

Bạn có thể cân nhắc sử dụng gitolite trong một người dùng thay vì thiết lập nhiều người dùng git-shell (và quyền của nhóm và nhóm được yêu cầu để họ có thể chia sẻ quyền truy cập vào kho lưu trữ).

gitolite chạy dưới một người dùng bình thường duy nhất trên máy chủ và sử dụng các khóa công khai SSH để phân biệt quyền truy cập vào kho Git (xem phần cách mà gitolite sử dụng sshiến để biết một số chi tiết về cách gitolite thực hiện nhận dạng dựa trên SSH). gitolite cung cấp cho mỗi kho lưu trữ, mỗi chi nhánh và thậm chí một số kiểm soát truy cập trên mỗi đường dẫn.


1
+1 cho bệnh gitosis ... Nó được tạo ra chính xác cho thiết lập này.
Jeremy Bouse

12

Về cơ bản bạn có hai lựa chọn.

  1. Như topdog đã đề cập, khi bạn tạo người dùng trên máy chủ, hãy đặt shell của họ thành git-shell ( mục nhập sách ở đây ). Điều này sẽ cho phép người dùng đăng nhập thông qua SSH, nhưng thay vì chạy shell thông thường, đầy đủ tính năng (ví dụ: sh, bash, v.v.), nó sẽ chạy, git-shell, chỉ cung cấp quyền truy cập vào chức năng git.

  2. Ngoài ra, bạn có thể cung cấp kho lưu trữ của mình thông qua một giao thức khác, chẳng hạn như TCP (sử dụng git-deamon ) hoặc HTTP / HTTPS. Tôi chỉ đề xuất một kịch bản như vậy cho truy cập chỉ đọc.

Bạn đề cập đến việc muốn hỗ trợ chức năng 'đẩy' cho người dùng của mình, vì vậy bạn thực sự nên đi với tùy chọn # 1.


5

bạn cần thay đổi shell của chúng thành git-shell, điều đó sẽ chỉ cung cấp cho chúng quyền truy cập vào các hàm git mà thôi.


Cảm ơn topdog. Về cơ bản người dùng sẽ sử dụng shell git của riêng mình trên máy Mac. Tôi không thực sự muốn anh ta có thể ssh đến máy chủ. Vì vậy, nếu git repo có trên mydomain.com từ máy tính testUser / Mac, trong thiết bị đầu cuối, anh ta chỉ có thể git clone ssh: //myUser@mydomain.com/path/to/git để được nhắc nhập mật khẩu của mình, sau đó tải xuống repo. Tôi vừa thử cài đặt vỏ của anh ấy thành git-shell. Nó nhắc khi gọi clone nhưng mật khẩu đang bị từ chối.
Bạch

bạn cần đặt shell myUsers thành git-shell nếu tất cả những gì bạn muốn chúng làm trên máy chủ là chạy các lệnh git và không thể shell. Để nhắc mật khẩu, vui lòng sử dụng các phím. Đối với bảo hiểm chi tiết hơn về git trên một cái nhìn máy chủ tại Việt git cuốn sách progit.org/book/ch4-0.html
TopDog

cảm ơn đã tham khảo sách! rất hữu ích Đã kết thúc bằng cách sử dụng gitolite, mặc dù vẫn có vấn đề với thiết lập.
Bạch

git-shell : "Đây là shell đăng nhập cho các tài khoản SSH để cung cấp quyền truy cập Git bị hạn chế. Nó chỉ cho phép thực thi các lệnh Git phía máy chủ thực hiện chức năng kéo / đẩy, cộng với các lệnh tùy chỉnh có trong thư mục con có tên git-shell-lệnh trong thư mục nhà của người dùng. " Trên Linux, thêm "/ bin / git-shell" vào "/ etc / shells" và sau đó "usermod --shell / bin / git-shell $ USER". Btw, cuốn sách git hiện có tại git-scm.com/book/en/ch4-0.html
David Tonhofer

0

Một cách khác để làm điều đó là giới hạn quyền truy cập của người dùng trong ssh.

( http://prefetch.net/blog/index.php/2006/09/05/limiting-access-to-openssh-directives/ )

Ví dụ chỉ bằng cách sử dụng chỉ một người dùng, nhưng nếu người dùng trong cùng một nhóm, bạn có thể lọc họ bằng cách sử dụng chỉ thị nhóm. Cái gì đó như

AllowTcpForwarding yes
X11Forwarding yes

Match Group Users
         AllowTcpForwarding no
         X11Forwarding no
         $Here is a directive for git$
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.