2008年12月23日星期二

UNIX系统中TCP/IP协议的配置

一、系统的初始化问题
任何一个主流UNIX都有一个"祖父"进程,称为"init"。在UNIX系统中,init进程创建其他所有进程,其中包括用户shell及网络进程。

1、init进程及/etc/inittab文件
Unix系统由两部分组成:文件及进程。

在Unix系统中,所有其他进程都由init进程并发创建。最终,所有的进程都可以通过它们的父进程追溯到init进程。


上图说明了init进程与其他进程的链接关系。

因为初始化进程是系统启动过程的最后一步,所以在此之前所有的文件系统都已经经过了检测,并且磁盘都已被加载,init进程决定进入哪一种用户模式(单用户或多用户)。某些Unix系统使用/etc/inittab文件作为init进程的配置脚本。
注:对于大多数主流UNIX,第三运行级启动的网络进程包括internet守护进程(inted)、NFS、DNS及Sendmail。可以通过查看inittab文件来确认。
二、rc系列脚本
为了创建并运行子进程, init进程将运行一系列启动脚本,我们称之为rc系列脚本。这些脚本启动所需要的网络进程,从而Unix系统不再是一个"孤立的系统"。
eg: /etc/rc.d/rc3 可以通过查看对应的文件来查看每个运行级所启动的服务。rc3文件中列出了在第三运行级时所启动的服务。我们可以通过S##或K##来判断那些守护进程被该文件启动(K表示杀死,S表示启动)。其后的序列号表示某个特定的启动或停止顺序。同时,这些脚本还标明了当守护进程初启时,采用那些属性。
需要注意的是:启动脚本和停止脚本并不是总成对出现的。
注:并不是所有Unix系统的启动脚本都存放在相同的目录下,某些系统可能将它们放在/etc、/etc/rc或其他系统指定的位置。

