5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

SVNのAuthzSVNAccessFileについて

Last updated at Posted at 2019-08-04

SVNリポジトリでアクセス権限を設定することがあり、
リポジトリごとのアクセス権限設定の書式、優先順位等の設定で苦労したので
まとめることにしました。
間違った内容があれば教えていただけると助かります。

AuthzSVNAccessFileを用いるための設定

Apacheの設定

LoadModule

Apacheが読み込むModuleを設定ファイルの上部に記述します。
特に今回必要となるのは最後のauthz_svn_module modules/mod_authz_svn.soです。

subversion.conf
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自体を書かない場合、特にリポジトリごとのアクセス制限はかかりません。

subversion.conf
<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]について

グループ定義です。
権限設定の際にグループ名を指定することで、グループに登録されたユーザー全体に権限設定がされます。
ここで使用するユーザー名はhtpasswdLDAPで設定しているものと同じにしてください。

左辺に任意のグループ名、
右辺にグループに設定するユーザー名をカンマ区切りで羅列します。

[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ファイルについて

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?