因此,几乎所有安装都会运行一个“超级服务器”,它为多个服务创建套接字,并使用 select(2) 系统调用同时监听所有这些套接字。当远程主机请求其中一项服务时,超级服务器会注意到这一点,并派生为该端口指定的服务器。
常用的超级服务器是 inetd,即 Internet 守护进程。它在系统启动时启动,并从名为 /etc/inetd.conf 的启动文件中获取它要管理的服务列表。除了那些被调用的服务器之外,还有许多由 inetd 本身执行的简单服务,称为内部服务。它们包括 chargen,它只是生成一个字符字符串,以及 daytime,它返回系统对当天时间的理解。
此文件中的一个条目由单行组成,该行由以下字段构成
service type protocol wait user server cmdline每个字段的含义如下
# # inetd services ftp stream tcp nowait root /usr/sbin/ftpd in.ftpd -l telnet stream tcp nowait root /usr/sbin/telnetd in.telnetd -b/etc/issue #finger stream tcp nowait bin /usr/sbin/fingerd in.fingerd #tftp dgram udp wait nobody /usr/sbin/tftpd in.tftpd #tftp dgram udp wait nobody /usr/sbin/tftpd in.tftpd /boot/diskless login stream tcp nowait root /usr/sbin/rlogind in.rlogind shell stream tcp nowait root /usr/sbin/rshd in.rshd exec stream tcp nowait root /usr/sbin/rexecd in.rexecd # # inetd internal services # daytime stream tcp nowait root internal daytime dgram udp nowait root internal time stream tcp nowait root internal time dgram udp nowait root internal echo stream tcp nowait root internal echo dgram udp nowait root internal discard stream tcp nowait root internal discard dgram udp nowait root internal chargen stream tcp nowait root internal chargen dgram udp nowait root internalfinger 服务被注释掉了,因此它不可用。这通常是出于安全原因而做的,因为它可能被攻击者用来获取您系统上用户的姓名。
tftp 也被注释掉了。tftp 实现了简单文件传输协议,该协议允许从您的系统传输任何全局可读的文件,而无需密码检查等。这对于 /etc/passwd 文件尤其有害,如果您不使用影子密码,则更是如此。
TFTP 通常被无盘客户端和 X 终端用于从引导服务器下载代码。如果出于此原因需要运行 tftpd,请确保将其范围限制为客户端将从中检索文件的那些目录,方法是将这些目录名称添加到 tftpd 的命令行中。这在示例中的第二行 tftp 行中显示。