我有一個用git,gitosis,nginx和php-fpm設置的CentOS 6服務器。在nginx和php-fpm環境下使用git post-receive hook
隨着我們的設置,通過nginx的PHP-FPM,這是在每個站點的基礎配置爲安全起見,特定用戶運行的執行PHP腳本(即不是所有的下nginx的:nginx的),因爲我們不希望在一個網站遭到破壞的情況下,所有網站都會受到影響。
我們的環境很好,但是,當涉及到git時,php-fpm創建了一個基本問題。
在成功地在本地運行以下命令:
$ git push origin
我的後收到鉤運行:
#!/bin/sh
GIT_WORK_TREE=/var/www/vhosts/example.com/httpdocs git checkout -f
通常情況下,這將然而回購的內容複製到httpdocs資料夾,由於安裝了php-fpm並且目錄+文件歸特定用戶所有,gitosis(或任何其他非root用戶)無法寫入目錄。這是由以下錯誤明顯:
remote: error: git checkout-index: unable to create file index.php (Permission denied)
它是有道理的,這就是我所期望的。但是,我想知道在這個特定情況下是否有辦法解決這個問題?有沒有一種方法可以修改post-receive鉤子以root身份運行(它目前由gitosis
用戶運行)或以某種其他方式運行以便它成功?
只是要清楚:設置沒有其他問題,git工作正常,nginx/php-fpm工作正常,但這是一個權限問題,我不太清楚如何解決。
這樣做的問題是我必須將gitosis添加到每個網站的用戶組。這反過來會否定以權限的立場讓每個用戶都離開彼此的理由。我開始認爲如果不損害我們設立的系統的完整性,這是不可能的。 – Brendan 2012-03-05 21:04:29
我不明白你爲什麼必須使用這種技術爲每個網站的用戶組添加'gitosis'? 'sudo'會以'www-data'(或任何實際的網絡用戶)的身份運行結帳腳本。你需要一個單獨的結帳腳本,在每個用戶的'/ etc/sudoers'裏有一個匹配的條目,但是如果真的需要的話,可以對它進行參數化。 – msandiford 2012-03-06 09:59:06
沒有單個Web用戶,因此www數據不適用。我們的服務器設置時考慮了相當嚴格的安全性 - 每個網站都有自己的用戶。這些用戶不屬於任何組,但他們自己的,因此不能修改eachothers文件,這在使用php-fpm運行php時很重要(因爲php以用戶身份運行)。 – Brendan 2012-03-06 16:45:23