9.6. The inetd 超级服务器
Inetd(常被称为“网络超级服务”)是一个服务器服务。它按需求运行一些不常用的服务,而且不需要连续运行。
/etc/inetd.conf
文件列出服务器及其通用的端口号。inetd
命令侦测它们;若发现任何端口号已被链接,则运行对应的程序。
DEBIAN 政策 在inetd.conf
中注册服务
软件包经常需要在 /etc/inetd.conf
文件登录新的服务器,但 Debian 政策禁止任何软件包不属于自身的配置档。所以有 update-inetd
脚本 (在同名软件包内):管理配置文件以及其他软件包,使其在超级服务器的配置中登录新的服务器。
/etc/inetd.conf
文件中的每列条目以 7 个字段 (以空格区分) 描述服务器:
TCP 或者UDP 端口号,或者服务名称(用
/etc/services
文件中包含的信息映射到标准端口号)。套接字类型:
stream
用于TCP 连接,dgram
用于UDP 数据包。协议:
tcp
或udp
。选项:两个可能值:
wait
或nowait
,告诉inetd
在接受另个链接时,是否该等待或终止已启用的进程。对 TCP 链接而言,可使用nowait
,进入多任务。对回应 UDP 的程序而言,只在服务器可平行管理多个链接时,才使用nowait
。可在这个字段前加上圆点,以及每分钟可以开启的最大链接量 (缺省为 256)。用户名,服务将以哪个用户的身份运行。
要执行程序的完整路径。
参数:此处是程序的完整参数列表,包括程序名(C中的
argv[0]
)。
下面的例子阐释最常见的情况:
例 9.1. 摘自 /etc/inetd.conf
- talk dgram udp wait nobody.tty /usr/sbin/in.talkd in.talkd
- finger stream tcp nowait nobody /usr/sbin/tcpd in.fingerd
- ident stream tcp nowait nobody /usr/sbin/identd identd -i
tcpd
程序常用于 /etc/inetd.conf
文件中。以近用控制规则的方式限制送来的链接数,相关文档在 hosts_access(5) 手册页面,并在 /etc/hosts.allow
与 /etc/hosts.deny
文件中配置。授权链接后,tcpd
运行真实的服务器 (在此例中是 in.fingerd
)。值得注意的是 tcpd
依靠启用的名称 (即第一个参数,argv[0]
) 辨识真实运行的程序。所以不该启用 tcpd
内的参数清单,应先与程序包装在一起。
社区 Wietse Venema
Wietse Venema由于在安全方面的专业使他成了一位很有名望的程序员,他是 tcpd
程序的作者。他也是Postfix,模块电子邮件服务器(SMTP)的主要创建者,该服务要设计的比 sendmail
更安全和可靠。
另外的选择 其他 inetd
命令
当 Debian 缺省安装 openbsd-inetd 后,就有很多选项:可用 inetutils-inetd、micro-inetd、rlinetd 和 xinetd。
最后的这个超级服务载体提供了很有趣的特性。最引人注目的是,它的配置文件可以分割成几个不同文件(存储在 /etc/xinetd.d/
目录),让管理员更容易管理。
最后但不是最不重要,甚至可以仿真 inetd
的行为,以 systemd
的插座启用模式运作 (见 第 9.1.1 节 “Systemd 启动系统”)。