2012-02-14 45 views
1

Git是一個非常強大的工具,但不是那麼容易使用安全問題使用Git時,作爲部署工具

舉例來說,我很高興使用git作爲一種工具,從我的git倉庫更新我的遠程站點。問題是在我的網站的根目錄有一個.git目錄,外部用戶可以使用site/.git簡單地訪問它,這很糟糕,因爲它們可以很容易地獲取我的代碼歷史記錄,基本上可以獲取當前代碼,甚至可以從配置文件中獲取密碼和私人信息。

那麼什麼是正確的方式來使用git,可以充分利用git,但沒有引入這些威脅?

使用git clone git://repo site_root來初始化網站,而git pull得到的變化很方便,但也帶來了巨大的安全問題。

是否有任何方法可以像上述步驟一樣方便,但沒有安全隱患?

+2

爲什麼你用git來部署你的網站而不是部署工具?或者只是讓.git目錄不可瀏覽? – JaredPar 2012-02-14 17:20:22

+0

我使用git clone來部署代碼,因爲我的web應用程序使用git進行管理,git實際上比ftp更好,因爲有時我可以在遠程站點上進行修改,然後我可以提交併將這一更改推送到我的git repo,也我可以在本地PC上進行更改,然後通過簡單地使用git pull,可以帶來如此多的便利的任何其他工具,輕鬆地將該更改應用到服務器上? – thinke365 2012-02-14 17:48:20

+0

跟蹤私人信息和密碼本身就是一個安全問題:它使您不可能在任何地方發佈您的信息庫。 – Cascabel 2012-02-14 23:25:27

回答

1

嗯,我不是真的很喜歡直接使用git來自動部署代碼的最後一個版本,但這是另一個問題。

關於您的安全問題,一個非常基本的解決方案是刪除對.git文件的訪問(使用htaccess文件?)。

另一件事是從git倉庫中刪除你的密碼,那麼在你的版本控制系統中可能沒有使用。

+0

中的其他項目也應該包含該密碼。 htacess的作品,但它很容易出錯,因爲你應該在/site_root/.git/中創建.htacess,但這個文件不會被git跟蹤,每次你部署你的web應用程序時,你應該手動創建這樣的文件,這真的很無聊,有時你甚至可能忘記創建這個文件,是否有更簡單的方法來創建可以通過git進行跟蹤的.htacess,這意味着我不必將.htaccess放入。git目錄,當然這個配置應該禁止訪問.git目錄? – thinke365 2012-02-15 01:22:57

+0

您可以在'.git'目錄之外創建'.htaccess'。通常沒有必要,因爲大多數Apache安裝已經阻止你查看'.anything'文件。 – ceejayoz 2012-02-15 02:01:30

1

http://www.clientcide.com/best-practices/exporting-files-from-git-similar-to-svn-export/

從上面:

下面是取檔案,並將其發送到 不同的位置,我的單行命令:

git的存檔HEAD | (CD〜/路徑/地方/我/想/它/ & &焦油-xvf - )

這將提取整個庫到指定路徑(不 的git的文件和諸如此類的東西)。

但是,有時候我只想拿出圖書館的一部分。 git的存檔總是給你事情的方方面面,其還挺吸, 在這種情況下我使用rsync,像這樣:

rsync的路徑/我/想/爲/ export/-ri --del -m --exclude 「*」。 〜/路徑/地方/我/想/它/ | grep的ST

最後一點 - grep的ST將限制什麼,我看到這麼 輸出,我只看到更新的文件。我只是爲了理智 檢查我的出口。如果我看到一個TON的東西去更新一個路徑, 已經有庫,我知道我只更改了一個文件,然後我 知道我得到了路徑錯誤。

2

Apache至少會默認其配置爲禁止對以.開頭的任何文件進行Web訪問,這也可以在任何其他Web服務器中完成。

此外,最好把Web根目錄外的敏感文件,即:

.git/ 
config.file 
public/ 
public/index.html 

,並在文檔根目錄的網站是public/目錄。

0

@ JaredPar的評論和@Chris Shain上面的答案(對於git存檔爲+1)的組合。

我也用git archive,然後用廚師進行實際部署。不能更簡單。

  1. git archive <tag_name> | gzip > rc.tar.gz
  2. mv rc.tar.gz我的食譜
  3. 上傳菜譜

廚師的客戶端在我的服務器上運行的運行配方的壓縮文件複製到chache位置,並將其解壓到我Web服務器目錄。

自我提醒:發佈配方在github

0

如果有在生產服務器的完整的回購是一個要求,然後有一個解決方案。

你可以在文件系統中的某個地方擁有整個歷史記錄,並擁有git「指向」它。

$ cd /public      # go to the public directory 
$ git clone git://repo    # to initialize the web site 
$ mv .git /private/repo.git   # move sensible information to a private place 
$ export GIT_DIR=/private/repo.git # make git "point" to the history 
$ git pull       # update changes 

如果你這樣做,你的歷史將在/private/repo.git不是通過網絡訪問,並且工作目錄會在/公共,服務只有您指定的文件的版本。

欲瞭解更多信息,你可以閱讀progit

0

我會復活這個問題,因爲我也在考慮安全問題。

您應該使用分離的工作樹,如解釋here。你可以在web根目錄之外創建你的git倉庫,並讓git指向不同目錄下的源代碼。