6

LDAP落地实战(二):SVN集成OpenLDAP认证

 2 years ago
source link: https://blog.ops-coffee.cn/s/nzv9uz-eyjt86uaxhapgtw
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

LDAP落地实战(二):SVN集成OpenLDAP认证

上一篇文章我们介绍了LDAP的部署以及管理维护,那么如何接入LDAP实现账号统一认证呢?这篇文章将带你完成SVN的接入验证

SVN集成OpenLDAP认证

  • 系统环境:Debian8.4
  • svn部署环境:Apache2.4 + Subversion

  • Apache开启LDAP相关模块

# a2enmod ldap
Enabling module ldap.
To activate the new configuration, you need to run:
  service apache2 restart
# a2enmod authnz_ldap
Considering dependency ldap for authnz_ldap:
Module ldap already enabled
Enabling module authnz_ldap.
To activate the new configuration, you need to run:
  service apache2 restart
  1. 修改vhost配置文件,添加对ldap的支
<Virtualhost *:8088>
    DocumentRoot /home/svn/repos/
    ServerName svn.ops-coffee.cn

    <Location /ne/>
        DAV svn
        SVNListParentPath on
        SVNParentPath "/home/svn/repos"

        AuthType Basic
        AuthName "Private Subversion Repository"

        #AuthUserFile "/etc/subversion/dav_svn.passwd"
        AuthzSVNAccessFile "/etc/subversion/dav_svn.authz"

        # use LDAP auth
        AuthBasicProvider ldap
        AuthLDAPBindAuthoritative on
        AuthLDAPURL "ldap://ldap.ops-coffee.cn/dc=ops-coffee,dc=cn?uid?sub?(objectclass=*)"
        AuthLDAPBindDN "uid=authz,ou=Public,dc=ops-coffee,dc=cn"
        AuthLDAPBindPassword "ImNVZODT884"

        Require ldap-user

    </Location>
</Virtualhost>

主要LDAP配置文件详解:

AuthType:验证类型,Basic使用账号密码验证

AuthName:提示字符串

AuthBasicProvider:使用ldap验证

AuthLDAPBindAuthoritative:on表示只要求验证ldap用户,别的不认,off则可以使用svn的账号和ldap混合账号登录

  • apache2.2中配置是AuthzLDAPAuthoritative,到2.4中改为了AuthLDAPBindAuthoritative

  • 但在实际应用中发现并么有什么用,设置为off后ldap认证失败也不会去找AuthzSVNAccessFile,或许是我姿势不对,有知道原因的烦请告知

Require:ldap-user或valid-user

AuthLDAPURL | AuthLDAPBindDN | AuthLDAPBindPassword: 用于查找用户的账号密码,一般设置个只读账号即可

  • AuthLDAPURL:[协议名称]://[ip地址或者域名]:[端口号]/[baseDN]?[attr]?[scope]?[filter]
    • baseDN:指定开始搜索的节点的名称
    • attr:就是用户输入的属性键,默认是“uid”
    • scope: one,sub,base,默认是sub
    • filter:过滤器,默认是objectclass=*

LDAP服务器认证过程

可能只看配置文件不能了解LDAP认证的原理,接下来我们详细讨论下LDAP是如何认证的

客户端(httpd)使用提供的URL(AuthLDAPURL)进行验证的时候,并不是直接验证输入的账号密码,因为LDAP服务器在验证的时候要使用DN(每个节点用户的唯一标识)和密码来进行登陆验证的,但是DN一般来说比较长,诸如:“cn=xxx,ou=xxx,ou=xxx,dc=xxx,dc=xxx”,这种光输入的时候就烦死了,所以要想使用简短的用户名来登陆的时候,一般的做法是在某个节点用户上添加一个属性,比如mobile(手机号),Email(邮箱),user name或者uid(用户名),然后使用这个属性的值来登陆(大部分情况下都用uid,我们也是这么使用的)。

当用户输入这个属性值(一般uid)和密码的时候,客户端(httpd服务器)先使用AuthLDAPBindDN和AuthLDAPBindPassword作为用户名和密码登陆,根据AuthLDAPURL指定的查询规则来查找用户输入的属性的值有没有,如果查找的条数为0或者大于1,则返回错误,如果查找的条数等于1,则使用查找到的这个条目的DN和用户输入的密码进行登陆验证,成功则成功,失败则失败。

总结一下LDAP的认证过程分为两部:

  1. 搜索用户是否存在LDAP服务器中:配置文件中配置的AuthLDAPBindDN和AuthLDAPBindPassword两个属性主要目的就是为了登陆LDAP服务器搜索属性(uid)是否只有一条,如果服务器允许匿名访问则这两个配置可以不需要,但一般为了安全性都会关闭LDAP的匿名访问,新建一个只读权限的账号配置到这里即可

  2. 使用用户输入的属性值(uid)和密码进行登陆验证


能看到这里一定是真爱,关注一下吧

wx.sou1.png

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK