SVNリポジトリでアクセス権限を設定することがあり、
リポジトリごとのアクセス権限設定の書式、優先順位等の設定で苦労したので
まとめることにしました。
間違った内容があれば教えていただけると助かります。
AuthzSVNAccessFileを用いるための設定
Apacheの設定
LoadModule
Apacheが読み込むModuleを設定ファイルの上部に記述します。
特に今回必要となるのは最後のauthz_svn_module modules/mod_authz_svn.so
です。
LoadModule dav_module modules/mod_dav.so
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
Location or Directory
SVNリポジトリ用のディレクティブを設定ファイルに記述します。
AuthzSVNAccessFile自体を書かない場合、特にリポジトリごとのアクセス制限はかかりません。
<Location /home>
DAV svn
<~省略~>
AuthzSVNAccessFile /var/lib/subversion/conf/accessfile
<~省略~>
</Location>
上記以外のSVNの設定に関しては以下が参考になります。
【SVN】サーバにSVNを導入しよう
AuthzSVNAccessFileファイルについて
ファイル例です。
[group]
developers = suzuki, tanaka
[/]
* = r
[dev_repo:/]
@developers = rw
[dev_repo:/secret]
* =
@developers = r
suzuki = rw
1. [group]について
グループ定義です。
権限設定の際にグループ名を指定することで、グループに登録されたユーザー全体に権限設定がされます。
ここで使用するユーザー名はhtpasswd
やLDAP
で設定しているものと同じにしてください。
左辺に任意のグループ名、
右辺にグループに設定するユーザー名をカンマ区切りで羅列します。
[group]
<group1> = <user1>, <user2>, <user3>
<group2> = <user4>, <user5>, <user6>
2. 権限設定の書式について
設定例 | 設定内容 |
---|---|
hoge = | hogeに参照・書き込み権限を付与しない |
hoge = r | hogeに参照権限のみ付与する |
hoge = w | hogeに書き込み権限のみ付与する |
hoge = rw | hogeに参照・書き込み権限を付与する |
@var = <上記設定> | グループvarに設定した権限を付与する |
* = <上記設定> | ユーザー全体に設定した権限を付与する |
※無記載 | ユーザー全体に参照・書き込み権限を付与しない |
※無記載: [/]や[svb_repo2:/work/asset]以下で無記載にした場合です。
設定の優先順位
- アクセス階層により近い設定が優先される
- アクセス階層に設定がない場合は、アクセス階層の上の階層の設定が使用される
- アクセス階層の設定でuser1しか権限設定しておらず、上の階層(
[/]
など)にて* = <権限設定>
を設定している場合は、user1以外は<権限設定
が設定される -
* =
とuser1 = rw
を同一階層に設定した場合、user1はrwを持ち、user1以外は権限を持たない
優先順位の簡単なまとめ
- *の設定 < groupの設定 < user1の設定 ※*とgroup/user権限はORで設定、groupとuserはuser優先で上書きされる
- [/] < 上の階層の設定 < アクセス階層の設定 ※権限は上書きされていく
例えば以下の設定におけるsuzuki
の/svn_repo1/file.pdf
への権限はrwになります。
[/]
* = rw
suzuki =
以下の設定におけるsuzuki
の/svn_repo1/file.pdf
への権限はrになります。
[/]
* = rw
[svn_repo1:/]
* =
suzuki = r
なので、一部のユーザーのみ権限を付与したくない場合は、
Bad Case: *でrw権限を付与
Good Case: 権限を付与したいユーザーが所属するグループを定義して、グループに対してrw権限を付与
になります。
規模が大きいとGood Caseはgroupの管理が膨大になることがデメリットでしょうか。
3. リポジトリ指定の書式について
基本的には以下の2つで設定します。
[/] //すべてのリポジトリに対して権限設定(デフォルトルール)
[<reponame>:/<path>] //あるリポジトリreponameのpath(file or directory)に対して権限設定
について、ディレクトリを指定する場合に2パターンがあります。
書式 | 設定内容 |
---|---|
/dir_path | ディレクトリ以下にも再帰的に権限設定を行う |
/dir_path/ | ディレクトリ単体に権限設定を行う |
まとめ
細かにアクセス権限を設定できるのはSVNならではのメリットじゃないでしょうか。
が、書式を理解していないと想定外の挙動が起きます。
書式の設定ミスでいうと、@の付け忘れや
権限を付与しない場合に=
と改行の間にスペースを入れ忘れなどでしょうか。
想定外の挙動を防ぐためにも書式を理解しようと思いました。
参考サイト
【SVN】サーバにSVNを導入しよう
リポジトリごとにアクセス許可を設定する
AuthzSVNAccessFileでのsvnauthzファイルについて