测试环境:RedHat Enterprise Linux 5.0 x86 

测试步骤:

1、安装freeradius 

  1. wget ftp://ftp.freeradius.org/pub/freeradius/freeradius-server-2.1.11.tar.gz 
  2. tar zxvf freeradius-server-2.1.11 
  3. ./configure --prefix=/usr/local/freeradius   //指定一下freeradius的安装目录,主要是为了方便卸载。 
  4. make 
  5. make install  //到这里安装就算完成了,相当简单。 
  6. export PATH=$PATH:/usr/local/freeradius/bin:/usr/local/freeradius/sbin //为了方便测试,我把FR的可执行文件目录都导入PATH变量里。 

2、测试freeradius 
  1. cd /usr/local/freeradius/etc/raddb   //FR的配置文件都在这个目录里 
  2. vi users    //修改账号文件。FR的的账号可以存在文件中,也可以存放在数据库里。缺省是存放在文件中的,通过修改配置文件来设置。这里我测的是文件模式。 
  3. steve   Cleartext-Password :"testing" 
  4.         Service-Type = Framed-User, 
  5.         Framed-Protocol = PPP
  6.         Framed-IP-Address = 172.16.3.33, 
  7.         Framed-IP-Netmask = 255.255.255.0, 
  8.         Framed-Routing = Broadcast-Listen, 
  9.         Framed-Filter-Id = "std.ppp"
  10.         Framed-MTU = 1500
  11.         Framed-Compression = Van-Jacobsen-TCP-IP 
  12. //steve是user中的一个示例账号,缺省是被注释掉。将上面几行行首的“#”去掉,就他来测试。teve账号里面有很多参数,保持默认的吧。testing是他的密码。熟悉以后,在自行修改吧。 
测试账号建好了,我们把FR服务启起来吧。
  1. radiusd -X     //-X debug模式,方便测试观察, FR的/sbin下有个rc.radiusd脚本。如果测试没问题的话,可以把它拷到/etc/init.d下,用服务的方式来启动FR。 
  2. Listening on authentication address * port 1812 
  3. Listening on accounting address * port 1813 
  4. Listening on command file /usr/local/freeradius/var/run/radiusd/radiusd.sock 
  5. Listening on authentication address 127.0.0.1 port 18120 as server inner-tunnel 
  6. Listening on proxy address * port 1814 
  7. Ready to process requests. 
成功启动的话,最后的输出应该是"Ready to Process request"
再开启一个终端。执行下面命令
  1. radtest steve testing localhost 1812 testing123  //radtest 是FR内置的一个测试工具 syntax: steve-账号 testing-密码 localhost-FRserver 1812-端口 testing123-定义的secret,这个在clients.conf里设置。我用本机做测试所以client是localhost,在clients.conf的localhost可以在找到它默认的secret是testing123。 
测试没问题的话,可以看到
  1. rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=132length=71 
  2.         Service-Type = Framed-User 
  3.         Framed-Protocol = PPP 
  4.         Framed-IP-Address = 172.16.3.33 
  5.         Framed-IP-Netmask = 255.255.255.0 
  6.         Framed-Routing = Broadcast-Listen 
  7.         Filter-Id = "std.ppp" 
  8.         Framed-MTU = 1500 
  9.         Framed-Compression = Van-Jacobson-TCP-IP 
相应的debug那个终端也会有信息输出,篇幅原因,我就不贴出来了。
OK,测试完成。
 
3、安装pam_radius_auth 
  1. wget ftp://ftp.freeradius.org/pub/radius/pam_radius-1.3.17.tar.gz 
  2. tar zxvf pam_radius-1.3.17.tar.gz  
  3. cd pam_radius-1.3.17 
  4. make //make之前安装pam-devel包 
  5. cp pam_radius_auth.so /lib/security/ 
  6. mkdir /etc/raddb 
  7. cp pam_radius_auth.conf /etc/raddb/server 
  8. vi /etc/raddb/server 
  9. 127.0.0.1       testing123             1  //修改secret,缺省localhost的secret是testing123,见FR的clients.conf 
  10. vi /etc/pam.d/sshd 
  11. #%PAM-1.0 
  12. auth    sufficient      pam_radius_auth.so   //这行是我添加的,添加的位置有讲究,放到下面可能会出错。 
  13. auth       include      system-auth 
  14. /etc/init.d/sshd restart //重启ssh服务。 
OK,安装配置完成。
 
4、测试ssh.
晕,漏洞了非常重要的一步,本机上没有steve这个账号。 
  1. useradd steve //创建账号,既然是用FR来认证,本地的password就补需要设置了。 
  2. ssh steve@localhost //不出意外的输入密码"testing",成功获得shell