freeradius-server-2.1.12.tar.bz2+suse10 64+Oracle11配置

使用的环境
freeradius-server-2.1.12.tar.bz2
SUSE10 x86-64
Oracle11
配置关键:
[b]freeradius-server和oracle服务器安装在一台机器上,
oracle已经安装好了。安装步骤可以参考网上的其他教程。
分开安装的没有成功。郁闷了,不搞了。[/b]
一、安装配置freeradius服务器步骤:
#bzip2 -dv freeradius-server-2.1.12.tar.bz2
#tar -xvf freeradius-server-2.1.12.tar
#cd freeradius-server-2.1.12
#./configure --prefix=/usr/local/freeradius
#make
#make install
#cd /usr/local/freeradius/sbin
#./radiusd -X
【Listening on authentication address * port 1812
Listening on accounting address * port 1813
Listening on command file /usr/local/freeradius/var/run/radiusd/radiusd.sock
Listening on authentication address 127.0.0.1 port 18120 as server inner-tunnel
Listening on proxy address * port 1814】 ok

#cd /usr/local/freeradius/etc/raddb
在users文件第一行插入
test Cleartext-Password := "testing"
表示加入了一个用户,名字为test,密码为明文的testing。

本机客户端测试(client/server都在一台机器上):
保存文件后,重启服务器,
#./radiusd -X.

然后另开一个终端(作为client),
#cd /usr/local/freeradius/bin
发送验证请求
#./radtest test testing 127.0.0.1 0 testing123
返回的结果为
Sending Access-Request of id 163 to 127.0.0.1 port 1812
User-Name = "test"
User-Password = "testing"
NAS-IP-Address = 10.18.57.161
NAS-Port = 0
Message-Authenticator = 0x00000000000000000000000000000000
rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=163, length=20

如果返回的结果的最后一行是 rad_recv: Access-Accept 那就说明本地测试成功了
如果最后一行是rad_recv: Access-Reject那就表示失败了

要其他IP地址的客户端访问radius服务器,就在文件clients.conf末尾添加
#cd /usr/local/freeradius/etc/raddb
#vi clients.conf
在末尾添加
client 10.18.20.155 {
ipaddr = 10.18.20.155
secret = testing123
shortname = clienttestos
nastype = other
}

用Radius Test 2.6在客户机10.18.20.155上测试,
显示如下内容,表示认证成功,结果如下:
------------------------------------
Sending Access-Request of id 118 to 10.18.57.161 port 1812
User-Name = "test"
Password = "testing"
rad_recv: Access-Accept packet from host 10.18.57.161 port 1812, id=118, length=20

Total approved auths: 1
Total denied auths: 0
Total lost auths: 0
Total time(secs): 0
----------------------------------

二、配置与Oracle数据库的连接步骤:

配置oracle数据
#su - oracle
-- 创建用户
create user radius identified by radpass;
GRANT CONNECT,RESOURCE,DBA to radius;

--创建表
#mkdir /home/oracle/sqls
将 /usr/local/etc/raddb/sql/oracle/schema.sql 拷贝到 /home/oracle/sql
--修改权限
#chown oracle:oinstall /home/oracle/sqls/schema.sql
#chmod 744 /home/oracle/sqls/schema.sql
切换到oracle
#su - oracle
$sqlplus radius/radpass@<yoursid>
SQL>start /home/oracle/sqls/schema.sql
SQL>alter table radacct modify groupname null; --非必须,如果报错,不用理会
SQL>CREATE TABLE nas (
id INT PRIMARY KEY,
nasname VARCHAR(128),
shortname VARCHAR(32),
type VARCHAR(30),
ports INT,
secret VARCHAR(60),
server VARCHAR(64),
community VARCHAR(50),
description VARCHAR(200)
);
SQL>CREATE SEQUENCE nas_seq START WITH 1 INCREMENT BY 1;
SQL>INSERT INTO radgroupreply VALUES (radgroupreply_seq.nextval, 'user','Service-Type','=','Framed-User');
SQL>INSERT INTO radgroupcheck VALUES (radgroupcheck_seq.nextval, 'user','Auth-Type','=','Local');
SQL>INSERT INTO radcheck VALUES (radcheck_seq.nextval, 'ora_usr','User-Password','==','ora_pwd');
SQL>INSERT INTO radusergroup VALUES (radusergroup_seq.nextval, 'ora_usr','user');
SQL>commit;
SQL>exit;


接下来对freeradius进行配置
编辑/usr/local/freeradius/etc/raddb/sql.conf

# vim /usr/local/freeradius/etc/raddb/sql.conf
修改配置文件中mysql的帐号及密码

#database = "mysql"
database = "oracle"

# Connection info:
server = “localhost”
port = 1521
login = "radius"
password = "radpass"

#radius_db = "radius"
radius_db = "(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.18.57.161)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = portaldb)))"

编辑/usr/local/etc/raddb/sites-enabled/default
# vim /usr/local/freeradius/etc/raddb/sites-enabled/default
(行数仅供参考,版本不同行数也不同)
170行 files 前加 # 注释
177行 去掉 sql 前 # 注释
406行 去掉 sql 前 # 注释


编辑/usr/local/freeradius/etc/raddb/sites-enabled/inner-tunnel
# vim /usr/local/freeradius/etc/raddb/sites-enabled/inner-tunnel
124行 files 前加 # 注释
131行 去掉 sql 前 # 注释

编辑/usr/local/freeradius/etc/raddb/radiusd.conf
# vim /usr/local/freeradius/etc/raddb/radiusd.conf
去掉700行 $INCLUDE sql.conf 前的#注释

配置完成,启动测试
# radius -X (X必须是大写)


