Linux (系统服务守护程序)

1、守护程序与服务

            简单来说,可以将服务与守护程序视作相同的东西,就是在后台中执行的程序,可以提供某些功能。

 

2、守护进程的主要分类

             根据启动与管理方式,可以将守护程序分为可独立启动的独立启动守护程序,以及通过统一安全机制管理的超级守护程序两大类。

      a、独立启动(stand_alone):该守护程序启动后,就直接常驻内存。他虽然一直占用系统资源,但最大的优点就是响应快。常见的守护程序比如httpd。

      b、超级守护程序(super daemon):相对于独立启动的执行方式,这种服务的启动方式是通过统一的守护程序来负责唤起服务。统一负责的守护程序就是inet服务。不过,后来的Linux开发套件中,是使用xinet。以FC4的xinet说明下。当有网络服务要求时,该要求会先送给xinet服务,然后xinet根据该网络要求送来的数据包内容(该内容会记录IP地址与端口号),将数据包送给实际运行的服务,而该服务此时才会启动。最常见的就是ftp服务。他的最大优点是不会一直占用系统资源(该服务会在睡眠状态),但他的反应时间也比较慢,因为还要花时间去“唤醒”该服务。

      针对超级守护进程的处理模式有两种:

           (1)多线程(multi-threaded):可以理解为将所有请求一次交给程序处理,所以一个服务同时会负责好几个程序。

           (2)单线程(single-threaded):请求一个个的处理,前一个没处理完之前,后面的请排队。

      如果以守护程序的工作状态来区分,主要分为:

         a、单独控制(signal-control):这种守护程序是通过信号来管理的,只要有任何需求,他就会立即启动去处理,如打印机的服务(cupsd)。

         b、间隔控制(interval-control):这种守护程序是每隔一段时间就主动执行某项工作,所以,即使设置好配置文件,他也不会立即执行,而是某个时间点才回去工作。atd与crond就是这样(每分钟执行一次)。

 

3、与服务有关的端口信息:/etc/services

            不同的网络服务又不一样的监听端口(listen port)。Linux主机的服务与端口信息记录在/etc/services文件中。这个文件的内容以下面的方式来排:<守护进程名称>     <port与数据类型>    <该服务的说明>

        注意:一般不要修改这个文件的内容,使用默认的即可,否则可能出现问题。

 

4、守护进程命名规则

       通常在服务名称后面加上一个d,例如建立at与cron这两个服务,通常被称为atd或crond,d表示守护进程。

 

