Chinaunix首页 | 论坛 | 博客
  • 博客访问: 434490
  • 博文数量: 75
  • 博客积分: 2780
  • 博客等级: 少校
  • 技术积分: 789
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-23 20:38
文章分类

全部博文(75)

文章存档

2012年(1)

2011年(11)

2010年(12)

2009年(39)

2008年(12)

我的朋友

分类: LINUX

2011-03-15 14:56:02

系统管理员偶尔会遇到这种需求:一个普通用户要求临时使用root账户,并且sudo不能完全满足他的要求。那么,实现su命令OTP认证是最为合适的方法。

系统环境

操作系统 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程序)。

#cd Authen-HOTP-0.02 #perl -MCPAN -e shell #no #install Digest::SHA1 #install Digest::HMAC #exit #perl Makefile.PL #make #make test #make install

编写实现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,执行

resynctool -1 pass1 -2 pass2 -u root -k 71776572747975696f706173646667686a6b6c7a > /etc/otpstate/root

修改/etc/otppasswd和perl token中的口令位数为8位(如果之前直接设置为8,将导致生成pass1/2的操作无法执行;
修改/etc/otpstate/root中的计数器值(原始为3)为2;

otpd -D & otpauth -u root -p key3 -s /var/run/otpd/socket

如果返回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

#vi pam_radius_auth.conf

修改以下部分:

#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作为认证方式的系统或程序,自行发挥吧。

阅读(3056) | 评论(3) | 转发(1) |
给主人留下些什么吧!~~

purpose11132019-12-30 11:52:53

楼主  有没有radius OTP challenge认证的详细配置文档  用freeradius修改配置  使得支持radius OTP  challenge

purpose11132019-12-30 11:52:50

楼主  有没有radius OTP challenge认证的详细配置文档  用freeradius修改配置  使得支持radius OTP  challenge

bbzsxjj2013-08-15 17:12:49

这个是pam_radius版本的问题,我开始测试时,也遇到这个问题,之后换低级版本就OK了,请按照我提供的版本号安装,有问题可以与我联系!

回复 | 举报