Could not link driver rlm_sql_oracle: rlm_sql_oracle.so: cannot open shared object file: No such file or directory

出现上面的错误,先要看一下有没有rlm_sql_oracle.so这个文件
# find / -name rlm_sql_oracle.so

多半是没有了,那么需要编译一个出来

回到之前解压的freeradius-server-2.1.12目录里
# cd ~/freeradius-server-2.1.12/src/modules/rlm_sql/drivers/rlm_sql_oracle
# ./configure --with-oracle-include-dir=${ORACLE_HOME}/rdbms/public --with-oracle-lib-dir=${ORACLE_HOME}/lib

将当前目录下的Makefile改成如下内容
------------------------------------------------------------------------------------------------
include ../../../../../Make.inc

TARGET = rlm_sql_oracle
SRCS = sql_oracle.c
RLM_SQL_CFLAGS = -I/opt/oracle/db/product/11.1.0/db_1/rdbms/public/ $(INCLTDL)
RLM_SQL_LIBS = -L/opt/oracle/db/product/11.1.0/db_1/lib -lclntsh -lm

include ../rules.mak
----------------------------------------------------------------------------------------------

# make && make install

重启
# radius -X
然后另开一个终端(作为client),
#cd /usr/local/freeradius/bin
发送验证请求
#./radtest rad_usr rad_pwd 127.0.0.1 0 testing123

三、freeradius和oracle连接错误排查 -- 我没有遇到
freeradius与oracle的连接配置完成,启动测试
# radius -X (X必须是大写)
出现如下错误提示:

Could not link driver rlm_sql_oracle: libnnz11.so: cannot open shared object file: No such file or directory
Make sure it (and all its dependent libraries!) are in the search path of your system's ld.
/usr/local/freeradius/etc/raddb/sql.conf[22]: Instantiation failed for module "sql"
/usr/local/freeradius/etc/raddb/sites-enabled/default[177]: Failed to load module "sql".
/usr/local/freeradius/etc/raddb/sites-enabled/default[69]: Errors parsing authorize section.

解决方法如下:
# echo ${ORACLE_HOME}/lib >> /etc/ld.so.conf
# ldconfig

再次启动:
# ./radiusd -X (X必须是大写)
出现如下错误提示:
/usr/local/freeradius/etc/raddb/sites-enabled/inner-tunnel[124]: Failed to load module "$files".
/usr/local/freeradius/etc/raddb/sites-enabled/inner-tunnel[47]: Errors parsing authorize section.
#cd /usr/local/freeradius/etc/raddb/sites-enabled
#vim inner-tunnel
修改124行,添加注释
# $files

若测试再出错,确认oracle用户名是否修改正确:
# vim /usr/local/freeradius/etc/raddb/sql.conf
修改配置文件中mysql的帐号及密码
# Connection info:
login = "radius"
password = "radpass"

--------------------------------------------------
用java代码进行认证测试
jradius-client.jar

import net.sourceforge.jradiusclient.RadiusClient;
import net.sourceforge.jradiusclient.RadiusPacket;
import net.sourceforge.jradiusclient.packets.ChapAccessRequest;
import net.sourceforge.jradiusclient.packets.PapAccessRequest;

public class RadiusAuthService
{
/**
* 得到RadiusClient
* @param authport 服务器端口
* @param serverIp 服务器Ip
* @param shareSecret 密钥
* @return RadiusClient RadiusClient
*/
private RadiusClient getRadiusClient(int authport, String serverIp,
String shareSecret)
{

RadiusClient client = null;
try
{
client = new RadiusClient(serverIp, authport, 1813, shareSecret);
}
catch (Exception e)
{
e.printStackTrace();
}
return client;
}

/**
* 认证
* @param userName 用户名
* @param userPassWord 密码
* @param userAuthMode 认证模式(pap or chap)
* @param authPort 端口
* @param serverIP 服务器ip
* @param shareSecret 密钥
* @return 是否成功
*/
public boolean auth(String userName, String userPassWord,
String userAuthMode, int authPort, String serverIP,
String shareSecret)

{

Boolean isSucces = Boolean.FALSE;
RadiusPacket accessResponse = null;

RadiusClient client = null;
if (serverIP != null && !serverIP.equals(""))
{
client = getRadiusClient(authPort, serverIP, shareSecret);
}
RadiusPacket accessRequest = null;
try
{
if (userAuthMode.equalsIgnoreCase("chap"))
{
accessRequest = new ChapAccessRequest(userName, userPassWord);
}
else
{
accessRequest = new PapAccessRequest(userName, userPassWord);
}

// 连接认证服务器
accessResponse = client.authenticate(accessRequest);
int accessResponseResult = 0;
if (null != accessResponse)
{
accessResponseResult = accessResponse.getPacketType();
}
// 验证通过
if (RadiusPacket.ACCESS_ACCEPT == accessResponseResult
|| RadiusPacket.ACCESS_CHALLENGE == accessResponseResult)
{
isSucces = Boolean.TRUE;
}

// 验证不通过
else if (accessResponseResult == RadiusPacket.ACCESS_REJECT)
{
//
}
}
catch (Exception ex)
{
ex.printStackTrace();
}
return isSucces;

}

public static void main(String[] args)
{
Boolean authResult = Boolean.FALSE;
String userName = "ora_usr";
String userPassWord = "ora_pwd";
String userAuthMode = "";
int authPort = 1812;
String serverIP = "10.18.57.161";
String shareSecret = "testing123";
RadiusAuthService radiusAuthService = new RadiusAuthService();
authResult = radiusAuthService.auth(userName, userPassWord,
userAuthMode, authPort, serverIP, shareSecret);
System.out.println("-------------" + authResult);
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值