linux 中的xinetd是做啥用的?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux 中的xinetd是做啥用的?相关的知识,希望对你有一定的参考价值。

linux 中的xinetd是做什么用的?具体作用?

1.什么是xinetd
extended internet daemon
xinetd是新一代的网络守护进程服务程序,又叫超级Internet服务器,常用来管理多种轻量级Internet服务。
xinetd提供类似于inetd+tcp_wrapper的功能,但是更加强大和安全。
2. xinetd的特色
1) 强大的存取控制功能
— 内置对恶意用户和善意用户的差别待遇设定。
— 使用libwrap支持,其效能更甚于tcpd。
— 可以限制连接的等级,基于主机的连接数和基于服务的连接数。
— 设置特定的连接时间。
— 将某个服务设置到特定的主机以提供服务。
2) 有效防止DoS攻击
— 可以限制连接的等级。
— 可以限制一个主机的最大连接数,从而防止某个主机独占某个服务。
— 可以限制日志文件的大小,防止磁盘空间被填满。
3) 强大的日志功能
— 可以为每一个服务就syslog设定日志等级。
— 如果不使用syslog,也可以为每个服务建立日志文件。
— 可以记录请求的起止时间以决定对方的访问时间。
— 可以记录试图非法访问的请求。
4) 转向功能
可以将客户端的请求转发到另一台主机去处理。
5) 支持IPv6
xinetd自xinetd 2.1.8.8pre*起的版本就支持IPv6,可以通过在./configure脚本中使用with-inet6 capability选项来完成。
注意,要使这个生效,核心和网络必须支持IPv6。IPv4仍然被支持。
6) 与客户端的交互功能
无论客户端请求是否成功,xinetd都会有提示告知连接状态。
3. Xinetd的缺点
当前最大的缺点是对RPC支持的不稳定,但是可以启动protmap,使它与xinetd共存来解决这个问题。
4 使用xinetd启动守护进程
原则上任何系统服务都可以使用xinetd,然而最适合的应该是那些常用的网络服务,同时,这个服务的请求数目和频繁程度不会太高。
像DNS和Apache就不适合采用这种方式,而像FTP、Telnet、SSH等就适合使用xinetd模式。
系统默认使用xinetd的服务可以分为如下几类:
① 标准Internet服务:telnet、ftp。
② 信息服务:finger、netstat、systat。
③ 邮件服务:imap、imaps、pop2、pop3、pops。
④ RPC服务:rquotad、rstatd、rusersd、sprayd、walld。
⑤ BSD服务:comsat、exec、login、ntalk、shell、talk。
⑥ 内部服务:chargen、daytime、echo、servers、services、time。
⑦ 安全服务:irc。
⑧ 其他服务:name、tftp、uucp。
具体可以使用xinetd的服务在/etc/services文件中指出。
这个文件的节选内容:
# /etc/services:
# $Id: services,v 1.40 2004/09/23 05:45:18 notting Exp $
# service-name port/protocol [aliases ...] [# comment]
tcpmux 1/tcp # TCP port service multiplexer
tcpmux 1/udp # TCP port service multiplexer
rje 5/tcp # Remote Job Entry
rje 5/udp # Remote Job Entry
echo 7/tcp
echo 7/udp
discard 9/tcp sink null
discard 9/udp sink null
………
Internet 网络服务文件中,记录网络服务名和它们对应使用的端口号及协议。文件中的每一行对应一种服务,它由4个字段组成,中间用Tab键或空格键分隔,分别表示 “服务名称”、“使用端口”、“协议名称”及“别名”。在一般情况下,不要修改该文件的内容,因为这些设置都是Internet标准的设置。一旦修改,可能会造成系统冲突,使用户无法正常访问资源。Linux系统的端口号的范围为0~65 535,不同范围的端口号有不同的意义。
— 0:不使用。
— 1~1 023:系统保留,只能由root用户使用。
— 1 024~4 999:由客户端程序自由分配。
— 5 000~65 535:由服务器程序自由分配。
5. 解读/etc/xinetd.conf和/etc/xinetd.d/*(启动关闭)
安装xinetd包(原因是我想重启xinetd的时候发现xinetd是未注册的服务):
提示找不多xinetd服务,结果如下:
[root@linuxzgf ~]# service xinetd restart
xinetd: 未被识别的服务
[root@linuxzgf ~]# service xinetd reload
xinetd: 未被识别的服务
[root@linuxzgf ~]#
[root@linuxzgf ~]# service xinetd restart
xinetd: unrecognized service
怎么安装呢?so easy。。。。。 在linux安装镜像里有这个包,挂载上安装镜像,进入Server目录,找到包:
[root@localhost Server]# find -name 'xinet*'
./xinetd-2.3.14-10.el5.i386.rpm
[root@localhost Server]# rpm -ivh xinetd*
warning: xinetd-2.3.14-10.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing... ########################################### [100%]
1:xinetd ########################################### [100%

[root@localhost xinetd.d]# service xinetd restart
Stopping xinetd: [FAILED]
Starting xinetd: [ OK ]
[root@localhost xinetd.d]#

现在就安装并重启完成了xinetd服务。
或者使用如下命令重启:
# /etc/init.d/xinetd restart
1) /etc/xinetd.conf
xinetd 的配置文件是/etc/xinetd.conf,但是它只包括几个默认值及/etc/xinetd.d目录中的配置文件。如果要启用或禁用某项 xinetd服务,编辑位于/etc/xinetd.d目录中的配置文件。例如,disable属性被设为yes,表示该项服务已禁用;disable属性被设为no,表示该项服务已启用。/etc/xinetd.conf有许多选项,下面是RHEL 4.0的/etc/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
— instances = 60:表示最大连接进程数为60个。
— log_type = SYSLOG authpriv:表示使用syslog进行服务登记。
— log_on_success= HOST PID:表示设置成功后记录客户机的IP地址的进程ID。
— log_on_failure = HOST:表示设置失败后记录客户机的IP地址。
— cps = 25 30:表示每秒25个入站连接,如果超过限制,则等待30秒。主要用于对付拒绝服务攻击。
— includedir /etc/xinetd.d:表示告诉xinetd要包含的文件或目录是/etc/xinetd.d。
2) /etc/xinetd.d/*
下面以/etc/xinetd.d/中的一个文件(rsync)为例。
service rsync

disable = yes
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
log_on_failure += USERID

下面说明每一行选项的含义:
— disable = yes:表示禁用这个服务。
— socket_type = stream:表示服务的数据包类型为stream。
— wait = no:表示不需等待,即服务将以多线程的方式运行。
— user = root:表示执行此服务进程的用户是root。
— server = /usr/bin/rsync:启动脚本的位置。
— log_on_failure += USERID:表示设置失败时,UID添加到系统登记表。

6、 配置xinetd
1) 格式
/etc/xinetd.conf中的每一项具有下列形式:
service service-name

……

其中service是必需的关键字,且属性表必须用大括号括起来。每一项都定义了由service-name定义的服务。
service-name是任意的,但通常是标准网络服务名,也可增加其他非标准的服务,只要它们能通过网络请求激活,包括localhost自身发出的网络请求。有很多可以使用的属性,稍后将描述必需的属性和属性的使用规则。
操作符可以是=、+=或-=。所有属性可以使用=,其作用是分配一个或多个值,某些属性可以使用+=或-=,其作用分别是将其值增加到某个现存的值表中,或将其值从现存值表中删除。
2) 配置文件
相关的配置文件如下:
/etc/xinetd.conf
/etc/xinetd.d/* //该目录下的所有文件
/etc/hosts.allow
/etc/hosts.deny
3) disabled与enabled
前者的参数是禁用的服务列表,后者的参数是启用的服务列表。他们的共同点是格式相同(属性名、服务名列表与服务中间用空格分开,例如disabled = in.tftpd in.rexecd),此外,它们都是作用于全局的。如果在disabled列表中被指定,那么无论包含在列表中的服务是否有配置文件和如何设置,都将被禁用;如果enabled列表被指定,那么只有列表中的服务才可启动,如果enabled没有被指定,那么disabled指定的服务之外的所有服务都可以启动。
4) 注意问题
① 在重新配置的时候,下列的属性不能被改变:socket_type、wait、protocol、type;
② 如果only_from和no_access属性没有被指定(无论在服务项中直接指定还是通过默认项指定),那么对该服务的访问IP将没有限制;
③ 地址校验是针对IP地址而不是针对域名地址。
6 xinetd防止拒绝服务攻击(Denial of Services)的原因
xinetd能有效地防止拒绝服务攻击(Denial of Services)的原因如下。
1) 限制同时运行的进程数
通过设置instances选项设定同时运行的并发进程数:
instances=20
当服务器被请求连接的进程数达到20个时,xinetd将停止接受多出部分的连接请求。直到请求连接数低于设定值为止。
2) 限制一个IP地址的最大连接数
通过限制一个主机的最大连接数,从而防止某个主机独占某个服务。
per_source=5
这里每个IP地址的连接数是5个。
3) 限制日志文件大小,防止磁盘空间被填满
许多攻击者知道大多数服务需要写入日志。入侵者可以构造大量的错误信息并发送出来,服务器记录这些错误,可能就造成日志文件非常庞大,甚至会塞满硬盘。同时会让管理员面对大量的日志,而不能发现入侵者真正的入侵途径。因此,限制日志文件大小是防范拒绝服务攻击的一个方法。
log_type FILE.1 /var/log/myservice.log 8388608 15728640
这里设置的日志文件FILE.1临界值为8MB,到达此值时,syslog文件会出现告警,到达15MB,系统会停止所有使用这个日志系统的服务。
4) 限制负载
xinetd还可以使用限制负载的方法防范拒绝服务攻击。用一个浮点数作为负载系数,当负载达到这个数目的时候,该服务将暂停处理后续的连接。
max_load = 2.8
上面的设定表示当一项系统负载达到2.8时,所有服务将暂时中止,直到系统负载下降到设定值以下。
说明 要使用这个选项,编译时应加入“–with-loadavg”,xinetd将处理max-load配置选项,从而在系统负载过重时关闭某些服务进程,来实现防范某些拒绝服务攻击。
5) 限制所有服务器数目(连接速率)
xinetd可以使用cps选项设定连接速率,下面的例子:
cps = 25 60
上面的设定表示服务器最多启动25个连接,如果达到这个数目将停止启动新服务60秒。在此期间不接受任何请求。
6) 限制对硬件资源的利用
通过rlimit_as和rlimit_cpu两个选项可以有效地限制一种服务对内存、中央处理器的资源占用:
rlimit_as = 8M
rlimit_cpu=20
上面的设定表示对服务器硬件资源占用的限制,最多可用内存为8MB,CPU每秒处理20个进程。
xinetd的一个重要功能是它能够控制从属服务可以利用的资源量,通过它的以上设置可以达到这个目的,有助于防止某个xinetd服务占用大量资源,从而导致“拒绝服务”情况的出现。
参考技术A 通俗点讲可认为是 部分常用服务进程的总管。具体配置 和 内部管理了那些进程,那就因“主机”而异了;不同的管理员配置是不同的。 参考技术B 下面是 wiki 百科的 xinetd 词条。他应该是管理基于 Internet 的连接用的。类似于 Internet 程序的权限管理、log 程序。
不过 2005 年以后就再也没更新过吧,现在还有用处么?

In computer networking, xinetd, the eXtended InterNET Daemon, is an open-source daemon which runs on many Unix systems and manages Internet-based connectivity. It offers a more secure extension to or version of inetd, the Internet daemon.

xinetd features access control mechanisms such as TCP Wrapper ACLs, extensive logging capabilities, and the ability to make services available based on time. It can place limits on the number of servers that the system can start, and has deployable defence mechanisms to protect against port scanners, among other things.

On some implementations of Mac OS X, this daemon starts and maintains various Internet-related services, including FTP and telnet. As an extended form of inetd, it offers enhanced security. It replaced inetd in Mac OS X v10.3, and subsequently launchd replaced it in Mac OS X v10.4. However, Apple has retained inetd for compatibility purposes.
参考技术C 父进程,或者是宿主进程,主要是对某些进程进行控制本回答被提问者采纳 参考技术D 通俗解释一下吧!
比如说有一个寝室楼,里面有很多寝室,楼下有一个楼长,管理各个寝室。
xinetd就与这个差不多,linux有许多网络服务,是通过xinetd进行总体管理的,比如说大名鼎鼎的telnet服务,就是通过xinetd进行管理的。就是说,这个服务,用来管理多个小型的网络服务。
但是,由于采用这种统一管理的方式,导致了效率的降低,所以现在的大型网络服务都是自己管理自己,比如httpd等。所以说,xinetd有一些过时了,但是经典的网络服务还是需要由它进行统一管理的。

SetPixelFormat() 中的 PIXELFORMATDESCRIPTOR 参数是做啥用的?

【中文标题】SetPixelFormat() 中的 PIXELFORMATDESCRIPTOR 参数是做啥用的?【英文标题】:What is the PIXELFORMATDESCRIPTOR parameter in SetPixelFormat() used for?SetPixelFormat() 中的 PIXELFORMATDESCRIPTOR 参数是做什么用的? 【发布时间】:2010-03-29 18:51:16 【问题描述】:

通常在设置 OpenGL 上下文时,我只需使用必要的信息填写 PIXELFORMATDESCRIPTOR 结构并调用 ChoosePixelFormat(),然后使用从 ChoosePixelFormat() 返回的匹配像素格式调用 SetPixelFormat()。然后我只是简单地传递了初始描述符,而没有考虑太多原因。

但现在我使用 wglChoosePixelFormatARB() 而不是 ChoosePixelFormat(),因为我需要一些扩展特性,例如 sRGB 和多重采样。它采用整数的属性列表,就像 Linux 上的 XLib/GLX 一样,而不是 PIXELFORMATDESCRIPTOR 结构。那么,我真的必须填写一个描述符供 SetPixelFormat() 使用吗?当 SetPixelFormat() 已经具有像素格式描述符索引时,它使用描述符做什么?为什么我必须在两个不同的地方指定相同的 pixelformat 属性?哪个优先; wglChoosePixelFormatARB() 的属性列表,还是传递给 SetPixelFormat() 的 PIXELFORMATDESCRIPTOR 属性?

为了让问题更清楚,这里是函数原型:

/* Finds a best match based on a PIXELFORMATDESCRIPTOR,
and returns the pixelformat index */
int ChoosePixelFormat(HDC hdc, const PIXELFORMATDESCRIPTOR *ppfd);

