SVN集成LDAP认证

如何将 LDAP 的认证,集成到 SVN 中。集成的办法,目前是有两种:一种是 SVN 直接通过 SVN 端口直接访问的,通过 SASL 实现 LDAP 的认证;另一种是 SVN 通过 Apache 进行 HTTP 访问的用户,通过配置 Apache ,在 Apache 上集成 LDAP 来实现 SVNLDAP 认证集成。但是 SASL 方式只能是跟 OpenLDAPSVN同服务器上,使用远程的认证无效。

一、使用Sasl

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

1、安装 SASL

# yum install -y *sasl*

2、配置文件修改

# vim /etc/sysconfig/saslauthd
......
MECH=ldap              # 只修改这一行
......
# vim /etc/saslauthd.conf  # 不存在则新建
servers: ldap://10.10.1.25
ldap_bind_dn: cn=admin,dc=qualitysphere,dc=github,dc=io
ldap_bind_pw: 123456
ldap_search_base: dc=qualitysphere,dc=github,dc=io
ldap_filter: uid=%U 
ldap_password_attr: userPassword
# vim /etc/sasl2/svn.conf   # 没有就新建,内容如下
pwcheck_method: saslauthd
mech_list: PLAIN LOGIN

3、账号测试验证

# systemctl start saslauthd
# systemctl enable saslauthd

LDAP 账号测试验证

# testsaslauthd -ufeb -p123654
0: OK "Success."

4、SVN配置修改

  • 修改 svn 库配置

通过 svnadmin 创建的 svn 库,在 conf 下都会有一个配置文件 svnserver.conf,修改此配置文件,将use-sasl=true 打开即可

# cat /data/svnserver/test/conf/svnserve.conf 
[general]
anon-access = none
auth-access = write
password-db = passwd
authz-db = authz
[sasl]
use-sasl = true    ## 添加这一行配置即可

启用 LDAP认证后,原本的用户密码配置文件 passwd的 就会失效,但是权限控制依然是在 authz 文件中进行配置。

  • 重启 svn 使用 LDAP 账号认证测试

二、使用Apache集成

SVN 通过 Apache 进行代理 HTTP 访问的场景。在这种场景下,SVN 的访问是通过 HTTP ,然后经过 Apache 来认证的,所以只需要在 Apache 上集成 LDAP 的认证即可实现 SVNLDAP 认证。

1、安装 HTTP

# yum -y install httpd mod_dav_svn

2、配置文件修改

其中 /data/svnserversvn 库文件根目录,在 /data/svnserver 下创建的 svn 库,即 svnserve -d -r /data/svnserversvn 启动的命令。test/data/svnserver 下的一个项目。

1. HTTP协议配置

使用 HTTP 协议访问,用的是 HTTP 账号密码访问,这个配置是没有与 LDAP 集成的。

  • 创建HTTP 账号,后面登录 SVN 使用该账号认证登录:
# htpasswd -m /etc/svn/svnusers.conf feb
  • HTTP 配置
cat /etc/httpd/conf.d/subversion.conf

LoadModule dav_svn_module     modules/mod_dav_svn.so
LoadModule authz_svn_module   modules/mod_authz_svn.so

<Location /repos>
   DAV svn
   SVNParentPath /data/svnserver

   #
      AuthType Basic
      AuthName "Authorization Realm"
      AuthUserFile /etc/svn/svnusers.conf
      AuthzSVNAccessFile /data/svnserver/test/conf/authz
      Require valid-user
   #
</Location>

2. LDAP集成配置

# vim /etc/httpd/conf.d/subversion.conf

LoadModule dav_svn_module     modules/mod_dav_svn.so
LoadModule authz_svn_module   modules/mod_authz_svn.so

<Location /repos>
   DAV svn
   SVNParentPath /data/svnserver

   #
      AuthType Basic
      AuthName "Subversion repository"
      AuthzSVNAccessFile /data/svnserver/test/conf/authz
      AuthBasicProvider ldap 
      AuthzLDAPAuthoritative on 
      AuthLDAPURL "ldap://10.10.1.25:389/dc=qualitysphere,dc=github,dc=io?uid?sub?(objectclass=*)"
      AuthLDAPBindDN "cn=admin,dc=qualitysphere,dc=github,dc=io"
      AuthLDAPBindPassword "123456"
 
      Require ldap-user
   #
</Location>

上面的配置是我们把所有的项目都存放在统一的资源库目录,那么就可以使用 SVNParentPath 指令来指定存放所有项目的路径。

当然有可能我们并不希望某个项目提供这样一种访问方式,这时候我们就可以使用 SVNPath 为每个项目进行单独的设置。

<Location /test>
   DAV svn
   SVNPath /data/svnserver/test               # 区别在这一行

   #
      AuthType Basic
      AuthName "Subversion repository"
      AuthzSVNAccessFile /data/svnserver/test/conf/authz
      AuthBasicProvider ldap 
      AuthzLDAPAuthoritative on 
      AuthLDAPURL "ldap://10.10.1.30:389/dc=qualitysphere,dc=github,dc=io?uid?sub?(objectclass=*)"
      AuthLDAPBindDN "cn=admin,dc=qualitysphere,dc=github,dc=io"
      AuthLDAPBindPassword "123456"
 
      Require ldap-user
   #
</Location>

## /data/svnserver 是SVN根路径
## 使用 http://ip/test/ 地址访问就相当于直接访问了 test 项目下的资源,对比上面统一目录访问是有差别的,上面需要带 repos/ + 项目资源

用了 Apache 做验证后,原先每个库中的 conf/passwd 文件就不生效了,而是使用指定的 AuthUserFile 来指定。而改为 LDAP 后,则由 LDAP 进行认证,但是授权文件则是由 AuthzSVNAccessFile 指定的授权文件来进行设置。这些在配置 Apache+SVN 时应该都已经设置过了。

3、测试验证

SVN集成LDAP认证_第1张图片

三 、总结

  使用 SASL 来集成 LDAP 的方式在实际验证中需要保持跟 SVN 在同一台服务器,但在生产中基本是分服务器部署的。我们可以选用 Apache 来集成 LDAP 的方式进行 SVN 管理。另外这两种方式都不能使用 LDAP 中的群组功能,只能使用账号密码功能,权限用户组都需要在 SVN 中单独配置。

你可能感兴趣的:(运维,svn,apache,ldap,sasl)