系统环境
操作系统 CentOS 5.5 系统组件 开发工具 OTP服务器 otpd3.2.5 Radius服务器 freeradius2.1.7 其他 openssl-1.0.0a Authen-HOTP-0.02 pam_radius-1.3.17安装openssl
#./config shared #make #make test #make install安装otpd
#C_INCLUDE_PATH=/usr/local/ssl/include;export C_INCLUDE_PATH #./configure --with-openssl=/usr/local/ssl #make #make install #touch /etc/otppasswd #mkdir /etc/otpstat #chmod 600 /etc/otppasswd #chmod 700 /etc/otpstate #mkdir /var/run/otpd #touch /var/run/otpd/socket #ln /usr/local/ssl/lib/libssl.so.1.0.0 /usr/lib/ #ln /usr/local/ssl/lib/libcrypto.so.1.0.0 /usr/lib/PERL TOKEN
TOKEN用于生成一次性口令,IS in Public仅提供一个perl写的TOKEN作为参考。如果希望实现自动化口令申请与审计,可以写个小web程序;如果你要为每个用户开启OTP认证,并且希望他们随时可以得到一次性口令,你可以建议他们在手机上安装TOKEN(各平台都可以从网上获取现成的TOKEN程序)。
编写实现token脚本
#!/usr/bin/perl #From Tsing of ispublic.com use Authen::HOTP qw(hotp); my $charkey = "qwertyuiopasdfghjklz" ; #以字节表示的seed my $counter = $ARGV[0] ; #计数器,测试脚本中取命令行参数 my $digits = 6 ; #生成一次性口令位数 my $pass = hotp($charkey,$counter,$digits); print "$pass\n";在/etc/otppasswd加入
root:hotp-d6:71776572747975696f706173646667686a6b6c7a注:“root”为用户名,“hotp-d6”生成6位口令,最后为以16进制表示的seed
使用perl token分别生成计算器值为1、2的口令pass1,pass2,执行
修改/etc/otppasswd和perl token中的口令位数为8位(如果之前直接设置为8,将导致生成pass1/2的操作无法执行;
修改/etc/otpstate/root中的计数器值(原始为3)为2;
如果返回0(ok),表示otpd与token均可正常工作;
安装Freeradius
#yum -y install freeradius2 freeradius2-krb5 freeradius2-ldap freeradius2-utils #vi /etc/raddb/sites-available/default在authenticate {和authorize {之后分别加入otp
#chmod 777 /var/run/otpd/socket #vi /etc/raddb/client.conf ,修改可访问网段与通信密钥; #radiusd -X & 配置客户端
下载pam_radius-1.3.17
修改以下部分:
#server[:port] shared_secret timeout(s) Radius IP 对应密钥 3 #other-server other-secret 3#yum -y install pam-devel #make #cp pam_radius_auth.so /lib/security/ #cp pam_radius_auth.conf /etc/raddb/server #chown root /etc/raddb #chown root /etc/raddb/server #chmod 700 /etc/raddb #chmod 700 /etc/raddb/server #vi /etc/pam.d/su auth sufficient pam_rootok.so auth required pam_env.so auth sufficient pam_radius_auth.so try_first_pass debug account sufficient pam_radius_auth.so debug session sufficient pam_radius_auth.so debug以上pam配置仅供测试,请根据实际情况添加其他pam模块!!!
事实上,该系统适应于任何可以radius作为认证方式的系统或程序,自行发挥吧。