VPN与ILAS III统一用户认证的设计与实现
王泽贤
广州大学图书馆 广州 510006
摘要

介绍广州大学图书馆采用RADIUS远端认证方式,利用统一认证服务器实现各系统的统一用户认证,通过用户数据同步系统实现VPN与ILAS III的整合,从而可以保证用户使用VPN的合法性、有效性和安全性,也有利于系统管理。

关键词: VPN; ILAS III; RADIUS; 统一用户认证
中图分类号:G250.71
Design and Implementation of Unified User Authentication for VPN and ILAS III
Wang Zexian
Guangzhou University Library, Guangzhou 510006, China
Abstract

In this article, the library of Guangzhou University is success in building a VPN system by using RADIUS remote authentication, utilizing unified authentication server, and integrating VPN with ILAS III through the user data synchronization system. This VPN system not only can ensure the legitimacy, effectiveness and safety for users, but also can provide convenience for users and system manager.

Keyword: VPN; ILAS III; RADIUS; Unified user authentication
1 引 言

VPN是解决图书馆用户通过外部公众网络,安全有效地访问内部网络获取电子资源的最佳工具,是有效解决图书馆电子资源在外网访问受限制问题的最好方案[ 1]。利用VPN技术对电子资源进行远程访问,也是提高图书馆数字资源利用率的有效途径[ 2]。然而,目前很多已实现VPN的图书馆,由于其VPN未能与馆内自动化系统有效集成,而沿用不同的用户管理及认证方式,用户登录各种系统时须记忆不同的账号和密码,导致使用不便,并且加重了管理员的负担。因此,VPN大量用户的合法验证和管理、与图书馆内各系统实现统一用户认证,是VPN在图书馆有效应用的关键之一。广州大学图书馆实现VPN时,采用RADIUS远端认证方式,通过统一认证服务器进行用户认证,并以ILAS III的读者数据为统一用户认证的用户数据,实现了实名制认证,保证了使用VPN用户的合法性、有效性和安全性。此外,图书馆还通过ILAS III对用户数据进行统一管理,本馆合法读者无需申请、注册、开通,即可使用VPN,既方便了读者,也方便了管理员。

2 解决方案
2.1 VPN用户认证方式分析

(1)本地认证。通过VPN进行用户信息(包括本地用户的用户名、密码和各种属性)管理,用户信息保存在VPN本地。本地认证的优点是速度快、使用简单、无需其他系统和设备配合、运营成本低;缺点是用户信息量受设备硬件条件限制,并且难于与其他系统整合。比较适合于用户量小、VPN独立使用、无需与其他系统整合的情况。

(2)远端认证。通过一定协议与远端AAA服务器进行认证。AAA是认证、授权和记账(Authentication、Authorization、Accounting)的简称[ 3]。认证:验证用户是否可以获得访问权限;授权:授权用户可以使用哪些服务;记账:记录用户使用网络资源的情况。远端认证中,VPN不参与用户管理,用户数据保存在AAA服务器中;VPN只是作为客户端,通过向AAA服务器发送请求,由AAA服务器验证用户的合法性,并将结果反馈给VPN。VPN需要与其他系统整合,实现统一用户认证时适合采用该方式。

远端认证根据使用的协议不同,主要有RADIUS、LDAP、Active-Directory三种。其中,远程拨入用户认证服务(Remote Authentication Dial-In User Service,RADIUS)是一种基于UPD协议的应用层协议,定义了在网络接入服务器(Network Access Server,NAS)和集中存放认证信息的RADIUS服务器之间的传输认证、授权和配置信息的协议[ 4]。由于RADIUS实时性较好、可靠性高、实现简单、可扩充性好,因此被广泛应用,VPN普遍支持RADIUS远端认证。

2.2 VPN与ILAS III统一用户认证解决方案

实现VPN与ILAS III统一用户认证的解决方案如图1所示:

图1 VPN与ILAS III统一用户认证系统结构图

VPN采用RADIUS远端认证方式,通过统一认证服务器进行用户认证;用户同步系统保证统一认证服务器的用户数据与ILAS III读者数据保持一致;ILAS III的网上图书馆直接读取ILAS III读者数据进行用户认证,读者登录ILAS III网上图书馆后,可以对自己的密码等用户信息进行管理;系统管理员可以通过ILAS III的读者管理功能统一进行用户管理;其他系统也可以通过统一认证服务器实现统一用户认证。

TekRADIUS是一个免费的RADIUS服务器[ 5],有以下优点:完整支持RADIUS协议;在Windows中运行,有图形化界面的设置管理器,安装设置方便;用户并发会话的数量可设置,以避免同一账号多人同时登录;使用SQL Server或SQLit通用数据库,方便系统整合等。因此本方案中使用TekRADIUS作为统一认证服务器,可从http://www.tekradius.com下载、安装。设置过程如下:运行管理工具TekRADIUS Manager,点击“Clients”选项卡,为VPN新增一个TekRADIUS客户端,其中NAS为VPN的IP地址,Secret是验证密钥,其他取缺省值;在VPN新建立一个AAA服务器,类型选择RADIUS,服务器地址为TekRADIUS服务器的IP地址,密钥为前面新建TekRADIUS客户端时Secret项的值,其他项取缺省值。

