网络安全 - OpenSSH:让远程管理更安全
OpenSSH:让远程管理更安全
2004-04-23 15:18 pm来自:Linux文档
现载:Www.8s8s.coM
地址:无名
安全和稳定是Linux操作系统的两大特点。由于Linux采取了许多安全技术措施,包括读/写权限控制、带保护的子系统、审计跟踪、核心授权等,为网络多用户环境中的用户提供了必要的安全保障,因此越来越多的用户开始学习和使用Linux。但是Linux的安全要建立在有效的防范基础上,如果是一个不加任何防范和限制的Linux系统,同样也有较多漏洞。以传统的网络服务程序为例,FTP、R Shell和Telnet等服务在本质上都存在不安全因素,因为它们在网络上用“明文”传送口令和数据,使别有用心的人很容易截获这些口令和数据。同时这些服务程序的安全验证方式也有弱点,很容易受到“中间人”(man-in-the-middle)的攻击。所谓“中间人”的攻击方式,即“中间人”冒充真正的服务器接收用户传给服务器的数据,然后再冒充该用户把数据传给真正的服务器。服务器和用户之间的数据传送被“中间人”做了手脚之后,会出现很严重的问题。所以,尽可能地使用安全的工具来管理系统显得愈发重要。
传统远程管理工具的特点
远程登录的作用就是让用户以模拟终端的方式,登录到Internet的某台主机上。一旦连接成功,这些个人计算机就像远程计算机的一个终端,可以像使用终端计算机一样输入命令,并运行远程计算机中的程序。
在企业通常的使用环境中,服务器放在ISP托管中心或其服务器机房内,只有少数人才能进入并接触到主机。因此管理员通常会在服务器上开启Telnet服务守护进程,以便能够随时观察服务器上的变化,并登录到服务器上进行维护;如果管理员需要在服务器调试程序,还会开启FTP服务进程,从本地机上传程序到服务器进行调试(如图1所示)。可见这种终端的服务对网络管理员来说非常重要。
图1 管理员利用终端服务对ISP进行操控
一般在远程管理中经常使用远程管理Telnet的工具有CRT、 NetTerm、ShellNet,以及Rlogin、Rcp、Rexec、Rsh(所有以“R”开头的服务都建立在不与外界进行任何联系的基础上。出于安全方面的考虑,必须禁止这些进程的启动)。这些工具的优点是使用方便、配置简单;缺点是不够安全。以Telnet为例,因为其以“明码”传输,所以不能称为一个很好的联机方式。什么是“明码”?简单地说,使用Telnet时,系统会出现一个主机界面,如果没有设置系统的issue.net文件为空,系统默认出现的界面就会泄露一些对用户不利的信息给别人,如图2所示。
图2 Telnet登录主机界面
用户需要输入账号与密码,当主机接受资料后才能进行确认。此时,用户资料就会经过 Telnet协议传输到主机上。如果有人正在某个router节点监听封包,就可以轻而易举地截获资料封包,并可以通过解读窃取账号和密码。建议非必要时不要激活Telnet;如果一定要激活,必须确定限制的联机范围,并使用iptables设定联机的限制区域。此外,还要随时注意登录档案里关于登录的事项,不要让root用户以Telnet方式登入Linux主机。
SSH及OpenSSH简介
SSH(Secure Shell)是以远程联机服务方式操作服务器时的较为安全的解决方案。它最初由芬兰的一家公司开发,但由于受版权和加密算法的限制,很多人转而使用免费的替代软件OpenSSH。
用户通过SSH可以把所有传输的数据进行加密,使“中间人”的攻击方式不可能实现,而且也能够防止DNS和IP欺骗。它还有一个额外的好处是传输的数据是经过压缩的,可以加快传输的速度。SSH作用广泛,既可以代替Telnet,又可以为FTP、POP,甚至为PPP提供一个安全的“通道”。SSH协议在预设的状态中,提供两个服务器功能:一个是类似Telnet的远程联机使用Shell服务器,即俗称SSH功能;另一个是类似FTP服务的SFTP-Server功能,可提供更安全的FTP服务。
SSH的安全验证如何工作呢?主要依靠联机加密技术。从客户端来看,有以下两种安全验证级别:
1.基于口令的安全验证(ssh1) 只要知道自己的账号和口令,就可以登录到远程主机。所有传输的数据都将被加密,但是不能保证正在连接的服务器就是想要连接的服务器。可能受到“中间人”的攻击。
2.基于密匙的安全验证(ssh2) 需要依靠密匙,即用户必须为自己创建一对密匙,并把公用密匙放在需要访问的服务器上。如果要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用密匙进行安全验证。服务器收到请求之后,先在该服务器的home目录下寻找公用密匙,然后把它和发送过来的公用密匙进行比较。如果两个密匙一致,服务器就用公用密匙加密“质询”(challenge),并把它发送给客户端软件。客户端软件收到“质询”后,就可以用私人密匙解密再把它发送给服务器。使用这种方式,用户必须知道自己密匙的口令。与第一种级别相比,这种级别不需要在网络上传送口令,不仅加密所有传送的数据,而且阻止了“中间人”攻击方式。整个登录的过程一般需要10秒。
OpenSSH的安装和启动
OpenSSH的安装非常简便,操作如下。
1.下载软件包。到http://www.openssh.com下载最新软件包OpenSSH 3.6.1(最好下载源程序软件包后自行编译)。本文以openssh-3.5p1.tar.gz为例进行介绍,安装环境为Red Hat 7.1/kernel 2.4.8/gcc-2.96-98。
2. 解压及安装,代码如下:
# tar zxvf openssh-3.5p1.tar.gz
# cd openssh-3.5p1
# ./configure --prefix=/opt --sysconfdir=/etc/openssh
# make
# make install
# cd /etc/rc.d/init.d/
# vi sshd
//加入/opt/sbin/sshd启动进程
# cd /etc/rc.d/rc3.d/
# ln -s ../init.d/sshd S59sshd
重启计算机以后,用下列命令进行测试:
# ssh -l geminis www.test.com
The authenticity of host 'www.test.com (*.*.*.*)' can't be established.
RSA key fingerprint is a7:35:3c:bd:47:b0:5d:30:68:f1:15:77:1a:b1:67:dd.
Are you sure you want to continue connecting (yes/no)?
因为是第一次登录主机,OpenSSH将显示不能识别该主机。键入“yes”,把主机的“识别标记”加到“~/.ssh/know_hosts”文件中。第二次访问这台主机的时候就不会再显示这条提示信息。然后,OpenSSH提示输入远程主机上的账号及口令。输入完后就建立了SSH连接,可以像使用 Telnet一样使用OpenSSH。
配置基于密钥认证的OpenSSH
缺省情况下,SSH将默认使用口令验证方式。不需要对系统进行任何配置就可以使用账号和口令登录到远程主机。下面介绍如何配置并使用基于密匙认证的OpenSSH(假设用户名为geminis,主机IP为192.168.0.1)。
首先创建一对密匙(包括公匙和密匙,并且用公匙加密的数据只能用密匙解密),把公匙放到需要远程服务器上。当登录远程服务器时,客户端软件会向服务器发出请求,请求用密匙进行认证,代码如下:
# ssh-keygen -d
// 加上参数d是创建一个一基于ssh2的密匙对
#Generating public/private DSA key pair.
// 生成DSA加密模式的密匙对
# Enter file in which to save the key (/home/geminis/.ssh/id_dsa):
//存放密匙文件的路径,直接回车为默认目录
# Enter passphrase (empty for no passphrase):
//必须输入一个>4个字符的标识符
# Enter same passphrase again:
//重新确认一次
如果创建成功,系统将返回以下信息:
Your identification has been saved in /home/geminis/.ssh/id_dsa.
Your public key has been saved in /home/geminis/.ssh/id_dsa.pub.
The key fingerprint is:
29:1b:46:00:08:38:d5:87:da:96:e7:c4:a3:6b:b1:3f [email protected]
接下来,把id_dsa.pub发布到服务器上。通过FTP将公匙文件“/home/admin/.ssh/id_dsa.pub”,复制到远程服务器的“/home/admin/.ssh”目录。如果.ssh目录不存在,可以用mkdir命令先建立。然后,将“id_dsa.pub”重命名为“authorized_keys2”,代码如下:
# mv id_dsa.pub authorized_keys2
# chmod 644 authorized_keys2
注意,如果authorized_keys2文件的权限不正确,会导致SSH连接失败。
服务器收到请求之后,在该服务器的宿主目录下寻找公匙,然后检查该公匙是否合法。如果合法就用公匙加密一随机数(即所谓的challenge)并发送给客户端软件。客户端软件收到后就用私匙解密再把它发送给服务器。因为用公匙加密的数据只能用密匙解密,服务器经过比较就可以知道该客户连接的合法性。连接代码如下:
# ssl -l geminis www.test.com
系统返回以下信息:
# Enter passphrase for key '/home/geminis/.ssh/id_dsa': ******
Last login: Wed Apr 16 12:31:49 2003 from www.geminis.com
OpenSSH客户端使用方法
1. Windows平台
客户端通常使用Windows平台,操作较为直观。下面对几种客户端工具进行介绍。
◆ PuTTY
在客户端使用SSH较好的工具是PuTTY,这是一个开源软件。用户可以根据自己的配置情况对该软件进行修改,如图3所示。
图3 PuTTY配置界面
如果是第一次使用该软件,系统会提示下载有关主机的“识别标记”,选择“yes”,下次登录就不会出现提示框。
◆ Filezilla
Filezilla是客户端使用SFTP的一款不错的开源软件,对中文支持很好,配置界面如图4所示。
图4 Filezilla配置界面
2. Linux终端
在Linux终端下使用SSH,优点是操作更方便,无须其它软件;缺点是不太直观。使用方法及命令介绍如下:
◆ SSH的使用
# ssh -l geminis www.test.com
Enter passphrase for key '/home/geminis/.ssh/id_dsa':
//输入以前设置的标识符
◆ SFTP的使用
# sftp www.test.com
SFTP相关命令的使用方法如表1所示。
3.进阶提高要点
配置SSH客户端文件“/etc/ssh/ssh_config”,如图5所示。
图5 配置“/etc/ssh/ssh_config”文件
表1 SFTP相关命令的使用方法
选项设置说明如表2所示。
表2 SSH配置选项说明
配置SSH服务器端文件“/etc/ssh/sshd_config”,取消口令验证。把“PasswordAuthentication Yes”改为“no”,可以禁止使用第一种口令验证。
配置“/etc/ssh/sshd_config”文件,编辑“sshd_config”文件,加入或改变下面的参数:
# This is ssh server systemwide configuration file.
Port 22
ListenAddress 192.168.1.1
HostKey /etc/ssh/ssh_host_key
ServerKeyBits 1024
LoginGraceTime 600
KeyRegenerationInterval 3600
PermitRootLogin no
IgnoreRhosts yes
IgnoreUserKnownHosts yes
StrictModes yes
X11Forwarding no
PrintMotd yes
SyslogFacility AUTH
LogLevel INFO
RhostsAuthentication no
RhostsRSAAuthentication no
RSAAuthentication yes
PasswordAuthentication yes
PermitEmptyPasswords no
AllowUsers admin
[返回列表]