在Linux下配置TCP/IP(二)

来源:互联网 发布:linux daemon用户 编辑:程序博客网 时间:2024/04/28 08:12
SSH 服务器配置

SSH 服务器配置

SSH最初是由程序员Tatu Yloenen开发,包括SSH协议和服务软件,英文全称为Secure Shell(即安全外壳)。它实现了密钥交换协议及主机和客户端认证协议,在传送数据时把所有数据都加密传输,在接收方再进行解密,以防止网络窃听的发生。
SSH已经有了很多商品化版本,而且还有多种Unix/Linux系统平台上的免费版本。本文将主要以Linux操作系统为服务器(在其它的Unix或 Unix的派生操作系统上的操作也一样),Windows操作系统为客户端,介绍免费的商业SSH版本的安装及其实现。其重点是Linux服务器的配置。

软件的获得和安装

软件的获得可从http://www.openssh.org下载OpenSSH,当前最新版本为3.6.1,或者从http://www.ssh.com/ 下载针对Linux的非商业版本,当前最新版本为3.2,具体地址为:
SSH服务器地址 http://www.ssh.com/support/downl ... non-commercial.html
SSH客户端地址 http://www.ssh.com/support/downl ... non-commercial.html(这是一个For Windows的版本)。
不管是OpenSSh还是SSH Communications Security公司的SSH版本,在使用功能上基本一样,只是前者完全免费,而后者使用时要注意许可协议。从使用角度上可考虑,笔者认为后者更好用一些。本文着重介绍后者的安装和使用。
从SSH Communications Security公司下载的SSH服务器是源代码方式,文件名为ssh-3.2.3.tar.gz,必须对其进行编译和安装之后才能够使用。
我们假设软件的下载目录为root用户的宿主目录,即“/root”目录。解压缩完成后会生成一个“ssh-3.2.3”的源代码目录,然后切换到源代码代码目录,进行软件安装前的配置,编译和安装。
安装成功后,在“/etc/”目录下会增加一个“ssh2”目录,这个目录是用来存放SSH服务器的所有配置文件;在“/usr/local/”目录下会生成“ssh3.2.3”子目录,它是SSH程序文件和其它文件的存放位置。

基本配置和应用

默认安装,每次重新启动系统后都要重复上述操作才能启动SSH服务器。为了保证SSH服务器每次开机时自动启动,还要在“/etc/rc.d/rc.local”文件(此文件类似于DOS下的autoexec.bat文件令)的最后加入以下内容:
#start ssh3.2
/usr/local/ssh2/sbin/sshd &
其中第一行为注释内容,第二行为启动SSH服务器并作为后台守护进程运行。
接下来要做的是配置SSH服务器,所有的配置都是通过修改“/etc/ssh2/sshd2_config”文件实现的。文件的默认配置已经能满足一般的要求。下面介绍几种比较常见的应用:

使超级用户root能够直接登录服务器
使用Telnet时root用户默认情况下不能直接从远程登录系统,一般要先以普通用户登录,然后,使用su切换到root身份,这也是出于安全性的考虑。由于SSH使用了加密方式传输数据,所以可以放心地直接使用root登录服务器,那么我们需要将sshd2_config文件中的
#PermitRootLogin yes
取消注释,然后,重新启动SSH服务器,即可通过SSH以root身份登录Linux服务器。当然,如果您要禁止超级用户登录的话,可将“yes”改为“no”即可。

允许或禁止某些用户或组用户使用SSH登录
要实现禁止用户或组使用SSH登录服务器,只需要修改sshd2_config文件中的以下几行内容:
#AllowUsers sj.*,s[[:digit:]]*,s(jl|amza)
#DenyUsers skuuppa,warezdude,31373
#DenyUsers don@untrusted/.org
#AllowGroups staff,users
#DenyGroups guest,anonymou
可以根据自己的实际需要,取消注释符“#”,加入实际的用户名或者组名,然后重新启动SSH服务器即可禁止(或允许)某些用户或者组使用SSH,具体操作这里不再详述。

