Openssh 网络安全通信

2009-12-06  肖敬微
第1章 OpenSSH:安全网络通信

本章要点

关于OpenSSH

OpenSSH客户端

起步:使用ssh和scp

OpenSSH服务器sshd

起步:启动sshd守护进程

授权密钥:自动化登录

故障诊断

隧道技术与端口转发

OpenSSH是一套安全网络连接工具,用来取代telnet、rcp、rsh/rshd、rlogin/rlogind和ftp/ftpd。与这些被取代的工具不同,OpenSSH工具将所有通信数据加密,包括口令。通过这种方式,它们可以阻止恶意用户偷听、劫持连接和窃取口令。

本章将涵盖以下OpenSSH工具。

scp:从另一个系统上复制文件或者将文件复制到另一个系统上。

sftp:从其他系统上复制文件或者将文件复制到其他系统上(提供安全保障的ftp替代品)。

ssh:在另一个系统上执行命令或者登录到另一个系统。

sshd:OpenSSH守护进程(在服务器端运行)。

ssh-keygen:创建RSA或者DSA主机/用户身份验证密钥。

1.1 简介

OpenSSH使用公钥加密技术[参见(《Red Hat Linux指南:基础与系统管理篇》,后面简称《基础篇》)C.1.1节],可以提供两级身份验证:服务器和客户端/用户。首先,客户端验证自己是否连接到正确的服务器。然后,OpenSSH对系统之间的通信进行加密。一旦建立了一个安全的、经过加密的连接,OpenSSH就能够确保用户是经过授权的,可以登录该服务器或者将文件复制到服务器(或者从服务器上复制文件)。在验证了系统和用户之后,OpenSSH允许在该连接上传输多种服务。这些服务包括交互式shell会话(ssh)、远程命令执行(ssh和scp)、X11客户端/服务器连接以及TCP/IP端口隧道。


SSH1和SSH2

SSH协议第2版(SSH2)完全重写了SSH协议第1版,在安全、性能和可移植性等方面都得到了增强。这两个版本的协议是不兼容的。因为SSH2 正在快速取代SSH1,而且SSH1容易受到"中间人(man-in-the-middle)"攻击(参见《基础篇》C.2节的脚注),所以本章不去讨论 SSH1。因为SSH2含有浮点密集型计算,所以在那些没有FPU(浮点运算单元或者浮点加速器)的系统上(比如旧的486SX系统),SSH1确实还具有一定的市场。Red Hat Linux提供的OpenSSH工具在初始安装之后同时支持这两个协议。只需要运行一个服务器就能够与使用其中任何一个协议的系统进行通信。

ssh

实用工具ssh可以用来通过网络登录到远程系统。可以选择使用远程系统来访问专用应用程序或者使用只有该系统上才有的设备,又或者你知道该系统更快或者没有本地系统那么繁忙而使用远程系统。很多商务人士出门在外的时候,在笔记本电脑上使用ssh登录到公司总部的系统上。如果每个系统使用不同的终端仿真器窗口,那就可以通过同一个GUI同时登录到多个系统中。

X11转发

开启X11转发之后(安装Red Hat Linux之后默认开启),通过ssh连接运行X11程序很简单:在(运行在GUI的)终端仿真器中运行ssh,然后给出一条X11命令,比如"xclock",此时就会在本地显示器上出现图形输出。更多信息请参见1.6节。

1.2 关于OpenSSH

本节将讨论OpenSSH客户端和服务器使用的配置文件,阐述OpenSSH的工作原理,并列举其他的OpenSSH资源。

1.2.1 相关文件

OpenSSH客户端和服务器需要多个相关文件。全局文件保存在/etc/ssh目录下,而用户文件放置在~/.ssh目录中。在每个文件的描述中,第一个单词指出是客户端还是服务器使用该文件。

警告:rhost身份验证机制是一种安全风险

尽管OpenSSH能够从/etc/hosts.equiv、/etc/shosts.equiv、~/.rhosts和~/.shosts中获取身份验证信息,但是本章并没有讲解如何使用这些文件,这是因为它们会带来安全问题。依照配置文件/etc/ssh/sshd_config中的默认设置,不会使用这些文件。

1. /etc/ssh目录中的全局文件

本节所列出的全局文件将会影响到所有的用户,但是用户的~/.ssh目录下面的文件可以覆盖这里的设置。

moduli

客户端和服务器均有该文件,其中包含了密钥交换信息,OpenSSH利用这些信息建立安全连接。不要修改这个文件。

ssh_config

客户端配置:全局OpenSSH配置文件。对于这里的配置项,可以被用户的~/.ssh/config文件中的配置项覆盖。

sshd_config

服务器配置:sshd的配置文件。

ssh_host_dsa_key、ssh_host_dsa_key.pub

服务器文件:SSH协议第2版的DSA主机密钥。两个文件的所有者都应该是root。ssh_host_dsa_key.pub是公开文件,任何人都应该可以读取,但是只有它的所有者具有写权限(文件访问权限码为644)。而对于ssh_host_dsa_key私有文件而言,除了它的所有者之外,任何人都不应该有读权限或者写权限(文件访问权限码为600)。

