鳥哥的 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:將本文進行一些修訂,此外,加入了課後練習!


Designed by VBird during 2001-2004.  Aerosol Lab.