telnet的安装配置及xinetd的讨论
一、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这种频繁请求的服务,频繁唤醒并不见得比自身为守护进程节省资源。
二是现在的资源并不像以前那样紧缺,使用方便易懂(在这是启停)的优先级已然要高于节省资源的优先级。