How to Install OpenLDAP and FreeRADIUS on Ubuntu Server

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,600评论 18 139
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 10,869评论 6 13
  • 镜头的焦距、光圈的明亮程度(光圈值)以及拍摄距离(相机到被摄体的距离) 最大光圈明亮而且焦距较长的远摄镜头能带来明...
    啊哦咦xiu阅读 359评论 0 0
  • 任何冲突有两个角色,一个是发起者,一个是回应者。 回应者最好的方法是探究性提问。描述性的事实,和下一步如何行动,发...
    我爸真帅阅读 273评论 0 1
  • 失业45天后,找了一份新媒体的工作。我不知道当时为什么还要选这份工作,是因为执念吗?自己的文笔自己是清楚的,自己的...
    HOCK_1e1b阅读 232评论 0 0