一、Telnet安裝與啟動
telnet由於是不安全的明文傳輸所以基本被ssh取代了,尤其是在Linux上;不過還是可能會用到,且啟停方式還有些不同所以還是有必要說明一下。
rpm -qa | grep telnet #查看是否安裝 yum install -y telnet #裝客戶端,可選 yum install -y telnet-server #安裝服務端 yum install -y xinetd #超級守護進程,一般已安裝 service telnetd start #想像中的但實際不可行的停止方式 service telnetd stop #想像中的但實際不可行的停止方式
正確啟動操作如下:
第一步,打開/etc/xinetd.d/telnet,將其中的disable值由yes改為no。
第二步,重啟xinetd。
service xinetd restart
正確關閉操作如下:
將disable值由no改為yes,再重啟xinetd即可。
其實此時telnet服務並未馬上關閉,之前telnet的會話還是可以使用,只是由於無人通知連接到來所以不能新連入而已;會話全部退出后進程也確實關閉。
二、關於為什么需要xinetd的討論
對於ssh等諸多服務我們都習慣用service來直接啟停,從使角度這也是很方便的;但對於telnet與眾不同的啟動方式讓人迷惑:我們要啟動telnet為什么要通過啟動另一個程序來啟動呢?
還是telnet的服務名(實際是腳本名)叫xinetd?telnet就是telnet另起一個風馬牛不相及的名字,程序員有病吧?
事情得從Linux的程序運行說起,我們會注意到經常我們在一個終端執行命令,如果終端被關閉無論命令是否已完成都會被中止,也就是說Linux中普通命令要依賴於終端而生存的。
對於一向服務比如http,如果終端退出就中止這個不可接受的;而要一個終端一直在那登錄着也是不現實的。
解決這個問題就要使服務的進程變為與終端無關的守護進程(也因此常常把守護進程用作服務的意思)
守護進程的實現又有兩種方式:一是自身變為守護進程,一是拖管於xinetd超級守護進程。
自身變為守護程,即進程一直駐在內存等待客戶端請求;httpd等正是這種方式(d正是daemon,守護進程模式的意思)。
拖管於xinetd超級守護進程,即一般是休眠狀態xinetd檢測到其監聽的端口有客戶端請求到來之后再去通知喚醒他;telnet正是這種方式。
所有的服務都可以拖管於xinetd方式;但使用這種方式的服務正越來越少,以致我們都不了解這是什么東西。
這有兩個原因,一是對於httpd這種頻繁請求的服務,頻繁喚醒並不見得比自身為守護進程節省資源。
二是現在的資源並不像以前那樣緊缺,使用方便易懂(在這是啟停)的優先級已然要高於節省資源的優先級。