華龍
(天津機(jī)電職業(yè)技術(shù)學(xué)院,天津 300131)
所謂的計(jì)算機(jī)遠(yuǎn)程控制,是指一臺(tái)計(jì)算機(jī)通過(guò)互聯(lián)網(wǎng),局域網(wǎng),電話(huà)線(xiàn)等手段,以某種方式連接到另外一臺(tái)計(jì)算機(jī),同時(shí)可以在本機(jī)上對(duì)另外的計(jì)算機(jī)進(jìn)行操控,這樣的方式就可以被稱(chēng)之為遠(yuǎn)程控制。
遠(yuǎn)程控制只是實(shí)現(xiàn)這類(lèi)技術(shù)的一個(gè)統(tǒng)稱(chēng),目前,能實(shí)現(xiàn)遠(yuǎn)程控制功能的技術(shù)和工具也非常的多,而且這些技術(shù)工具在用途和功能上也存在非常大的區(qū)別。根據(jù)用途和功能的不同,我們可以將相關(guān)的遠(yuǎn)程控制技術(shù)分為三類(lèi):Shell(命令行)方式,Desktop(桌面)方式,Non-OS(無(wú)盤(pán)工作站)方式。下面就簡(jiǎn)要介紹一下Shell方式的工作原理。
Shell更具體的來(lái)說(shuō)應(yīng)該是Remote Shell,從windows的角度來(lái)說(shuō)我們可以理解為命令行方式。之所以叫shell方式是因?yàn)槲已赜昧薼inux系統(tǒng)的操作思路,對(duì)于linux來(lái)說(shuō)圖形桌面只是linux的一個(gè)應(yīng)用程序,應(yīng)該說(shuō)linux對(duì)于用戶(hù)的真正的界面就是shell,linux的所有功能都可以在shell中完成,掌握了shell就等于掌控了整個(gè)linux系統(tǒng)。
從架構(gòu)上講,shell方式的工具都會(huì)分為客戶(hù)端(Client)與服務(wù)端(Server),客戶(hù)端與服務(wù)端通常會(huì)制定一套統(tǒng)一的傳輸協(xié)議(Protocol),封包(Package)方法以及加密(Encrypt)措施。說(shuō)到加密,在早期的一些經(jīng)典遠(yuǎn)程控制、傳輸軟件中,協(xié)議的制定少有考慮安全問(wèn)題,其內(nèi)容大都是明文傳送,但隨著網(wǎng)絡(luò)時(shí)代的來(lái)臨,網(wǎng)絡(luò)安全問(wèn)題越來(lái)越嚴(yán)重,這些遠(yuǎn)程工具反而成為hacker侵入的慣用手段,所以安全傳輸是遠(yuǎn)程控制的頭等大事?,F(xiàn)在很多傳統(tǒng)的工具通過(guò)一些加密、校驗(yàn)、安全通道等方法,來(lái)保證傳輸?shù)陌踩浴O旅鎻某绦虻慕嵌葋?lái)分析一下Shell的工作原理:
2.1.1 客戶(hù)端要做的事情:
(1)通過(guò)Ip地址和端口(port)建立連接,通常都是基于TCP協(xié)議的套接字(socket)連接。
(2)登陸(login)服務(wù)端。這個(gè)環(huán)節(jié)看似簡(jiǎn)單但實(shí)際上這個(gè)環(huán)節(jié)通常是比較復(fù)雜的,因?yàn)樵摥h(huán)節(jié)對(duì)整個(gè)遠(yuǎn)程控制的安全性有著非常關(guān)鍵的作用。
(3)建立了會(huì)話(huà),才是實(shí)際意義上的協(xié)議通訊。一般來(lái)說(shuō),Shell方式中的消息號(hào)就是客戶(hù)端與服務(wù)端程序通訊的語(yǔ)言。客戶(hù)端的要求被分散到這些消息上傳送給服務(wù)端,服務(wù)端解釋這些消息告訴服務(wù)端系統(tǒng)作相應(yīng)的操作,再將結(jié)果以消息的形式返回。
(4)最后注銷(xiāo)(logout)服務(wù)端,撤銷(xiāo)連接。
2.1.2 服務(wù)端要做的事情:
(1)偵聽(tīng)端口,準(zhǔn)備建立連接。處于安全考慮,很多工具會(huì)通過(guò)自身的設(shè)定或者系統(tǒng)設(shè)定限制終端的IP地址。
(2)當(dāng)服務(wù)端與客戶(hù)端建立連接之后,服務(wù)端需要處理客戶(hù)端的登陸請(qǐng)求。很多能夠控制shell的遠(yuǎn)程工具,大都是要求客戶(hù)端以服務(wù)端系統(tǒng)合法用戶(hù)的身份登陸。這樣便于控制其操作權(quán)限,而且也在一定程度上保證了系統(tǒng)的安全。Linux系統(tǒng)通常使用PAM(Pluggable Authentication Modules)方式來(lái)驗(yàn)證系統(tǒng)用戶(hù),服務(wù)端設(shè)定好認(rèn)證要素,整個(gè)認(rèn)證過(guò)程交給系統(tǒng)完成,也就是說(shuō)客戶(hù)端的登陸完全由系統(tǒng)控制,中間的遠(yuǎn)程控制工具只負(fù)責(zé)傳遞用戶(hù)信息至服務(wù)端。
(3)在傳輸過(guò)程中,服務(wù)端的工作對(duì)于使用者是透明的,但是它所做的工作確是整個(gè)遠(yuǎn)程控制中最重要的,它解釋客戶(hù)端的消息,告訴系統(tǒng),客戶(hù)端想做的事情,并將運(yùn)行結(jié)果打包返回。
(4)斷開(kāi)連接,繼續(xù)偵聽(tīng)。
上面是從程序運(yùn)行的角度羅列了客戶(hù)端與服務(wù)端在整個(gè)遠(yuǎn)程控制過(guò)程中的運(yùn)作細(xì)節(jié)。通常來(lái)說(shuō)shell方式傳遞的信息只是一些文本信息,所以傳輸速度快,獲取重要信息的效率也比較高。Shell方式具有代表性的工具有:Telnet,SSH,F(xiàn)TP,Samba,Rlogin等等。
由于我們的系統(tǒng)的命令行模式是采用的Telnet方式,以下就介紹一下telnet在Linux下的設(shè)置情況。
Telnet是非常方便實(shí)用的遠(yuǎn)程控制工具,而且是跨平臺(tái)的,無(wú)論在WINDOWS或者是LINUX平臺(tái)上都可以運(yùn)行server服務(wù)程序或者是client程序。下面就來(lái)介紹有關(guān)Telnet協(xié)議的知識(shí)。
Telnet協(xié)議是TCP/IP協(xié)議族中的一員,是Internet遠(yuǎn)程控制服務(wù)的標(biāo)準(zhǔn)協(xié)議。應(yīng)用Telnet協(xié)議能夠把本地用戶(hù)所使用的計(jì)算器變成遠(yuǎn)程主機(jī)系統(tǒng)的一個(gè)終端。它提供了三種基本服務(wù):
(1)Telnet定義一個(gè)網(wǎng)絡(luò)虛擬終端為遠(yuǎn)程的系統(tǒng)提供一個(gè)標(biāo)準(zhǔn)接口。客戶(hù)機(jī)程序不 必詳細(xì)了解遠(yuǎn)程的系統(tǒng),他們只需構(gòu)造使用標(biāo)準(zhǔn)界面的程序;
(2)Telnet包括一個(gè)允許客戶(hù)端和服務(wù)端協(xié)商選項(xiàng)的機(jī)制,而且它還提供一組標(biāo)準(zhǔn)選項(xiàng);
(3)Telnet對(duì)稱(chēng)處理連接的兩端,即Telnet不強(qiáng)迫客戶(hù)機(jī)從鍵盤(pán)輸入,也不強(qiáng)迫客戶(hù)機(jī)在屏幕上顯示輸出。
我們要更好的理解設(shè)置,還要說(shuō)說(shuō)整個(gè)Telnet運(yùn)作流程。數(shù)據(jù)信息被用戶(hù)從本地鍵盤(pán)鍵入并通過(guò)操作系統(tǒng)傳到客戶(hù)端,客戶(hù)端將其處理成網(wǎng)絡(luò)虛擬終端NVT(Net Virtual Terminal)格式后經(jīng)過(guò)網(wǎng)絡(luò)傳送到遠(yuǎn)程主機(jī),遠(yuǎn)程操作系統(tǒng)將所接收數(shù)據(jù)再?gòu)腘VT格式轉(zhuǎn)換為遠(yuǎn)地系統(tǒng)需要的格式并傳給服務(wù)端程序,并經(jīng)服務(wù)程序再次處理后,返回到操作系統(tǒng)上的偽終端入口點(diǎn),最后,操作系統(tǒng)將數(shù)據(jù)傳送到用戶(hù)正在運(yùn)行的客戶(hù)端程序,結(jié)果返顯至客戶(hù)端的屏幕上。這便是一次完整的輸入過(guò)程。具體結(jié)構(gòu)如圖1所示。
圖1 Telnet運(yùn)作流程圖
基本上Telnet Client都會(huì)被預(yù)先安裝到系統(tǒng)中,我們可以直接使用不需要設(shè)置什么,只要寫(xiě)對(duì)Server端的IP地址和端口就好了。
本節(jié)主要介紹的是Telnet Server端的安裝與設(shè)置,通過(guò)這些介紹希望讀者能夠了解關(guān)于Linux下Telnet類(lèi)似的服務(wù)程序的運(yùn)行機(jī)制。
由于Telnet的明碼傳輸問(wèn)題,使得其安全性能似乎不能適應(yīng)當(dāng)前惡劣的網(wǎng)絡(luò)環(huán)境。因此目前很多版本的Linux系統(tǒng)都不會(huì)預(yù)先安裝Telnet Server,并且也不推薦開(kāi)放Telnet Server的默認(rèn)端口。當(dāng)然這些與我要在本節(jié)介紹的內(nèi)容無(wú)甚關(guān)系。下面簡(jiǎn)單講講Linux系統(tǒng)下Telnet Server的設(shè)置方法。
首先,我們要了解系統(tǒng)中是否裝有Telnet,如下操作如圖2所示。
圖2 Telnet版本查詢(xún)
可以看到了系統(tǒng)中安裝了兩個(gè)Telnet的RPM包,第一個(gè)是telnet client,系統(tǒng)一般都會(huì)默認(rèn)安裝的;第二個(gè)才是Telnet Server,如果系統(tǒng)里沒(méi)有,那就找到Linux的安裝盤(pán)安上就行了。其實(shí)這個(gè)安裝包內(nèi)容很簡(jiǎn)單,它會(huì)安裝兩個(gè)重要的文件和一些幫助文件,如圖3。
圖3 Telnet服務(wù)端安裝文件
就是前兩個(gè)文件telnet和in.telnetd。第一個(gè)文件是一個(gè)系統(tǒng)的配置文件,第二個(gè)才是Telnet Server的執(zhí)行程序。在介紹這兩個(gè)文件的作用之前,我需要先解釋一下Linux系統(tǒng)啟動(dòng)服務(wù)程序的兩種方式。
我們?cè)诮佑|類(lèi)UNIX系統(tǒng)的時(shí)候,通常會(huì)遇到daemon這個(gè)東西,直譯是精靈,守護(hù)神的意思,其實(shí)它就是操作系統(tǒng)中的守護(hù)程序,也就是我要介紹的系統(tǒng)服務(wù)。Linux系統(tǒng)下的daemon的運(yùn)行有兩種機(jī)制,stand alone和 super daemon。
A:Stand alone:是一種使服務(wù)程序獨(dú)立運(yùn)行的方式,當(dāng)系統(tǒng)運(yùn)行到某一runlevel級(jí)別的時(shí)候,發(fā)現(xiàn)有這樣的服務(wù)注冊(cè),就會(huì)自動(dòng)運(yùn)行該服務(wù)。類(lèi)似的服務(wù)有samba檔案共享服務(wù),xfs X字體服務(wù),http Apache Web服務(wù)等等。
B:Super daemon:是藉由某一個(gè) Super daemon 統(tǒng)一調(diào)度其它子服務(wù)程序的方式。早期版本的Linux使用的是inet作為super daemon,而現(xiàn)今的Linux版本已經(jīng)選用xinet來(lái)作為super daemon。而xinet本身是一個(gè)stand alone方式的daemon服務(wù)。使用這種方式運(yùn)作的服務(wù)有telnet,ftp,cup打印服務(wù)等。
Telnet服務(wù)是使用Super daemon方式運(yùn)行的?;竟ぷ鬟^(guò)程是這樣的,xinetd服務(wù)幫助偵聽(tīng)telnet設(shè)定的端口,Client端訪(fǎng)問(wèn)該端口的時(shí)候,xinetd服務(wù)去呼叫telnet服務(wù)程序,就是上面我們看到的in.telnetd這個(gè)程序,然后xinetd會(huì)將Client端的所有訪(fǎng)問(wèn)信息通過(guò)標(biāo)準(zhǔn)輸出通道告訴in.telnetd程序,同樣in.telnetd程序的信息也會(huì)通過(guò)標(biāo)準(zhǔn)輸入通道告訴xinetd,從而告訴Client端。
了解telnet服務(wù)的工作原理,對(duì)我們的設(shè)置telnet這樣的服務(wù)有指導(dǎo)性的作用?,F(xiàn)在,我們應(yīng)該知道了,要使telnet服務(wù)正常運(yùn)行,首先要保證xinetd服務(wù)的正常運(yùn)行,其次要告訴xinet關(guān)于telnet服務(wù)的相關(guān)設(shè)置以及telnet服務(wù)程序的安裝位置。在上面我說(shuō)到了telnet server的安裝包會(huì)安裝兩個(gè)重要文件,telnet和in.telnetd。in.telnetd的作用已經(jīng)說(shuō)過(guò)了,下面來(lái)講講telnet這個(gè)配置文件。該文件需要被安裝到xinet知道的一個(gè)目錄中(Redhat發(fā)行的Linux通常是:/etc/xinetd.d),這樣xinet就可以從中讀取關(guān)于telnet服務(wù)的相關(guān)信息。下面就是這個(gè)配置文件中的選項(xiàng)(如圖 4)。
圖4 Telnet服務(wù)配置文件格式
從上面我們可以看到Telnet服務(wù)的配文件格式,xinet子服務(wù)的配置文件基本都是采用這種格式。
選項(xiàng)還有很多,這里就不多介紹了。了解了這些設(shè)置,對(duì)telnet服務(wù)的設(shè)置我們可以說(shuō)是了如指掌了。最后要記得設(shè)置完這些選項(xiàng),我們還要使它生效。理解了這種服務(wù)操作原理的朋友應(yīng)該知道了,我們只要重新啟動(dòng)xinetd這個(gè)super daemon就可以了。
Telnet是以明文傳輸信息的,包括用于登陸的用戶(hù)信息。而互聯(lián)網(wǎng)中,像sniffer網(wǎng)絡(luò)嗅探器這種工具不計(jì)其數(shù),而且很容易得到。我們?cè)谶@種環(huán)境下使用Telnet,就像是在一個(gè)槍支泛濫治安很差的地區(qū),提著百萬(wàn)現(xiàn)金當(dāng)街而過(guò),不被搶劫才奇怪了。隨便看看網(wǎng)絡(luò)上入侵遠(yuǎn)程計(jì)算器的文章,大都會(huì)介紹先探測(cè)目標(biāo)機(jī)器是否開(kāi)放telnet端口。即使通過(guò)其它方式進(jìn)入遠(yuǎn)程主機(jī),也會(huì)想方設(shè)法打開(kāi)Telnet的服務(wù)端,只要讓別人通過(guò)telnet成功登陸到你的主機(jī),你的計(jì)算器對(duì)別人來(lái)說(shuō)就無(wú)秘密可言了。所以不論是Windows系統(tǒng)還是linux系統(tǒng)對(duì)于telnet服務(wù)端的安裝都是很慎重的。
Linux的Telnet服務(wù)安全設(shè)置主要是依靠對(duì)客戶(hù)端主機(jī)地址的限制以及對(duì)root用戶(hù)登陸的限制。當(dāng)然這其實(shí)并不能像NTLM機(jī)制一樣程度地保證安全。不過(guò)Linux世界出現(xiàn)了SSH之后可以說(shuō)Telnet有了一個(gè)安全的替代品。
總的來(lái)說(shuō),Telnet在廣域網(wǎng)中使用的越來(lái)越少了,但是在局域網(wǎng)中還在被廣泛地應(yīng)用著。所以使用Telnet是否安全,主要是看使用者的使用方法以及用途和目的。
[1]王 達(dá).計(jì)算機(jī)網(wǎng)絡(luò)遠(yuǎn)程控制[M].北京:清華大學(xué)出版社,2003.8-96.
[2]張 英王景新.網(wǎng)絡(luò)安全基礎(chǔ)[M].北京:中國(guó)電力出版社,2004.45-126.
[3]何牧泓.遠(yuǎn)程控制[M].重慶:重慶出版社,2002,77-123.
[4]張 雁.網(wǎng)絡(luò)遠(yuǎn)程控制大師[M].重慶:重慶出版社,2002,15-160.
[5]崔彥鋒,許小榮.VB網(wǎng)絡(luò)與遠(yuǎn)程控制編程實(shí)例教程[J].重慶:北京希望電子出版社2003,24-156.