/* Finds a best match based on an attribute list of integers and floats,
and returns a list of indices of matches, with the best matches at the head.
Also supports extended pixelformat traits like sRGB color space,
floating-point framebuffers and multisampling. */
BOOL wglChoosePixelFormatARB(HDC hdc, const int *piAttribIList,
    const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats,
    UINT *nNumFormats
);

/* Sets the pixelformat based on the pixelformat index */
BOOL SetPixelFormat(HDC hdc, int iPixelFormat, const PIXELFORMATDESCRIPTOR *ppfd);

编辑:MSDN 谈到了 SetPixelFormat() 参数:

指向包含逻辑像素格式规范的 PIXELFORMATDESCRIPTOR 结构的指针。系统的元文件组件使用这种结构来记录逻辑像素格式规范。该结构对 SetPixelFormat 函数的行为没有其他影响。

但我不知道这意味着什么,也不知道它与我的问题有何关系。

【问题讨论】:

【参考方案1】:

我相信您不必使用 PIXELFORMATDESCRIPTOR 和 ChoosePixelFormat,只需使用 wglChoosePixelFormatARB 并将返回的 int 设置为像素格式。这些函数仅用于查询窗口以匹配像素格式,SetPixelFormat 函数不知道您使用哪个函数来获得所需的像素格式。