3 用户同步系统的设计与实现

在各系统中,本馆统一以ILAS III的读者证号为登录用户名、读者信息中的密码为登录密码。用户同步系统实现将ILAS III的读者信息生成统一认证服务器TekRADIUS的用户信息,保证ILAS III读者信息与对应的TekRADIUS用户信息保持一致。用户同步系统是VPN与ILAS III统一用户认证解决方案的核心,其实现也是实施该方案的难点所在。

3.1 用户同步系统运行过程

(1)系统参数对象初始化。读入并解析参数文件生成系统参数对象,系统参数属性主要包括:ILAS III数据库连接参数、TekRADIUS数据库连接参数、读者流通类型与用户组对应关系、是否初始化用户数据等。

(2)用户数据初始化。实现清除TekRADIUS所有用户、用户组数据,建立缺省的用户组,将所有符合条件的ILAS III读者数据引入TekRADIUS,生成TekRADIUS的用户数据。该模块主要用于系统初始化或TekRADIUS用户数据丢失、损坏等特殊情况。该模块同步所有读者数据,运行时间较长,因此通常只在系统第一次运行时自动运行,用户数据初始化成功后则不会自动运行。有特殊需求时,可在参数文件中指定每次启动系统时运行该模块。

(3)启动同步进程。实时监测ILAS III读者数据变动情况,将变动了的ILAS III读者数据同步到TekRADIUS生成用户数据。

3.2 用户信息同步

(1)ILAS III读者信息

为了提高系统的扩展性,ILAS III中的读者信息以MARC记录保存在数据库中,开发人员可根据业务发展的需要,随时增减读者信息属性。ILAS III读者信息表是READER,主要字段包括:读者记录号MRC0,数据类型是NUMBER;读者MARC记录MRCC,数据类型是BLOB,该字段完整保存读者信息的MARC记录。ILAS III读者信息主要属性对应的MARC字段、子字段如表1所示:

表1 ILAS III读者MARC记录主要字段、子字段

MARC记录是非结构化的数据,读取其信息需要解析、分解等复杂的操作过程。MARC4J是一个处理MARC数据的开发工具包,提供了一个易于使用的应用程序编程接口来操作MARC格式的数据[ 6]。项目中使用MARC4J,实现从读者MARC记录中析取读者证号、姓名、读者类型等信息。MARC4J中,Record类实现对MARC记录的操作。getSubFieldValue函数实现从MARC记录中读取指定字段的子字段值,如下:

public static String getSubFieldValue(Record record, String tag, char code){

DataField field = (DataField)record.getVariableField(tag);

String value = null; Subfield subField = null;

if(null != field) {

subField = field.getSubfield(code);

if(null != subField) value = subField.getData();

}

return value;

}

从ILAS III数据库中读取读者MARC记录,析出读者证号、姓名等读者信息的程序实现如下:

PreparedStatement readerMarcStmt = getIlasConn().prepareStatement(SQL_GETREADER);

ResultSet readerMarcRset = readerMarcStmt.executeQuery();

if(readerMarcRset.next()){

InputStream in = readerMarcRset.getBlob("MRCC").getBinaryStream();

MarcReader reader = new MarcPermissiveStreamReader(in, true, false);

Record record = reader.next();

String code = getSubFieldValue(record, "R01", ′b′); //读者证号

String password = getSubFieldValue(record, "R01",′p′); //密码

String type = getSubFieldValue(record, "R02", ′t′); //读者流通类型

String status = getSubFieldValue(record, "R01", ′s′); //读者状态

}

(2)TekRADIUS用户信息

TekRADIUS用户表缺省表名是Users,其表结构如下:

UserName nchar(64) NOT NULL, //用户名

Attribute nchar(64) NULL, //属性名

AttrType int NULL, //属性类型:0-Check,1-Success Reply,2-Failure Reply,3-Information

Val nchar(256) NULL //属性值

该表中每一行记录保存一个属性值,一个用户信息有n个属性就对应有n行记录,即一个用户的信息在该表中会对应多行记录,各行记录的UserName字段值都是该用户的用户名。

(3)ILAS III读者信息与TekRADIUS用户信息对应关系

一个ILAS III读者记录,在生成TekRADIUS用户信息时,会在TekRADIUS的用户表中插入5行记录;各行记录UserName字段的值都是该读者证号,其他字段取值如表2所示:

表2 ILAS III读者信息与TekRADIUS用户信息对应关系表

例如,在ILAS III中记录号为51444读者信息的MARC记录如下:

LEADER 00235n 2200085 450

R01﹩b01088﹩a王泽贤﹩sn﹩l244370﹩I440102197210138044﹩p88888

R02 ﹩b19721013﹩t012﹩sM﹩1教师

R03 ﹩u图书馆

