Red Hat Enterprise Linux 6.4网络操作系统详解
上QQ阅读APP看书,第一时间看更新

7.4 任务4 理解守护进程和xinetd

本节重点介绍守护进程、xinetd配置和守护进程管理工具。

7.4.1 子任务1 认识守护进程

1.什么是守护进程

通常Linux系统上提供服务的程序是由运行在后台的守护程序(daemon)来执行的。一个实际运行中的系统一般会有多个这样的程序在运行。这些后台守护程序在系统开机后就运行了,并且在时刻监听前台客户的服务请求,一旦客户发出了服务请求,守护进程便为它们提供服务。由于此类程序运行在后台,除非程序主动退出或者人为终止,否则它们将一直运行下去直至系统关闭。所以,将此类提供服务功能的程序称为守护进程。

2.查看系统当前运行的守护进程

查看系统的守护进程可以使用pstree命令。pstree命令以树形结构显示系统中运行的进程。利用此命令用户可以清楚地看到各个进程之间的父子关系。由于内容较多,以下是部分内容:

        [root@RHEL6~]# pstree
        init-+-acpid
              |-atd
              |-crond
              |-khubd
              |-metacity
              |-nmbd
        (略)

3.守护进程的工作原理

网络程序之间的连接是通过端口之间的连接而实现的。在C/S模型中,服务器监听(Listen)在一个特定的端口上等待客户的连接。连接成功之后客户机与服务器通过端口进行数据通信。守护进程的工作就是打开一个端口,并且等待(Listen)进入的连接。如果客户提请了一个连接,守护进程就创建(fork)子进程来响应此连接,而父进程继续监听更多的服务请求。正因为如此,每个守护进程都可以处理多个客户服务请求。

4.守护进程的分类

按照服务类型分为如下两类。

• 系统守护进程:如syslogd、login、crond、at等。

• 网络守护进程:如sendmail、httpd、xinetd等。

按照启动方式分为如下两类。

• 独立启动的守护进程:如httpd、named、xinetd等。

• 被动守护进程(由xinetd启动):如telnet、finger、ktalk等。

5.xinetd

从守护进程的概念可以看出,对于系统所要提供的每一种服务,都必须运行一个监听某个端口连接发生的守护程序,这通常会造成系统资源的浪费。为了解决这个问题,引入了“网络守护进程服务程序(超级服务器)”的概念。几乎所有的UNIX类系统都运行了一个“网络守护进程服务程序”,它为许多服务创建套接字(Socket),并且使用Socket系统调用同时监听所有这些端口。当远程系统请求一个服务时,网络守护进程服务程序监听到这个请求并且会产生该端口的服务器程序来为客户提供服务。

Red Hat Enterprise Linux 6使用的网络守护进程服务程序是xinetd。xinetd同时监听着它所管理的服务的所有端口,当有客户提出服务请求时,它会判断这是对哪个服务的请求,然后再开启此服务的守护进程,由该守护进程处理客户的请求。因此xinetd也被称为超级服务器。

7.4.2 子任务2 配置xinetd

几乎所有的服务程序都可以由xinetd来启动,而具体提供哪些服务由/etc/services文件指出。以下是/etc/services文件的部分内容:

        [root@RHEL6 xinetd.d]# cat /etc/services
        ssh            22/tcp                         # SSH Remote Login Protocol
        ssh            22/udp                         # SSH Remote Login Protocol
        (略)