5、系统的守护程序位置

         为了很轻松的启动服务,Linux会替系统启动守护程序,方法是利用shell脚本。举个例子,如果想知道syslogd是如何启动的,可以查询man 8 syslogd,很麻烦,其实可以使用启动syslogd守护程序的shell脚本(/etc/init.d/syslog)。只要“/etc/init.d/syslog restart”就行了。

         这些shell脚本放置的地方根据独立启动守护程序还是超级守护程序有所不同:

         a、独立启动守护程序:放在/etc/init.d/目录里,几乎所有的RPM安装的套件启动脚本都在这里。不过FC4是放到/etc/rc.d/init.d/*中。

         b、超级守护程序:即xinet或inet。请注意,xinet也是一个守护程序。他是独立启动的,所以xinet的启动脚本写在/etc/init.d/xinted 里。挂在这个守护程序里的服务设置项目写在/etc/cinetd.conf与/etc/xinetd.d/*目录的任何文件中。

       守护进程的启动:

        a、/etc/init.d/

             对于独立期待您给的守护程序,以syslog为例:

             [root@linux ~]# /etc/init.d/syslog start

             [root@linux ~]# service syslog start

             service格式:

                    [root@linux ~]# service [service name] (start|stop|restart|...)

                             service name:急需要启动的服务名称,与/etc/init.d对应

                             start|...:即该服务要进行的工作

        b、/etc/xinetd.conf :这个文件就是设置xinet服务的参数文件

        c、/etc/xinetd.d/*:这个目录里面的所有文件就是挂上xinet的所有服务,如wu-ftpd、telnet与pop3等。

        对于启动超级守护进程,以telnet为例:
               [root@linux ~]# vi /etc/xinetd.d/telnet

               [root@linux ~]# /etc/init.d/xinetd  restart

 

6、超级守护进程序的设置文件

            xinetd的主要默认参数文件:/etc/xinetd.conf,几项主要内容:

              instances                   = 60                                              //同一服务的同时联机数最多可达60台

              log_type                     = SYSLOG daemon info               //登录后,会记录到登陆文件的信息
              log_on_failure            = HOST                                        //成功登陆是,记录的信息有哪些
              log_on_success         = PID HOST DURATION EXIT       //登录失败,记录的信息是什么
              cps                             = 25  30                                        //同一秒钟内最大联机数量为25台,若超过25台,该服务会暂时停止30秒

              includedir /etc/xinetd.d                                                    //更多设置值在/etc/xinetd.d目录中

         这个文件中的数据只是默认值,当某个使用超级守护程序管理的服务启动时,除非该服务已经设置好管理的项目,否则将使用上述xinetd.conf内的默认值。所有的服务参数文件都在/etc/xinetd.d目录中(如果某服务在此目录中有设置文件,就不再使用默认值)。每个参数配置文件的格式一般:

       service  <service_name>

       {

               <attribute>       <assign_op>       <value>        <value> ...

               ...

       }

       其中attribute是一些xinetd的管理参数,assign_op是参数的设置方法。assign_op的主要设置形式为:

        =:表示后面的设置参数就是这样;

        +=:表示后面的设置为“在原设置中加入新的参数”

        -+:表示后面的设置为“在原参数中舍弃这里输入的参数”

      attribute与value:

        一般设置项目:

        disable:设置服务器可执行或不可执行。设置为yes表示不能执行,设置为no表示可以执行。(必须设置)

        socket_type:stream为联机机制较为可靠的TCP包,若为UDP表,则使用dgram机制。ram表示服务器需要与IP直接对话。

        protocol:联机状态使用哪种协议。各协议代号可参考/etc/protocols的内容,除非自己设置的服务,否则这个可以不用设置。

        wait:多线程与单线程方式,如果是多线程设置为no,单线程设置为yes。

        user:UID,这是个安全防范机制,需要注意UID必须在/etc/passwd中。

        group:与user的意思相同,这个GID也必须在 /etc/group中。

        instances:同一时间内同一个服务允许的联机数目,可以写入一个数字。例在同时段ftp联机最多30台,这里就可以填入30。

        nice:范围是-19~19,数字越小表示程序越优先执行。

        server:指出服务的启动程序。例如telnet的话,就是server = /usr/sbin/in.telnetd。

        server_args:服务器的参数。例如in.telnetd中,可以加入某些参数。

        log_on_success:成功登陆后需要记录的项目。PID为记录该服务器启动时的进程ID,HOST为远程主机IP,USERID为登陆者账号,EXIT为离开是记录的项目,DURATION为该用户使用此服务的时间。

        log_on_failure:登录失败时需要记录的项目。HOST为远程主机IP,USERID为登陆者账号,ATTEMPT记录登录失败者的企图,RECORD为记录远程主机的信息,以及为什么本机server不能启动的原因。login、shell、exec、finger等命令可以在这里使用。

     高级设置项目:

        env:可以设置环境变量。

        port:可以设置不同服务与对应的端口,但是记住端口与服务名称必须与/etc/services内的记载相同。

        redirect:将客户端对我们server的需求转到另一台主机上去。例如当有人要使用您的ftp时,您就可以将他转到另一台机器上去。那个IP_Address就表示另一台远程主机的IP。

        includedir:将某个目录下所有文件都放到xinetd.conf设置里。很有用,这样就可以一个一个设置不同的项目,而不用将所有服务都写进xinetd.conf里。

     安全控管项目:

          bind:设置允许使用此服务的适配卡。例如Linux主机上有两个IP,而只想让IP1可以使用此服务,IP2不能使用,这里就可以写入IP1,IP2就不能使用此服务器。

          interface:与bind相同。

          only_from:用在安全机制上,就是管制只有这里规定的IP或主机名称可以登录,如果是0.0.0.0表示所有PC皆可登陆。另外,也可以选择域名。

          no_access:与only_from差不多,用来管理能否进入Linux主机启用服务器服务的管理项目。no_access表示不可登陆的PC。

          access_times:设置该服务的服务器启动的时间,使用24小时设置。例如ftp要在8点到16点开放,则:08:00- 16:00。

          umask:可以设置用户建立的目录或者是文件的属性。系统建议022。

注:对于一个网段,可以这样设置:192.168.1.0/24表示192.168.1.0~192.168.1.24网段。

 

7、TCP_Wrappers

      除了使用xinetd的设置文件来设置安全机制外,还可以使用额外的机制来阻止某些不受欢迎的数据来源,就是/etc/hosts.allow以及/etc/hosts.deny这两个文件。需要安装tcp_wrappers套件。/etc/hosts.allow优先级高于/etc/hosts.deny,可以把所有条件都写进一个文件,但是会显得杂乱无章。

     格式:<service (program_name)> : <IP, domain, hostname> : <action>

    例:以telnet在FC4下为例:

        [root@linux ~]# vi /etc/hosts.deny

             in.telnetd : 140.116.44.202 140.116.32.0/255.255.255.0 : deny

        也可以写成两行:

            in.telnetd: 140.116.44.202 : deny

            in.telnetd: 140.116.32.0/255.255.255.0 : deny

        另外,在第一个和第二个字段还可以使用一些特殊参数:

           ALL:表示接受全部的program_name或者IP,例如:ALL:ALL:deny;

           LOCAL:表示来自本机,例如:ALL:LOCAL:allow

           UNKNOWN:表示不知道的IP、域或服务

           KNOWN:表示可解析的IP、域等信息

再次强调,service_name必须与xinetd或/etc/init.d/*中的程序名相同。

      还有更安全的设置,比如他人扫描telnet端口时,记录他的IP,以便查询与取证,这要在第三栏中使用额外的参数:

         spawn(action):可以利用后续接的shell来进行附加工作,且具有变量功能,主要变量内容为:%h(homename)、%a(address)、%d(daemon)等。

         twist(action):立刻执行后面的命令,起执行完后终止该次联机的要求。

    例:利用safe_finger追踪对方主机信息,将追踪到的结果以电子邮件方式寄给root,在对方屏幕上显示不可登陆的消息,此时可利用:

          spwan(action1)|(action2):twist(action3) 来进行。

          [root@linux ~]# vi /etc/hosts.deny

             in.telnetd: ALL : spawn (echo "security notice from host '/bin/hostname'";\

                                     echo; /usr/sbin/safe_finger @%h) | \

                                     /bin/main -s "%d-%h securitv" root & \

                                    : twist (/bin/echo -e "\n\nWARNING connect not allowed.\n\n")

   另外注意:/usr/sbin/safe_finger是由tcp_wrappers套件提供。

 

8、观察系统启动的服务

          观察已启动服务的方式很多,但最常使用的是netstat。通常,以ps来观察整个系统上的服务比较好,但是观察启动网络监听的服务,netstat比较好。

        例:找出当前系统打开的“网络服务”有哪些

              [root@linux ~]# netstat -tulp

        例:找出所有监听网络的服务(包含套接字状态)

              [root@linux ~]# netstat -lnp

        例:观察所有的网络连接状态,查询是否有异常联机

              [root@linux ~]# netstat -anp

       

9、设置开机后立即启动的服务

        整个服务开机就能启动的地方有两处,一处是在守护程序启动(/etc/rc.d/rc[0-6].d/*)目录下,该目录下的文件主要以S或K开头,分别表示开机时启动与关机时关闭。也就是说如果可以要启动的服务写入这个目录内,该服务开机时就能自动启动。另一处也可以在开机时启动的文件就是/etc/rc.d/rc.local。可以将任何想在开机时启动的程序写入这个文件,该文件以shell脚本的语法写成。

        实际上不用手动去修改这两个地方就能设置启动服务,系统提供了两个命令来实现这个功能:chkconfig和ntsysv

        a、chkconfig

              [root@linux ~]# chkconfig --list

              [root@linux ~]# chkconfig [--add | --del] [service_name]

              [root@linux ~]# chkconfig --level [0123456] [service_name] [on|off]

                    --list :仅列出当前各项服务的状态

                    --add:给chkconfig增加一个服务名称,该service_name必须在/etc/init.d中

                    --del:删除chkconfig管理的一个服务

                    --level:设置某个服务在该level下启动或关闭

             例:列出当前系统上所有被chkconfig管理的服务

                  [root@linux ~]# chkconfig --list | more

                //输出主要分为两个部分,首先是独立启动的服务,他会列出0~6各运行等级的数据,即上半部分的显示。下半部是超级守护程序管理的服务输出,由超级守护程序管理的服务,是没有运行等级之分的。

             例:让atd服务在运行等级3、4、5是启动

                   [root@linux ~]#chkconfig --level 345 atd on      //会在/etc/rc.d/rc3.d、/etc/rc.d/rc4.d和/etc/rc.d/rc5.d里建立一个链接文件。

             例:将自己建立的服务加入到chkconfig的管理中。首先该服务必须加入init可管理的脚本中,即/etc/init.d/中。比如,在/etc/init.d中建立一个myvbird文件,该文件是简单的服务范例,要求:将在运行等级3和5启动;在/etc/rc.d/rc[35].d中启动时,以S80开始以K70结束。

               [root@linux ~]# vi /etc/init.d/myvbird

                       #!/bin/bash

                       #chkconfig: 35 80  70

                       echo "Nothing"

               说明:第二行比较重要,他的语法是:chkconfig: [runlevels] [start number] [stop number],其中runlevels为不容的运行等级状态,start number与stop number则是在/etc/rc.d/rc[35].d内建立的设置文件,文件名为S80myvbird即K70myvbird

               [root@linux ~]# chkconfig --add myvbird     //加入chkconfig管理中

               [root@linux ~]# chkconfig --list myvbird

               //如果想删除

               [root@linux ~]#chkconfig --del myvbird

               [root@linux ~]#rm /etc/init.d/myvbird

      b、ntsysv(很多版本都有chkconfig,但是ntsysv是Red Hat所特有的)

          [root@linux ~]# ntsysv [--level <levels>]

                --level:后面接不同的运行等级,例如ntsysv --level 35

         例:直接编辑当前运行等级下默认启动项目

              [root@linux ~]# ntasysv  //出现编辑菜单,上下键控制移动;空格键选择需要的服务,tab键可在方框、OK、CANCEL间移动,[F1]键显示该服务的说明。


原文出处:http://hi.baidu.com/cds_wh/item/e3e6e60e12dc4ee5f45ba635

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值