三、配置文件
为了使网络正常工作,用户必须注意配置文件。在Unix系统中,有一些非常重要的配置文件需要特别注意:
/etc/inetd.conf
/etc/services
/etc/protocols
/etc/hosts.equiv
/etc/resolv.conf
/etc/exports
其他Unix系统可能会包含别的配置文件,这因操作系统的不同而不同。
1、在/etc/protocols文件中定义网络协议
为了定义运行在Unix系统上的网络协议,用户必须在/etc/protocols文件中给出说明。大部分的协议都可以很好地工作在Unix系统中,并且用户不需要手工添加所有的协议,系统将在启动时为用户完成上述工作。
2、在/etc/hosts文件中标识主机
对于一些本地系统,用户可能需要定义一些主机,以便用户在不需要域名服务器(DNS)提供服务的情况下,而仅靠主机名就可以找到主机,为了做到这一点,需要定义一个/etc/hosts文件。
最基本的/etc/hosts文件如下:
127.0.0.1 localhost loopback
以上定义了localhost或loopback,它们是用户当前使用的主机的缺省主机名。127.0.0.1为localhost的缺省IP地址。
增加其他主机的语法格式如下:
IP地址 主机名 别名
在增加其他主机时,需要列出主机的IP地址,对应于IP地址的主机名及任意用户需要的别名。下面是一个/etc/hosts的示例:
# a sample /etc/hosts file
127.0.0.1 localhost loopback
1.2.3.4 wednesday.addams.com mymachine
1.2.3.4 pugsley.addams.com yourmachine
在上例中,如果某个用户远程登陆到本地主机,它将登录到pugsley.addams.com。通过使用别名,用户不需要敲入完整的域名就可以访问目的主机。(类似DNS,用于本机的域名解析。)
注意:在/etc/hosts文件中,如果主机也在本地网中,填写主机名时,不需要写完整的域名,仅填写机器名即可。
3、/etc/services文件
为了确定用户的UNIX系统提供那种类型的TCP/IP服务,必须在系统中设置适当的服务。完成上述工作有两种方法:修改/etc/services文件或修改inetd配置文件。
/etc/services文件为网络服务如FTP、Telnet、时间服务器、名字服务器、SecureShell(安全Shell)及finger等指定特定的端口。
大部分服务所对应的端口都是众所周知的特定端口,如FTP服务器端口为23,Telnet服务的端口为21等。这些服务所对应的端口号均小于1024。
/etc/services文件中也包含一些不太通用的网络服务。/etc/services文件的语法格式如下:
网络服务 端口号/tcp或udp
eg: telnet 23/tcp
首先用户必须定义网络服务类型(如Telnet、echo、SMTP),然后指定端口号,最后指明该服务使用TCP还是UDP。
4、/etc/inetd.conf文件
在UNIX系统中,许多网络服务由Internet超级守护进程inetd启动。为了使inetd守护进程知道该启动那些服务,它需要读取配置文件inetd.conf,该文件通常放在/etc目录下。
注意:因为inetd可以启动其他网络服务,但是在任何时候都使用inetd并不是一个好主意,因为它将降低整个网络服务的性能。例如:Secure Shell因为其加密解密过程而丧失了一部分性能。
对大多数网络守护进程,inetd守护进程可以用来"看护"其他网络守护进程,因为inetd守护进程可以监听所有的socket,而其余网络守护进程只能监听特定的端口。(socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过"套接字"向网络发出请求或者应答网络请求。)
这样可防止大多的守护进程等待一个绑定socket,同时也可以避免socket随机进入。从某种意义上说,inetd可看做公司的安全守卫,仅让那些拜访特定人的来访者进入。这使得维护系统安全更方便,同时,可以更有效地控制流量(。带宽)
即:inetd是监视一些网络请求的守护进程,其根据网络请求来调用相应的服务进程来处理连接请求。它可以为多种服务 管理连接,当inetd接到连接时,它能够确定连接所需的程序,启动相应的进程,并把socket交给它(服务socket会作为程序的标准输入、输出和错误输出描述符)。使用inetd来运行那些负载不重的服务有助于减低系统负载,因为它不需要为每个服务都启动独立的服务程序(inetd可以直接处理某些简单的服务。)。
因为inetd不知道用户需要运行那些网络服务,所以必须在/etc/inetd.conf文件中定义。/etc/inetd.conf中网络服务的格式如下:
网络服务名 socket类型 协议 标识 用户 服务路径名 参数
例如,对于FTP守护进程,其格式如下
ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l -a
ftp服务守护进程使用的socket类型为stream,以根用户权限运行,服务器路径为/usr/sbin/tcpd,参数为int.tcpd -l -a。注意,ftp服务并未指明标识,如果某种服务不指明标识,该选项将被跳过。
注意:在缺省情况下,大多数网络守护进程都用#注解。这表示除非用户已非常确信自己的修改,否则不要运行这些服务。这主要是基于安全方面的考虑,因为某些服务容易使用户获取额外的访问权限或导致系统崩溃。
注意:守护进程通常以nobody或root用户权限运行。当使用root权限运行时,要非常小心、
如果用户对/etc/inetd.conf文件做了任何修改,如注解了某个守护进程或增加了某个守护进程,都需要发送一个HUP信号重启inetd守护进程,如:
#killall -HUP inetd
注意:inetd是通过rc系统启动的。inet_enable选项默认设为NO,但可以在安装系统时,由用户根据需要通过sysinstall来打开。
inetd.conf则是inetd的配置文件。inetd.conf告诉inetd监听那些网络端口,为每个端口启动那个服务。在任何的网络环境中使用linux系统,第一件要做的事就是了解一下服务器到底要提供那些服务,不需要的服务应该被禁止掉,最好卸载掉。查看/etc/inetd.conf文件,了解一下inetd提供那些服务。用加上注释的方法(在一行的开头加上#号),禁止任何不需要的服务,在给inetd进程发一个SIGHUP信号。
5、在/etc/networks文件中设置网络
仅有少数系统使用/etc/networks文件标识系统所在的网络。这将有助于用户组织其系统连入的网络。
6、DNS客户与/etc/resolv.conf
为了获得DNS名字解析功能,用户需要正确设置DNS客户端,要完成这一工作,需要修改/etc/resolv.conf文件。
在/etc/resolv.conf文件中,用户需要定义域名、域名服务器(主控域名服务器或主控域名服务器和辅助域名服务器)及其他必须的指令。
一般情况下,这将允许用户的系统实现域名查询,如将www.example.com转换成IP地址1.2.3.4
domain example.com
nameserver 1.2.3.1
nameserver 1.2.3.254
search
注意:即使/etc/resolv.conf指明了DNS,用户仍需要检查设置是否正确。用户可以使用nslookup、dig或其他工具检验设置是否正确。

没有评论:

发表评论