4

私のサーバーには Subversion と Apache の両方がインストールされており、Apache Web ディレクトリも Subversion の作業コピーです。これは、単純なコマンドsvn update /server/stagingで最新のソースがステージング サーバーにデプロイされるためです。

Apache パブリック Web ディレクトリ: /server/staging — (これは SVN 作業コピーです。)

私のサーバーには、'richard' と 'austin' という 2 人のユーザーがいます。どちらも「開発者」グループのメンバーです。「sudo chown -R richard:developers /server」を使用して、/server ディレクトリの権限を richard:developers に再帰的に設定しました。

次に、'richard' グループと 'developers' グループの両方に対して、読み取り、書き込み、および実行のアクセス許可を設定します。

svn update /server/staging確かに、「オースティン」はコマンドを使用できるようになったはずですか? ただし、試行すると、次のエラーが表示されます。

svn: Can't open file '/server/staging/.svn/lock': Permission denied

/server の所有者を austin:developers に再帰的に変更すると、彼はコマンドを正常に実行できますが、「リチャード」は実行できません。

問題を解決するにはどうすればよいですか? ファイルがコミットされたときにステージング サイトを自動的に展開するポストコミット フックを作成したいのですが、両方のユーザーに対して機能する方法がわかりません。フックは次のようになります。

/usr/bin/svn update /server/staging

両方に同じユーザー アカウントを使用することは、実際には受け入れられる解決策ではありません。また、フック内で「root」としてコマンドを実行する方法を知りません。

どんな助けでも大歓迎です!

4

4 に答える 4

9

ディレクトリセットグループID

ディレクトリエントリのsetgidビットが設定されている場合、そのディレクトリ内のファイルは、ファイルを作成したユーザーのグループではなく、ディレクトリとしてグループの所有権を持ちます。

この属性は、複数のユーザーが特定のファイルにアクセスする必要がある場合に役立ちます。ユーザーがsetgid属性が設定されたディレクトリで作業している場合、いずれかのユーザーがディレクトリに作成したファイルには、グループの権限があります。たとえば、管理者はspcprjというグループを作成し、ユーザーKathyとMarkをグループspcprjに追加できます。ディレクトリspcprjdirは、設定されたGIDビットセットとKathyおよびMarkを使用して作成できますが、異なるプライマリグループでディレクトリ内で作業でき、そのディレクトリ内のすべてのファイルに完全にアクセスできますが、互いのプライマリグループ内のファイルにアクセスすることはできません。 。

次のコマンドは、ディレクトリにGIDビットを設定します。

chmod g+s spcprjdir

ディレクトリ「spcprjdir」のディレクトリリスト:

drwxrwsr-x 2 kathy spcprj 1674 Sep 17 1999 spcprjdir

グループ権限の実行ビットの代わりに「s」を使用すると、ディレクトリ「spcprjdir」に書き込まれるすべてのファイルがグループ「spcprj」に属します。

編集:ソース= Linuxファイルとファイルパーミッション

于 2008-10-02T21:21:31.643 に答える
0

svnserveプロトコルを使用した単純なSubversionサーバーをセットアップしsvn://ます。独自のユーザーアカウントで実行されるようにこれを設定すると、リポジトリにはその1人のユーザーのみがアクセスできます。svn update /server/stagingこのユーザーは、コミット後のフックで実行するための正しい特権を持つことができます。

于 2008-10-02T21:14:46.730 に答える
0

svnリポジトリには、権限を設定する「conf」ディレクトリがあります。そこに3つのファイルがあります:

  • authz
  • passwd
  • svnserve.conf

authzファイルで、ユーザーごとまたはグループごとに、どのユーザーがどの種類のアクセスを持っているかを設定します。そこにグループを設定します。LinuxユーザーグループではなくSVNグループ(ハッシュ行はコメントです):

[groups]
# harry_and_sally = harry,sally
projectgroup = richard,austin

# [/foo/bar]
# harry = rw  -- user harry has read/write access
# * =  -- everybody have no access

# [repository:/baz/fuz]
# @harry_and_sally = rw  -- harry_and_sally group members have read/write access
# * = r  -- everyone has read access

[/server/staging]
@projectgroup = rw
* = r

この例を回避し、構成を設定します。'passwd'ファイルで、ユーザーのパスワードを設定します。実行する

cat passwd

設定方法の説明が記載されたコメント付きファイルが表示されます。

于 2008-10-02T21:17:06.957 に答える
0

私は WebDAV を使用しています。すべての SVN の更新とコミットは apache を介して処理され、そのような問題は一度もありません。

于 2008-10-02T23:09:42.040 に答える