准备工作
刷固件以后按照下图配置 Linksys WRT 54GS,指定 Radius 服务器的 IP 和端口、安全模式、WPA 算法、WPA Shared Key 等,这个 WPA Shared Key 由下面的 FreeRadius 配置指定:
这里只是安装 LDAP 客户端,不包括 LDAP 服务器的安装,所以需要事先知道 LDAP 服务器的 IP 或域名等相关信息。
$ sudo apt-get install ldap-auth-client ldap-auth-config libpam-ldap
填入 LDAP 服务器地址 host, base 等:
$ sudo vi /etc/ldap.conf host ldap.vpsee.com base dc=vpsee,dc=com pam_password exop pam_lookup_policy yes nss_initgroups_ignoreusers Debian-exim,backup,bin,daemon,dhcp,games,gnats,irc,klog,libuuid ,list,lp,mail,man,news,ntpd,proxy,root,snmp,sshd,statd,sync,sys,syslog,uucp,www-data
确认 nsswitch.conf 先搜索本地文件,用户登陆的时候先检索本地 /etc/passwd 找不到相关用户名再检索 ldap 服务器上的用户数据库:
$ sudo vi /etc/nsswitch.conf passwd: files ldap group: files ldap shadow: files ldap automount: files hosts: files dns networks: files protocols: db files services: db files ethers: db files rpc: db files
安装 FreeRadius:
$ sudo apt-get install freeradius freeradius-utils freeradius-ldap openssl
编辑 clients.conf,确定哪个 IP 范围可以访问 Radius 服务,这里 secret 一行的 testing123 就是上面 DD-WRT 要用到的 WPA Shared Key:
$ sudo vi /etc/freeradius/clients.conf
...
client 192.168.2.0/24 {
require_message_authenticator = no
secret = testing123
shortname = vpsee-network
}
...
配置 default,确定 pam 一行没有被注释掉:
$ sudo vi /etc/freeradius/sites-available/default
...
authorize {
preprocess
chap
mschap
suffix
eap {
ok = return
}
unix
files
expiration
logintime
pap
}
...
authenticate {
Auth-Type PAP {
pap
}
Auth-Type CHAP {
chap
}
Auth-Type MS-CHAP {
mschap
}
pam
unix
eap
}
...
同样的确定 inner-tunnel 配置文件里面的 pam 一行没有被注释掉:
$ sudo vi /etc/freeradius/sites-available/inner-tunnel
...
authenticate {
Auth-Type PAP {
pap
}
Auth-Type CHAP {
chap
}
Auth-Type MS-CHAP {
mschap
}
pam
unix
eap
}
...
在 users 加入下面认证类型:
$ sudo vi /etc/freeradius/users
...
DEFAULT Auth-Type = PAM
Fall-Through = 1
...
配置完毕后重启 freeradius:
$ sudo /etc/init.d/freeradius restart
如果要 debug 的话这样启动 freeradius:
$ sudo /etc/init.d/freeradius stop $ sudo freeradius -X
先测试使用 LDAP 方式登陆系统是否正确,使用 LDAP 用户名和密码从另一台电脑 ssh 登陆到这台 Radius 服务器,如果不用本地帐号而用 LDAP 帐号顺利登陆的话就说明这台服务器已经能顺利使用 LDAP 登陆了:
$ ssh vpsee@192.168.2.65
测试 Radius 服务是否能正确从 LDAP 那里得到验证信息,使用 ldap 用户名和密码测试 Radius 服务是否反馈正确消息 Access-Accept:
$ radtest vpsee "password" 192.168.2.65 1 testing123 Sending Access-Request of id 233 to 192.168.2.65 port 1812 User-Name = "vpsee" User-Password = "password" NAS-IP-Address = 192.168.2.65 NAS-Port = 1 rad_recv: Access-Accept packet from host 192.168.2.65 port 1812, id=233, length=20
另外有个办法是不用 pam 的方式,直接用 freeradius-ldap 模块和 LDAP 服务器连接,这种办法不适合我们实验室的应用场景,不过配置要简单一些。简单说一下就是利用 freeadius 的 ldap 模块直接连接 LDAP 服务器验证用户。先安装 freeradius-ldap 模块:
$ sudo apt-get install freeradius-ldap
然后配置 clients.conf
$ sudo vi /etc/freeradius/module/ldap
...
ldap {
server = "ldap.vpsee.com"
identity = "cn=admin,o=My Org,c=UA"
password = mypass
basedn = "o=My Org,c=UA"
filter = "(uid=%{%{Stripped-User-Name}:-%{User-Name}})"
...
然后取消下面2个文件里面关于 ldap 的相关注释:
$ sudo vi /etc/freeradius/sites-available/default $ sudo vi /etc/freeradius/sites-available/inner-tunnel
重启 freeradius 让配置生效:
$ sudo /etc/init.d/freeradius restart