2人のユーザーがサーバー上の同じSVN作業コピーを更新できるように、Linuxで権限を設定するにはどうすればよいですか?
-
03-07-2019 - |
質問
私のサーバーにはSubversionとApacheの両方がインストールされており、Apache WebディレクトリもSubversionの作業用コピーです。その理由は、単純なコマンド svn update / server / staging
が最新のソースをステージングサーバーにデプロイするためです。
Apache公開ウェブディレクトリ: / server / staging
— (これはSVN作業コピーです。)
サーバーには「richard」と「austin」の2人のユーザーがいます。どちらも「開発者」グループのメンバーです。 " sudo chown -R richard:developers / server"を使用して、/ serverディレクトリのアクセス権をrichard:developersに再帰的に設定します。
次に、「richard」グループと「developers」グループの両方に対して読み取り、書き込み、実行の許可を設定します。
「austin」は 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」として実行する方法を知りません。
ご協力をお願いします!
解決
ディレクトリセットグループ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"に属する。
edit:source = Linuxのファイルとファイルの権限
他のヒント
svn://
プロトコルを使用する単純なSubversionサーバーである svnserve
をセットアップします。独自のユーザーアカウントで実行されるように設定すると、その1人のユーザーのみがリポジトリにアクセスできます。このユーザーは、コミット後のフックで svn update / server / staging
を実行するための適切な権限を持つことができます。
svnリポジトリで、権限を設定する「conf」ディレクトリを見つけることができます。 3つのファイルがあります:
- authz
- passwd
- svnserve.conf
ユーザーごとまたはグループごとに、ユーザーがどの種類のアクセス権を持つかをauthzファイルで設定します。そこにグループを設定します。SVNグループはLinuxユーザーグループではありません(破線はコメントです):
[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
設定方法の説明が付いたコメント付きファイルが表示されます。
WebDAVを使用しています-すべてのSVNの更新とコミットはapacheを介して処理されるため、このような問題は発生しません。