注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

zjc的博客

技术积累

 
 
 

日志

 
 

freeradius for oracle  

2009-02-18 15:54:18|  分类: 业务应用 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

1.前提条件:操作系统为linux及必要的开发包,已安装oracle数据库client端,且已经将freeradius需要的表安装到数据库中。
2.安装命令:
 (1)解压tar包 freeradius-1.1.7.tar.gz
 (2)进入目录:
  ./configure --with-oracle_dir=/opt/oracle/product/10.0.2.0/db_1
  make
  make install
3.修改配置文件
 (1)修改radiusd.conf,用$INCLUDE  ${confdir}/oraclesql.conf配置代替原来默认的配置(默认配置为mysql)
 (2)修改radiusd.conf,加入范例如下:
          exec updatefe {
                   wait = yes
                    input_pairs = request
                    program = "/usr/local/bin/updatefe %{User-Name} %{Framed-IP-Address} %{Acct-Status-Type}"
               }
 (3)修改oraclesql.conf,修改范例如下:
      server = "192.168.14.212"
      login = "rick"
      password = "abc"
 
      # Database table configuration
      radius_db = "(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.14.212)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=orcl)))"
4.启动指令:radiusd -X > /root/debug.log &
以测试方式启动,调试信息写入/root/debug.log,同时是以后台的方式启动。

5.测试指令:radtest test@green 123 localhost 0 testing123
test@green 用户名(已存在于数据库中)
123 密码(已存在于数据库中)
localhost 本地测试
0 固定
testing123 secret
6.正式上线是需要修改clents.conf ,修改范例如下:

       client 192.168.17.5 {
                 secret    = aa

                  shortname = aa
        }

7.不验证密码说明

