完成了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用户,权限给的是读写。
测试下面可以更新修改文件
ldap server上还有一个用户ldapuser1,我没有在authz中给他设置权限,测试可以看出用户没有在authz中配置过权限的用户没有checkout权限
编辑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权限,没有问题