Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1866764
  • 博文数量: 473
  • 博客积分: 13997
  • 博客等级: 上将
  • 技术积分: 5953
  • 用 户 组: 普通用户
  • 注册时间: 2010-01-22 11:52
文章分类

全部博文(473)

文章存档

2014年(8)

2013年(38)

2012年(95)

2011年(181)

2010年(151)

分类: LINUX

2014-03-08 11:03:07

系统管理员偶尔会遇到这种需求:一个普通用户要求临时使用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作为认证方式的系统或程序,自行发挥吧。

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