使用SFTP代替FTP传输文件
FTP(文件传输协议)是一种使用非常广泛的在网络中传输文件的方式,但是,它也同样存在被网络窃听的危险,因为它也是以明文传送用户认证信息。其实在 SSH软件包中,已经包含了一个叫作SFTP(Secure FTP)的安全文件传输子系统,SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接操作,所以从某种意义上来说,SFTP并不像一个服务器程序,而更像是一个客户端程序。SFTP同样是使用加密传输认证信息和传输的数据,所以,使用SFTP是非常安全的。但是,由于这种传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多,如果您对网络安全性要求更高时,可以使用SFTP代替FTP。若要开启 SFTP功能可以修改sshd2_config文件的下列内容:
# subsystem-sftp sftp-server
去掉行首的“#”,然后重新启动SSH服务器,这样在进行SSH连接时就可以同时使用SFTP传输文件。

关于客户端设置
以上是对服务器的设置,其实在SSH服务器中已经包含了一些客户端工具(如SSH,SFTP工具)。但是,更多的客户端用户使用Windows系统,下面就对Windows上的客户端系统设置加以说明。
首先从上文给出的网址下载“SSHSecureShellClient-3.2.3.exe”文件并安装。安装完成后,在桌面上会产成两个快捷方式,一个是“SSH Secure Shell Client”,用于远程管理,另一个是“SSH Secure File Transfer Client”,用于和服务器进行文件传输。在工具栏中点击“quick connnect”,输入正确的主机名和用户名,然后在弹出的对话框中输入密码完成登录,即可开始执行命令或者传输文件。在使用SFTP时,默认只能显示用户的宿主目录的内容和非隐藏文件。但是,有时候您可能还要查看其它目录或者隐藏文件,这时只需要在菜单“eidt->setting-> file transfer”的选项中选中“show root directory”和“show hidden file”两个选项即可。

使普通用户仅使用SFTP而没有使用Shell的权限
默认情况下管理员给系统添加的账号将同时具有SFTP和SSH的权限。让普通用户使用shell执行命令也是有很大的安全隐患的,如果能够禁止用户使用shell执行命令而仅使用SFTP传输文件,就能消除这种安全隐患,完全实现FTP的功能,
正如上文所述,SFTP没有单独的守护进程,只能借助于sshd守护进程,所以我们仍然需要使用SSH服务器,要保证sshd守护进程处于运行状态。具体实现方法如下:
首先,在编译安装时,编译中一定要有“--enable-static” 选项。安装成功后,在安装目录下的bin目录中执行下面的命令:
[root@localhost bin]# ls -l ssh-dummy-shell* sftp-server2*
将看到下列输出内容:
-rwxr-xr-x 1 root root 1350417 Apr 28 16:30 sftp-server2
-rwxr-xr-x 1 root root 3566890 Apr 28 16:30 sftp-server2.static
-rwxr-xr-x 1 root root 72388 Apr 28 16:30 ssh-dummy-shell
-rwxr-xr-x 1 root root 1813412 Apr 28 16:30 ssh-dummy-shell.static
其中带“static”后缀名,且比较大的两个文件就是加上“--enable-static”选项后生成的,后面我们将用到这里两个文件。
下面以添加普通账号test为例讲述具体操作步骤。
1.在“/home”目录(或者将要存放普通用户宿主目录的目录)下创建“bin”子目录,并将两个static文件复制到此目录下(复制后改名去掉static后缀),执行如下命令:
[root@localhost bin]# cd /usr/local/ssh3.2/bin
[root@localhost bin]#cp ssh-dummy-shell.static /home/bin/ssh-dummy-shell
[root@localhost bin]# cp sftp-server2.static /home/bin/sftp-server
[root@localhost bin]#chown -R root.root /home/bin
[root@localhost bin]#chmod -R 755 /home/bin
2.添加一个组,使以后所有禁止使用shell的用户都属于这个组,这样便于管理更多的用户:
[root@localhost bin]#groupadd template
3.在添加系统账号时使用如下命令:
[root@localhost root]#useradd -s /bin/ssh-dummy-shell -g template test
[root@localhost root]#passwd test
[root@localhost root]#mkdir /home/test/bin
[root@localhost root]#cd /home/test/bin
[root@localhost bin]#ln /home/bin/ssh-dummy-shell ssh-dummy-shell
[root@localhost bin]#ln /home/bin/sftp-server sftp-server
[root@localhost bin]#chown -R root.root /home/test/bin
[root@localhost bin]#chmod -R 755 /home/test/bin
3.用户添加成功后,还需要修改/etc/ssh2/sshd2_config文件,将下列内容:
#ChRootGroups sftp,guest
改为:
ChRootGroups sftp,guest,template
修改上面这行内容,主要是为了禁止普通用户查看系统的其它目录,把其权限限制在自己的主目录下。重新启动SSH服务器程序,在客户端使用SSH Secure File Transfer Client登录,即使选择显示根目录,普通用户也看不到其它的任何目录,而是把自己的主目录当作根目录。注意,这里使用的是按用户所属组限制,这样可以使包含在template组内的所有用户都可以实现此功能。若您只要限制个别用户的话,可以修改下面的内容:
#ChRootUsers anonymous,ftp,guest

