SubversionのApache経由通信にDigest認証をかける

色々わけわかんないところでつまづいたけど、なんとかできた。

基本的に、SVN 用の Apache の設定は/etc/apache2/mods-enabled/dav_svn.conf に記述。

<location /svn>
    DAV svn
    SVNParentPath /home/username/svn

    AuthType Digest
    AuthName "Subversion repository"
    AuthUserFile /home/username/svn/.htdigest
    Require valid-user
</location>

Apache の認証でよく使われる Basic 認証はパスワードを平文で流すので使いません。Digest 認証は 平文では流さないのでちょっとだけ安全。

で、Apache2.0 系だとパスワードの設定ファイルを指定するのが「AuthDigestFile」だったのですが、 Apache2.2 からは Basic 認証と同じ「AuthUserFile」に戻ったらしいです。これをミスってると 以下のエラーが出ました。

Invalid command 'AuthDigestFile', perhaps misspelled or defined by a module not included in the server configuration

また、.htdigest ファイルの生成はターミナルで以下の様にします。

$ htdigest -c ~/svn/.htdigest "Subversion repository" user_name
Adding password for user_name in realm Subversion repository.
New password:
Re-type new password:

パスワードを 2 回入力すれば OK。どうも、”Subversion repository”の部分は設定ファイルの AuthName と一致していないとダメらしいです。

さらに、Ubuntu の場合、auth_digest っていう Apache モジュールを有効にしないといけません。 これをしないと多分 Internal Server Error が返ってきます。で、Ubuntu でのモジュールの有効化の やり方はたしか、/etc/apache2/mods-enabled にリンクを置くんだったと思いますが、 面倒なので Webmin を使って設定しちゃいました。Webmin の導入は書くの忘れた。そのうち書くかも しれませんが、ブラウザ経由でサーバの設定が色々できるので便利ですね。

ということで、こうしておくと自分だけが見れる Subversion レポジトリの完成。 クライアントからアクセスしようとするとユーザ名とパスワードを聞かれるようになりました。

参考サイト

  • どんぶら 11-02-08 (火) 11:02

    まとまっていて助かりました。感謝!!

    # a2enmod auth_digest

    /etc/init.d/apache2 restart


Ryosuke Iwanaga

Software engineer / Anime / NFL / Father. Posts are my own, not endorsed by any org.