2009-12-23 23 views
9

Tôi đang cố gắng thiết lập một móc hậu nhận git sao cho khi nhận được một cam kết, một bản sao khác của kho lưu trữ trên máy được cập nhật (ví dụ: git pull origin master). Tôi đang sử dụng gitosis để phục vụ kho lưu trữ và vì vậy tôi tin rằng móc sau nhận sẽ được chạy với tư cách là người dùng gitosis, trong khi kho lưu trữ tôi muốn cập nhật khi nhận được thuộc sở hữu của www-data. Làm thế nào tôi nên đi về việc này?Git post-receive hook để cập nhật một bản sao cục bộ thuộc sở hữu của một người dùng khác

Tôi đã nghe khoảng setuid tập lệnh nhưng tôi không chắc liệu đây có phải là rủi ro bảo mật không? Và nếu nó không phải là một nguy cơ bảo mật, làm thế nào tôi sẽ đi về việc này? Tôi đoán tôi sẽ làm một cái gì đó giống như làm cho kịch bản thuộc sở hữu của www-data và làm cho nó thế giới thực thi và kích hoạt bit setuid? Tôi đoán kịch bản này sẽ khá nhiều vô hại vì tất cả những gì nó làm là cập nhật kho lưu trữ, nhưng tôi muốn chắc chắn. Cảm ơn!

Chỉnh sửa: Có cách nào để thực hiện việc này bằng cách sử dụng sudo không? Điều đó có an toàn hơn setuid không? Ý tôi là, tôi không nghĩ rằng có nhiều vấn đề với setuid nếu người dùng không phải là người chủ, nhưng tất cả cùng nó có vẻ như tôi sẽ phải nhảy qua một vài hoops để có được một tập lệnh setuid để chạy.

Chỉnh sửa lần thứ hai: Có vẻ như tôi có thể có thể thực hiện việc này với một số phép thuật /etc/sudoerssudo -u. Có lẽ tôi nên đăng nó trên ServerFault thay vào đó, nhưng ít nhất tôi đã học được một chút từ nỗ lực này.

Trả lời

14

IMHO Điều này sẽ có trên serverfault, nhưng đây là câu trả lời;

Add:

gitosis ALL=(www-data) NOPASSWD: /path/to/git 

đến/etc/sudoers

và chạy lệnh như sudo -u www-data <whatever the command is>

+0

Yeah, tôi loại figured nó đã được phù hợp hơn cho ServerFault sau khi công bố, nhưng tôi thường thấy những thứ git đây. Bạn có chắc chắn rằng dòng cho phép gitosis để chạy như www-dữ liệu? Tôi không chắc lắm.Ngay bây giờ tôi đang cố gắng làm một cái gì đó như thế này trong/etc/suiders: gitosis ALL = (www-data)/path/to/script và tập lệnh thực hiện lệnh git pull. – Ibrahim

+0

Ngẫu nhiên, làm thế nào để bạn di chuyển một câu hỏi như thế này để serverfault? – Ibrahim

+0

Chuyển động được thực hiện bởi người kiểm duyệt. – Kimvais

3

Chú ý rằng tôi đang sử dụng git Tên truy nhập, vì vậy, nếu bạn đang sử dụng gitosis hoặc bất kỳ tên người dùng nào khác, chỉ cần điền vào tên người dùng của bạn!

Trong giao diện điều khiển với gốc người dùng thực hiện lệnh này:

visudo 

Các "vi" biên tập viên sẽ được mở ra. Thêm những dòng này:

Defaults:git !authenticate 
git ALL=(www-data) ALL 

Trong kết quả tập tin (mà được mở trong trình soạn thảo "vi" bằng cách gọi "visudo") nên trông như thế này:

# /etc/sudoers 
# 
# This file MUST be edited with the 'visudo' command as root. 
# 
# See the man page for details on how to write a sudoers file. 
# 

Defaults env_reset 
Defaults:git !authenticate 

# Host alias specification 

# User alias specification 

# Cmnd alias specification 

# User privilege specification 
root ALL=(ALL) ALL 
git ALL=(www-data) ALL 


# Allow members of group sudo to execute any command 
# (Note that later entries override this, so you might need to move 
# it further down) 
%sudo ALL=(ALL) ALL 
# 
#includedir /etc/sudoers.d 

Sau đó nhấn Ctrl + O để lưu tệp, sau đó nhấn Enter để chấp nhận tên tệp (bla bla bla), sau đó nhấn CTRL + X để đóng trình chỉnh sửa "vi".

Thì đấy! Bây giờ git dùng có thể thực hiện các lệnh như www-data sử dụng:

sudo -u www-data git pull origin master 
Các vấn đề liên quan