web-dev-qa-db-ja.com

特定のディレクトリの既存または将来のサブディレクトリにある特定のユーザーに読み取り/書き込みを許可するにはどうすればよいですか?

VPSで自分のgitリポジトリをホストしています。私のユーザーがジョンだとしましょう。

私はsshプロトコルを使用してgitリポジトリにアクセスしているため、URLはssh://[email protected]/path/to/git/myrepo/のようになります。

ルートは、/path/to/gitの下にあるすべての所有者です

/path/to/git/myrepoの下にあるすべてのユーザーにjohnへの読み取り/書き込みアクセス権を付与しようとしています

私はchmodsetfaclの両方を試してアクセスを制御しましたが、どちらも同じように失敗します。それらはすべての現在の既存のサブディレクトリ of /path/to/git/myrepoですが、新しいディレクトリが作成されるとすぐに、ユーザーは新しいディレクトリに書き込むことができません。

Gitには、各コミット後に権利を再適用できるフックがあることは知っていますが、これは非常に基本的な目的には複雑すぎるため、間違った方向に進んでいると思い始めています。

[〜#〜] q [〜#〜]:rwにjohnへのアクセス権を/path/to/git/myrepoの下にあるすべてのものに付与し、ツリー構造の変更に復元できるようにするには、どうすればよいですか?

Q2:一般的なアプローチを変更する必要がある場合は、教えてください。

編集:質問はそのまま回答されましたが、それは間違った質問でした。正しい質問は、「sshアクセスで使用するためにサーバー上で裸のgitリポジトリを構成する方法」でしょう。私自身の答えを見てください。

8
Samuel Rossille

たとえば、グループmyrepousersを作成し、gitユーザーをそのグループに追加します。

次に、/ path/to/git/myrepoの下にあるすべてのグループをmyrepousersに変更します。

chown -R .myrepousers /path/to/git/myrepo

次に、権限を修正します。

chmod -R g+w /path/to/git/myrepo
find /path/to/git/myrepo -type d -exec chmod -R {} g+s \;

すべて設定する必要があります。

5
Serge

実際、それは間違ったアプローチでした。追加の調査の結果、私は私の場合、リポジトリ内のファイルシステムの権利を処理するためにgitのビルドイン機能を使用する必要があることを発見しました。

基本的には、git initsharedオプションを使用して行われます。

  • group:リポジトリを初期化して、ファイルとディレクトリにユーザーとグループの書き込みアクセス権を与え、他の全員に読み取りアクセス権を与える
  • 0660:同じですが、他のユーザーの読み取りアクセス権はありません。

新しく作成されたディレクトリとファイルには、適切な権限が自動的に付与されます。既存のリポジトリでgit initを使用して、コンテンツを失うことなく再構成することもできます。

結局私がしなければならなかったこと:

  • グループを作成するmygitrepo
  • ユーザーを追加する
  • chmod -R gitリポジトリをroot:mygitrepo

そして今、グループのすべてのユーザーはプル/プッシュできますが、他の誰もできません。それは、ファイルシステムの権限をいじることなく可能です。

git init --bare --shared=0660

http://www.kernel.org/pub/software/scm/git/docs/git-init.html 詳細情報。

4
Samuel Rossille

ACLがサポートされている場合は、デフォルトのACLを使用して実行できます。 ls -lを実行しても表示されないため、これらのことは忘れがちです。

find /path/to/git/myrepo -type d -exec setfacl -m d:u:john:rwx {} +

しかし、もう少し整理された何かをしたいと思うかもしれません。ギトライトを導入すると、より良いソリューションが得られる場合があります。

2