事实证明SSH是一种非常好的网络安全解决方案,但是,目前仍有很多管理员使用Telnet或FTP这种非常不安全的工具,希望尽快转移到SSH上来,以减少网络安全隐患。

安装SSH  

具体步骤如下:  


获得SSH软件包。 (ftp://ftp.pku.edu.cn:/pub/unix/ssh-2.3.0.tar.gz)  


成为超级用户(root).  


# gzip –cd ssh-2.3.0.tar.gz |tar xvf –  


# cd ssh-2.3.0  


# ./configure  

注意,如果你希望用tcp_wrappers来控制SSH,那么在configure时需要加上选项“
--with-libwrap=/path/to/libwrap/”, 用来告诉SSH关于libwrap.a 和tcpd.h的
位置。  


# make  


# make install  

和SSH有关的程序都放置在/usr/local/bin下,包括ssh,sftp,sshd2,  
ssh-keygen等。  


二、配置  

SSH的配置文件在/etc/ssh2下,其中包括sshd2的主机公钥和私钥:hostkey和
hostkey.pub。这两个文件通常是在安装SSH时自动生成的。你可以通过下面的命令
重新来生成它们:  

# rm /etc/ssh2/hostkey*  

# ssh-keygen2 –P /etc/ssh2/hostkey  

而ssh2_config 文件一般情形下无需修改。  


三、启动sshd2  

每个要使用SSH的系统都必须在后台运行sshd2。用手工启动:  

# /usr/local/bin/sshd2&  

可以在“/etc/rc2.d/S99local”中加入该命令,这样系统每次启动时会自动启动
sshd2。  


四、用tcp_wrappers控制SSH  

安装SSH的站点可以用tcp_wrappers来限制哪些IP地址可以通过ssh来访问自己。比
如,在/etc/hosts.allow中加入  

sshd,sshd2: 10.0.0.1  

那么只有10.0.0.1可以通过ssh来访问该主机。  


以上都是系统管理员完成的工作。下面我们说说普通用户如何使用SSH。  


五、基本应用  

每个用户在使用SSH之前,都要完成以下步骤:  


在本地主机(比如,local.pku.edu.cn)上生成自己的ssh公钥和私钥。命令如下
:  

local# ssh-keygen  

Generating 1024-bit dsa key pair  

1 oOo.oOo.o  

Key generated.  

1024-bit dsa, teng@ns, Fri Oct 20 2000 17:27:05  

Passphrase :************ /*在此输入你的口令,以后访问这台主机时要用。  

Again :************ /*  

Private key saved to /home1/teng/.ssh2/id_dsa_1024_a  

Public key saved to /home1/teng/.ssh2/id_dsa_1024_a.pub  


生成的私钥和公钥(id_dsa_1024_a和id_dsa_1024_a.pub)存放在你家目录的~/.
ssh2目录下。和用户相关的SSH配置文件都在~/.ssh2下。私钥由用户保存在本地主
机上,而公钥需传送到远地主机的你自己的帐号的~/.ssh2下,如果你要用ssh2访
问本地主机的话。  


在~/.ssh2下创建“identification”文件用来说明进行身份认证的私钥。命令如
下:  


local:~/.ssh2# echo "IdKey id_dsa_1024_a" > identification  


3.同样地,在远地主机(比如,remote.pku.edu.cn)上完成上面步骤。  

4.将本地(local.pku.edu.cn)下你自己(这里是“teng”)的公钥
(id_dsa_1024_a.pub)拷贝到远地主机(remote.pku.edu.cn)上你自己家目录下的
.ssh2目录下,可命名为“local.pub”,一般用ftp上传即可。  


在远地主机上,你自己家目录的.ssh2目录下,创建“authorization”文件,其中
指定用来进行身份认证的公钥文件。命令如下:  

remote:~/.ssh2# echo “Key local.pub” > authorization  


现在你可以从本地用ssh2登录到远地系统了。命令如下:  

local# ssh remote.pku.edu.cn  

Passphrase for key "/home1/teng/.ssh2/id_dsa_1024_a" with comment  
"1024-bit dsa,  

teng@ns, Fri Oct 20 2000 17:27:05":***********  


这时会要你输入你的ssh口令(Passphrase)。验证通过后,即登录到remote主机上



1.什么是SSH

传统的网络服务程序,如:ftp、POP和telnet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据。而且,这些服务程序的安全验证方式也是有其弱点的,就是很容易受到“中间人”(man-in-the-middle)这种方式的攻击。所谓“中间人”的攻击方式,就是“中间人”冒充真正的服务器接收你传给服务器的数据,然后再冒充你把数据传给真正的服务器。服务器和你之间的数据传送被“中间人”一转手做了手脚之后,就会出现很严重的问题。

从前,一个名为Tatu Yl?nen的芬兰程序员开发了一种网络协议和服务软件,称为SSH(Secure SHell的缩写)。通过使用SSH,你可以把所有传输的数据进行加密,这样“中间人”这种攻击方式就不可能实现了,而且也能够防止DNS和IP欺骗。还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。SSH有很多功能,虽然许多人把Secure Shell仅当作Telnet的替代物,但你可以使用它来保护你的网络连接的安全。你可以通过本地或远程系统上的Secure Shell转发其他网络通信,如POP、X、PPP和FTP。你还可以转发其他类型的网络通信,包括CVS和任意其他的TCP通信。另外,你可以使用带 TCP包装的Secure Shell,以加强连接的安全性。除此之外,Secure Shell还有一些其他的方便的功能,可用于诸如Oracle之类的应用,也可以将它用于远程备份和像SecurID卡一样的附加认证。

2.SSH的工作机制

SSH分为两部分:客户端部分和服务端部分。

服务端是一个守护进程(demon),他在后台运行并响应来自客户端的连接请求。服务端一般是sshd进程,提供了对远程连接的处理,一般包括公共密钥认证、密钥交换、对称密钥加密和非安全连接。

客户端包含ssh程序以及像scp(远程拷贝)、slogin(远程登陆)、sftp(安全文件传输)等其他的应用程序。

他们的工作机制大致是本地的客户端发送一个连接请求到远程的服务端,服务端检查申请的包和IP地址再发送密钥给SSH的客户端,本地再将密钥发回给服务端,自此连接建立。刚才所讲的只是SSH连接的大致过程,SSH 1.x和SSH 2.x在连接协议上还有着一些差异。

SSH被设计成为工作于自己的基础之上而不利用超级服务器(inetd),虽然可以通过inetd上的tcpd来运行SSH进程,但是这完全没有必要。启动SSH服务器后,sshd运行起来并在默认的22端口进行监听(你可以用 # ps -waux | grep sshd 来查看sshd是否已经被正确的运行了)如果不是通过inetd启动的SSH,那么SSH就将一直等待连接请求。当请求到来的时候SSH守护进程会产生一个子进程,该子进程进行这次的连接处理。

但是因为受版权和加密算法的限制,现在很多人都转而使用OpenSSH。OpenSSH是SSH的替代软件,而且是免费的,

SSH是由客户端和服务端的软件组成的,有两个不兼容的版本分别是:1.x和2.x。用SSH 2.x的客户程序是不能连接到SSH 1.x的服务程序上去的。OpenSSH 2.x同时支持SSH 1.x和2.x。

3.安装使用OpenSSH

这里主要讲的是基于FreeBSD的OpenSSH的配置,其它Unix及派生系统使用OpenSSH的方法大致相同FreeBSD中集成了OpenSSH,在很多Linux的发行版中都没有包括OpenSSH。但是,可以从网络上下载并安装OpenSSH,他是完全免费的。(可以访问OpenSSH的主页 http://www.openssh.org)

生成密钥对

使用ssh-keygen来生成密钥对,比如要用DSA加密算法生成一个4096Bit的密钥对可以输入如下命令(具体参数请参阅man ssh-keygen):

#ssh-keygen -b 4096 -t dsa

%ssh-keygen -b 4096 -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/home/fdy84/.ssh/id_dsa):
(密钥对将要存的路径,括号内为默认)
Created directory '/home/fdy84/.ssh'.
Enter passphrase (empty for no passphrase):
(输入口令)
Enter same passphrase again:
(再次输入口令,千万不要忘记否则就只有从新生成密钥了)
Your identification has been saved in /home/fdy84/.ssh/id_dsa.
(你的私钥)
Your public key has been saved in /home/fdy84/.ssh/id_dsa.pub.
(你的公钥)
The key fingerprint is:
bb:1b:f5:1c:77:62:90:21:59:7e:c6:65:e5:24:c6:e5 fdy84@freebsd

密钥分发

刚才生成了一对密钥,把私钥放在自己的机器上的~/.ssh/目录下并保证访问权限是“-rw-------”(即600)。再把生成的公钥放在要连接的远程主机的~/.ssh/目录下并改名为authorized_keys,并且保证文件除了属主外没有被人修改的权限。

4.配置使用SSH

配置服务端
启动SSH服务端很简单只需要运行
# sshd

就可以了。或者在/etc/rc.conf中加入
sshd_enable="YES"
就可以在每次启动时自动运行SSH服务端了。
SSH服务端的配置使用的配置文件是“/etc/ssh/sshd_config”,并且OpenSSH1.x和2.x的服务器配置文件均为此文件。

配置客户端

客户端想连接远程服务器只需要输入
#ssh 域名(或ip)
就可以了
比如想以fdy84用户连接IP地址为192.168.0.6的一台远程服务器 需要键入
# ssh 192.168.0.6 -l fdy84
只要配置正确就可以连上远端的服务器了

5.使用Windows下的SecureCRT进行SSH连接

如果在Windows下想要通过SSH远程管理服务器怎么办?其实Windows有很多远程管理软件,我们在这主要介绍一下SecureCRT中SSH连接的使用。(以Version 4.1.1为准介绍)

Create Public Key...
SecureCRT 也可以生成密钥对,不过SecureCRT最大只支持2048Bit的密钥,点选Tools->Create Public Key...,选择密钥算法和密钥长度,输入完口令后再使劲晃鼠标以给它生成密钥的足够的随机量之后就等待计算机生成密钥对,如图

点选左上角的Connect按钮,开启Connect对话框

再点击红圈所示的New Session按钮进入Session Options对话框

在这里我们选择SSH连接,并填入要连接的主机名称(或者ip地址),用户名,再选择基于公钥方式的认证,点击Properties...进入密钥配置对话框

在红色圈所示的位置填入你的私钥文件。

现在点击刚才建立的那个连接进行SSH连接,根据提示点击几个对话框之后就连接上远程的服务器了,如图

特别要注意的是由SecureCRT 生成的密钥对和用OpenSSH生成的密钥对在格式上不一样,而且二者都只能认识自己的密钥的格式,所以在用SecureCRT同OpenSSH连接时分别都要用它们自己的密钥格式,可以用任何一个方法生成然后使用ssh-keygen -i 把SecureCRT生成的的密钥转换成OpenSSH的密钥格式,或者用ssh-keygen -e把OpenSSH的密钥格式转换成SecureCRT能够识别的IETF SECSH格式。

虽然SSH提供基于密码的登陆,不过基于安全考虑笔者并不推荐使用这种登陆,鉴于现在机器的速度普遍已经很快,推荐使用4096位的密钥以加强安全性。 

 
原创粉丝点击