鸟哥的 Linux ADSL 私房菜


简易 Telnet SSH 主机设定
最近更新日期:2003/09/09
 
一部连上 Internet 上面的您的个人主机,最重要的是什么呢?大概就是如何让您自己可以联机进入自己的主机,并且进行所谓的『远程操控』了吧!也就是说,您可以在任何具有连上 Internet 的计算机中,以远程联机软件连上 Internet ,并藉由您主机上面的远程联机服务器软件提供的功能,直接登入您的主机来进行操控的工作!此时,您将发现 Linux 有趣又好玩的地方啰!在 Unix Like 的机器当中,几乎都提供 Telnet 这个远程联机服务器软件,不过, Telnet 本身是以『明码』来传送您操作的数据,安全上面是值得来思考要不要开放吶!这个时候就有需要了解一下传送过程中以加密动作来传送数据封包的 SSH 这个远程联机服务器软件啦!这个章节当中,我们会提到 Telnet 与 SSH 这两个服务器,值得参考喔!
 
远程联机程序的功能
Telnet 服务器
  telnet 服务器:安装、启动与关闭服务
  telnet 客户端:好用的联机软件
  telnet 安全性:iptables, TCP_Wrappers, 纯建议,
SSH 服务器
  联机加密技术简介
  启动 ssh 服务
  ssh 客户端联机ssh, sftp, putty,
  详细设定 sshd 服务器:/etc/ssh/sshd_config
  制作不用密码可立即登入的 ssh 用户: ssh-keygen,
  安全设定: sshd_config, iptables, TCP_Wrappers,
参考资源
课后练习

