守护进程不单是我一贯理解的运行在后台的程序,它还管理着一些服务,让系统能接受来自用户或者网络客户(client)的请求。
根据守护进程的启动与管理方式,可以将守护程序分为可独立启动的独立启动守护程序以及通过统一安全机制管理的超级守护程序两大类。
1) 独立启动(stand_alone):独立启动的进程一旦启动后,就直接常驻内存。它占有系统资源,一旦有要求却能快速响应。
独立启动的程序都放在/etc/init.d中。
2) 超级守护程序(super daemon):通过统一的守护程序负责唤起服务。统一负责的守护程序就是inet,或者后来常被使用的xinet服务。当有网络服务要求时,该要求会先送给xinetd服务,然后xinet根据该网络要求送来的数据包的内容(该内容会记录IP地址和端口号),将数据包送给实际运行的服务,而该服务此时才会启动。典型的应用时telnet和ftp。
在我的博文中提到如何安装telnet服务时,先安装的却是xinet,因为telnet服务要靠它来“唤醒”。安装了xinet服务后,可以发现它一直运行,并监听着来自网络的请求。
# netstat -ltunp | grep xinetd
tcp 0 0 0.0.0.0:23 0.0.0.0:* LISTEN 3893/xinetd
telnet服务没有运行,它需要在有对应的网络请求数据包接收到后,由xinet服务来激活。
详述超级守护进程和它的配置文件
利用超级守护进程来管理(网络)服务的最大好处是“安全性较高”。因为超级守护进程可以通过额外的数据分析,来管理谁可以,谁不可以使用某项服务。类似于多了一层防火墙的机制,确保了安全性。
挂在xinetd例的服务设置项目写在/etc/xinetd.conf与/etc/xinetd.d/*目录的任何文件中。
1)/etc/xinetd.conf:设置xinetd服务的默认参数文件
# ......
defaults
{
# Please note that you need a log_type line to be able to use log_on_success
# and log_on_failure. The default is the following :
# log_type = SYSLOG daemon info
instances = 60 # 同一服务的同时联机最多60台
log_type = SYSLOG authpriv # 登录后会记录到文件中的信息
log_on_success = HOST PID # 成功登录时,会记录的信息有哪些
log_on_failure = HOST # 若登录失败,记录的信息是什么
cps = 25 30 # 同一秒内最大联机数量为25台,若超过25台,则该服务会暂停30秒
}
includedir /etc/xinetd.d # 在此目录中,挂靠的服务可以有自己的参数,如果没有定义,则遵守上面的配置
2)/etc/xinetd.d/*:这个目录里面的文件都是挂上xinetd的所有服务,如telnet、pop3等。
以telnet服务为例,它的配置文件如下。
# default: on
# description: The telnet server serves telnet sessions; it uses /
# unencrypted username/password pairs for authentication.
service telnet
{
disable = no # 开关,该服务可以进行开启
only_from = 192.168.1.0/24 # 仅允许来自网段192.168.1.0/24的连接
no_access = 192.168.1.3
flags = REUSE # 额外的参数使用REUSE
socket_type = stream # 联机使用的数据包是TCP,如果为dgram,则使用UDP
wait = no # 多线程方式,多个请求同时启动
user = flagonxia # 启动者默认为flagonxia
server = /usr/sbin/in.telnetd # 服务的启动程序文件的完整路径名
log_on_failure += USERID # 失败后,syslog记录的项目
}