美文网首页
How to Install OpenLDAP and Free

How to Install OpenLDAP and Free

作者: xrichardyan | 来源:发表于2018-07-10 02:50 被阅读0次

    0.运行环境:Ubuntu 16.04 LTS

    1.用 OpenLDAP 搭建 LDAP 服务器,尝试对学生信息进行增删改查,信息包括但不限于学生 id 、密码、邮箱、手机号、部门等。

    1.1 搭建LDAP服务器
    $ sudo apt update
    $ sudo apt install slapd ldap-utils    #安装配置软件
    $ sudo dpkg-reconfigure slapd   #对slapd进行再配置
    

    配置参数参考


    配置参数参考
    $ sudo apt install phpldapadmin    #安装phpldapadmin
    

    修改相应的配置文件/etc/phpldapadmin/config.php,做如下修改:

    $servers->setValue('server'. 'host', '127.0.0.1')    #修改为某个内网可访问的IP地址
    

    防火墙放行Apache2:

    $ sudo ufw allow "Apache"
    $ sudo ufw allow "Apache Full"
    $ sudo ufw allow "Apache Secure"
    $ sudo /etc/init.d/apache2 restart    #重启Apache服务
    
    1.2 测试登录

    浏览器打开:http://127.0.0.1/phpldapadmin/index.php 进入后登录

    登录前
    登录后:
    登录后
    LDAP服务器配置完成
    1.3 对学生数据增删改查
    主页
    • 通过Create new entry here选择Generic: Organisational Unit新建Group组和People组
    • 在Group组下通过Create a child entry选择Generic: Posix Group新建cn=student后才可以在People组下Create a child entry选择Generic: User Account创建用户资料
    • 在cn=richard yan下可通过Add new attribute添加邮件、电话、部门等属性

    phpldapadmin 的图形化界面可进行增删改查十分简单,不作赘述

    2. 配置 Apache 服务器,配置 Basic 认证模块和需要认证的页面,使用用户名密码认证。

    2.1 搭建 Apache 服务
    $ sudo apt-get install apache2
    

    防火墙放行Apache2:

    $ sudo ufw allow "Apache"
    $ sudo ufw allow "Apache Full"
    $ sudo ufw allow "Apache Secure"
    $ sudo service apache2 restart    #重启Apache服务
    

    新建一个验证页面

    $ sudo mkdir /var/www/html/auth-basic
    $ sudo vim /var/www/html/auth-basic/index.html
    
    <html>
    <body>
    <div style="width: 100%; font-size: 40px; font-weight: bold; text-align: center;">
    Basic Authentication is Successful.</br></br>
    Richard Yan</br>
    2018.7.7
    </div>
    </body>
    </html>
    
    2.2 待验证页面

    浏览器访问 http://127.0.0.1/auth-basic/ 访问成功

    验证页面
    2.3 配置一个本地目录的Basic基本认证

    创建用户

    $ sudo htpasswd -c /etc/apache2/.user richard     #第一次创建.user文件添加 -c 参数
    New password: 
    Re-type new password: 
    Adding password for user richard
    
    $ sudo cat /etc/apache2/.user     #查看密码文件
    richard:$apr1$JUaFTlkk$T1BwFfn.kU9OaxvxdqUQD1
    

    修改本地Apache配置文件

    $ sudo vim /etc/apache2/apache2.conf
    
    # 找到这里
    <Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
    

    在授权目录下添创建.htaccess文件

    $ sudo vim /var/www/html/auth-basic/.htaccess
    
    AuthType Basic
    AuthName "Basic Authentication"
    AuthUserFile /etc/apache2/.user
    Require valid-user
    

    重启 Apache

    $ sudo service apache2 restart
    

    2.4 测试认证

    在浏览器访问 http://127.0.0.1/auth-basic/ 输入用户名密码登录即可正常访问

    待验证
    登录后
    验证成功
    Basic 认证完成!

    3.配置 Apache 服务器,配置 LDAP 认证模块和需要认证的页面,使用 LDAP 存放的学生的用户名密码认证。

    3.1 环境配置

    安装ldap模块

    $ a2enmod ldap authnz_ldap
    Module ldap already enabled
    Considering dependency ldap for authnz_ldap:
    Module ldap already enabled
    Module authnz_ldap already enabled
    

    配置需要认证信息

    $ sudo vim /etc/apache2/sites-available/auth-ldap.conf
    
    #配置文件
    <Directory "/var/www/html/auth-ldap">
        AuthName "LDAP Authentication"
        AuthType Basic
        AuthBasicProvider ldap
        AuthLDAPUrl "ldap://127.0.0.1/dc=example,dc=com"
        Require valid-user
    </Directory>
    #这里说一下Directory后面的认证页面路径在不同系统环境里可能需要加"",有的可能不需要加,这个玄学折磨了我整整一天
    

    创建配置页面

    $ sudo mkdir /var/www/html/auth-ldap 
    $ a2ensite auth-ldap
    
    $ sudo vim /var/www/html/auth-ldap/index.html
    
    <html>
    <body>
    <div style="width: 100%; font-size: 40px; font-weight: bold; text-align: center;">
    Programming is Metaphysics.</br></br>
    Richard Yan</br>
    2018.7.8
    </div>
    </body>
    </html>
    

    重启Apache服务

    $ sudo service apache2 restart
    
    3.2 测试认证

    浏览器访问:http://127.0.0.1/auth-ldap/

    待验证
    *这里 "cn=richard yan" 由于缩写实际 User Name=ryan
    登录后:
    验证成功
    LDAP 认证完成!

    4.用 FreeRADIUS 搭建 Radius 服务器,尝试配置基于 Unix 账号的认证,并用 radtest 验证服务有效。

    4.1 安装 FreeRADIUS
    $ sudo apt-get install freeradius
    
    4.2 验证版本
    $ freeradius -v
    freeradius: FreeRADIUS Version 2.2.8, for host x86_64-pc-linux-gnu, built on Jul 26 2017 at 15:27:21
    Copyright (C) 1999-2015 The FreeRADIUS server project and contributors.
    There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
    PARTICULAR PURPOSE.
    You may redistribute copies of FreeRADIUS under the terms of the
    GNU General Public License.
    For more information about these matters, see the file named COPYRIGHT.
    
    4.3 运行快速配置检查
    $ sudo freeradius -CX
    #结尾会回显
    Configuration appears to be OK.
    
    4.4 查看配置文件
    $ sudo vim /etc/freeradius/radiusd.conf
    
    4.5 配置 Clients
    sudo vim /etc/freeradius/clients.conf
    
    # 这个是默认配置,如果在本地实验,无需改动
    client localhost {
     ipaddr = 127.0.0.1
     secret = testing123
     }
    
    4.6 添加用户
    $ sudo vim /etc/freeradius/users
    
    # 在配置文件中添加
    richard  Cleartext-Password := "password"
             Reply-Message := "Hello,%{User-Name}"
    
    4.7 重启 RADIUS
    $ sudo service freeradius restart
    
    4.8 测试认证
    $ radtest richard password 127.0.0.1 0 testing123
    Sending Access-Request of id 145 to 127.0.0.1 port 1812
        User-Name = "richard"
        User-Password = "password"
        NAS-IP-Address = 127.0.1.1
        NAS-Port = 0
        Message-Authenticator = 0x00000000000000000000000000000000
    rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=145, length=35
        Reply-Message = "Hello,richard"
    
    4.9 Start FreeRADIUS
    # 查看服务状态
    $ service freeradius status
    ● freeradius.service - LSB: Radius Daemon
       Loaded: loaded (/etc/init.d/freeradius; bad; vendor preset: enabled)
       Active: active (running) since 一 2018-07-09 00:22:02 CST; 54min ago
         Docs: man:systemd-sysv-generator(8)
        Tasks: 6
       Memory: 5.1M
          CPU: 73ms
       CGroup: /system.slice/freeradius.service
               └─13302 /usr/sbin/freeradius
    
    7月 09 00:22:01 richard-lenovo systemd[1]: Starting LSB: Radius Daemon...
    7月 09 00:22:01 richard-lenovo freeradius[13273]:  * Starting FreeRADIUS daemon f
    7月 09 00:22:02 richard-lenovo freeradius[13273]:    ...done.
    7月 09 00:22:02 richard-lenovo systemd[1]: Started LSB: Radius Daemon.
    lines 1-14/14 (END)
    

    Radius 服务器配置完成!

    5. 配置 Apache 服务器,配置 Radius 认证模块和需要认证的页面,使用 Unix/Linux 本地用户名密码认证。

    5.1 环境配置

    在 Apache2 上安装 Radius 身份验证所需的模块

    $ sudo apt-get install libapache2-mod-auth-radius
    

    启动模块

    $ a2enmod auth_radius
    Module auth_radius already enabled
    

    在Apache配置文件中添加认证

    $ sudo vim /etc/apache2/apache2.conf
    
    # 添加在配置文件 apache2.conf 中
    AddRadiusAuth localhost:1812 testing123 5
    AddRadiusCookieValid 60
    # 下面这是模板
    # AddRadiusAuth IP_OF_RADIUS_SERVER:PORT SECRET 5   
    # AddRadiusCookieValid 60
    

    创建配置页面

    $ sudo mkdir /var/www/html/auth-radius
    $ sudo vim /var/www/html/auth-radius/index.html
    
    <html>
    <body>
    <div style="width: 100%; font-size: 40px; font-weight: bold; text-align: center;">
    Radius Authentication is Successful.</br></br>
    Richard Yan</br>
    2018.7.9
    </div>
    </body>
    </html>
    

    在待验证⻚页面面添加 .htaccess 文文件

    $ sudo vim /var/www/html/auth-radius/.htaccess
    
    # 配置文件 .htaccess
    AuthType Basic
    AuthName "Radius Authentication"
    AuthBasicAuthoritative Off
    AuthBasicProvider radius
    AuthRadiusAuthoritative on
    AuthRadiusActive On
    Require valid-user
    

    重启 Apache 服务

    $ sudo service apache2 restart
    
    5.2 认证测试

    浏览器访问:http://127.0.0.1/auth-radius/

    待验证
    认证后:
    验证成功
    Radius 认证完成!

    6.在 FreeRADIUS 中配置 ldap 认证模块,和 LDAP 服务器互通,利用 ldap 账号密码认证用户身份,并用 radtest 测试通过。

    6.1环境配置

    安装 FreeRADIUS 和 OpenLDAP 模块

    $ sudo apt install freeradius-ldap
    

    配置 FreeRADIUS 的 ldap 模块参数

    $ sudo vim /etc/freeradius/modules/ldap
    
    ldap{
            server = "localhost"
            identity = "cn=admin,dc=example,dc=com"
            password = password
            basedn = "dc=example,dc=com"
            filter = "(uid=%{%{Stripped-User-Name}:-%{User-Name}})"
            ldap_connections_number = 5
            timeout = 4
            timelimit = 3
            net_timeout = 1
            dictionary_mapping = ${confdir}/ldap.attrmap
            edir_account_policy_check = no
            set_auth_type = yes
    }
    # 这些格式在配置文件中都有,只需修改对应的变量或删除对应参数前的#注释
    

    配置以下参数以启动 ldap

    $ sudo vim /etc/freeradius/sites-available/default
    
    # 这里 . 是省略,只需删除对应 authorize 参数下 ldap 前的#注释即可
    authorize {
    .
    .
    ldap
    .
    .
    }
    
    $ sudo vim /etc/freeradius/sites-available/inner-tunnel
    
    # 这里 . 是省略,只需删除对应 authorize 参数下 ldap 前的#注释即可
    authorize {
    .
    .
    ldap
    .
    .
    }
    
    6.2 通过 radtest 测试 LDAP 中的用户

    以下是 LDAP 中以添加的用户

    LDAP主页
    *这里 "cn=richard yan" 由于缩写实际 User Name=ryan
    $ radtest ryan 123456 127.0.0.1 0 testing123
    Sending Access-Request of id 190 to 127.0.0.1 port 1812
        User-Name = "ryan"
        User-Password = "123456"
        NAS-IP-Address = 127.0.1.1
        NAS-Port = 0
        Message-Authenticator = 0x00000000000000000000000000000000
    rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=190, length=20
    

    出现 Access-Accept 即证明用户可在 Radius 下登录认证。
    LDAP用户认证完成!

    7. 在之前 Apache 的 Radius 认证模块的配置下,不改变配置,切换到使用 LDAP 存放的学生用户名密码认证,体会这种配置和 3 的不同。

    7.1 认证测试

    浏览器访问 http://127.0.0.1/auth-radius/
    这里使用的就是 LDAP 中存放的学生用户进行的认证:

    待验证
    登录后:
    验证成功
    7.2 对比
    • LDAP提供目录服务,类似于企业、人员黄页的东西,用户和组织的信息都被存放在上面,查找起来十分快捷,也可以理解成一种特殊的数据库,而认证只是一方面,它的目标是按目录结点的方式来存取信息。
    • Radius是一种专门的认证协议,支持多样的认证方式。出了最常见的pap,chap等,还支持EAP(扩展认证协议),这是LDAP协议中没有的。
    • LDAP + Radius 有效的结合二者的特性,使认证更加系统化,方便目录管理而又兼顾了认证的安全性,可用于实现商业企业局域网统一认证系统。

    8. 在 ROS 的 AP 下,通过配置与 Radius 服务器连接,使学生可以通过存放在 LDAP 中的用户名密码来通过认证接入 WiFi 。(选做)

    大概就是这个样子吧。


    WiFi认证示意图

    期末这段时间很忙,以后有空再做吧!

    总结

    • 以前只是在各种场合使用过各种认证而不知其中原理,如今亲手操作一遍俺感觉还是很奇妙的,对认证又有了更深层次的了解,也学会了更多关于认证及目录管理的知识,Get 到很多新技能,受益匪浅。
      这个实验II投入了整整三天时间全身心来做。从一开始的一脸茫然,去查找各种文档及配置教程,有些教程时间太久已经不再适用,失败了好多次却找不到原因,各种搜索解决问题的方法以及求助于身边的大佬,最后经过各种尝试,被各种配置环境、修改参数折磨后终于完成了这部分的实验内容。
      虽然被折磨的很难受,但通过这三天也学习了很多,不仅仅是知识,也学会了很多解决问题的方法,收获很多,在以后的工作和学习中肯定会有很大的帮助。

    2018.7.10凌晨——By Richard Yan

    相关文章

      网友评论

          本文标题:How to Install OpenLDAP and Free

          本文链接:https://www.haomeiwen.com/subject/qjsbuftx.html