远程联机程序的功能:
Telnet 服务器:
    知道 telnet 是什么吗?咦!不就是连接 BBS 的工具吗?!嘿嘿!没错!他确实也是 BBS 软件类的一个服务器啦!不过这里我们暂不玩弄 BBS ! telnet 可以说是历史相当悠久的远程联机服务器哩!而且支持他的软件也相当的多!例如知名的 netterm 就直接支持他啦!联机之后的界面也漂亮,在 client 端的中文传输与输入也没有问题!相当的不错用!不过,他最麻烦的地方就是.....比较不安全而已啦~
     
    底下我们谈一谈怎么启动与使用 telnet 服务器吧!

    telnet 服务器:安装、启动与关闭服务
     
    安装:
    如何启用 Telnet 这个好用的服务器呢?首先,当然一定要有安装啰!由于近年来由于 telnet 是以明码在传输的问题,所以在新的 Linux 版本上面,已经都将 telnet 这个服务器排除在『先发名单』之外啦,也就是说,很多 Linux distributions 预设是不安装 telnet 的,不过,在每个主要的 Linux distributions 还是有提供 telnet 套件在光盘当中啦!所以您要拿出原版光盘,并且安装好他,就可以啦!如何确认是否已经安装了 telnet 呢?最简单的方法就是使用最广泛被使用的 RPM 啦!
     
    [root@test root]# rpm -qa | grep telnet
    telnet-server-krb5-1.2.5-1mdk
    telnet-client-krb5-1.2.5-1mdk
    # 上面是 Mandrake 9.0 的范例;或底下是 Red Hat 7.2 的范例
    telnet-0.17-20
    telnet-server-0.17-20
     
    需要特别留意的是,如果要提供 telnet 联机服务,通常需要安装两个 RPM 喔:
     
    1. 一个是 telnet-client (或 telnet),这个套件提供的是 telnet 客户端的联机程序;
    2. 另一个是 telnet-server 套件,这个才是真正的 Telnet server 软件喔!
     
    所以,如果您的系统上面找不到等一下要设定的 telnet 设定档,肯定就是没有安装 telnet 啦!请拿出您的光盘片,然后 mount 之后,赶紧的安装他吧!否则就无法进行下一步的设定啦! ^_^
     
    启动与关闭:
    还记得『鸟哥的 Linux 私房菜 -- 基础学习篇』里面的『认识服务 ( daemon )』那个章节吧!?要记得 super daemon 呦!?没错啦,我们的 telnet 就是挂在 super daemon 底下的一支服务而已!那个咚咚就是有名的 xinetd 啰!( 注:在某些旧版的套件上面也有使用 inetd 的,启动的方式有点不太一样,不过差异不大啦!只要懂得基本的常识,那么就不会有问题啰!所以鸟哥才会要大家先读完 Linux 基础篇 啦! ) 启动的方式就是:
       
    那么如何开启 telnet 的项目呢?很简单,有两个方式:
     
    1. 使用 ntsysv 或 chkconfig

    2. 还记得小红帽 ( Red Hat ) 里面的 ntsysv 这个好用的东西吗?对了,在 Red Hat 底下有这么一个好用的设定工具,您可以使用 ntsysv 出现的窗口之中,将 telnet 勾选起来,然后按下 OK 离开即可啰!
       
    3. 使用 vi 修改 /etc/xinetd.d/telnet 这个档案:

    4. 那么如果不是 Red Hat 的 Linux 系统呢?基本上, ntsysv 也只是修改 /etc/xinetd.d 这个目录下的数据而已,所以我们当然可以手动自己修改他啦!
      [root@test root]# vi /etc/xinetd.d/telnet
      # default: on
      # description: The telnet server serves telnet sessions; it uses \
      #       unencrypted username/password pairs for authentication.
      service telnet
      {
            disable = yes<==就是改这里,将 yes 改成 no 即可!
              flags           = REUSE
              socket_type     = stream
              wait            = no
              user            = root
              server          = /usr/sbin/in.telnetd
              log_on_failure  += USERID
      }
      看到了没!?只要将 disable (取消的意思) 变成 no ,也就是不取消,亦即是开启啦!
     
    设定完开启之后,自然就是要启动啦,刚刚提到 telnet 是挂在 xinetd 底下的,所以自然只要重新启动 xinetd 就能够将 xinetd 里头的设定重新读进来,所以刚刚设定启动的 telnet 自然也就可以被启动啦!而启动的方式也有两种方式,其中 service 这个指令仅支持在 Red Hat 与 Mandrake 底下,所以通常我还是以 /etc/rc.d/init.d 底下的 scripts 为启动的主要方法啦! 那么要看有没有启动服务呢?怎么看?其实也很简单啦,还记得我们在前几章提到的『 限制 Linux port 的联机 』那一章吗?使用 netstat 就可以啦! 看到了吗?没错,那个 telnet 就是启动的项目啦!( 这里考一个问题,那个 port 对应的服务名称在哪一个档案里面查询到的呢?在每一个 Linux 系统都有的档案呦!忘记了呀!?再回到前面看看 限制 Linux port 的联机 ,然后用 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 的环境中了!很方便吧!当然啦!您也可以使用类似 netterm 这个很棒的联机软件来联机的,这里我们就不示范啦!那如果想要在 Linux 的终端机看到中文呢?!呵呵!这就需要 JMCCE 这个套件的支持了!请参考:Linux 常用指令介绍之终端机中文接口显示
     

    telnet 安全性:iptables, TCP_Wrappers, 纯建议,
     
    telnet 这个服务器方便归方便,但总是一个不太好的联机解决方案,因为毕竟他是一个以『明码』传输的协议,什么是『明码』呢?简单的说,当您使用 telnet 的时候,您总是会在屏幕上面输入数据吧!?最简单的例子,就是您总是要登入 telnet 的主机画面吧!那么您总是需要输入账号与密码吧?当主机接受您的数据后才能进行确认!这个时候,您的资料就会经过 telnet 这个协议来传输到主机上面,这个传输时候的数据基本上是没有加密过的,也就是类似 ASCII 码的咚咚!如此一来的话,只要有心人士在某个 router 点去监听您的封包,而且将该数据封包捉下来,进行解读的工作,哈哈!那么您的账号与密码就被拿走了!所以下一次,别人就可以利用您的账号与密码了~很危险对不对~是很危险!除此之外, telnet 由于太老牌了,很多的黑客程序已经都写了破解的方式,所以启动之后,其实也很危险的啦!因此实在是建议不要启用 telnet 说!无论如何,有些朋友由于旧软件的关系,还是需要使用到 telnet 来联机,那么我们就提一些基本的注意事项好了!
     

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 服务器主机启动该服务之后,主机端会产生一支公钥,而身为个人计算机的您 ( client 端 ),在进行与 server 的联机时,可以藉由 Client 端随机自行产生的私钥来提供 server 的联机之用,也可以直接藉由 server 提供的私钥来进行联机!这个与进行联机时选择的加密版本有关,等一下我们再提!
     
     
    在上面的图示中,我们可以知道,当资料由 Server 端传送到 Client 端时,这些数据会先经过『公钥, Public Key』来进行加密的行为,所以,在传输的过程中,这些数据本身是经过加密的,因此,即使这些数据在途中被截取时,要破解这些加密的数据,还是得要花费上好长一段时间的。那么等这些经过公钥加密的数据传送到 Client 端之后,就可以藉由所谓的『私钥, Private Key』来进行解密的动作。需要注意的是,这些公钥与私钥在每一部计算机上面都不一样,所以,您与 Server 的联机对其他人来说,都是很难去破解的呢!那么这些公钥与私钥是如何产生的呢?底下我们来谈一谈目前 SSH 的两种版本的联机模式啰!
这三方面来着手进行!底下我们就说一说吧!
基本上, SSH 还蛮安全的,只要取消 root 的登入权限,那么问题应该就会比较小一点啦!所以,虽然可以不用设定 iptables ,但是建议针对几个网域设定一下 /etc/hosts.allow 与 /etc/hosts.deny !加油啰!

参考资源
课后练习
简易 Telnet SSH 主机设定

2002/11/14:第一次完成
2003/03/08:加入标头说明,与修改部分内容,例如 Telnet 服务器软件的安装等等,以及 SSH 的 putty 使用中文状态!
2003/09/09:将本文进行一些修订,此外,加入了课后练习!

2002/11/14以来统计人数


Designed by VBird during 2001-2004.  Aerosol Lab.