下一页 1 2
学习本章的必备技巧:
在这个章节当中,我们会介绍基本的 telnet 与 ssh 这两个远程联机的服务器软件!联机就联机嘛!为什么要有两个远程联机呢?
这是因为 telnet 是较旧,而且是相当不安全的联机服务器,所以我们才要介绍 ssh 这一个较新而且较安全的服务器呀!那么在安装的过程当中,我们会使用到一些设定文件的修改,以及指令的下达,还有需要认识一下什么是 Super daemon ,所以,你最起码需要知道底下这些知识:
· 认识 vi
· 认识 BASH Shell
· 认识服务
· 常用的网络指令
· 认识网络安全
· 简易防火墙架设
------------------------------------------------------------------------------------------------
远程联机程序的功能:
好了,在这个章节当中,首先,我们要先来了解一下,什么是『远程联机服务器』呀!?这个东西的功能为何呀!?我想,您应该已经听过,一个良好的网络环境当中,一部开放到 Internet 上面的服务器,基本上,他可以不需要显示卡、屏幕、键盘、鼠标等等的配备!只要有基本的主机板、CPU、RAM、硬盘再加上一块好一点的网络卡,并且连上 Internet !哈哈!那么你要操控这部主机的时候,只要透过网络联机进来,然后进行任何修改即可!嘿!所以啰,这个时候主机自然不需要接口设备啦!
以 VBird 为例,目前 VBird 管理大约七、八部左右的 Unix-Like 主机,这些主机都不在同一个地方,分布在南台湾各处!那么当有新的套件的漏洞被发布,或者是需要进行一些额外的设定的时候, VBird 人一定要到现场吗?当然不需要, VBird 只要透过网络联机到该主机上面,就可以进行任何工作了!真的就好象在屏幕前面工作一般的轻松愉快!^_^!这就是远程联机服务器啦!当然还不只这样的功能!举个例子来说:当您的工作需要使用到 Linux 的强大的编译功能时,那么您一定需要 Linux 对吧!而且最好是运算速度快一点的主机,这个时候你可以将你研究室最快的那一部主机开放出来,设定一下远程联机服务器,让你的学生啦,或者是研究室的同仁啦,可以透过这部机器帮他们进行研究的工作,这个时候,你的主机就可以让多人进行分享 Linux 运算的功能啦!
在早期的网络世界里,由于只有 Unix 机器,而且个人计算机还不流行的时候,想要使用大型主机来进行数值程序的运算时(在我们工程界,比较常使用 Fortran 这一类的程序语言,至于 C 语言则较少碰~),就需要向学校单位申请工作站的帐号,并且以远程联机程序连进主机,以使用 Unix 的资源来进行我们的数值模式运算!所以啦,那个远程联机服务器的设定,基本上,对于系统管理员是很重要的!尤其对于大型的工作站类型的 Unix-Like 主机,由于很多人都需要使用到他的 CPU 运算核心功能,或者是他的编译程序( compiler )来进行运算,这时的远程联机就更形重要啦!
· 服务器类型( Server )的联机程序:
在一般开放网际网络服务的服务器中,由于开放的服务可能会有较为重要的信息,而远程联机程序连进主机之后,可以进行的工作又太多了(几乎就像在主机前面工作一般!),因此网际网络的远程联机程序通常仅针对少部分系统维护者开放而已!除非必要,否则 Server 类型的主机还真的不建议开放联机的服务ㄋㄟ~
· 工作站类型( Workstation )的联机程序:
至于工作站的情况就跟服务器不太一样了!工作站常常仅针对内部的几个使用者开放而已,通常是不希望连上 Internet 的啦!而且所谓的工作站自然就是用来做工的!例如 VBird 的其中一部 Linux 就是专门用来进行大型的数值模式计算仿真之用!这个时候的远程联机服务器可能就得要对多人激活了!因为工作站的强大运算功能可以让很多人一同使用他的计算能力!而且也可以免除每部计算机都得要安装 compiler 的窘境!要知道,某些工程用的 compiler 是粉贵的~
· 远程联机服务器的主要类型:
目前最常见的远程联机服务器主要有以明码传送资料的 telnet 服务器,及以加密过的封包进行传送来联机的 ssh 服务器!虽然 telnet 可以支持的 client 端的软件比较多,不过由于他是使用明码来传送资料,很容易遭到有心人士的撷取!所以近来我们都呼吁大家多使用 ssh 这一种联机方式,而舍弃掉 telnet 这个比较不安全的咚咚啰!底下我们就分别来谈一谈这两种联机服务器吧!
------------------------------------------------------------------------------------------------
Telnet 服务器:
知道 telnet 是什么吗?咦!不就是连接 BBS 的工具吗?!嘿嘿!没错!他确实也是 BBS 软件类的挂上的一个服务器啦!不过这里我们暂不玩弄 BBS !因为 VBird 目前也还没有打算玩他!呵呵! telnet 可以说是历史相当悠久的远程联机服务器哩!而且支持他的软件也相当的多!例如知名的 netterm 就直接支持他啦!联机之后的界面也漂亮,在 client 端的中文传输与输入也没有问题!相当的不错用!不过,他最麻烦的地方就是.....比较不安全而已啦~
底下我们谈一谈怎么激活与使用 telnet 服务器吧!
· telnet 服务器:激活与关闭服务
还记得『认识服务』那个章节吧!?还记得 super daemon 呦!?没错啦,我们的 telnet 就是挂在底下的一支服务而已!那个咚咚就是有名的 xinetd 啰!( 注:在某些旧版的套件上面也有使用 inetd 的,激活的方式有点不太一样,不过差异不大啦!只要懂得基本的常识,那么就不会有问题啰!所以要多瞧一瞧Linux 基础篇啦! ) 激活的方式就是 (1)将 xinetd 里面关于 telnet 的项目开启,然后 (2)重新激活一次 xinetd 就成功啦!那么如何开启 telnet 的项目呢?很简单,有两个方式,
1. 使用 ntsysv :
还记得 ntsysv 这个好用的东西吗?对了,在 Red Hat 底下有这么一个好用的设定工具,你可以使用 ntsysv 出现的窗口之中,将 telnet 勾选起来,然后按下 OK 离开即可啰!
2. 使用 vi 修改 /etc/xinetd.d/telnet 这个档案:
那么如果不是 Red Hat 的 Linux 系统呢?基本上, ntsysv 也只是修改 /etc/xinetd.d 这个目录下的资料而已,所以我们当然可以手动自己修改他啦!
看到了没!?只要将 disable (取消的意思) 变成 no ,也就是不取消,亦即是开启啦!
设定完开启之后,自然就是要激活啦,刚刚提到 telnet 是挂在 xinetd 底下的,所以自然只要重新激活 xinetd 就能够将 xinetd 里头的设定重新读进来,所以刚刚设定激活的 telnet 自然也就可以被激活啦!而激活的方式也有两种方式,其中 service 仅支持在 Red Hat 底下,所以通常我还是以 /etc/rc.d/init.d 底下的 scripts 为激活的主要方法啦!
那么要看有没有激活服务呢?怎么看?其实也很简单啦,还记得我们在限制 Linux port 的联机那一章吗?使用 netstat 就可以啦!
看到了吗?没错,那个 telnet 就是激活的项目啦!( 考一个问题,那个 port 对应的服务名称在哪一个档案里面查询到的呢?在每一个 Linux 系统都有的档案呦!忘记了呀!?看看这里 ,然后用 vi 去看看那一个档案的内容吧! ^_^ )那么要如何关闭呢?呵呵!那就真的是太简单啦!就将刚刚的步骤再做一次,而将设定值转变一下即可!步骤如下啦!
这样就关掉啦!很简单吧!
· telnet 客户端:好用的联机软件
刚刚上面提到的都是在服务器端的设定而已!那么在客户端有什么好用的软件可以连上 Server 的呢?最常见到的应该就是 netterm 这个鼎鼎大名的联机软件了吧!我想,只要玩过 BBS 的大概都晓得这个软件才对!所以这里就不提了!另外,目前几乎所有的操作系统都提供了 telnet 这个程序,这个程序可以直接轻易的就连上 telnet server 呢!例如您要在 Linux 上面连上自己的 telnet 服务器,可以这样做:
这样就联机进来啦!很简单吧!那么在 Windows 的环境底下呢?同样的,也是可以使用 telnet 的程序联机到 Linux 的 telnet server 里面来!没有问题的啦!可以依序这样做:
1. 按下 Windows 内的 『开始』
2. 选择 『执行』
3. 在出现的窗口中输入 『telnet your.IP.or.hostname』
这样就可以进入 Linux 的环境中了!很方便吧!
· telnet 安全性:iptables, TCP_Wrappers, 纯建议,
telnet 这个服务器方便归方便,但总是一个不太好的联机解决方案,因为毕竟他是一个以『明码』传输的协议,什么是『明码』呢?简单的说,当你使用 telnet 的时候,你总是会在屏幕上面输入资料吧!?最简单的例子,就是你总是要登入 telnet 的主机画面吧!那么你总是需要输入帐号与密码吧?当主机接受你的资料后才能进行确认!这个时候,你的资料就会经过 telnet 这个协议来传输到主机上面,这个传输时候的资料基本上是没有加密过的,也就是类似 ASCII 码的咚咚!如此一来的话,只要有心人士在某个 router 点去监听你的封包,而且将该资料封包捉下来,进行解读的工作,哈哈!那么你的帐号与密码就被拿走了!所以下一次,别人就可以利用你的帐号与密码了~很危险对不对~是很危险!除此之外, telnet 由于太老牌了,很多的骇客程序已经都写了破解的方式,所以激活之后,其实也很危险的啦!因此实在是建议不要启用 telnet 说!无论如何,有些朋友还是喜欢以 telnet 来联机,那么我们就提一些基本的注意事项好了!
o root 不能直接以 telnet 连接上主机:
基本上,既然 telnet 不是很安全,自然预设的情况之下就是无法允许 root 以 telnet 登入 Linux 主机的!但是,事实上, telnet 只是利用 PAM 模块来管制 root 的登入而已,因此,如果你确定你的环境够安全(例如你的主机并没有连上 Internet ),并且想要开放 root 以 telnet 登入 Linux 主机的话,请修改 /etc/pam.d/login 这个档案的第二行设定即可:
如此一来, root 将可以直接进入 Linux 主机了!不过,还是不建议如此做的!
o 加上防火墙 iptables:
针对 telnet 加设防火墙 iptables 是一个好主意!如果您已经参考了 VBird 之前写的『简易防火墙架设』一文,并且使用里面的 scripts 的话,那么不用担心 telnet 啦!基本上,他原本就仅对内部开放 telnet ,外部是无法连上您的 telnet 的!但是,若是您自己设定了自己的防火墙机制之后,那么想要针对 192.168.0.0/24 这个网域,及 61.xxx.xxx.xxx 这个 IP 进行 telnet 的开放呢?可以增加这几行在您的 iptables 规则之内(请注意:防火墙的规则顺序是很重要的!所以再回头看看 简易防火墙架设 一文是有必要的!)
上面的规则中,第一、二行是针对来源的 IP 来开放 port 23 亦即是 telnet 的协议啦!而最后一行则是将其它的所有来源的,想要连上 telnet 的联机封包都丢掉的意思!怎么样!很简单吧!
o 加上防火墙 /etc/hosts.allow(deny) 机制:
防火墙的机制是越多越好!永远也不嫌多的啦!这里也可以使用 TCP_Wrappers 的机制呢!刚刚是开放了 192.168.0.0/24 这个网段,但是如果你只想要其中的 192.168.0.1 ~ 192.168.0.5 进入呢?而其它的 IP 只要一经联机,就会被记录该 IP ,以提供 root 查询呢?可以这样做:
更详细的 TCP_Wrappers 用法请参考 简易防火墙架设 一文啰!
o 建议事项:
说真的, telnet 真的不是很安全的!简直应该说为『危险』等级的服务,所以尽量不要激活他啦:
1. 非必要时,不要激活 telnet ,如果真的需要激活 telnet ,那么也请在激活并且使用完毕之后,立即将他关掉!
2. 如果确定真的要激活 telnet 时,请确定好限制的联机范围,使用 iptables 来设定联机的限制区域;
3. 加上 TCP_Wrappers 的辅助,加强防火墙的功能!
4. 随时注意登录档案里面关于 login 的事项!并且不要让 root 能以 telnet 登入 Linux 主机!
------------------------------------------------------------------------------------------------
SSH 服务器:
既然 telnet 不是很安全,那么我又需要以远程联机服务来操控我的 Linux 主机,那么应该怎么办呀!?最好的方法当然就是以较为安全的联机机制的方案来解决联机的问题啰!那么该如何解决这样的问题呢?这也不难啦,使用 SSH 即可。那么 SSH 是什么呢?他有什么特异功能?简单的来说,SSH 是 Secure SHell protocol 的简写,他可以经由将联机的封包加密的技术,来进行资料的传递,因此,资料当然就比较安全啰!这个 SSH 可以用来取代 Internet 上面较不安全的 finger, R Shell (rcp, rlogin, rsh 等指令), talk 及 telnet 等联机模式。底下我们将先简介一下 SSH 的联机模式,来说明为什么 SSH 会比较安全呢!
特别注意:这个 SSH 协议,在预设的状态中,本身就提供两个服务器功能:
1. 一个就是类似 telnet 的远程联机使用 shell 的服务器,亦即是俗称的 ssh ;
2. 另一个就是类似 FTP 服务的 sftp-server !提供更安全的 FTP 服务。
· 联机加密技术简介:
基本上,加密的技术通常是藉由所谓的『公钥与私钥』亦即『Public and Private keys』来进行加密与解密的动作!如下图所示,当 SSH 激活服务之后,会产生一支公钥,而身为个人计算机的你,在进行与 server 的联机时,可以藉由自己产生的私钥来提供 server 的联机之用,也可以直接藉由 server 提供的私钥来进行联机!这个与进行联机时选择的加密版本有关,这个等一下我们再提!
在上面的图标中,我们可以知道,当数据由 Server 端传送到 Client 端时,这些资料会先经过『公钥, Public Key』来进行加密的行为,所以,在传输的过程中,这些资料本身是经过加密的,因此,即使这些资料在途中被截取时,要破解这些加密的资料,还是得要花费上好长一段时间的。那么等这些经过公钥加密的资料传送到 Client 端之后,就可以藉由所谓的『私钥, Private Key』来进行解密的动作。需要注意的是,这些公钥与私钥在每一部计算机上面都不一样,所以,你与 Server 的联机对其他人来说,都是很难去破解的呢!那么这些公钥与私钥是如何产生的呢?底下我们来谈一谈目前 SSH 的两种版本的联机模式啰!
o SSH protocol version 1:
每一部主机都可以使用 RSA 加密方式来产生一个 1024-bit 的 RSA Key ,这个 RSA 的加密方式,主要就是用来产生公钥与私钥的演算方法!这个 version 1 的整个联机的加密步骤可以简单的这么看:
1. 当每次 SSH daemon (sshd) 激活时,就会产生一支 768-bit 的公钥(或称为 server key)存放在 Server 中;
2. 若有 client 端的需求传送来时,那么 Server 就会将这一支公钥传给 client ,而 Client 藉由比对本身的 RSA 加密方式来确认这一支公钥;
3. 在 Client 接受这个 768-bit 的 server key 之后,Client 自己也会随机产生一支 256-bit 的私钥(host key),并且以加密的方式将 server key 与 host key 整合成一支完整的 Key ,并且将这支 Key 也传送给 server ;
4. 之后,Server 与 Client 在这次的联机当中,就以这一支 1024-bit 的 Key 来进行资料的传递!
当然啦,因为 Client 端每次的 256-bit 的 Key 是随机取的,所以你这次的联机与下次的联机的 Key 就会不一样啦!
o SSH protocol version 2:
与 version 1 不同的是,在 version 2 当中将不再产生 server key 了,所以,当 Client 端联机到 Server 端时,两者将藉由 Diffie-Hellman key 的演算方式来产生一个分享的 Key ,之后两者将藉由类似 Blowfish 的演算方式进行同步解密的动作!
每一个 sshd 都提供这两个版本的联机,而决定这两种模式联机的,就必需要在 client 端联机时选择联机的模式才能确认。目前预设情况下,会自动使用 version 2 的联机模式喔!而由于我们的联机资料中,经过了这个 Public 与 Private Key 的加密、解密动作,所以在中间的传送过程中,当然就比较安全的多啰!
------------------------------------------------------------------------------------------------
激活 ssh 服务:
事实上,在我们使用的 Linux 系统当中,预设就已经含有 SSH 的所有需要的套件了!这包含了可以产生密码等协议的 OpenSSL 套件与 OpenSSH 套件,所以呢,要激活 SSH 真的是太简单了!就直接给他激活就是了!此外,在目前的 Linux Distributions 当中,都是预设激活 SSH 的,所以一点都不麻烦,因为不用去设定,他就已经激活了!哇!真是爽快~无论如何,我们还是得说一说这个激活的方式吧!直接激活就是以 SSH daemon ,简称为 sshd 来激活的,所以,手动可以这样激活:
上面两种方式都可以直接手动激活 sshd 这个服务!然后使用 netstat -tl 看看能不能看到 ssh 的服务在监听呢!?如果出现了上面那一行黄色字体,就表示您的 SSH 已经正确的激活啰!这真是太简单了吧!没错,但是他就是这么简单~
那么我要如何在开机的时候就激活这个 sshd 呢?如果是 Red Hat 的系统,可以使用 ntsysv 这支程序,而 Mandrake 可以使用 chkconfig 这个程序!至于 OpenLinux 则可以到 /etc/sysconfig/daemons 去看看喔!
这个方式仅适合在已经有 OpenSSH 的 Linux Distributions 当中,如果以 Red Hat 6.x 为例,他并没有预设使用 SSH 怎么办?别担心,可以参考一下底下这个鸟哥之前写过的网页,有详细的说明使用 tarball 安装的步骤呢!
使用 Tarbal 安装 SSH 以及升级 SSH 可能会遇到的问题说明
需要注意的是, SSH 不但提供了 shell 给我们使用,亦即是 ssh protocol 的主要目的,同时亦提供了一个较为安全的 FTP server ,亦即是 ssh-ftp server 给我们当成是 FTP 来使用!所以,这个 sshd 可以同时提供 shell 与 ftp 喔!而且都是架构在 port 22 上面的呢!所以,底下我们就来提一提,那么怎么样由 Client 端连接上 Server 端呢?同时,如何以 FTP 的服务来连接上 Server 并且使用 FTP 的功能呢?
------------------------------------------------------------------------------------------------
· ssh 客户端联机: ssh, putty
由于 Linux 与 Windows 这两个客户端的 Client 联机软件并不一样,所以我们分为两个部分来说明:
o Linux 客户端:
在 Linux 客户端方面,我们主要以 ssh 进行一般联机,而已 sftp 进行 FTP 的使用联机!分别简介如下:
这里请特别留意的是,如果直接以 ssh hostname 来连接进入 hostname 这个主机时,则进入 hostname 这个主机的『帐号名称』将会是目前你所在的这个环境当中的使用者帐号!以上面为例,因为我是以 root 的身份在执行,所以如果我执行了『 ssh host.domain.name 』时,那么对方 host.domain.name 这部主机,就会以 root 的身份来让我进行密码确认的登入动作!因此,为了避免这样的麻烦,通常我都是以简单的 e-mail 的写法来登入远方的主机,例如『ssh user@hostname 』即表示,我是以 user 这个帐号去登入 hostname 这部主机的意思。当然,也可以使用 -l username 这样的形式来书写!登入对方主机之后,其它的所有执行行为都跟在 Linux 主机内没有两样~所以,真的是很简单吧! ^_^ 这样就可以达到远程控管主机的目的了!此外,在预设的情况下, SSH 是『允许你以 root 的身份登入』喔!呵呵!更是爽快啦!此外,请特别留意的是,当您要连接到对方的主机时,如果是首次连接,那么 Server 会问你,你的联机的 Key 尚未被建立,要不要接受 Server 传来的 Key ,并建立起联机呢?呵呵!这个时候请『务必要输入 yes 而不是 y 或 Y』,这样程序才会接受喔!
那么如何使用 SSH FTP 的功能呢?也是很容易啦!就是使用 sftp 这支程序即可!而登入的方式与 ssh 相同,都是使用 sftp -l username hostname 或者直接以 sftp user@hosname 来书写!执行之后会有底下的模样:
进入到 sftp 之后,那就跟在一般 FTP 模式下的操作方法没有两样了!底下我们就来谈一谈, sftp 这个接口下的使用指令吧!
就整体而言, sftp 在 Linux 底下,如果不考虑图形接口,那么他已经可以取代 FTP 了呢!因为所有的功能都已经涵盖啦!因此,在不考虑到图形接口的 FTP 软件时,可以直接关掉 FTP 的服务,而改以 sftp-server 来提供 FTP 的服务吧! ^_^