# SVN 使用LDAP
# 介绍SASL
简单认证与安全层是卡内基梅隆大学出品的一个开源软件(准确的说,是John Gardiner Myers写的),它将通用的身份验证和加密功能添加到任何网络协议,从1.5版本以后,Subversion(这是SVN的全称……)服务端和客户端都知道如何使用这个库。以下情况将决定SASL是否可用:如果你打算自行编译SVN并使SASL可用,那么必须安装2.1或者更高的SASL版本,并且保证在编译期间,你安装的SASL能被编译进程检测到。如果你使用预先编译好的二进制包,你需要联系维护者确定SASL特性支持已经被编译进去了。SASL使用各种模块来对应不同的身份验证系统:Kerberos (GSSAPI), NTLM, One-Time-Passwords (OTP), DIGEST-MD5, LDAP, Secure-Remote-Password (SRP)等,某种验证机制是否可用,取决于你是否拥有这种机制对应的模块。
SVN 从LDAP 获取用户名和密码主要是用通过SASL服务器
# 安装与配置
环境要求: Centos7 及以上
# 安装相关组件
yum install -y subversion cyrus-sasl cyrus-sasl-lib cyrus-sasl-plain
1
# 查看SASL版本和提供的验证模块
[root@localhost ~]# saslauthd -v
saslauthd 2.1.26
authentication mechanisms: getpwent kerberos5 pam rimap shadow ldap httpform #此处提供了对LDAP的支持。
1
2
3
4
2
3
4
# 修改sasl的用户验证方式为ldap
cp /etc/sysconfig/saslauthd /etc/sysconfig/saslauthd.save
sed -i 's/MECH=pam/MECH=ldap/' /etc/sysconfig/saslauthd
1
2
2
# 修改sasl配置文件/etc/saslauthd.conf
ldap_servers: ldap://ldapserver #填写你的服务器,域名或者IP均可,前提是你的DNS能正常工作
ldap_default_domain:domain.com #默认域名
ldap_search_base:DC=domain,dc=com #具体 OU信息
ldap_bind_dn:domain\user ## 域控可以访问的用户名
ldap_password:password
ldap_deref: never
ldap_restart: yes
ldap_scope: sub
ldap_use_sasl: no
ldap_start_tls: no
ldap_version: 3
ldap_auth_method: bind
ldap_mech: DIGEST-MD5
ldap_filter:sAMAccountName=%u ## 获取英文名
ldap_password_attr:userPassword
ldap_timeout: 10
ldap_cache_ttl: 30
ldap_cache_mem: 32786
此处是填写的LDAP协议的各个要素。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 重启sasl服务以应用配置文件并测试是否通过
systemctl restart saslauthd.service
testsaslauthd -u user -p 'password' #添加测试的用户名和密码
1
2
2
# 修改SVN的sasl配置文件/etc/sasl/svn.conf
vi /etc/sasl2/svn.conf
pwcheck_method:saslauthd #用户验证方法
mech_list: plain login #用户验证信息怎么传输
1
2
3
2
3
# 修改版本库的配置
vim /yourrepository/conf/svnserve.conf ## SVN 具体库地址 配置信息修改
[general]
anon-access = none
auth-access = write
#password-db = passwd #关闭passwd
authz-db = authz #如果要对版本库进行权限控制,开启authz
[sasl]
use-sasl = true #开启sasl用户验证
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 重启SVN,测试一下即可
svnserve -d -r /data/svn # 具体仓库地址
[/path]
username = r
username = rw #没写就是没权限……用@符号表示用户组,用户组的创建就是
groupname = user1,user2,
1
2
3
4
5
6
2
3
4
5
6
测试通过 搞定收工 注意点: LDAP确认网络可以使用; 确认登录的LDAP用户可以获取正常的OU信息