以下讨论的结论:

我研究了 Wine 的 opengl 实现,他们完全忽略了该参数.. (internal_SetPixelFormat),但谁知道 ms 用它做什么,我看到的唯一安全方法是使用 wglChoosePixelFormatARB 函数查找像素格式,然后使用DescribePixelFormat 填写您传递回 SetPixelFormat 的结构。

【讨论】:

是的,wglChoosePixelFormatARB 取代了 ChoosePixelFormat,毫无疑问。但是 SetPixelFormat 仍然需要一个 PIXELFORMATDESCRIPTOR。这就是我困惑的根源。所以你最终得到一个 PIXELFORMATDESCRIPTOR,一个你传递给 wglChoosePixelFormatARB 的整数属性列表。 抱歉,我错过了那个,那可能是它存储有关所选像素格式的信息的地方,您可以通过将其传递给归零结构来测试它。 不,它没有。该类型是指向 const PIXELFORMATDESCRIPTOR 的指针,因此它会读取它。它不写信给它。请参阅我的问题摘要中的函数原型。 您完全正确,我很抱歉没有花更多时间来理解您的问题。我现在也完全被这个参数弄糊涂了。当它应该已经知道有关pixelfomat的所有内容时,为什么还要在某个地方使用/存储结构。我研究了 Wine 的 opengl 实现,他们完全忽略了该参数.. tiny.cc/i11lj (internal_SetPixelFormat),但谁知道 ms 用它做什么,我看到的唯一安全方法是使用 wglChoosePixelFormatARB 函数找到像素格式,然后使用 DescribePixelFormat 来填写您传递回 SetPixelFormat 的结构。 抱歉,我不接受这个答案。你的回答很好,但我仍然对此感到困惑,也想给别人一个机会。我不完全相信使用 DescribePixelFormat 会起作用,因为 PIXELFORMATDESCRIPTOR 无法保存与 wglChoosePixelFormatARB 返回的某些像素格式相同的信息。

以上是关于linux 中的xinetd是做啥用的?的主要内容,如果未能解决你的问题,请参考以下文章

SetPixelFormat() 中的 PIXELFORMATDESCRIPTOR 参数是做啥用的?

Laravel 中的 `HtmlString` 是做啥用的?

TTF/OTF 头表中的 checkSumAdjustment 是做啥用的?

Visual Studio 中的“stdafx.h”是做啥用的?

sqlplus 中的 -s 选项是做啥用的?

Python 中的“__docformat__”是做啥用的?