2013-09-23 116 views
0

我在webserver(Apache)上有一個git倉庫,它在用戶a的主目錄內設置。CGI腳本的git pull由'nobody'運行

git clone ssh://[email protected]_url:7999/path/to/repository/repo.git 

git-repository託管在存儲服務器上。身份驗證通過用戶a的ssh密鑰工作。

現在我正在嘗試構建一個CGI腳本,該腳本向我展示了該存儲庫上的一些摘自git log的摘錄。這很有效,但我似乎無法在CGI腳本中使用git pull,因爲它不是由用戶a運行,而是由用戶nobody運行。用戶nobody沒有權限讀取由a克隆的git-repository的內容,並且沒有在存儲服務器上設置ssh密鑰。

有沒有辦法從CGI腳本中運行git pull,這樣就可以像用戶a那樣「屏蔽」,以便它能夠拉動?

+0

http://httpd.apache.org/docs/2.2/suexec.html – Quentin

+0

恐怕這個解決方案不適合我,因爲我不是服務器管理員的問題,因此我可以'只是安裝了一些東西,管理員會爲我安裝和配置這個問題值得懷疑。 – Vince

+0

難道還有其他方法可以實現嗎? – Vince

回答

0

您至少有三個選項。

  1. 創建nobody擁有的單獨克隆。
  2. 修改a擁有的克隆爲anobody所屬的assigned to a group
  3. 創建一個作爲a運行的cron作業,以定期在存儲庫上運行git fetch。使存儲庫具有世界可讀性。例如,您可能需要修改CGI程序,以便按照origin/master而不是master進行操作。

對於選項1和2,您需要安排nobody訪問存儲。其中一種可能性是爲nobody創建一個無密碼(未加密)的SSH密鑰,並將公鑰添加到Stash進行授權。這確實會帶來一些風險:任何獲得nobody密鑰副本的人都可以輕鬆地執行任何操作nobody