网络管理员指南 -9.各种网络应用程序-1>Inetd超级服务器

/ns/wz/net/data/20020808033315.htm

网络管理员指南 -9.各种网络应用程序-1>Inetd超级服务器


本文出自:http://www.linpus.com.tw 作者: Andrew Anderson


各种网络应用程序

在成功的设置了IP和它的解决器之后,你需要返回到你想要通过网络提供的服务。本章涵盖一些简单的
网络应用设备的配置问题,包括inetd服务器以及来自rlogin家族的程序。远程呼叫作为
Network File System (NFS) 和 the Network Information System (NIS)服务器的界面的基础也将会迅
速的处理。然而,NFS 和NIS的配置,它们需要花费更多的笔墨,将会在一个单独的章节进行描述。这也
适用于电子邮件和网上新闻。

当然,我们无法在这本书中涵盖所有的网络应用程序的内容。如果你想要安装一个这里没有提到的东西,
象谈话、gopher或者是Xmosaic请从它的手册页中查找详细的信息。


--------------------------------------------------------------------------------

Inetd超级服务器

Inetd超级服务器经常的,服务器执行的是daemons。daemons.是一个打开一个特定的端口并等待进入连接
的程序。如果一个连接发生了,它就会建立一个子程序来接受连接,而原程序继续接听进一步的要求。这
个概念有它的缺陷,因为对于所提供的每一个服务,一个daemon需要在一个连接发生的端口运行,这意味
着袭用资源的浪费,如交换空间。

因此,几乎所有的安装都运行一个“超级服务器”来为许多的服务器创建插座,并且使用选择系统呼叫来
同时接听它们。当一个远程主机要求其中一个服务器的时候,超级服务器就会发现它并且为这个端口指定
服务器。

超级服务器通常使用的是inetd,也就是Internet Daemon.它在系统引导的时候启动,并且从它所管理的一个
名为/etc/inetd.conf的文件中得到服务器的列表。另外,这些服务器还涉及一些由inetd自身执行的称为
internal services(国际服务)琐碎的服务。它们包括chargen,它简单的产生一串字符和反映系统一天时
间概念的白天时间。

在这个文件中的一个路径一个单一的行组成了下面的区域:

service type protocol wait user server cmdline
每个区域的意思如下:

服务:

给出服务器名字。服务器的名字需要通过在/etc/services文件中的查找来转换成为一个端口数字。这个文件
将会在下面的部分10.3进行介绍。

类型:

指定一个插槽类型,stream(对于连接向导协议)或者是dgram(对于datagram协议)。因此TCP为基础的服务
总是需要使用stream,而UDP为基础的服务总是需要使用dgram。

协议:

命名由服务器使用的传送协议。这必须是一个建立在协议文件中的有效的协议名,同样也会在下面介绍。

等待:

这个选择只适用于dgram插槽。它可能是等待或者是不等待。如果等待是特定的,inetd只会在任何时间为指定
的端口执行一个服务器。否则,它将会在执行服务之后立即继续在端口接听。这对于“单线”的服务器是有用
的,这种服务器阅读所有进入的datagrams直到收不到更多的内容,就会退出。大多数的 RPC服务器是这种类型,
因此需要指定等待。相反的类型,“多线”服务器,允许同时运行限定数量的要求,这很少被使用。这些服务
器需要被指定为无等待。Stream插槽总是需要使用无等待。

用户:

这是程序执行下面用户的注册id。通常这会是根用户,但是一些服务器可能使用不同的帐户。在这里应用最少
特权原则是一个好主意,它表明如果程序不要求为了正确的功能而要求你在一个特权帐户上运行一个命令。例
如,NNTP新闻服务器将会作为新闻运行,而那些有关安全风险的服务(例如tftp 或者是 finger)就经常作为
nobody运行。

服务器:

给出服务器执行的完整路径。内部服务由内部关键词标注。

Cmdline:

这是需要被传递到服务器的命令行。这包括argument 0,它是命令名称。通常,这会是服务器的程序名,除非
程序在由一个不同的名字引导的时候有不同的表现。对于内部服务这个区域为空。

表格:

一个/etc/inetd.conf样本文件

#
# 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 internal
finger服务不在其中,因此它是无法得到的。它只是为了安全的原因才会被使用,因为在你的系统中获得用
户名的时候可能会被攻击。

Tftp也显示的不在命令之列。Tftp执行的是Primitive File Transfer Protocol,它允许从你的系统中传输
任何的world-readable文件而不需要密码检查等内容。这对于/etc/passwd文件尤其有害,当你使用影子密码
的时候害处更大。

TFTP通常被没有磁盘的客户和从一个启动服务器上下载它们的代码的X终端使用。如果你为了这个原因需要运
行tftpd,确定限制它的范围在那些路径客户上将重新得到从添加那些路径名称到tftpd命令行的所有文件。这
显示在例子的第二个tftp行。