Telnet服务在一些企业中,以及管理员的管理中都会遇到。这里我们将要讲解的则是SRP Telnet服务器的有关问题。那么我们的系统背景是Linux系统。那么相关操作也是基于此的。Telnet可以使用户坐在已上网的电脑键盘前通过网络进入的另一台已上网的电脑,并负责把用户输入的每个 字符传递给主机,再将主机输出的每个信息回显在屏幕上.这种连通可以发生在同一房间里面的电脑或是在世界各范围内已上网的电脑.Telnet服务与其他网络应用一样属于客户机/服务器模型,一旦连通后,客户机可以享有服务器所提供的一切服务.
但是传统的网络服务程序telnet在本质上都是不安全的,因为它在网络上用明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据.而且,这些服务程序的安全验证方式也是有其弱点的,就是很容易受到"中间人"(man-in-the-middle)这种方式的攻击.所谓"中间人"的攻击方式,就是"中间人"冒充真正的服务器接收你传给服务器的数据,然后再冒充你把数据传给真正的服务器.服务器和你之间的数据传送被"中间人"转手后做了手脚之后,就会出现很严重的问题.SSH(Secure Shell)是以远程联机服务方式操作服务器时的较为安全的解决方案.它最初由芬兰的一家公司开发,但由于受版权和加密算法的限制,很多人转而使用免费的替代软件OpenSSH.Openssh是由OpenBSD Project开发和维护的、捆绑有SSH协议的软件套件.用户通过OpenSSH可以把所有传输的数据进行加密,使"中间人"的攻击方式不可能实现,但是OpenSSH目前存在两个安全遗患:口令、密匙破解(利用字典文件去解密码)和OpenSSH中可能被安放木马(相关链接:http://network.ccidnet.com/pub/disp/Article?columnID=239&articleID=21882&pageNO=1 ).
SRP简介
SRP全称:Secure Remote Password(安全远程密码),它是一个开放源代码认证协议.使用SRP的客户机/服务器不会在网络上以明文或加密的方式传送密码,这样可以完全消除密码欺骗行为.保证口令可以安全地在网络上面传送.基本的思想是,防止有被动或主动网络入侵者使用字典攻击.Standford大学计算机系开发了SRP软件包,提供基于口令认证和会话加密的安全机制,而不需要用户或者是网管参与密钥的管理或分发.SRP为每一个人提供透明的密码安全,而没有其他昂贵的起始开销,比如阻止其他安全套件软件的使用等.不像其他的安全软件,SRP套件是一个完全的实现密码认证的软件包,不是临时的解决方案.和标准的/etc/shadow-style 安全比较,SRP在每一个方面都是比较好的.使用SRP对用户和管理者都有以下的好处:
SRP抵制"password sniffing"(口令监听)攻击.在一个使用SRP认证的会话中,监听者不会监视到任何在网络中传送的口令.在远程登陆软件中,明文的密码传送是最大的安全漏洞.任何人可以用一个简单的嗅探器(sniffer)工具得到你登陆到远程系统的密钥.SRP抵制字典攻击.一个系统保护简单的密码监听是不够的.如果攻击者使用强力攻击,例如字典攻击等,他们不是简单的直接监听密码,而是跟踪整个的会话过程,然后把整个的信息和字典中的普通密码对照.
甚至有的Kerberos系统对这样的攻击也是脆弱的.SRP在抵制字典攻击的前,就进行口令的安全处理了.使用的算法就是在攻击者进行强力攻击前就要求攻击者必须执行一次不可能的的大的计算.SRP甚至保护针对口令的"active"攻击.因此,即使入侵者有能力和网络接触,也不能攻破SRP.所以即使是用户使用的是很脆弱的口令,也不会让入侵者很容易地破解的.SRP对于终端用户是完全透明的.因为没有所谓的"密钥链"(keyrings)以及"证书"(certificates),或者"票据"(ticket).你的口令就是密钥.SRP简单地保护这个密钥,但要比老的、弱的密钥保护机制要好.SRP从管理者的角度来说也是容易实施的.没有所谓的"密钥服务器"、"证书认证",以及"认证服务器"等这样的概念.SRP口令文件在标准的Unix口令文件的旁边,软件本身协同这两个系统口令和SRP口令文件的一致性,没有多余的维护系统的机制.SRP在认证一个用户的时候交换一个加密的密钥.这就意味着一个登陆会话是可以被加密,而抵制所谓的网络监听和恶意地篡改.
用户在远程阅读他们的信笺,是使用128-bit加密后的信息,这是当用户登陆后自动处理的,而用户本身不必关心到底需要不需要加密.系统完成加密,然后送到用户的这里.另外SRP不使用加密进行认证,这使得它比基于公用/私用密匙的认证方式速度更快捷、安全.SRP缺省使用的128-bit的CAST加密算法.CAST-128在RFC2144(http://srp.stanford.edu/srp/rfc2144.txt)中有定义.标准的SRP也支持56-bit的DES以及48位的DES.高级的支持Triple-DES加密手段.本文将介绍如何建立基于SRP Telnet服务器.操作环境Redhat Linux 9.0.#p#
建立指数密码系统EPS
在建立SRP Telnet服务器的操作环境钱,我们需要对建立指数密码系统EPS进行一下介绍。EPS全称:Exponential Password System(指数密码系统),SRP软件包中已经包括EPS源代码.
1.安装PAM模块
PAM简介:
PAM全称:Pluggable Authentication Module (嵌入式认证模块).它最初有SUN公司开发;很快被Linux社区的接受,并且开发了更多的模块.其目标是提供一套可用于验证用户身份的函数库,从而将认证从应用程序开发中独立出来.Linux-PAM处理四种独立的(管理)工作.它们是: 认证管理; 帐号管理; 会话期间管理;和密码管理.
PAM工作方式:
(1)调用某个应用程序,以得到该程序的服务.
(2)PAM应用程序调用后台的PAM库进行认证工作.
(3)PAM库在/etc/pam.d/目录中查找有关应用程序细节的配置文件,该文件告诉PAM,本应用程序使用何种认证机制.
(4)PAM库装载所需的认证模块.
(5)这些模块可以让PAM与应用程序中的会话函数进行通信.
(6)会话函数向用户要求有关信息.
(7)用户对这些要求做出回应,提供所需信息.
(8)PAM认证模块通过PAM库将认证信息提供给应用程序.
(9)认证完成后,应用程序做出两种选择:
将所需权限赋予用户,并通知用户.
认证失败,并通知用户.
PAM具体使用方法:
- #cd /usr/src/redhat/SOURCES
- /srp-2.1.1/base/pam_eps.
- #install -m 644 pam_eps_auth.
- so pam_eps_passwd.so /lib/security
上面命令会在/lib/security 目录下安装PAM模块.然后使用命令:"/usr/local/bin/tconf"创建/etc/tpasswd 和 /etc/tpasswd.conf文件.
2.使用EPS PAM模块进行密码验证
(1)首先备份 /etc/pam.d/system-auth文件
(2)修改 /etc/pam.d/system-auth文件如下形式:
- auth required /lib/security/pam_unix.so likeauth
- nullok md5 shadow
- auth sufficient /lib/security/pam_eps_auth.so
- auth required /lib/security/pam_deny.so
- account sufficient /lib/security/pam_unix.so
- account required /lib/security/pam_deny.so
- password required /lib/security/pam_cracklib.so retry=3
- password required /lib/security/pam_eps_passwd.so
- password sufficient /lib/security/pam_unix.so
- nullok use_authtok md5 shadow
- password required /lib/security/pam_deny.so
- session required /lib/security/pam_limits.so
- session required /lib/security/pam_unix.so
注意上面第一行黑体字表示PAM的eps_auth模块可以满足认证需求.第二行黑体字表示PAM 的pam_eps_passwd.so 模块用来进行密码管理.
(3)将标准密码转换为EPS格式
(4)/etc/pam.d/system-auth 配置文件的模块pam_eps_passwd.so 将EPS版本的密码验证字符串写入/etc/tpasswd 文件中. 修改 /etc/pam.dpasswd文件如下形式:
- auth required /lib/security/pam_stack.so
- service=system-auth
- account required /lib/security/pam_stack.so
- service=system-auth
- password required /lib/security/pam_stack.so
- service=system-auth
#p#启动SRP Telnet服务器
(1)进入SRP源代码telnet子目录,分别建立Telnet服务器文件和Telnet客户端文件:
- #cd /usr/src/redhat/SOURCES/srp-2.2.1/telnet
- #make;make install
(2)建立超级访问程序/etc/xinetd.d/srp-telnetd 内容如下:
- # description: The SRP Telnet server
- serves Telnet connections.
- # It uses SRP for authentication.
- service telnet {
- socket_type = stream
- wait = no
- user = root
- server = /usr/local/sbin/telnetd
- log_on_success += DURATION USERID
- log_on_failure += USERID
- nice = 10
- disable = no }
(3)使用命令从新启动xinetd
- #killall -USR1 xinetd
(4)建立/etc/pam.d/telnet 文件,内容如下:
- auth required /lib/security/pam_listfile.so item=user \
- sense=deny file=/etc/telnetusers onerr=succeed
- auth required /lib/security/pam_stack.so service=srp-telnet
- auth required /lib/security/pam_shells.so
- account required /lib/security/pam_stack.so service=srp-telnet
- session required /lib/security/pam_stack.so service=srp-telnet
到此为止现在就建立了一个使用SSRP Telnet服务器.首先在本地进行试验.下面是一个典型会话:
- $/usr/local/bin/telnet localhost 23
- Trying 127.0.0.1...
- Connected to localhost.intevo.com (127.0.0.1).
- Escape character is '^]'.
- [ Trying SRP ... ]
- SRP Username (root): cao
- [ Using 1024-bit modulus for 'cao' ]
- SRP Password:
- [ SRP authentication successful ]
- [ Input is now decrypted with type CAST128_CFB64 ]
- [ Output is now encrypted with type CAST128_CFB64 ]
- Last login: Tue Dec 21 09:30:08 from cao.net
如果希望在其他Linux计算机使用SRP Telnet服务器,需要安装SRP服务支持和SRP客户机软件.方法是和在SRP服务器端相同的.
在非Linux平台上使用SRP客户机
SRP同样支持其他流行的操作系统(Unix、BSD、Winodws、MacOS).只要安装Java插件浏览器即可.详细情况前查看相关网址:http://srp.stanford.edu/demo/ .
总结:
以上提供了相对OPENSSH更加安全快捷的Telnet远程Linux服务器的方法,基于SRP服务 Telnet应用与其他网络应用一样属于客户机/服务器模型,一旦连通后,客户机可以享有服务器所提供的一切服务.SRP软件包是Telnet的安全软件.