telnet的装配及xinetd的讨论

时间:2024-10-15 08:05:49

一、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。

telnet的装配及xinetd的讨论

第二步,重启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这种频繁请求的服务,频繁唤醒并不见得比自身为守护进程节省资源。

二是现在的资源并不像以前那样紧缺,使用方便易懂(在这是启停)的优先级已然要高于节省资源的优先级。