Chinaunix首页 | 论坛 | 博客
  • 博客访问: 297905
  • 博文数量: 26
  • 博客积分: 2585
  • 博客等级: 少校
  • 技术积分: 399
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-06 20:24
文章分类

全部博文(26)

文章存档

2011年(1)

2010年(7)

2009年(3)

2008年(15)

我的朋友

分类: LINUX

2008-10-09 17:41:28

认证目标 13.02-可靠Shell包(SSH

红帽企业版Linux默认安装了可靠Shell的包(SSH),使用了openssh-serveropenssh-clientsopenssh-askpassopenssh这几个RPM包。可靠Shell和可靠拷贝程序,即sshscp,是用来替换rshtelnetrcp这几个程序的。它们会将不用计算机之间的通信进行加密。守护进程sshd监听TCP22号端口上的进入请求。SSH的配置文件放置在/etc/ssh这个目录下。
可靠Shell守护进程的好处就在于它对消息进行了加密处理。RHEL包含了SSH2这个版本,这个版本提供了一个加强的密钥交换算法。

加密通信基本原理
计算机网络之间的加密通信通常都需要一个私钥和一个公钥。你自己保存私钥,公钥则发送给其他人。当他们要通过SSH给你发送数据时,他们的消息是使用公钥加密的。你的计算机则可以使用私钥进行解密。
密钥是基于随机数字的。这些数字非常大(典型的就有512位或者更多),至少在使用一台PC的情况下,你的系统在可预见的未来内被破解的几率是非常小的。私钥和公钥是基于一套互相匹配的这种随机数字的。

私钥
你的私钥(本质上是一个存有特定数字的文件)必须保证安全。当你执行一个应用程序时,它能把这个密钥附加在你的消息上。然后,你发送的任何消息(例如从你的电子邮件帐户发送的),都会被数字签名和加密。公钥被添加在你数字签名的最后。只有接受这能够翻译出你的原消息。

公钥
公钥的重要性正如它的名字一样,它是公开可用的。那些核心的授权机构,例如VeriSignGlobalSign或是Thawte ,都为他们创建的公钥提供公共的使用授权。如果他们为你生成了一个私钥,他们会在自己的系统中保留一份安全的拷贝。你可以随意的将你的公钥作为电子邮件的附件,甚至最终的用户还可以公开的从授权机构Web网站上获得它。
13-1的示例列出了SSH使用的目录和文件,还有一个添加在你的“密钥环”上的公钥。

13-1:一个公钥
这个密钥就像是一个用来加密你的数据的密码。下面是这个数字的十六进制表示,想象一下,如果让你试图去记住这个1024位的数据会怎样。

3081 8902 8181 00D4 596E 01DE A012 3CAD 51B7

7835 05A4 DEFC C70B 4382 A733 5D62 A51B B9D6

29EA 860B EC2B 7AB8 2E96 3A4C 71A2 D087 11D0

E149 4DD5 1E20 8382 FA58 C7DA D9B0 3865 FF6E

88C7 B672 51F5 5094 3B35 D8AA BC68 BBEB BFE3

9063 AE75 8B57 09F9 DCF8 FFA4 E32C A17F 82E9

7A4C 0E10 E62D 8A97 0845 007B 169A 0676 E7CF

5713 1423 96E0 8E6C 9502 0301 0001

这就是为什么由应用程序为你将这个数值保存在一个公共的“公钥环”中。你可以按照你的需要,为其他用户、站点和服务添加更多的公钥。
你的私钥也是类似的,但是你必须保持它的私密性,否则整个系统就失效了。保持它的私密性意味着没有人可以取得你的PC的使用权。如果你的PC是公用的,在使用私钥时,要像图13-2那样,用一个口令短语(密码)来使你的系统更安全。不要忘记你的口令短语,否则你就必须卸载并重新安装可靠Shell

13-2:生成一个加密的密钥

如何生成你的密钥
这里是你需要知道的几个面向SSH的实用程序:
  • sshd SSH守护进程;这个程序必须运行,接受可靠Shell客户端的入站请求。
  • ssh-agent 一个为RSA认证保存私钥的程序。在一个X会话或者一个登录会话开始的时候便启动ssh-agent命令,所有其他的窗口或者程序都以ssh-agent程序的客户端身份启动。
  • ssh-add 向认证代理ssh-agent添加RSA身份。
  • ssh 类似于Telnet或者rlogin,可靠Shellssh命令是一个安全可靠的远程登录方法。正常工作时,你需要在一个服务器上的私钥和在客户机上的公钥。这一章的后面我们会生成公钥文件,通常命名为identity.pub或者id_dsa.pub。你要带走这个公钥文件,将它拷贝到客户机,放到一个授权用户的家目录里,通常是~/.ssh/authorized_ keys或者~/.ssh/authorized_keys2这两个文件。

  • ssh-keygen 一个可以为你创建密钥的实用工具。命令ssh-keygen -t keytype可以创建一个你要求的密钥。其中的keytype可以是DSA (Digital Secure Algorithm)或者RSA1 (RSA Security)。这个命令在图13-2中。

所有你需要做的,就是为一个授权用户转交一份扩展名是.pub的公钥文件。添加一个口令短语来保护这个数字签名是很重要的。最坏的情况下,一个破解者可能使用口令短语来窃取你的身份。
尽管密钥十分重要,但红帽的考试却是要求你为基础的操作配置服务。所以,如果你对SSH还不是十分熟悉,那就把精力集中在怎样使它运行起来,下面我们就会介绍这些内容。

为什么使用SSH
因特网是一个公共的网络。如果你接入到了因特网,这个世界上的任何人都有可能通过这个公共的网络进入你的计算机。所有需要的,只是一个因特网上匿名位置的访问权。换句话说,一个熟练的破解者可能在公共图书馆的一台计算机上捕获你的密码。
相反,私有网络则用于要求可靠性高的应用。例如一个拨号进入主服务器去核对信用卡授权数额的商人,就连接在一个私有网络。进入这样的私有网络可能十分昂贵。
Unix和演变为现今因特网的网络开始于一套教育上的设备,那时自由的信息交换需要额外的费用。尽管因特网开放的这个结果很好,但也带来了安全方面的挑战。最初那些为网络开发的Unix工具在设计时都没有考虑安全问题。

这些工具,包括telnetftp以及“r”remote—远程)系列命令(rloginrcprsh)等。这些程序在网络上以明文方式传送包括用户名和密码在内的所有信息。任何人只需要简单的使用一个像Ethereal这样的协议分许工具就可以用这种方法获得你的密码。图13-3WiresharkEthereal的继任者)的输出,图中高亮了在我的私有局域网中传输的Telnet密码的一个字符(那是个e)。其他Tenlet的包包含了这个密码的其他字符和/或数字。

