我在本地和我的服務器上設置了git,並創建了一個'post-receive',這樣當我推送到活動服務器時,它應該檢出到網站的虛擬主機目錄。Git Post-Receive的權限
#!/bin/sh
GIT_WORK_TREE=/var/www/domainname/public_html/ git checkout -f
但是,當我嘗試做我推,它超出了主成功,但我得到試圖在我的服務器Web根目錄創建這些文件時,權限被拒絕的錯誤。
例如remote: error: unable to create file index.php (Permission denied)
由於我設置我的服務器的方式,這些錯誤實際上對我有意義。我禁用了root訪問權限並創建了一個通過visudo添加到sudoers的新用戶 - 然後爲此用戶設置SSH密鑰。我使用這個用戶推出我的git更改到服務器。
問題是,我相信我連接推送的這個用戶沒有寫入虛擬主機目錄的權限。這些文件夾中的所有文件都由具有相同組的www-data(我的nginx用戶)擁有。
解決方案是什麼?使用SSH密鑰創建另一個用戶來連接具有更高權限的git,或者有辦法像授予能力那樣授予接收後的sudo?
對於這個漫長而囉嗦的問題抱歉,但想要完全清楚我所做的。
感謝您的答覆。但要清楚的是,我沒有任何問題推到服務器上的回購站,當post-receive試圖將文件複製到我遇到的問題的web根目錄時。那裏的文件由www-data擁有,以便Web服務器可以寫入/正確運行它們。例如從管理員添加插件。 – bbish007 2013-04-07 17:44:34
此外,它是我用來使用ssh推送遠程的用戶,它不具有複製和覆蓋Web根目錄中文件的權限。我覺得我正在俯視一些明顯的東西! – bbish007 2013-04-07 17:46:27
@ bbish007唯一可以幫助的事情(除了使用sudo權限執行命令之外)是讓該用戶與web根目錄中的文件組在同一組中。 – VonC 2013-04-07 17:49:10