xinetd和inetd守护进程

时间:2019-04-29 03:17:34  来源:igfitidea点击:

inetd是在许多Linux系统上运行的守护程序。inetd守护程序的目的是侦听特定端口上的连接。创建inetd来处理多个服务,这种方法消除了对多个守护程序的需要。inetd将确定需要哪个服务,然后确定需要调用哪个程序来满足请求。

inetd的主要配置文件位于/etc/inetd.conf中。

/etc/inetd.conf部分内容:

service name  socket type  protocol  wait/nowait  user  server program  arguments

## service  socket  protocol  wait/  user    server    server program
##  name     type             nowait         program     arguments

ftp     stream  tcp6    nowait  root    /usr/sbin/ftpd         ftpd
telnet  stream  tcp6    nowait  root    /usr/sbin/telnetd      telnetd -a
shell   stream  tcp6    nowait  root    /usr/sbin/rshd         rshd

Service Name

服务名称 Service Name标识inetd应该侦听哪个端口。它可以是数字,也可以是/ etc / services文件中列出的服务的名称。

Socket Type

通信套接字类型是用于TCP的流,用于UDP的dgram和用于原始套接字的raw。

Protocol

可以使用以下协议:
tcp和tcp4 = TCP(IPV4)
udp和udp4 = UDP(IPV4)
tcp6 = TCP(IPV6)
udp6 = UDP(IPV6)

wait/nowait

连接选项。 inetd使用waitnowait字段来定义它应如何处理传入的连接。数据报套接字(UDP)使用wait。如果指定了wait,则inetd将在任何时候仅对指定的端口执行一台服务器。
nowait选项用于指定该inetd应该为每个传入连接启动一个新的服务器进程。stream套接字应始终使用nowait选项。

User

指定用于启动服务的用户名。

Server Program

这是inetd应该启动的服务的路径。内部服务标记为internal.

Server Program Arguments

服务器程序参数。此字段用于传递给服务器的参数。对于内部服务,此字段为空。

xinetd

现在,大多数现代Linux系统将使用新版本的扩展Internet守护进程xinetd。

xinetd实现了inetd过去使用的功能,但是,它提供了日志记录和增强的资源管理。

xinetd配置文件可以在位置/etc/xinetd.conf中找到。
但是,大多数服务被配置在/etc/xinetd.d目录下的单个文件中。

可以使用itox将旧的inetd.conf文件转换为xinetd.conf文件。

下面是一个/etc/xinetd.conf文件的例子:

#
# xinetd.conf
#
# Copyright (c) 1998-2001 SuSE GmbH Nuernberg, Germany.
# Copyright (c) 2002 SuSE Linux AG, Nuernberg, Germany.
#

defaults
{
        log_type        = FILE /var/log/xinetd.log
        log_on_success  = HOST EXIT DURATION
        log_on_failure  = HOST ATTEMPT
#        only_from       = localhost
        instances       = 30
        cps             = 50 10

#
# The specification of an interface is interesting, if we are on a firewall.
# For example, if you only want to provide services from an internal
# network interface, you may specify your internal interfaces IP-Address.
#
#       interface       = 127.0.0.1

}

includedir /etc/xinetd.d

xinetd.d服务文件中的字段说明

字段说明
id服务名称
flags可使用下列标志的任何组合:
INTERCEPT 拦截数据包或者已接受的连接,以验证它们来自可接受的位置。
NORETRY 避免在服务失败时重试。
IDONLY 仅当远程端标识远程用户时才接受连接。
NODELAY 如果服务是tcp服务,并且设置了NODELAY标志,那么将在套接字上设置TCP_NODELAY标志。如果服务不是tcp服务,则此选项无效。
KEEPALIVE 设置TCP套接字上的keepalive标志。
SENSOR这将使用检测到指定端口的访问的传感器替换服务。传感器没有检测到隐形扫描。仅当您不需要服务时使用此选项。任何访问尝试都会被记录下来。
IPV4 只使用IPV4。
IPV6 使用IPV6。
disable这将导致服务被禁用而无法启动。
socket_typestream 基于流的服务
dgram 基于数据服务
raw 需要直接访问IP的服务
seqpacket 需要可靠的顺序数据报传输的服务
wait此属性确定服务是单线程还是多线程,以及xinetd是否接受连接或服务器程序是否接受连接。如果它的值是yes,那么服务是单线程的。这意味着xinetd将启动服务器,然后停止处理服务请求,直到服务器死亡,服务器软件将接受连接。如果属性值为no,则该服务是多线程的,xinetd将继续处理新的服务请求,而xinetd将接受该连接。
user确定进程的uid。
group确定服务作为哪个组运行。
instances确定可以运行的实例数量。默认值没有限制。
nice服务器优先级值(nice值)。
server要执行的服务的完整路径。
server_args传递给服务器的参数。
only_from用于限制可以访问的IP地址、网络或主机名。
no_access通过IP地址、网络或主机名阻止访问。
access_times确定服务何时可用。在HH:MM格式中指定
log_type日志类型,SYSLOG或FILE。
log_on_success确定记录哪些变量,这些变量可以是PID, HOST, USERID, EXIT, DURATION 或者 TRAFFIC。
log_on_failure确定记录哪些变量,这些变量可以是 HOST, USERID 或者 ATTEMPT。
port确定服务端口。如果这是为/etc/services文件中列出的服务指定的,那么它必须与该文件中列出的端口号相同。
bind允许将服务绑定到机器上的特定接口。
per_source它指定每个源IP地址的最大服务实例。
cps限制连接的数量(每秒连接数)。
max_load在一分钟平均负载。达到此阈值后停止接受连接。
includedir采用includedir /etc/xinetd.d形式包含其他配置文件。

/etc/services

文件/etc/services用于将端口号和协议与服务名称关联起来。

例如,如果TCP请求进入端口901,文件/etc/services显示Samba Web管理工具的一个条目:

swat               901/tcp

对应的条目可以在/etc/xinetd.d目录下找到:

sles01:/etc/xinetd.d # ls -l swat*
-rw-r--r-- 1 root root 277 Feb  4  2012 swat

sles01:/etc/xinetd.d # cat swat
# SWAT is the Samba Web Administration Tool.
service swat
{
        socket_type     =  stream
        protocol        =  tcp
        wait            =  no
        user            =  root
        server          =  /usr/sbin/swat
        only_from       =  127.0.0.1
        log_on_failure  += USERID
        disable         =  no
}