13-3:很容易破解一个明文传输的密码


======================================================================
工作当中(实用技巧)

为了完全利用Kerberos-based Telnet,你需要为你的网络上每一个用户设置Kerberos密钥。想了解更多信息,请参阅Kerberos基础结构HOWTO页面,地址:
======================================================================

======================================================================

工作当中(实用技巧)
我不赞同任何形式的密码破解。但是,作为一个系统管理员,你需要了解你的漏洞。如果你可以在你自己的网络上查到明文传输的密码,你就处在危险中了。
======================================================================

可靠Shell实用程序使用的高加密标准就是这个问题的一个答案。可靠Shell工具代替了它那些不安全的同胞们,并且为所有在主机间传输的数据提供完全的加密,这种加密是难以破解的,即使是采用暴力破解的方法。


配置SSH服务
为基本的操作配置SSH服务不需要你做很多事情。安装前面描述的软件包,激活服务,确保下次重新启动时服务能自动运行,如果你配置了任何一种防火墙,那么就为之打开适当的端口。然后,你还需要做的事就只有为服务添加基于主机或基于用户的安全保障了。

SSH服务的配置文件是/etc/ssh/sshd_config。第一个参数(Protocol 2)配置使用了SSH2,这是一个更安全的版本。默认情况下,这个文件还包含下面的参数:

SyslogFacility AUTHPRIV

不管是成功还是失败,第一个参数发送所有的日志请求到适当的日志文件;这个例子里是/var/log/secure
下一个参数决定是否使用基于本地用户密码的密码认证:

PasswordAuthentication = yes

下一个参数禁用了PAM认证,这样能忽略文件后面的参数UsePAM=yes

ChallengeResponseAuthentication = no

接下来的参数为客户机-服务器认证支持了使用GSSAPI的认证,GSSAPIGeneric Security Services Application Programming Interface通用安全服务应用程序编程接口)的缩写。

GSSAPIAuthentication = yes

下面的几条参数允许客户机设定若干个环境变量。其中的细节对两台红帽企业版Linux系统来说通常不重要。

AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES

AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT

AcceptEnv LC_IDENTIFICATION LC_ALL

下面的参数对于想通过图形界面(GUI)远程连接的用户显得特别重要:

X11Forwarding yes

例如,当我在我的庭院里工作的时候,我可以用下面的SSH命令连接到我办公室里的红帽系统并且打开一个图形工具:

# ssh -X michael@enterprise5a

最后的参数支持使用SSH加密术来进行安全的FTP文件传输:

Subsystem sftp /usr/libexec/openssh/sftp-server

我喜欢添加两个参数来增进安全性。例如,以root用户登录是允许的。增加下面的参数:

PermitRootLogin no

阻止了管理员用户通过SSH登录。但是一旦连接建立,他们仍然可以使用su或者sudo命令(假设是通过授权的)转换到管理员帐户。这就降低了破解者在SSH回话初期鉴别出管理员密码的风险。
我还喜欢限制通过SSH登录一个系统的用户名。关键字是AllowUsers。你可以使用类似下面的参数限制用户:

AllowUsers michael donna

另一种选择是,你通过类似下面的参数限制授权的用户名以及他们的主机:

AllowUsers michael@enterprise5vm donna@poohbear


配置SSH客户端
配置SSH客户端是一个简单的过程。客户端系统的标准配置文件是/etc/ssh/ssh_config。单独的用户可以在~/.ssh/config有自定义的SSH客户端配置文件。默认情况下里面包含四个参数:

Host *

GSSAPIAuthentication yes

ForwardX11Trusted yes

SendEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY

SendEnv LC_MESSAGES LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE

SendEnv LC_MEASUREMENT LC_IDENTIFICATION LC_ALL

Host * 参数适用于其他参数的所有连接。其余几个参数和之前描述的/etc/ssh/sshd_config中的参数是匹配的。

======================================================================
工作当中(实用技巧)
我们中的许多人仍然需要管理
Microsoft Windows计算机。你也可以在这些系统中利用到安全的SSH。你只需要一个SSH服务器,例如OpenSSH,你就可以在Microsoft Windows系统中使用SSH管理你的Linux系统。我没有在Microsoft Windows Vista中测试过这些选项。
======================================================================

Copyleft © 2008 All Rights Released

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