完成了openldap的配置之后,为了更进一步的进行用户统一身份认证,所以需要配置SVN使用openldap进行认证,这样的话只需要维护ldap中的用户数据,然后在SVN上进行服务授权即可完成SVN的用户权限分配。同样的,这个配置也适合于其他的软件,比如vsftpd,ssh,openvpn等,下面开始配置SVN使用ldap认证。

1、安装sasl

SASL全称Simple Authentication and Security Layer,是一种用来扩充C/S模式验证能力的机制。

SASL是一个胶合库,通过这个库把应用层与形式多样的认证系统整合在一起。这有点类似于PAM,但是后者是认证方式,决定什么人可以访问什么服务,而SASL是认证过程,侧重于信任建立过程,这个过程可以调用PAM来建立信任关系。在这里Memcached就是上面提到的应用层,具体的认证交给SASL库,SASL会根据相应的认证机制来完成验证功能。


查看sasl是否安装

rpm -qa|grep sasl
cyrus-sasl-2.1.23-15.el6_6.2.x86_64
cyrus-sasl-devel-2.1.23-15.el6_6.2.x86_64
cyrus-sasl-lib-2.1.23-15.el6_6.2.x86_64


如果没有安装,则执行下面的命令进行安装

yum -y install *sasl*
libgsasl-1.4.0-4.el6.x86_64
libgsasl-devel-1.4.0-4.el6.x86_64
cyrus-sasl-sql-2.1.23-15.el6_6.2.x86_64
saslwrapper-devel-0.14-1.el6.x86_64
cyrus-sasl-gssapi-2.1.23-15.el6_6.2.x86_64
cyrus-sasl-ldap-2.1.23-15.el6_6.2.x86_64
cyrus-sasl-devel-2.1.23-15.el6_6.2.x86_64
cyrus-sasl-2.1.23-15.el6_6.2.x86_64
cyrus-sasl-lib-2.1.23-15.el6_6.2.x86_64
erlang-sasl-R14B-04.3.el6.x86_64
ruby-saslwrapper-0.14-1.el6.x86_64
python-saslwrapper-0.14-1.el6.x86_64
cyrus-sasl-plain-2.1.23-15.el6_6.2.x86_64
cyrus-sasl-ntlm-2.1.23-15.el6_6.2.x86_64
lua-cyrussasl-1.1.0-1.el6.x86_64
cyrus-sasl-md5-2.1.23-15.el6_6.2.x86_64
saslwrapper-0.14-1.el6.x86_64


2、修改认证方式

vim /etc/sysconfig/saslauthd

将MECH=pam 修改成MECH=ldap

注意:修改该配置文件需要重启saslauthd服务,后面我们还要创建一些文件,等创建完成后再重启

/etc/init.d/saslauthd restart


3、创建/etc/saslauthd.conf 文件,写入以下内容

 

vim /etc/saslauthd.conf
ldap_servers: ldap://172.16.42.137    //ldap服务器地址
ldap_bind_dn: cn=admin,dc=beyondh,dc=org   
ldap_bind_pw: 123456     //管理员账号的密码
#ldap_search_base: ou=People,dc=beyondh,dc=org //认证时,只查询People这个OU
ldap_search_base: dc=beyondh,dc=org //我这里没有指定OU,表示认证时,在所有OU中查询用户是否存在
ldap_filter: uid=%U 
ldap_password_attr: userPassword


4、创建/etc/sasl2/svn.conf文件,写入以下内容

vim /etc/sasl2/svn.conf

pwcheck_method: saslauthd
mech_list: PLAIN LOGIN



5、重启saslauthd服务

/etc/init.d/saslauthd restart

测试ldap认证是否配置成功,bbb是ldap用户名,111111是密码。可以看到ldap配置没有问题

 testsaslauthd -ubbb -p111111
0: OK "Success."



6、修改SVN svnserve.conf 配置文件

我的SVN仓库地址为/opt/svn/repo,所以服务器配置文件路径为/opt/svn/repo/conf/svnserve.conf 

vim /opt/svn/repo/conf/svnserve.conf

将下面这行被注释掉的内容启用

#use-sasl = true

注意:svn的每一个仓库的配置文件有下面三个,保存在根目录下的conf目录中

# ls
authz  passwd  svnserve.conf

注意:使用LDAP认证后,passwd就不再生效了。但是账户权限还是需要在authz中设置。LDAP Server只是验证用户在ldap server上是否存在,但不进行权限限制

cat authz
[aliases]
# joe = /C=XZ/ST=Dessert/L=Snake City/O=Snake Oil, Ltd./OU=Research Institute/CN=Joe Average
[groups]
ops = cpzeng,hzhou

[/]
bbb = rw

这里的bbb用户是LDAP用户,权限给的是读写。

测试下面可以更新修改文件

SVN使用LDAP认证_svn



ldap server上还有一个用户ldapuser1,我没有在authz中给他设置权限,测试可以看出用户没有在authz中配置过权限的用户没有checkout权限

SVN使用LDAP认证_认证_02

SVN使用LDAP认证_ldap_03


编辑authz文件,赋予ldapuser1读写权限

cat authz
[aliases]
# joe = /C=XZ/ST=Dessert/L=Snake City/O=Snake Oil, Ltd./OU=Research Institute/CN=Joe Average
[groups]
ops = cpzeng,hzhou

[/]
bbb = rw
ldapuser1 = rw


重新测试checkout权限,没有问题

SVN使用LDAP认证_ldap_04