当前位置:Linux教程 - RedHat - RedHat 7.x 专题:TCP Wrapper and xinetd (之三)

RedHat 7.x 专题:TCP Wrapper and xinetd (之三)



         说明:
    这是我最近整理成稿的一个专题,分为三篇发布,原文当中有很多表格和章节目录等,在网页的显示效果不是很好,如果你需要本文档的PDF格式,请致信 [email protected]
    本文档的很多资料来自对英文原文档的翻译和整理,可能有所偏差甚至错误,这是我第一次发布本文档,希望能够得到大家的指正。

    这是第三篇,正文如下:


    xinetd进程
    1 启动与中止:

    如果你使用的是7.x 的默认安装:

    /etc/rc.d/init.d/xinetd start
    /etc/rc.d/init.d/xinetd stop
    /etc/rc.d/init.d/xinetd restart
    /etc/rc.d/init.d/xinetd reload
    或者
    /sbin/service xinetd start
    /sbin/service xinetd stop
    /sbin/service xinetd restart
    /sbin/service xinetd reload

    如果你使用的是6.x上的自行编译安装:

    你需要自行建立xinetd启动脚本:
    touch /var/run/xinetd.pid
    touch /var/lock/subsys/xinetd
    chmod 755 /etc/rc.d/init.d/xinetd

    你可以用下面的命令来控制进程:
    /etc/rc.d/init.d/xinetd start
    /etc/rc.d/init.d/xinetd stop
    /etc/rc.d/init.d/xinetd restart
    /etc/rc.d/init.d/xinetd reload

    vi /etc/rc.d/init.d/xinetd
    ##文件内容如下:



    /etc/rc.d/init.d/xinetd文件内容
    #!/bin/bash

    #

    # xinetd This starts and stops xinetd.

    #

    # chkconfig: 345 56 50

    # description: xinetd is a powerful replacement for inetd. \

    # xinetd has access control machanisms, extensive \

    # logging capabilities, the ability to make services \

    # available based on time, and can place \

    # limits on the number of servers that can be started, \

    # among other things.

    #

    # processname: /usr/sbin/xinetd

    # config: /etc/sysconfig/network

    # config: /etc/xinetd.conf

    # pidfile: /var/run/xinetd.pid

    prog="xinetd"

    PATH=/sbin:/bin:/usr/bin:/usr/sbin

    # Source function library.

    . /etc/rc.d/init.d/functions

    # Get config.

    test -f /etc/sysconfig/network && . /etc/sysconfig/network

    # Check that networking is up.

    [ ${NETWORKING} = "yes" ] || exit 0

    [ -f /usr/sbin/xinetd ] || exit 1

    [ -f /etc/xinetd.conf ] || exit 1

    RETVAL=0

    start(){

    echo -n $"Starting $prog: "

    # Need to get rid of localization for external services -

    # it doesn make much sense to have i18n on the server side here

    LANG=en_US

    LC_TIME=en_US

    LC_ALL=en_US

    LC_MESSAGES=en_US

    LC_NUMERIC=en_US

    LC_MONETARY=en_US

    LC_COLLATE=en_US

    export LANG LC_TIME LC_ALL LC_MESSAGES LC_NUMERIC LC_MONETARY LC_COLLATE

    unset HOME MAIL USER USERNAME

    daemon xinetd -stayalive -reuse -pidfile /var/run/xinetd.pid

    RETVAL=$?

    echo

    touch /var/lock/subsys/xinetd

    return $RETVAL

    }

    stop(){

    echo -n $"Stopping $prog: "

    killproc xinetd

    RETVAL=$?

    echo

    rm -f /var/lock/subsys/xinetd

    return $RETVAL

    }

    reload(){

    echo -n $"Reloading configuration: "

    killproc xinetd -USR2

    RETVAL=$?

    echo

    return $RETVAL

    }

    restart(){

    stop

    start

    }

    condrestart(){

    [ -e /var/lock/subsys/xinetd ] && restart

    return 0

    }

    # See how we were called.

    case "$1" in

    start)
    start
    ;;

    stop)
    stop
    ;;

    status)
    status xinetd
    ;;

    restart)
    restart
    ;;

    reload)
    reload
    ;;
    condrestart)

    condrestart
    ;;
    *)

    echo $"Usage: $0 {start|stop|status|restart|condrestart|reload}"

    RETVAL=1

    esac

    exit $RETVAL


    2 命令参数
    xinetd进程接受若干参数。这些参数可被特定服务default中的属性改写,或在一个或多个服务的单个属性项改写。然而,这里给出的所有参数或它们的缺省值控制xinetd自身的行为。例如,如果filelog标记指定为xinetd,那么将在那里登记所有状态转换消息,尽管 /etc/xinetd.conf文件中为和服务相关消息指定了其他登记位置。可用参数列在下表中。
    应注意xinetd报告的所有状态信息,总是出现在-syslog或-filelog标记指定的登记文件中,不管设置如何,无论通过defaults还是在/etc/xinetd.conf中。如果要在一个文件中捕获xinetd的PID,可以用
    xinetd –pid 2> /var/run.xinetd.pid

    Xinetd 的命令参数
    参数 描述
    -d 调试模式。输出可和调试器如gdb一起使用。
    -syslog facility 指定日志方式。可用的参数为daemon, auth, user和loca10-7其中之一,你可以使用man syslog.conf了解每个参数的含义。如果你使用调试模式,该参数无效,因为相应的信息已经被送到终端。
    -filelog logfile 指定日志信息到文件。文件必须指定全路径,如果该文件不存在,文件将被创建,产生的信息以追加的方式写入到文件。如果你使用调试模式,该参数无效,因为相应的信息已经被送到终端。
    -f config_file 指定配置文件。必须是全路径,默认配置文件为/etc/xinetd.conf
    -pidfile pid_file 进程ID将被写入指定文件,在调试模式中该参数无效。
    -stayalive 即使没有服务被指定,也使得xinetd继续运行
    -loop rate 指定每秒钟分叉的进程数。缺省是10.对较快机器来说可能希望改变它
    -reuse 设置可重用的TCP socket, 这意味着以前的实例运行时也可启动其他进程。当和flags属性一起使用时,有更特殊的服务控制,参见xinetd的属性列表,注意这个选项对于RPC类型的服务无效。
    -limit proc_limit 指定由xinetd产生的并发进程总数的上限,以防止进程溢出。
    -logprocs limit 指定远程用户可以请求的并发服务总数上限
    -shutdownprocs limit 当log_on_failure属性中使用了RECORD值时,xinetd分叉称为shutdown的服务以收集服务终止时的信息。该选项限制同时运行的shutdown进程总数为limit
    -cc interval 使xinetd每隔interval秒运行对其内部状态的一致性检查。用killall –IOT xinetd可手工实现

    注意:syslog和filelog选项是互斥的。如果你什么也没有指定,默认采用的是syslog方式和daemon工具。请不要混淆xinetd的信息和在登陆某个服务时产生的信息。后者是在相关服务的配置文件中指定的。

    3 控制信号
    当xinetd收到某个信号时会执行相应的动作,这些信号可以通过修改config.h并重新编译来自定义。默认的可用信号如下:

    xinetd 的控制信号
    信号 描述
    SIGUSR1 软性重配置。重读/etc/xinetd.conf并作相应调整
    SIGUSR2 硬性重配置。重读配置文件并终止和新的配置规则不匹配的进程。它会对正在运行的进程重新进行远程访问者位置、访问次数、服务实例等方面的访问控制校验,如果检验的结果与新的规则不匹配,它会强制终止一些实例来匹配新的规则。举例来说,某个服务新的配置比原先的配置中的实例数目要少,它会杀死几个进程来满足新的数目。
    SIGQUIT 终止xinetd但不终止它分叉的任何进程
    SIGTERM 终止xinetd分叉的所有进程;然后终止xinetd
    SIGHUP 把xinetd状态信息写到/tmp/xinetd.dump中
    SIGIOT 检查内部数据库毁坏情况并报告结果

    第六节 xinetd日志

    1 日志条目
    当用户试图访问一个服务的时候,将产生一条访问的日志记录,格式如下(每一项都有一个时间戳作为前缀):entry:service-id data
    data 依赖于entry,可用的entry类型包括:
    xinetd 的日志条目类型(entry type)
    日志类型 引发条件
    START 连接开始
    EXIT 连接结束
    FAIL 连接失败
    DATA 对于启用了RECORD登陆选项的服务而言,当连接失败时产生
    USERID 连接启用了USERID登陆选项的服务时产生
    NOID 使用了USERID登陆选项和IDONLY标记(flag),不识别是谁正在试图访问此服务

    2 日志格式
    如果服务使用了appropriate登陆选项,将有某些信息附加日志条目里,具体描述如下:

    xinetd 的日志格式
    日志类型 格式
    START START:service-id [pid=%d] [from=%d. %d. %d. %d]
    EXIT EXIT:service-id [type=%d] [pid=%d] [duration=%d(sec)]
    说明:type是status或signal,数值是离开的状态或者引发进程终止的信号。
    FAIL START:service-id reason [from=%d. %d. %d. %d]
    说明:可能的reason包括:fork、time、address、service_limit、process_limit
    DATA DATA:service-id data
    说明:data的值根据不同的服务有所不同
    login:remote_user=%s local_user=%s tty=%s
    exec:remote_user=%s verify=status command=%s
    exec可用的status包括ok(密码正确)、failed(密码错误)、bad(无此用户)
    shell:remote_user=%s local_user=%s command=%s
    finger:其值为接收到的字符串或者一空行
    USERID USERID:service-id text
    说明:text是负责校验的后台进程的响应信息
    NOID NOID:service-id IP-address reason

































    Appendix
    Apperndix I Thanks
    人物:
    我的很多知识来源于同事和朋友的指教,请允许我在这里占用一点篇幅向我的朋友表达我最真诚的感谢。
    Mr. Jim Zhao 是我原先的一位同事,一个富有突破性的人才,狂热的Linux爱好者,他是我在UNIX和Linux方面的启蒙者,是他引导我进入这块美妙的天地并在我初学的路上给予诸多帮助,谢谢你,Jim。
    Mr. Ideal 是linuxaid的一位Linux工程师,据我所知,他的《Xinetd完全指南》一文是国内最早的一份关于xinetd的详细文档。以我的观察,他做的工作也主要是对linux man 文档的翻译和整理工作,我觉得美中不足的是有些地方翻译不够全面,尤其是xinetd.conf的属性列表部分和xinetd日志部分。所以我进行了重新翻译并以自己的风格重新整理成本文档。在本文中,我也多处引用了Ideal的文章,例如xinetd的特色和在6.2上面的安装等。谢谢你,Ideal。
    很多未曾谋面的网友也对我教益量多,恕不一一列出。

    站点:
    我也从很多站点和论坛上得到很多的知识和资源,向这些站点的所有者和参与者真诚感谢:
    LinuxByte: http://www.linuxbyte.net
    LinuxAid: http://www.linuxaid.com.cn
    中国JSP网络 http://www.cnjsp.net
    中国Linux论坛: http://www.linuxforum.net

    谢谢你们!

    Apperndix II Reference
    本文档我做的主要是翻译整理工作,如果您对我的翻译不够满意或者想获得更多的资料,也可以参考这些文档。具体如下:
    1、 RH 7.X的附带文档:《The Official Red Hat Linux Reference Guide》,第九章;
    2、 RH 7.X 的man pages:man xinetd.conf 、man xinetd、man xinetd.log;
    3、 /usr/share/doc/tcp_wrappers- <version>,关于xinetd机制和服务控制的一个readme文档;
    4、 /usr/share/doc/xinetd- <version>,关于服务配置的raadme文档;
    5、 Ideal的《Xinetd完全指南》,
    http://www.linuxaid.com.cn/engineer/ideal/article/xinetd.htm
    6、 http://www.xinetd.org xinetd的官方站点;
    7、 http://www.macsecurity.org/resources/xinetd/tutorial.shtml ,一个非官方的配置向导;
    Apperndix III Revision Log
    1、 首次发布:
    日期:2002年7月17日
    版本:0.0.1
    位置:http://www.linuxbyte.net 标题:RedHat 7.x 专题:TCP Wrapper and xinetd




    发布人:叶三耿 来自: