xinetd和inetd守护进程
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使用wait或nowait字段来定义它应如何处理传入的连接。数据报套接字(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_type | stream 基于流的服务 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
}

