新人贴请见谅,如果不合版规请版主纠正。
原文:http://practicer.info/?p=310
本文环境是FreeBSD 9.1 + Windows Server 2003,Linux环境也可以参考
svn是常用的版本控制工具,从小到大各种规模的团队都要面对一个问题:用户验证。 subversion大致支持3种验证方式: 1. 明文记录conf/passwd文件 2. subversion + Apache + mod_dav模块,Windows Server AD域验证 3. subversion + Cyrus SASL,Windows Server AD域验证 第一种既不安全也不方便管理;第二种可以很容易整合AD域验证,而且免费赠送在线浏览svn库的功能,缺点嘛当然是apache大大增加了攻击面;第三种的缺点是非常难配置。 如果是Windows环境,直接下载VisualSVN Server就皆大欢喜了。点几下鼠标就搞定,而且有免费版,企业版增加了SSO等功能。VisualSVN本身是基于Apache+subversion。 这里只介绍第三种sasl验证方式,环境是FreeBSD 8.2/9.1,Linux环境也可以参考。 安装SVNcd /usr/ports/devel/subversion && make config && make install clean 记得选上”SASL support“选项,默认安装的貌似是不带SASL的? 创建SVN库svnadmin create /home/svn_repo chown -R svn:svn /home/svn_repo 如果安装svn时没添加svn用户,可以用pw和sysinstall创建一个。 配置SVN库编辑/home/svn_repo/conf/svnserve.conf [general] anon-access = none
auth-access = write [sasl] use-sasl = true 编辑/home/svn_repo/conf/authz,对所有验证过的用户开放读写权限,请自行按需配置 [/]
* = rw 安装配置Cyrus SASL cd /usr/ports/security/cyrus-sasl2-saslauthd && make install clean 编辑/usr/local/etc/saslauthd.conf,有些linux发行版可能是/etc/saslauthd.conf ###
### /usr/local/etc/saslauthd.conf
###
ldap_servers: ldap://practicer.info/
ldap_version: 3
ldap_bind_dn:域\专用域账户
#ldap_bind_pw:专用账户密码
ldap_password: 专用账户密码
### ldap_auth_method: fastbind
ldap_mech: DIGEST-MD5
ldap_search_base: dc=PRACTICER,dc=INFO ldap_deref: never
ldap_restart: yes
ldap_scope: sub
# ldap_use_sasl: yes
ldap_start_tls: no
ldap_auth_method: bind
ldap_filter: sAMAccountName=%u
# ldap_password_attr: userPassword
ldap_timeout: 10
ldap_cache_ttl: 30
ldap_cache_mem: 32768
#EOF 注意根据情况修改黑体部分参数,注意上面填了一个合法的域用户和密码,这是因为Windows AD不允许匿名绑定,sasl绑定(连接)到AD才能验证别的账户。这里可以填一个低权限用户专供绑定用。然后测试下: testsaslauthd -u域用户 -p密码 成功后会出现0: OK “Success.” 修改/etc/rc.confsaslauthd_enable=”YES”
saslauthd_flags=”-a ldap” 编辑/usr/local/lib/sasl2/svn.conf 注意CentOS等可能在/etc/sasl2/svn.conf,如果文件不存在就新建一个 pwcheck_method: saslauthd
#
## Auxiliary plugin, use ldap
auxprop_plugin: ldap
#
## Mechanism list, plain text only
mech_list: PLAIN DIGEST_MD5
ldapdb_mech: PLAIN DIGEST_MD5
ldap_mech: DIGEST-MD5
ldap_default_domain: PRACTICER.INFO
ldap_search_base: dc=PRACTICER,dc=INFO
ntlm_server:10.0.0.2
ntlm_v2: yes
log_level: 7 注意自行修改域名IP。svn.conf和saslauthd.conf共用选项,而且svn.conf优先。 启动服务service saslauthd start service svnserve start 运行 ps aux应该可以看到/usr/local/sbin/saslauthd -a ldap和/usr/local/bin/svnserve字样 ok,现在可以试一下了,用svn客户端连上来试一试? 嗯?总是要求重新输入密码,或者各种SASL(-1)错误? Authentication error from server: SASL(-1): generic failure: Password
verification failed 如果上面的步骤没问题,要么你的linux/freebsd版本不同,配置文件位置变了;要么service saslauthd status看看sasl验证服务状态;要么。。。你遇到了这个: 默认情况下svnserve用svn账户权限运行,而saslauthd是root。用了sasl验证后svnserve会向/var/log/auth.log、/var/log/debug.log和/var/log/messages,但你在哪里都看不到出错日志,估计是因为权限问题。如果遇到这种情况,可以先修改/etc/rc.conf svnserve_enable=”YES”
svnserve_user=”root”
svnserve_group=”root” 以root用户运行svnserve的确不高明,开放那三个日志文件写权限也不行。如果有人知道解决办法,请不吝赐教。 解决权限问题后,svn就已经集成了域验证。关于域验证可以参考以前的博客。 注: http://cyrusimap.web.cmu.edu/docs/cyrus-sasl/2.1.25/options.php Cyrus SASL选项文档
|