2012-02-14 10 views
1

gitのは、例えばセキュリティ上の懸念

を使用することは容易非常に強力なツールではなく、展開ユーティリティとしてのgitを使用しているとき、私は私のgitリポジトリから私のリモートサイトを更新するためのツールとしてのgitを使うことをうれしく思います。問題は、私のウェブサイトのルートに.gitディレクトリがあるということです。外部のユーザーはサイト/ .gitを使って簡単に訪問できます。ひどいです。彼らは簡単に自分のコード履歴を取得することができます。設定ファイルからパスワードと個人情報を取得します。

だから、これらの脅威を導入することなくgitを最大限に活用できるgitを使用する正しい方法は何ですか?

git clone git://repo site_rootを使用してWebサイトを初期化し、変更を加えるgit pullを使用することは非常に便利ですが、セキュリティ上の大きな問題も発生します。

上記の手順と同じくらい便利な方法はありますか?セキュリティの落とし穴はありませんか?

+2

デプロイメントツールの代わりにgitを使用してウェブサイトを展開するのはなぜですか?単に.gitディレクトリをブラウズできないようにするには? – JaredPar

+0

私のウェブアプリケーションはgitを使って管理されているのでgit cloneを使うとコードをデプロイすることができますが、gitはftpよりもはるかに優れています。これはリモートサイトで変更できる場合があります。私はローカルのPC上で変更を加えることができます、そして、私は簡単にその変更をサーバーに適用することができます。単にgit pullを使うだけです。 – thinke365

+0

個人情報とパスワードの追跡はセキュリティ上の問題であり、リポジトリをどこにでも公開することは不可能です。 – Cascabel

答えて

1

まあ、gitを使って自動的にコードの最終バージョンを配備するのは大好きではありませんが、それは別の質問です。

セキュリティ上の問題に関して、本当に基本的な解決策は、.gitファイルへのアクセスを削除することです(htaccessファイルを使用していますか?)。

もう1つのことは、gitリポジトリからパスワードを削除することです。あなたのバージョンコントロールシステムでは、おそらくそれが使用されていない可能性があります。

+0

など、バージョン管理システムで追跡する必要があります。 htacessは動作しますが、エラーが起こりやすいのは、/ site_root/git /に.htacessを作成する必要があるからです。しかし、このファイルはgitで追跡されません。Webアプリケーションをデプロイするたびに手動で作成する必要があります。いつかこのファイルを作成するのを忘れるかもしれませんが、gitで追跡できる.htacessを作成する簡単な方法があります。つまり、.htaccessを入れる必要はありません。もちろん、この設定は.gitディレクトリへのアクセスを禁止する必要がありますか? – thinke365

+0

'.git'ディレクトリの外に' .htaccess'を作成することができます。ほとんどのApacheのインストールでは '.anything'ファイルを表示できないので、通常は必要ありません。 – ceejayoz

1

は、以上のことからhttp://www.clientcide.com/best-practices/exporting-files-from-git-similar-to-svn-export/

を参照してください:

は、ここでアーカイブを取り、 別の場所にそれを送信するための私の1行のコマンドです:

GitのアーカイブHEAD | (CD〜/パス//I /希望/それ/ & &タール-xvf - )

これは、指定したパス( なし.gitファイルやその他もろもろ)にライブラリ全体を抽出します。

しかし、時々、私はライブラリの一部だけを取り出したいと思っています。 gitのアーカイブは常にあなたにちょっと、 を吸う全体エンチラーダを与え、この場合には、私はこのように、rsyncのを使用します。

rsyncのパス/ I /希望/へ/エクスポート/ -ri --del -m --exclude 「*」 〜/パス//I /希望/それ/ | grepのST

その最後のビット - STはので、私は唯一の更新されたファイルを参照してください を私が見るものの出力を制限するグレップ。私は正気にそれを使用する 私の輸出をチェックしてください。私が何かのものを見たら、 に既にライブラリがあり、私はただ一つのファイルしか変更していないことを知っているパスを更新すると、 私はパスが間違っていることを知っています。

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の場所にZIPファイルをコピーして、自分の中にそれを抽出するためのレシピを実行しますWebサーバーディレクトリ。自己へ

注:本番サーバーで完全なレポを持つことが必要条件である場合には、解決策があるgithubの

0

上でレシピを公開しています。

あなたはファイルシステムのどこかに歴史全体を持ち、そこに "ポイント"を持つことができます。あなたがそれを行う場合

$ 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のように、独立した作業ツリーを使用する必要があります。 gitリポジトリをWebルートの外側に作成し、別のディレクトリにあるソースコードを参照してください。

関連する問題