R04 ﹩b20030715﹩e20150615﹩d20031211

在参数文件中,设置了读者类型“012”对应的用户组为“Teacher”。该读者记录同步到TekRADIUS后,会在用户表中生成以下5行记录:

UserNameAttributeAttrTypeVal
01088ietf|1001088
01088ietf|00Teacher
01088ietf|2088888
01088ILASIII|0351444
01088ILASIII|13王泽贤

(4)用户信息同步过程

①取需同步的读者记录号列表。在ILAS III中,书目记录、读者记录等重要数据的变动情况,都会记录在Z_TRIGGERLOG表中。该表主要字段如下:记录号RECNO,发生变动的表名TABLENAME,发生变动数据的记录号NRECNO,变动类型TYPE(可能的值:I-新增,U-更新,D-删除)。可根据该表数据取得需同步的读者记录号列表:取上次最后处理的READER表数据变动日志记录号LastTriggerID,根据该值从ILAS III中取出已发生数据变动,但未进行同步处理的读者记录号NRECNO和变动类型TYPE。使用的SQL语句如下所示:

select RECNO,NRECNO,TYPE from ILAS.Z_TRIGGERLOG

where TABLENAME =′READER′ and RECNO > :LastTriggerID order by RECNO

②对列表中各条记录进行同步处理。根据读者记录号NRECNO值,从ILAS III的READER表中取得该读者信息的MARC记录;根据变动类型TYPE值分别处理:“D”表示该读者记录已删除,需在TekRADIUS用户表中删除对应的用户信息;“I”表示该读者记录是新增加的,当该读者状态有效时,在TekRADIUS用户表中插入新的用户信息;“U”表示该读者信息已改变,当该读者状态有效时,需在TekRADIUS用户表更新对应的用户信息记录,反之则需在TekRADIUS用户表中删除对应的用户信息。对列表中所有读者信息同步完成后,将最后一条记录的RECNO值保存为新的LastTriggerID值。

4 应用效果

在实施该方案时,TekRADIUS与用户同步系统部署在同一台普通PC服务器上(CPU 2.0GHz、内存2GB),操作系统为Windows 2003。TekRADIUS安装的是3.4版,所用的数据库是SQL Server 2000;用户同步系统基于Java 1.6开发完成。

系统开发、安装、设置完成后,进行以下测试:

(1)TekRADIUS安装设置后,新建立一个测试用户test;VPN远端RADIUS认证设置好后,使用test用户及其密码VPN登录成功。删除该test用户,使用test用户及其密码VPN登录失败。

(2)用户同步系统运行后,查看TekRADIUS数据库,自动生成了缺省用户组,ILAS III的所有符合条件的读者记录生成了对应的用户记录,从中随机抽取3个用户,进行VPN登录成功。

(3)在ILAS III中新增一个读者记录,使用该读者证号及密码登录VPN成功;在ILAS III中修改该读者密码,使用该读者旧密码登录VPN失败,使用该读者新密码登录VPN成功。

(4)使用该新增读者的读者证号登录ILAS III网上图书馆后,修改密码,使用该读者旧密码登录VPN失败,使用该读者新密码登录VPN成功。

(5)在ILAS III中修改该新增读者状态为“挂失”,该读者登录VPN失败;将该读者状态改为“正常”后,该读者登录VPN成功。

(6)在ILAS III中删除该新增读者,该读者登录VPN失败。

通过以上测试,确认该方案是确实可行的。广州大学图书馆使用较低成本,成功解决了VPN与ILAS III统一用户认证问题,实现了与ILAS III的集成,大大增强了VPN的有效使用与管理。

5 结 语

RADIUS认证具有简单、安全、中央认证以及易于扩展等特点,适合在VPN认证系统中应用,对于VPN合理使用发挥重要的作用。TekRADIUS服务器与用户同步系统相结合,简单、有效地解决了VPN与图书馆内其他系统的统一用户认证问题,在极大地方便读者利用馆藏资源的同时,也为系统的管理提供了方便。

The authors have declared that no competing interests exist.

作者已声明无竞争性利益关系。

参考文献
[1] 王泽贤. 构建安全高效功能全面的SSL VPN——开源软件的研究与实践[J]. 图书情报工作, 2009, 53(11): 123-126. [本文引用:1]
[2] 周群. VPN技术应用于图书馆研究综述[J]. 图书馆学刊, 2010, 32(3): 100-102. [本文引用:1]
[3] AAA服务器[EB/OL]. [2011-08-03]. http://baike.baidu.com/view/162310.htm. [本文引用:1]
[4] 黄继征. Linux环境下对VPN用户认证的Radius服务器的设计与实现[J]. 现代图书情报技术, 2005(7): 22-24. [本文引用:1]
[5] TekRADIUS-Radius Server for Windows[EB/OL]. [2011-08-03]. http://www.tekradius.com. [本文引用:1]
[6] MARC4J项目首页[EB/OL]. [2011-08-03]. http://marc4j.tigris.org. [本文引用:1]