在编译前修改源代码的auth.c文件,修改内容如下:


   /*
    * Local password is just plain text.
     */
   if (auth_item->attribute == PW_PASSWORD) {
    if (strcmp((char *)password_pair->strvalue,
        (char *)auth_item->strvalue) != 0) {
      //change by zjc 2008-11-10
     //DEBUG2("auth: user supplied User-Password does NOT match local User-Password");
     //return -1;
    }
    //DEBUG2("auth: user supplied User-Password matches local User-Password");
    DEBUG2("zjc:Don`t pair User-Password!!!!****");
    break;


将return -1 注释掉的目的是当密码不匹配的时候不返回错误

8.oracle脚本

/*
 * $Id: oracle.sql,v 1.1 2006/02/04 13:01:10 nbk Exp $
 *
 * Oracle schema for FreeRADIUS
 *
 *
 * NOTE: Which columns are NULLable??
 */

/*
 * Table structure for table 'dictionary'
 */
CREATE TABLE dictionary (
 id  INT PRIMARY KEY,
 type  VARCHAR(30),
 attribute VARCHAR(32),
 value  VARCHAR(32),
 format  VARCHAR(20),
 vendor  VARCHAR(32)
);
CREATE SEQUENCE dictionary_seq START WITH 1 INCREMENT BY 1;

/*
 * Table structure for table 'nas'
 */

CREATE TABLE nas (
 id   INT PRIMARY KEY,
 nasname  VARCHAR(128),
 shortname VARCHAR(32),
 type  VARCHAR(30),
 ports  INT,
 secret  VARCHAR(60),
 community VARCHAR(50),
 description VARCHAR(200)
);
CREATE SEQUENCE nas_seq START WITH 1 INCREMENT BY 1;

/*
 * Table structure for table 'radacct'
 */
CREATE TABLE radacct (
 radacctid  INT PRIMARY KEY,
 acctsessionid  VARCHAR(32) NOT NULL,
 acctuniqueid  VARCHAR(32),
 username  VARCHAR(32) NOT NULL,
 realm   VARCHAR(30),
 nasipaddress  VARCHAR(15) NOT NULL,
 nasportid         VARCHAR2(20 BYTE),
 nasporttype  VARCHAR(32),
 acctstarttime  TIMESTAMP WITH TIME ZONE,
 acctstoptime  TIMESTAMP WITH TIME ZONE,
 acctsessiontime  NUMERIC(12),
 acctauthentic  VARCHAR(32),
 connectinfo_start VARCHAR(50),
 connectinfo_stop VARCHAR(50),
 acctinputoctets  NUMERIC(12),
 acctoutputoctets NUMERIC(12),
 calledstationid  VARCHAR(50),
 callingstationid VARCHAR(50),
 acctterminatecause VARCHAR(32),
 servicetype  VARCHAR(32),
 framedprotocol  VARCHAR(32),
 framedipaddress  VARCHAR(15),
 acctstartdelay  NUMERIC(12),
 acctstopdelay  NUMERIC(12)
);
CREATE UNIQUE INDEX radacct_idx1
       ON radacct(acctsessionid,username,acctstarttime,
  acctstoptime,nasipaddress,framedipaddress);

CREATE SEQUENCE radacct_seq START WITH 1 INCREMENT BY 1;

/* Trigger to emulate a serial # on the primary key */
CREATE OR REPLACE TRIGGER radacct_serialnumber
 BEFORE INSERT OR UPDATE OF radacctid ON radacct
 FOR EACH ROW
 BEGIN
  if ( :new.radacctid = 0 or :new.radacctid is null ) then
   SELECT radacct_seq.nextval into :new.radacctid from dual;
  end if;
 END;
/

/*
 * Table structure for table 'radcheck'
 */
CREATE TABLE radcheck (
 id   INT PRIMARY KEY,
 username VARCHAR(30) NOT NULL,
 attribute VARCHAR(30),
 op  VARCHAR(2) NOT NULL,
 value  VARCHAR(40)
);
CREATE SEQUENCE radcheck_seq START WITH 1 INCREMENT BY 1;

/* Trigger to emulate a serial # on the primary key */
CREATE OR REPLACE TRIGGER radcheck_serialnumber
 BEFORE INSERT OR UPDATE OF id ON radcheck
 FOR EACH ROW
 BEGIN
  if ( :new.id = 0 or :new.id is null ) then
   SELECT radcheck_seq.nextval into :new.id from dual;
  end if;
 END;
/

/*
 * Table structure for table 'radgroupcheck'
 */
CREATE TABLE radgroupcheck (
 id   INT PRIMARY KEY,
 groupname VARCHAR(20) UNIQUE NOT NULL,
 attribute VARCHAR(40),
 op  VARCHAR(2) NOT NULL,
 value  VARCHAR(40)
);
CREATE SEQUENCE radgroupcheck_seq START WITH 1 INCREMENT BY 1;

/*
 * Table structure for table 'radgroupreply'
 */
CREATE TABLE radgroupreply (
 id  INT PRIMARY KEY,
 GroupName VARCHAR(20) UNIQUE NOT NULL,
 Attribute VARCHAR(40),
 op  VARCHAR(2) NOT NULL,
 Value  VARCHAR(40)
);
CREATE SEQUENCE radgroupreply_seq START WITH 1 INCREMENT BY 1;

/*
 * Table structure for table 'radreply'
 */
CREATE TABLE radreply (
 id  INT PRIMARY KEY,
 UserName VARCHAR(30) NOT NULL,
 Attribute VARCHAR(30),
 op  VARCHAR(2) NOT NULL,
 Value  VARCHAR(40)
);
CREATE INDEX radreply_idx1 ON radreply(UserName);
CREATE SEQUENCE radreply_seq START WITH 1 INCREMENT BY 1;

/* Trigger to emulate a serial # on the primary key */
CREATE OR REPLACE TRIGGER radreply_serialnumber
 BEFORE INSERT OR UPDATE OF id ON radreply
 FOR EACH ROW
 BEGIN
  if ( :new.id = 0 or :new.id is null ) then
   SELECT radreply_seq.nextval into :new.id from dual;
  end if;
 END;
/

/*
 * Table structure for table 'usergroup'
 */
CREATE TABLE usergroup (
 id  INT PRIMARY KEY,
 UserName VARCHAR(30) UNIQUE NOT NULL,
 GroupName VARCHAR(30)
);
CREATE SEQUENCE usergroup_seq START WITH 1 INCREMENT BY 1;

/* Trigger to emulate a serial # on the primary key */
CREATE OR REPLACE TRIGGER usergroup_serialnumber
 BEFORE INSERT OR UPDATE OF id ON usergroup
 FOR EACH ROW
 BEGIN
  if ( :new.id = 0 or :new.id is null ) then
   SELECT usergroup_seq.nextval into :new.id from dual;
  end if;
 END;
/


/*
 * Table structure for table 'realmgroup'
 */
CREATE TABLE realmgroup (
 id   INT PRIMARY KEY,
 RealmName VARCHAR(30) UNIQUE NOT NULL,
 GroupName VARCHAR(30)
);
CREATE SEQUENCE realmgroup_seq START WITH 1 INCREMENT BY 1;

CREATE TABLE realms (
 id  INT PRIMARY KEY,
 realmname VARCHAR(64),
 nas  VARCHAR(128),
 authport INT,
 options  VARCHAR(128)
);
CREATE SEQUENCE realms_seq START WITH 1 INCREMENT BY 1;

  评论这张
 
阅读(1314)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017