ssh_host _rsa_key、ssh_host_rsa_key.pub

服务器文件:SSH协议第2版的RSA主机密钥。两个文件的所有者都应该是root。ssh_host_rsa_key.pub是公开文件,任何人都应该可以读取,但是只有它的所有者具有写权限(文件访问权限码为644)。而对于ssh_host_rsa_key私有文件而言,除了它的所有者之外,任何人对它都没有读权限或者写权限(文件访问权限码为600)。

ssh_known_hosts

客户端文件:包含了本地系统的用户能够连接到的主机的RSA公钥(默认)。这个文件所包含的信息类似于~/.ssh/known_hosts,但它是由系统管理员建立并可以由所有用户访问。这个文件的所有者应该是 root,而且任何人对它都有读权限,但是只有它的所有者有写权限(文件访问权限码为644)。

sshrc

服务器配置:包含初始化例程。如果不存在~/.ssh/rc文件,那么这个脚本要在~/.ssh/environment之后且用户的shell脚本开始之前运行。

2. ~/.ssh目录下的用户文件

当连接到远程系统的时候,OpenSSH自动创建~/.ssh目录,并在这个目录中自动建立known_hosts文件。

authorized_keys

服务器文件:有了该文件,不需输入口令就能够登录到另一个系统中,并能够从该系统中复制文件或者将文件复制到该系统中。除了文件的所有者之外,任何人都没有对这个文件的写权限。

config

客户端配置:用户的私有OpenSSH配置文件。这个文件中的设置会覆盖/etc/ssh/ssh_ config中的对应项。

environment

服务器配置:包含了一些当用户使用ssh登录之后就会执行的命令。它在功能上类似于本地的bash shell的~/.bashrc。

id_dsa、id_dsa.pub

客户端文件:由ssh-keygen生成的DSA用户身份验证密钥。两个文件的所有者都应该是该文件所在的主目录的用户。id_dsa.pub是公开文件,任何人都应该能够读取,但是只有它的所有者有写权限(文件访问权限码为644)。除所有者之外,任何人都没有id_dsa私有文件的读权限或者写权限(文件访问权限码为600)。

id_rsa、id_rsa.pub

客户端文件:由ssh-keygen生成的RSA用户身份验证密钥。两个文件的所有者都应该是该文件所在的主目录的用户。id_rsa.pub是公开文件,任何人都应该能够读取,但是只有它的所有者有写权限(文件访问权限码为644)。除所有者之外,任何人都没有id_rsa私有文件的读权限或者写权限(文件访问权限码为600)。

known_hosts

客户端文件:包含了用户所连接到的主机的RSA公钥(默认)。每次用户连接到一个新的服务器的时候,OpenSSH都会自动向这个文件添加若干项。有关使用DSA密钥的信息请参见1.3.7节中的"HostKeyAlgorithms"部分。

rc

服务器配置:包含了初始化例程。这个脚本在environment脚本之后且用户的shell脚本开始执行之前运行。如果这个文件不存在,那么OpenSSH运行/etc/ssh/sshrc,如果这个文件也不存在,那么OpenSSH运行xauth。

1.2.2 OpenSSH的工作原理

当OpenSSH启动后,它首先建立一条经过加密的连接,然后对用户进行身份验证。这两项任务完成后,OpenSSH就可以用来在这两个系统之间来回发送信息。

OpenSSH使用两个密钥对进行加密会话协商:主机密钥对(host key pair)和会话密钥对(session key pair)。主机密钥对是一组公钥/私钥,当服务器系统第一次运行sshd时(通常就是系统第一次启动时)就会建立这些密钥对。会话密钥对则是一组每小时都会改变的公钥/私钥。

当OpenSSH客户端第一次连接到OpenSSH服务器时,它会要求你确认是否连接到正确的服务器(参见1.3.3中的"首次身份验证"部分)。确认之后,客户端就会将该服务器的主机公钥复制一份保存起来。在后续连接中,客户端就会将服务器所提供的密钥与自己所保存的密钥进行比较。尽管这个测试并不是那么安全,但是接下来的测试相当安全。

然后客户端生成一个随机密钥,并使用服务器的主机公钥和会话密钥对它进行加密。客户端将这个经过加密的密钥发送到服务器。然后,服务器再使用它自己的私钥对这个经过加密的密钥进行解密。这个过程将会建立一个密钥,这个密钥只有客户端和服务器知道,并被用来对会话中的其他信息进行加密。

1.2.3 更多信息
本地信息
可以在本机上查看ssh、scp、ssh-keygen、ssh_config、sshd、sshd_config的man手册页。

Web信息

OpenSSH的首页为www.openssh.com。在tldp.org上搜索ssh,可以找到各种HOWTO文档和其他资料。

书籍

Dwivedi所著的Implementing SSH: Strategies for Optimizing the Secure Shell(John Wiley & Sons出版社2003年10月出版),Barrett & Silverman所著的SSH, The Secure Shell: The Definitive Guide(O'Reilly & Associates出版社2001年2月出版,中文版《SSH权威指南》)。

    猜你喜欢
    发表评论评论公约
    喜欢该文的人也喜欢 更多