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 数据包。

  • 协议: tcpudp

  • 选项:两个可能值:waitnowait,告诉 inetd 在接受另个链接时,是否该等待或终止已启用的进程。对 TCP 链接而言,可使用 nowait,进入多任务。对回应 UDP 的程序而言,只在服务器可平行管理多个链接时,才使用 nowait。可在这个字段前加上圆点,以及每分钟可以开启的最大链接量 (缺省为 256)。

  • 用户名,服务将以哪个用户的身份运行。

  • 要执行程序的完整路径。

  • 参数:此处是程序的完整参数列表,包括程序名(C中的argv[0] )。

下面的例子阐释最常见的情况:

例 9.1. 摘自 /etc/inetd.conf

  1. talk dgram udp wait nobody.tty /usr/sbin/in.talkd in.talkd
  2. finger stream tcp nowait nobody /usr/sbin/tcpd in.fingerd
  3. 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/ 目录),让管理员更容易管理。

Last but not least, it is even possible to emulate inetd‘s behavior with systemd‘s socket-activation mechanism (see 第 9.1.1 节 “Systemd 启动系统”).