转:使用xinetd管理网络应用服务

 

使用xinetd管理网络应用服务


■ 中科院计算所 李洋



本文着重讲述在Linux系统中如何使用xinetd(扩展的超级服务器)机制来管理网络应用服务,讲述如何增加和删除网络服务,从而有效地保证Linux系统安全。

目前,从WWW服务器到流行的游戏服务器,绝大多数都在采用Linux作为服务平台。一方面,Linux为用户提供了多种优质的网络服务,包括Http、Ftp、Smtp、Pop3等;另一方面,服务的增多意味着更多的风险。每种服务本身都必然存在着某些缺陷,而这些缺陷很有可能被高明的黑客利用,从而对系统进行攻击。所以,提供特定服务的服务器应该尽可能开放提供服务必不可少的端口,而将与服务器服务无关的服务关闭,比如一台作为www和ftp服务器的机器,应该只开放80和25端口,而将其他无关的服务关掉,以减少系统漏洞。

Xinetd机制介绍

在Linux系统的早期版本中,有一种称为inetd的网络服务管理程序,也叫做“超级服务器”,就是监视一些网络请求的守护进程,它根据网络请求来调用相应的服务进程来处理连接请求。inetd.conf则是inetd的配置文件,它告诉inetd监听哪些网络端口,为每个端口启动哪个服务。在任何的网络环境中使用Linux系统,第一件要做的事就是了解一下服务器到底要提供哪些服务。不需要的那些服务应该被禁止掉,这样黑客就少了一些攻击系统的机会,因为服务越多,意味着遭受攻击的风险就越大。用户可以查看“/etc/inetd.conf”文件,了解一下inetd提供和开放了哪些服务,以根据实际情况进行相应的处理。

而在Linux 7.x的版本当中则使用xinetd(扩展的超级服务器)的概念对inetd进行了扩展和替代。xinetd的默认配置文件是/etc/xinetd.conf。其语法和/etc/inetd.conf完全不同且不兼容。它本质上是/etc/inetd.conf和/etc/hosts.allow、 /etc/hosts.deny功能的组合。

系统默认使用xinetd的服务可以分为如下几类:标准internet服务,如http、telnet、ftp等; 信息服务,如finger、netstat、systat;邮件服务,如imap、pop3、smtp;RPC服务,如rquotad 、rstatd、rusersd、sprayd、walld; BSD服务,如comsat、exec、login、ntalk、shell talk;内部服务,如chargen、daytime、echo等;安全服务,如irc; 还有其他服务,如name、tftp、uucp、wu-ftp。下面是一个典型的/etc/xinetd.conf文件的例子:

# vi xinetd.conf

  # Simple configuration file for xinetd

  # Some defaults, and include /etc/xinetd.d/

  defaults

  {

   instances = 60

   log_type = SYSLOG authpriv

   log_on_success = HOST PID

   log_on_failure = HOST

   cps = 25 30

  }

  includedir /etc/xinetd.d

从文件最后一行可以清楚地看到, /etc/xinetd.d目录是存放各项网络服务(包括http、ftp等)的核心目录,因而系统管理员需要对其中的配置文件进行熟悉和了解。一般说来,在/etc/xinetd.d的各个网络服务配置文件中,每一项都有下列形式:

  service service-name

  {

  Disabled //表明是否禁用该服务

  Flags //可重用标志

  Socket_type //TCP/IP数据流的类型,包括stream,datagram,raw等

  Wait //是否阻塞服务,即单线程或多线程

  User //服务进程的uid

  Server //服务器守护进程的完整路径

  log_on_failure //登陆错误日志记录

  }

其中service是必需的关键字,且属性表必须用大括号括起来。每一项都定义了由service-name定义的服务。Service-name是任意的,但通常是标准网络服务名,也可增加其他非标准的服务,只要它们能通过网络请求激活,包括localhost自身发出的网络请求。每一个service有很多可以使用的attribute(属性),操作符可以是“=”、“+=”或“-=”。所有属性可以使用“=”,其作用是分配一个或多个值,某些属性可以使用“+=”或“-=”的形式,其作用分别是将其值增加到某个现存的值表中,或将其值从现存值表中删除。

用户应该特别注意的是:每一项用户想新添加的网络服务描述既可以追加到现有的/etc/xinetd.conf中,也可以在/etc/xinetd.conf中指定的目录中分别建立单独的文件。RedHat 7.x以上的版本都建议采用后一种做法,因为这样做的可扩充性很好,管理起来也比较方便,用户只需要添加相应服务的描述信息即可追加新的网络服务。RedHat 7.x默认的服务配置文件目录是/etc/xinetd.d,在该目录中使用如下命令可以看到许多系统提供的服务:

#cd /etc/xinetd.d

#ls

chargen cvspserver daytime-udp echo-udp ntalk qmail-pop3 rexec rsh sgi_fam telnet time-udp chargen-udp daytime echo finger pop3 qmail-smtp rlogin rsync talk time wu-ftpd

然而,上述的许多服务,默认都是关闭的,看看如下文件内容:

#cat telnet

# default: off //表明默认该服务是关闭的

# description: The telnet server serves telnet sessions; it uses /

# unencrypted username/password pairs for authentication.

service telnet

{

   disable = yes //表明默认该服务是关闭的

   flags = REUSE

   socket_type = stream

   wait = no

   user = root

   server = /usr/sbin/in.telnetd

   log_on_failure += USERID

}

服务的开启与关闭

一般说来,用户可以使用两种办法来对网络服务进行开启或关闭,下面分别进行介绍。

1.使用/etc/xinetd.d目录下的文件进行配置

针对上面列出的关于Telnet的例子,用户想要开启服务,只需要通过使用vi 编辑器改写该文件为如下内容。然后,需要使用/etc/rc.d/init.d/xinetd restart来激活Telnet服务即可。

  service telnet

  {

   disable = no //将该域置为“no”,则表明开启该服务

   flags = REUSE

   socket_type = stream

   wait = no

   user = root

   server = /usr/sbin/in.telnetd

   log_on_failure += USERID

  }

相对应的,如果用户想要关闭某个不需要的服务,则将上述的“disable = no”改为“disable = yes”即可,这样就修改了服务配置,并且再次使用/etc/rc.d/init.d/xinetd restart来启用最新的配置。

 


在suse linux 中重启xinetd方法:
cd /etc/init.d/
./xinetd restart

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值