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

来源:互联网 发布:淘宝产品突然被下架了 编辑:程序博客网 时间:2024/06/04 18:25
 说明:
这是我最近整理成稿的一个专题,分为三篇发布,原文当中有很多表格和章节目录等,在网页的显示效果不是很好,如果你需要本文档的PDF格式,请致信 roczhao@msn.com
本文档的很多资料来自对英文原文档的翻译和整理,可能有所偏差甚至错误,这是我第一次发布本文档,希望能够得到大家的指正。

这是第三篇,正文如下:


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