Subversion 通过 Apache 结合 PAM 达到域验证
一、概述
Subversion 是一款开源的版本控制工具。作为 CVS 的替代品,他拥有众多优点。 其中一点即使可以在 Apache 下完全作模块化运行,通过了 Apache 这个接口,就可以使用 Apache 提供的众多功能。
Apache 自然可以和 PAM 结合,于是 Subversion 也可以通过 PAM 来进行用户的多种验证方式。在企业中域是较多被使用的一种验证方式。 Winbind 已经在前一文中介绍过了。此文不再描述通过 Winbind 加域的方法。
Subversion 有很棒的中文站。SVN 即为 Subversion 简称。
二、安装包
在 CentOS 环境下以下包需要安装:
httpd #Apache
mod_dav_svn #Subversion 在 Apache 中的模块
mod_auth_pam # Apache 中 PAM 模块
subversion # svn 程序
通过 yum 即可方便的安装:
yum install httpd mod_dav_svn mod_auth_pam subversion
三、http 配置
在 CentOS 4.5 下 apache 的配置文件在 /etc/httpd 目录下。请注意,/etc/httpd/conf.d 目录下的配置文件具有和 /etc/httpd/conf/httpd.conf 等价的作用,所以劲量让自己的配置在 /etc/httpd/conf.d 下完成。
创建配置文件: /etc/httpd/conf.d/subversion.conf
LoadModule dav_svn_module modules/mod_dav_svn.so #此处即为 Apache 调用 SVN 模块
LoadModule authz_svn_module modules/mod_authz_svn.so #此模块提供了目录级别用户验证的能力,详细资料可以参考 Debian的文档 。#开始定义SVN仓库的位置:
DAV svn # 通过 DAV 模块调用其 SVN 模块
SVNPath /var/svn/repos #指定SVN仓库的绝对地址
AuthType Basic #用户验证方式,验证方式有多种,可以参考 此文,这也是网络上流传比较广的一遍文章。我觉得还可以有更好、更通俗的文章来解释验证方式的问题。
AuthName “Authorization Realm” #引号内的内容会显示在你访问的 Subversion 服务器标题上。
AuthPAM_Enabled on #通过这个参数告诉Apache,当用户访问此虚拟目录的时候,启用 PAM 验证接口
Require valid-user #
四、创建 SVN 仓库
使用 svnadmin create 命令来创建仓库:
svnadmin create /var/svn/repos
五、配置 PAM
在安装了 mod_auth_pam 之后,系统中会出现以下两个库文件:
/usr/lib/httpd/modules/mod_auth_pam.so
/usr/lib/httpd/modules/mod_auth_sys_group.so
你需要确保他们在正确的位置,以便 Apache 可以通过 AuthPAM_Enabled on 参数来调用他。
编辑 /etc/pam.d/httpd 文件来定义 Apache 通过 PAM 时的验证方式。
以下是我实验中此文件的内容:
#%PAM-1.0
auth required /lib/security/pam_winbind.so
account required pam_permit.so
有两点需要提醒:首先 /etc/pam.d/httpd 文件也是在 mod_auth_pam 包里面的。其次,很多地方都给出了这样的参数 auth required /lib/security/pam_winbind.so service=system-auth,这在我的电脑上导致了 message 的报警:
pam_winbind[4603]: pam_parse: unknown option; service=system-auth
在我去掉了:service=system-auth 参数之后便没有了这样的报警,且功能不影响。
六、琐碎的处理
到此,当你重启了 httpd 服务之后,你的 SVN 应该就可以正常工作了。如果出现了一些问题,比如“无权限访问”等。你可以尝试以下操作:
1.修改 SVN 目录所有人为 apache。
2.修改 SVN 目录权限。
3.按照 Ubuntu 论坛中的帖子,执行:
svnserve -d -T -r /svnpath
#我还没搞懂这个命令的意思,但他的确为我解决了一些问题。
您可以通过 http://ip/repos 类似的路径来访问它,具体取决于你在配置文件中的定义。
不知为何,mod_auth_pam 包我总是 yum 不到,所以也提供在此。此包适合 CentOS 4.5,点击下载。
如果您觉得此文有错误的地方,或者是需要补充的地方,请来信告诉我。
latteye@gmail.com