1、第第4 4章章 LinuxLinux网络服务网络服务 本章将对Linux网络服务的模式以及工作原理进行简单介绍,并对其工作机制进行深层次的分析。4.2 守护进守护进程程Linux网络网络服务服务4.3 超级超级网络服务网络服务本章小结本章小结4.1 Client/Server模模式式4.4 TCP访问控制访问控制4.1 Client/Server4.1 Client/Server模式模式 Client/Server(客户端/服务器)模式是广泛应用于网络中的交互模式。客户端和服务器都具有不同的概念。“服务器”是在网络交互中提供服务的应用进程,它是一个持续性的应用进程,即使没有通信请求时,服务器也
2、监听网络,以便随时准备接收客户端的请求。“客户端”是向服务器请求某种服务的应用进程。客户端不是一个持续的进程,只有用户需要某种服务并且启动应用程序时,它才被启动。Client/Server模式的简单示意图,如下图:4.2 4.2 守护进程守护进程 在Linux中,服务器应用程序也叫做守护进程(daemon)。4.2.1 守护进程简介 服务器对客户端请求的响应是由服务器端的守护进程来完成的。守护进程只是单纯完成对客户端请求的应答,而对客户端的进程没有任何控制权,如守护进程crond只提供作业调度这一功能,守护进程named只提供名称解析服务,守护进程httpd只提供HTTP服务。对服务器的日常管
3、理,即是对服务器中提供的各种相关服务的守护进程的管理。4.2.2 配置系统启动服务 为了使服务器随时处于监听状态,必须使服务器的守护进程保持在自动运行的状态。在Linux中,可以通过使用ntsysv和chkconfig命令,也可以直接修改配置文件,时系统的服务自动运行。1.ntsysv命令 执行ntsysv命令之后出现一个配置界面。若前面的方括号中有“*”表示该服务已经被选中,没有“*”的表示没有被选中。可以用方向键来移动光标的位置,然后利用空格键来选中该选项。选择完毕后,利用Tab键选中“OK”按钮,然后按Enter键即可。再次进入这些服务所在的运行级别时,选中的服务 就可以自动启动了。2.
4、chkconfig命令 ntsysv命令只能设置当前运行级别的服务的启动情况,如果想要查看或设置多个运行级别下的服务的启动情况,可以使用chkconfig命令。chkconfig命令的基本语法格式为:chkconfig listname 使用chkconfig命令设置服务的运行级别的语法格式如下:chkconfig-level levelsname 3.利用脚本文件来设置 使用这种方法需要用户有一定的shell脚本编写经验。用户可以在/etc/rcn.d目录(n为运行级别)中建立以大写的S和一个数字开头的脚本文件,在脚本文件中对要运行的服务程序进行调用。4.34.3超级网络服务超级网络服务 在
5、Linux中,提供网络服务的主要是xinetd,该服务大多的情况下是用于管理的,可以在不同的Internet服务中应用。一些不常用的服务没有被作为单独的守护进程在开机时启用,而是由xinetd服务集中监听这些服务的端口,当收到相应的客户端请求之后,xinetd启动相应的服务,并将端口移交给该服务,客户端断开连接之后,相应的服务进程结束,xinetd继续监听。4.3.1 对xinetd服务的认识 在服务器的持续性监控方面,xinetd起着至关重要的作用。它的具体实现方式:时刻监控与服务请求相关的TCP与UDP端口,当有网络服务请求时,在用户的请求满足相关的请求权限的情况下,xinetd就启动相关
6、的服务器进程,以提供用户请求的网络服务。xinetd主要具有如下几方面的功能:(1)控制访问的功能:可以控制某个服务进程同时连接的主机的个数。可以控制某个主机同时连接的进程数,以防止某个进程同时连接的进程数过多而浪费资源,在安全方面也有一定的作用。可以限制某些连接的时间。(2)具有强大的日志功能可以记录访问的持续时间以及起始的时间。可以记录某个用户在一定时间内非法访问服务的次数。4.3.2 xinetd 的配置文件 xinetd的主配置文件是/etc/xinetd.conf,xinetd的启用也主要是通过这个文件的配置信息来完成的。/etc/xinetd.conf文件的形式如下:service
7、 service-nameattribute operator value1,value2,value n service是默认的关键字,来表明文件的类型;service-name是文件的服务名称;大括号里的内容是为该文件配置的属性,其中attribute是属性项,表明属性的作用,operator是操作符,value是赋予属性的值。其中operator操作符的种类有如下三种:覆盖或者赋予属性项一定的属性值,属性值可以是一个,也可以是多个,多个不同的属性值之间用空格隔开。:将操作符后面的属性值追加给属性项,不覆盖原来的属性值,属性值可以是一个也,可以是多个。:在原属性值集中删除操作符后面的属性值
8、。下面用一个默认的/etc/xinetd.conf文件来具体说明xinetd配置文件的格式及作用。文件内容:defaults instances=40 log_type=SYSLOG authpriv log_on_success=HOST PID log_on_failure=HOST cps=20 20Includedir/etc/xinetd.d各字段含义如下:instances=40:用来设置本服务器同一时间可以接受的客户连接的总数。log_type=SYSLOG authpriv:用来设置日志的记录方式是SYSLOG authpriv。log_on_success=HOST PID:
9、用来指定当登录成功时记录客户机的IP地址(HOST)和客户机访问进程的PID(PID),另外,还可以指定记录客户机的用户UID(USERID)、进程终止状态(EXIT)以及记录会话持续时间(DURATION)。lon_on_failure=HOST:指定当登录失败时记录客户机的IP地址还可指定记录HOST、USERID、ATTEMPT(失败的尝试)以及RECORD(附加的客户信息)。cps=20 20:指定进入连接的处理速度,需要两个参数,前一个参数表示本服务器在1秒内可以处理的连接数,超过这个数值后进入的连接将被暂停处理;第二个参数表示暂停多少秒后继续处理先前暂停处理的连接。当连接数超过20
10、时,新加入的连接就进入暂停状态,并在暂停20秒后重新启动,再次尝试连接。4.3.3 xinetd 服务的使用 在没有对文件进行重新改动的时候,服务是自动启动的,但在修改之后需要重新启动xinetd服务才能生效。可以使用两种方式对本服务进行启动,一种是重新启动计算机,另一种是利用命令启动。采用命令方式时,主要有两种形式:/etc/rc.d/init.d/xinetd reload或者:#service xinetd reload4.4 TCP4.4 TCP访问控制访问控制 为了提高xinetd服务的安全性,可以使用TCP_Wrappers限制客户端的访问,它的具体实现方式是通过/etc/host
11、s.allow和/etc/hosts.deny文件控制用户对服务的访问。/etc/hosts.allow用于设置并存放允许哪些客户机访问哪些服务的信息;/etc/hosts.deny用于设置并存放禁止哪些客户机访问哪些服务的信息。在具体实现的时候,用户还可以通过添加规则来控制不同客户端对不同服务的访问。使用TCP_Wrappers进行访问控制的具体实现步骤如下:(1)当有客户端访问服务器时,首先读取的是/etc/hosts.allow文件,如果该客户端具有访问权限,就允许该客户端的访问。(2)如果读取/etc/hosts.allow文件后发现该客户端没有访问权限,就再读取/etc/hosts.
12、deny文件,看该客户端是否没有访问权限,如果是,则直接拒绝该客户端的访问。(3)当两个文件中都没有该客户端的名称或IP地址时,就会自动赋予该客户端访问权限。(4)如果没有这两个文件或者这两个文件为空,那么TCP_Wrappers控制失效。本章小结本章小结 本章先介绍了网络服务的主要工作模式和工作原理,然后介绍了守护进程的概念,以使读者更加深入地了解服务器的工作模式。自本章中,第三节和第四节是重点,第三节主要介绍了超级网络服务xinetd及其配置方法,第四节主要介绍了对TCP访问的控制,这是控制入侵的比较有效的方法。习题4一、简答题一、简答题1简述客户端/服务器模式的工作原理。2简述xinetd服务的两个重要的功能以及各个功能的具体实现方法。3简述三种operator操作符的作用。二、操作题二、操作题 写出在/etc/hosts.allow文件中设置允许域访问telnet服务,而不允许域访问该服务的代码。