2013-04-24 31 views
11

Trong hơn một năm, tôi đã gặp sự cố với GIT và quyền truy cập thư mục/tệp. Tôi có một kho lưu trữ trung tâm mà nhiều nhà phát triển đẩy mã, sử dụng ssh (nguồn gốc được thiết lập như ssh: // example/git/repository). Tôi đã thiết lập các kho lưu trữ như sau:Quyền sở hữu/nhóm tệp được thay đổi khi người dùng chuyển đến kho GIT

1) tập tin cấu hình của tôi trong kho trung tâm: [lõi] repositoryformatversion = 0 chế độ File = true trần = true sharedrepository = 0660

2) Tất cả các điều khoản thư mục kho lưu trữ được đặt thành 770 (rwxrwx ---) 3) Tất cả các tệp trong ./objects/XX và ./objects/info được đặt thành 440 (r - r -----) 4) Tất cả các tệp khác tệp được đặt thành 660 (rw-rw ----) 5) Quyền sở hữu được đặt thành root: group_name

(lưu ý rằng điều này đến từ thiết lập được đề xuất trong phản hồi hàng đầu trong chủ đề này: Making git push respect permissions?)

Tất cả người dùng truy cập đều là thành viên của nhóm 'group_name'.

Vấn đề là nếu user1 đẩy vào kho lưu trữ, quyền sở hữu tệp trên một số tệp được đặt thành user1: user1 - nghĩa là nhóm được thay đổi. Khi điều này xảy ra, không người dùng nào khác có thể đẩy (hoặc kéo) từ kho lưu trữ, vì họ không có quyền đọc, ghi hoặc thực hiện từ các tệp được yêu cầu trong kho lưu trữ nữa.

Tôi đã đọc tất cả các chuỗi tôi có thể tìm thấy về vấn đề trên Stack Overflow và khá nhiều ở khắp mọi nơi khác trên mạng, nhưng tôi tiếp tục chạy vào cùng một vấn đề này.

Vấn đề là, tôi không chắc liệu vấn đề này có phải là một trong GIT hay một trong UNIX và tôi không chắc chắn cách sửa lỗi. Làm thế nào tôi có thể ngăn chặn nhóm bị thay đổi khi người dùng đẩy vào kho lưu trữ?

+0

Làm thế nào ... bạn đang đẩy? Bạn đang làm gì với quyền của người dùng này? – Makoto

+0

Đẩy sử dụng: git push Chúng tôi đang đẩy thông qua ssh. Mỗi người dùng đang sshing vào máy chủ bằng tài khoản người dùng UNIX của họ. Ví dụ, tôi là người dùng shiro trên máy chủ. Thông tin đăng nhập tôi đang sử dụng cho SSH là dành cho người dùng shiro. Người dùng shiro là một phần của nhóm shirogroup. Quyền sở hữu tệp là root: shirogroup. Điều này có trả lời câu hỏi của bạn không? – Shiro

+0

Tôi có suphp trên máy chủ của tôi - có thể đây là những gì đang thay đổi quyền truy cập tệp của tôi chứ không phải GIT? – Shiro

Trả lời

16

Có vẻ như bạn đã thay đổi core.sharedRepository sau khi khởi tạo kho lưu trữ thay vì sử dụng init --shared=group nên thiết lập quyền truy cập chính xác. Điều này có nghĩa rằng bit sgid sẽ không được đặt trên thư mục của kho git một cách chính xác. Bạn sẽ phải sửa lỗi này bằng tay với một cái gì đó như (giả sử GNU tìm và xargs):

find . -print0 | xargs -0 chgrp group_name 

find . -type d -print0 | xargs -0 chmod g+s 
+0

Bạn là một hoàng tử. Bạn đã sửa đổi rằng tôi đã thay đổi core.shareRepository sau khi khởi tạo kho lưu trữ và sửa chữa của bạn đã thực sự hoạt động. Tôi đã chiến đấu với điều này vào những thời điểm khác nhau trong năm qua, vì vậy tôi rất đánh giá cao để cuối cùng có nó làm việc! – Shiro

+0

Điều này là chính xác và hữu ích, nhưng để thêm vào một chút: quyền sở hữu nhóm của một tệp sẽ được đặt lại dựa trên chủ sở hữu nhóm thư mục (khi g + s được đặt) trên cơ sở mỗi thư mục. Điều này có nghĩa là bạn có thể có nhiều chủ sở hữu nhóm cho các thư mục khác nhau, miễn là điều này được thiết lập trên cơ sở mỗi thư mục, mỗi kho (và tất cả các g + s được đặt). – dmansfield