xinetd-相关说明

参考
在 Linux 中一些不长期使用的服务, 没有被作为单独的守护进程在开机时启用, Linux 把这些服务监听端口全部由一个独立的进程 xinetd 集中监听, 当收到相应的客户端请求之后, xinetd 进程就临时启动相应服务并把相应端口移交给相应服务, 客户端断开之后, 相应的服务进程结束, xinetd 继续监听.

也就是说用来管理一些服务, 将一个请求传给其他服务.

守护进程分为两种处理模式

  • stand alone, 该程序始终监听, 一直处于运行状态
  • super daemon, 始终处于 sleep 状态, 知道有人唤醒.

什么是 xinetd

全称为 extended interet daemon.

是网络守护进程服务程序, 常用来管理多种轻量级 Internet 服务.

使用

原则上任何系统服务都可以使用 xinetd, 最适合的是 Internet 服务.j

具体服务可以使用 xinetd 服务在 /etc/services 文件中指出. 文件中记录的内容为:

  • 网络服务名
  • 使用的端口号和协议

/etc/xinetd.conf/etc/xinetd.d/*

xinetd 的配置文件是 /etc/xinetd.conf , 但它只包括几个默认值及 /etc/xinetd.d 目录中的配置文件.

配置 xinetd

格式

1
2
3
4
service <service-name>
{
...
}

service 是关键字.

操作符可以是 =, +=, -=.

配置文件

除了/etc/xinetd.conf/etc/xinetd.d/* 外还有 /etc/hosts.allow/etc/hosts.deny

禁用和启用

disabled 列表和 enabled 列表.

参考 B站

在我的 /etc/xinetd.conf 文件里, 内容为:

1
2
3
4
5
6
7
8
9
10
11
12
13
# /etc/xinetd.conf
#

defaults
{
instances = 60
log_type = SYSLOG authpriv
log_on_success = HOST PID
log_on_failure = HOST
cps = 25 30
}

includedir /etc/xinetd.d

最后一行的这个 includedir 表示 xinetd 管理的, 服务的 xinetd 配置所在的目录.

查看这个目录:

1
2
3
4
5
6
7
8
9
10
11
12
13
$ ls /etc/xinetd.d/
chargen
chargen-udp
daytime
daytime-udp
discard
discard-udp
echo
echo-udp
servers
services
time
time-udp

比如, 如果要让 xinetd 管理 telnet 服务, 在 /etc/xinetd.d/ 目录下添加一个文件, 叫 telnet, 然好添加内容 (这里 # 在实际中可能并不是注释符):

1
2
3
4
5
6
7
8
9
10
service telnet
{
flags = REUSE # 表示反对, 作用不知
socket_type = stream # 使用的 TCP/IP socket 类型, 值可能为 stream(TCP), dgram(UDP), raw, seqpacket
wait = no # no 即并行连接, yes 为串行连接
user = root # 设置服务进程的 UID
server =/usr/bin/in.telnetd # 服务的命令所在位置
log_on_failure += USERID # 指定失败时登记的信息
disable = no # 表示服务是否开启 yes/no
}

所有信息可以在 man xinetd.conf 中查看.

还有几个比较常用:

  • server_args, 传给 server 的参数
  • port, 如果 /etc/services 里面列出了服务的 port, 必须和其一样

举 port 的例子, 如果 service 是这样写的:

1
2
3
4
5
6
7
8
9
10
11
12
service netcat
{
port = 50000
flags = REUSE
socket_type = stream
wait = no
user = root
server =/usr/bin/netcat
server_args = -lp 50001 -e shell
log_on_failure += USERID
disable = no
}

你在另一个终端向 50000 端口发起连接:

1
2
$ nc localhost 50000
$ ls

你发现 ls 没有出现结果, 因为连接 50000 端口只是激活 netcat 这个服务, 然后再用:

1
2
$ nc localhost 50001 
$ ls

发现成功连接到 shell.

可以设置, 允许谁访问, 谁不能访问, 最大连接数, 每个 IP 能有几个连接, 什么时间连接, 服务端口等.

启动 xinetd 服务

1
$ systemctl start xinetd

查看当前哪些端口是打开的:

1
$ netstat -ntpl

-n--numeric, 显示数字地址而不是 symbolic.

-p--program, 显示 socket 所属的 PID.

-l--listening, 只显示监听 socket. 具体看 man netstat.


xinetd-相关说明
http://example.com/2022/09/25/xinetd-相关说明/
作者
Jie
发布于
2022年9月25日
许可协议