该文件说明了xinetd可提供服务的端口号和名字,在实际启动相应的守护进程时则需要另外配置文件/etc/xinetd.conf和/etc/xinetd.d/*。

1.配置/etc/xinetd.conf

/etc/xinetd.conf文件本身并没有记录所有的服务配置,而是把每一个服务的配置写进一个相应的文件,再把这些文件保存在/etc/xinetd.d目录下,在/etc/xinetd.conf文件中利用includedir把这些文件包含进来。

        [root@RHEL6 xinetd.d]# cat /etc/xinetd.conf
        defaults
        {
            instances              =60
            log_type               =SYSLOG authpriv
            log_on_success         =HOST PID
            log_on_failure         =HOST
        }
        includedir /etc/xinetd.d

在/etc/xinetd.conf文件中使用defaults{}项为所有的服务指定默认值。

• instances:表示xinetd同时可以运行的最大进程数。

• log_type:设置指定使用syslogd进行服务登记。

• log_on_success:设置指定成功时,登记客户机的IP地址和进程的PID。

• log_on_failure:设置指定失败时,登记客户机的IP地址。

• includedir:指定由xinetd监听的服务配置文件在/etc/xinetd.d目录下,并将其加载。

2.配置/etc/xinetd.d/*

/etc/xinetd.d目录下存放的都是由xinetd监听服务的配置文件,配置文件名一般为服务的标准名称。例如,telnet服务的配置文件的名称为telnet,服务的配置文件内容为:

        [root@RHEL6 xinetd.d]# cat /etc/xinetd.d/ telnet
        # default: on
        # description: The telnet server serves telnet sessions; it uses \
        #unencrypted username/password pairs for authentication.
        service telnet
        {
          flags               =REUSE
          socket_type         =stream
          wait                =no
          user                =root
          server              =/usr/sbin/in.telnetd
          log_on_failure     +=USERID
          disable             =yes
        }

第4行定义了服务的名称,下面几行是启动配置,具体含义如下。

• flags:此服务的旗标。有多种,例如INTERCEPT、NORETRY等。

• socket_type:该服务的数据封包类型,如stream、dgram等。

• wait:取值如果为no,服务进程启动后,如果有新用户提出服务请求,系统会在对前面的用户服务结束后再接受新用户的请求;取值如果为yes,则可以同时处理多个用户请求。

• user:执行此服务进程的用户,通常为root。

• server:执行服务程序的路径和文件名。

• log_on_failure:把失败的登录记录到日志中。

• disable:取值为no,启动服务;取值为yes,禁用服务。

/etc/xinetd.d目录下每种服务所包含的内容不尽相同,一般来说取默认设置就可以了。只需把disable的值设置为no,就可以启动相应的服务了。在修改好服务配置文件后,需重新启动xinetd守护进程使配置生效。

7.4.3 子任务3 使用守护进程管理工具

1.命令行界面(CLI)工具

1)service

使用service命令可以查看当前系统中的所有服务和守护进程的运行状态,以及启动和停止指定的守护进程等。

例如,查看系统中所有守护进程的状态,可以使用命令:

        [root@RHEL6 xinetd.d]# service --status-all

查看、启动、停止、重新启动某个守护进程可以使用命令:

        [root@RHEL6 xinetd.d]# service进程名status/start/stop/restart

注意:①利用service命令执行后立即生效,无须重新启动系统。②对于被动守护进程的启动,应先编辑/etc/xinetd.d目录下的配置文件,修改好后,应利用service命令重新启动xinetd服务才能使设置生效。

2)chkconfig

可以使用chkconfig命令检查、设置系统的各种服务。此命令通过操控/etc/rc[0-6].d目录下的符号链接文件对系统的各种服务进行管理。

chkconfig命令的语法格式为:

      · chkconfig  --list           [servername]
      · chkconfig  --add/del        servername
      · chkconfig  [--level levels]   servername  <on/off/reset>

以下是一些具体的应用实例:

        //查看系统服务的启动设置情况
        [root@RHEL6~]# chkconfig --list
        //查看指定的服务在当前运行级别的运行状态
        [root@RHEL6~]# chkconfig httpd
        //添加一个由chkconfig管理的服务
        [root@RHEL6~]# chkconfig --add httpd
        //更改指定服务在指定运行级别的运行状态
        [root@RHEL6~]# chkconfig --level 35 httpd on

2.文本用户界面(TUI)工具

ntsysv是一个用于管理每次开机自动运行的守护进程的文本用户界面工具。

在命令提示符下输入ntsysv,会进入如图7-10所示的界面。

图7-10 ntsysv配置界面

可以使用上下方向键移动光标选择操作对象,使用空格键激活或者终止服务(相应服务中有*号为激活)。另外可以在选中操作对象后按F1键获得该服务的帮助信息。设置结束,按Tab键,选中“确定”按钮结束操作,在下次启动系统时,设置生效。

3.图形用户界面(GUI)工具

在Red Hat Enterprise Linux 6.4的图形界面下,可以依次单击系统主菜单中的“系统”→“管理”→“服务器设置”→“服务”,打开“服务配置”窗口,如图7-11所示。在该窗口中,选择相应的服务进行设置,在此不再赘述。

图7-11 “服务配置”窗口