Linux系统服务之inetd

2023-11-19

inetd进程介绍:

inetd程序是一个Linux守护进程。您可能已经知道守护进程是一些特殊的程序:它们在被启动之后,自愿放弃对调用自己终端的控制权。守护进程与系统其余部分的接口只有依靠进程间通信(Interprocess Communication,IPC)通道、或者依靠向系统全局性日志文件(Log File)才能发送数据项。

inetd的角色是作为Telnet和FTP等与网络服务器相关的进程的“超级服务器”。这是一个简单的道理:并不是全部的服务器进程(包括那些接受新的Telnet和FTP连接的进程)都会如此频繁地被调用,以至于必须要有一个程序随时运行在内存中。因此为了避免出现可能有几十种服务都运行在内存中准备被使用的情况,它们都列在inetd的配置文件/etc/inetd.conf中。而代替它们的是inetd监听着进入的连接。这样只需要有一个进程在内存中就可以了。

inetd的另外一个优点是程序员并不想把需要网络连接的进程都编写到系统中去。inetd程序将处理网络代码,并把进入的网络数据流作为各个进程的标准输入(Standard-In,即Stdin)传递到其中。这些进程的输出(Stdout)将会被送回连接到该进程的主机去。

注意:除非你正在进行编程,否则是不需要连接到inetd的Stdin/Stdout功能上。从另一方面来说,如果有人打算编写一个简单的命令脚本程序并让它出现在网络中,就值得深入研究这个极为强大的功能。

1.etc/inetd.conf文件

etc/inetd.conf文件是inetd的配置文件。它的结构很简单:每一行语句代表一种服务。服务定义语句的格式如下所示:

srvce_name sock_type protocol [no]wait user srvr_prog srvr_prog_args

2.安全性与inetd.conf文件

你将会发现在大多数的linux安装中,许多服务在缺省的情况下是打开的。如果你的系统将向因特网开放(包括通过拨号点对点协议被连通),你想做的第一件事就会是把一切都关闭!决不要假设因为你的系统没有对公众进行宣传,别人就不会找到它。从相反的方向看,寻找存在安全性攻击隐患系统的工具软件是既容易找到又容易使用的。

关闭服务的第一个步骤是把etc/inetd.conf文件里所有用不着的服务性说明语句都改为注释语句。

一般来说,你会发现下面的方法更容易使用:先把全部东西都改为注释语句(彻底关闭网络服务),再有选择地打开需要的服务。

在完成对etc/inetd.conf文件的修改之后,需要向守护进程报告其配置文件已经被修改了。这是通过向该守护进程发送HUP信号来实现的。先使用下面的命令找出inetd.conf对应的进程ID:

[ root@ford /root ] # ps auxw | grep inetd | grep -v grep

这个命令的输出类似于下面的内容:

root 359 0.0 0.1 1232 168 ? S Jun21 0 : 00 inetd

输出中的第二列告诉我们进程ID号(这里就是359)。为了发送HUP信号,我们需要使用Kill命令(把这个程序叫做Kill多少有些误导。实际上,它只是向进程发送信号而已。缺省的情况下,它会发出请求某个程序终止运行的信号)。

下面是使用Kill命令发送HUP信号的方法:

$ kil -1 359

应该把上面命令中的359换成从你的系统上得到的进程编号。



1.引言:

它可以为多种服务管理连接,当 inetd 接到连接时,它能够确定连接所需的程序,启动相应的进程,并把 socket 交给它 (服务 socket 会作为程序的标准输入、 输出和错误输出描述符)。 使用 inetd 来运行那些负载不重的服务有助于降低系统负载,因为它不需要为每个服务都启动独立的服务程序。
  一般说来, inetd 主要用于启动其它服务程序,但它也有能力直接处理某些简单的服务, 例如 chargen、 auth, 以及 daytime。

inetd 是通过rc系统启动的。 inetd_enable 选项默认设为 NO,但可以在安装系统时, 由用户根据需要通过 sysinstall 来打开。

inetd.conf则是inetd的配置文件。 inetd.conf文件告诉inetd监听哪些网络端口,为每个端口启动哪个服务。在任何的网络环境中使用Linux 系统,第一件要做的事就是了解一下服务器到底要提供哪些服务。不需要的那些服务应该被禁止掉,最好卸载掉,这样黑客就少了一些攻击系统的机会。查看 “/etc/inetd.conf”文件,了解一下inetd提供哪些服务。用加上注释的方法(在一行的开头加上#号),禁止任何不需要的服务,再给 inetd进程发一个SIGHUP信号。

inetd提供一种简单的方法是应用程序具有网络功能
  对于TCP服务器,inetd监听在应用程序已知的端口上,监听链接请求,接受连接,映射链接到标准输入,标准输出和标准错误输出,启动适当的服务器.
  对于UDP服务器,当UDP服务器的已知端口上数据可读时,inetd要求操作系统通知他,知道inetd启动的服务器中止,inetd再在已知端口上进行下一步操作。

2.超级服务器的工作原理:

由于服务器套接字初始化方式非常类似,所以可以设计一个专门的服务器负责初始化工作,并且它将根据接入端口不同调用相应的服务程序进行工作,这些服务程序在未被接入前都处于睡眠等待状态。采用超级服务器的方式可以让服务器程序采用统一方式管理。

 超级服务器将采用select的方式并发检测在文件/etc/inetd.conf中说明的TCP/UDP端口,一旦发现有客户接入就创建一个子进程。超级服务器inetd是服务接入者,它在创建字进程时候调用exec()载入具体的服务程序。在子进程中关闭倾听套接字,父进程中关闭连接套接字,于是父进程继续检测,子进程开始为客户端进行服务。对于wait服务程序,超级服务器inet载入它时候将其在检测集合中删除,等待该服务结束后才能接入下次服务。服务程序完毕后将发送SIGCHLD信号,超级服务器将其继续加入检测集合。当系统管理员修改超级服务器配置文件后将发送SIGHUP信号,超级服务器将重新初始化。

inetd是监视一些网络请求的守护进程,其根据网络请求来调用相应的服务进程来处理连接请求。

3./etc/inetd.conf配置文件:

Inetd.conf文件是Linux系统中的重要文件之一。它保存了系统提供internet服务的数据库。通过这个文件,你可以对这些服务加以控制,如打开/关闭某项服务,使它们更为安全的运行等等很多。希望这篇文章能尽量解释地完整。

1)域

在inetd.conf文件中每项有效的条目中都应该包含以下的域。

*服务名

* 套接字类型

* 协议类型

* wait/nowait[.max]

* 用户名[.组]

* 服务程序

* 服务程序的参数

当然如果你要定义Sun-RPC服务,在inetd.conf文件则需要以下的类型域:

* 服务名/版本

* 套接字类型

* rpc/协议类型

* wait/nowait[.max]

* 用户名[.组]

* 服务程序

* 服务程序的参数

服务名是在/etc/services文件中经过定义的有效服务名称(如telnet,echo等)。如果服务被用来定义Sun-RPC服务,它就必须在/etc/rpc文件中定义。

套接字类型域包含以下几种:

* stream - stram

* dgram - datagram

* raw - raw

* rdm - reliabl! y delivered message

* seqpacket - sequenced packet

此域取决于使用何种的套接字类型.

协议类型域必须是已经在/etc/protocols文件中定义过的类型。最常见的是tcp和udp,Sun-RPC服务要在协议前加上“rpc/”(如rpc/tcp或者rpc/udp)

Wait/nowait域只用于数据报套接字,其它的都使用nowait参数。如果服务是多线程的,意味着在与对端建立连接后将释放套接字,inetd进程可以通过些套接字接收更多的消息,这时些用“nowait”条目。如果服务是单线程,表示服务将在同一个socket中处理所有的外来数据报,直到超时,这种情况下使用“wait”条目。Max参数,用一个点与wait/nowait隔开,定义了inetd进程在一分钟之内最大产生的实例数目。

用户域定义了服务的使用者。组参数,通过点与用户名隔开,定义了除/etc/passwd文件中之外的可以运行服务的组ID。

服务程序是在套接字请求时执行的程序的完整路径。如果是inted进程内置的服务,此处应为“internally”。

服务程序参数提供程序运行的所需的参数,同样的,如果是内置服务,此处也为“internally”。

2)服务

现在来看一下不同的服务,以便加深理解。 

 telnet   stream   tcp      ;nowait   root     /usr/sbin/tcpd   in.telnetd

* 服务名:   telnet

* 套接字类型:   stream

* 协议类型:   tcp

* Wait/Nowait[.max]: nowait

* 用户名[.组]:   root

* 服务程序:   /usr/sbin/tcpd

* 参数:   in.telnetd

3) 开启& 关闭 服务

非常简单,只要在想要关闭的服务前面加上一个#,比如想要关闭23端囗,被telnet使用,只要象下面这样。

#telnet   stream   tcp     nowait   root     /usr/sbin/tcpd   in.telnetd

这时,telnet服务已经关闭了,以后,如果我想让朋友通过telnet访问我的计算机,我只需要把#去掉,就象这样。

telnet   stream   tcp     nowait   root     /usr/sbin/tcpd   in.telnetd

这时,telnet服务又被开启,就是这么简单。重新启动inetd进程让改动生效,用下面的命令。

james:~ # killall -HUP inetd

4. 守护进程

有时候在服务程序参数域中,你会看到一些选项,如:

smtp stream   tcp      nowait   root     /usr/sbin/sendmail     sendmail -bs

在上一行的末尾,有“-bs”! ,表明使用b和s参数,这同使用下面的命令有着同样的效果:

hoodl um:~ # sendmail -bs

因此,如果你想为守护进程使用某项参数,只要把它们加入到服务程序参数域就可以了。具体的参数可以通过man进行查询。

5. TCP Wrappers

TCP Wrappers是保护网络服务的应用,通常用在第6列-服务程序域。

telnet   stream   tcp     nowait   root     /usr/sbin/tcpd   in.telnetd

TCP Wrappers使用两个文件,/etc/hosts.allow和/etc/hosts.deny,限制某项服务的使用。Hosts.allow文件内是允许访问服务的主机列表,hosts.deny内含禁止访问服务的主机。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux系统服务之inetd 的相关文章

  • 没有可用的符号表信息

    我正在测试第三方的库 它崩溃了 当我想查看崩溃的原因时 我的 gdb 告诉我没有可用的调试符号 Program received signal SIGSEGV Segmentation fault Switching to Thread 0
  • 在 Linux 上的 Python 中使用受密码保护的 Excel 工作表

    问题很简单 我每周都会收到一堆受密码保护的 Excel 文件 我必须解析它们并使用 Python 将某些部分写入新文件 我得到了文件的密码 当在 Windows 上完成此操作时 处理起来很简单 我只需导入 win32com 并使用 clie
  • 在 Linux 中禁用历史记录 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 要在 Linux 环境中禁用历史记录 我执行了以下命令 export HISTFILESIZE 0 export HISTSIZE 0 u
  • 修改linux下的路径

    虽然我认为我已经接近 Linux 专业人士 但显然我仍然是一个初学者 当我登录服务器时 我需要使用最新版本的R 统计软件 R 安装在 2 个地方 当我运行以下命令时 which R I get usr bin R 进而 R version
  • awk 子串单个字符

    这是columns txt aaa bbb 3 ccc ddd 2 eee fff 1 3 3 g 3 hhh i jjj 3 kkk ll 3 mm nn oo 3 我可以找到第二列以 b 开头的行 awk if substr 2 1 1
  • Bash 解析和 shell 扩展

    我对 bash 解析输入和执行扩展的方式感到困惑 对于输入来说 hello world 作为 bash 中的参数传递给显示其输入内容的脚本 我不太确定 Bash 如何解析它 Example var hello world displaywh
  • 跟踪 Linux 程序中活跃使用的内存

    我想跟踪各种程序在特定状态下接触了多少内存 例如 假设我有一个图形程序 最小化时 它可能会使用更少的内存 因为它不会重新绘制窗口 这需要读取图像和字体并执行大量库函数 这些对象仍然可以在内存中访问 但实际上并没有被使用 类似的工具top它们
  • 使用 grep 查找包含所有搜索字符串的行

    我有一个文件 其中包含很多与此类似的行 id 2796 some model Profile message type MODEL SAVE fields account 14 address null modification times
  • GLIBCXX_3.4.26 未找到在 BeagleBone 上运行交叉编译的程序

    我有以下程序 include
  • 如何禁用 GNOME 桌面屏幕锁定? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何阻止 GNOME 桌面在几分钟空闲时间后锁定屏幕 我已经尝试过官方手册了在红帽 https access redhat com doc
  • nginx 上的多个网站和可用网站

    通过 nginx 的基本安装 您的sites available文件夹只有一个文件 default 怎么样sites available文件夹的工作原理以及如何使用它来托管多个 单独的 网站 只是为了添加另一种方法 您可以为您托管的每个虚拟
  • Jenkins中找不到环境变量

    我想在詹金斯中设置很多变量 我试过把它们放进去 bashrc bash profile and profile of the jenkins用户 但 Jenkins 在构建发生时找不到它们 唯一有效的方法是将所有环境变量放入Jenkinsf
  • 为什么 Linux perf 使用事件 l1d.replacement 来处理 x86 上的“L1 dcache misses”?

    在英特尔 x86 上 Linux用途 https stackoverflow com a 52172985 149138事件l1d replacements来实施其L1 dcache load misses event 该事件定义如下 计数
  • Linux中的CONFIG_OF是什么?

    我看到它在很多地方被广泛使用 但不明白在什么场景下我需要使用它 What is 配置 OF OF 的全名是什么 打开固件 这是很久以前发明的 当时苹果公司正在生产基于 PowerPC CPU 的笔记本电脑 而 Sun Microsystem
  • 大多数 Linux 系统头文件与 C++ 兼容吗?

    大多数 Linux 系统头文件 API C 兼容吗 今天我试图做这样的事情 include
  • Linux中的定时器类

    我需要一个计时器来以相对较低的分辨率执行回调 在 Linux 中实现此类 C 计时器类的最佳方法是什么 有我可以使用的库吗 如果您在框架 Glib Qt Wx 内编写 那么您已经拥有一个具有定时回调功能的事件循环 我认为情况并非如此 如果您
  • 域套接字“sendto”遇到“errno 111,连接被拒绝”

    我正在使用域套接字从另一个进程获取值 就像 A 从 B 获取值一样 它可以运行几个月 但最近 A 向 B 发送消息时偶尔会失败 出现 errno 111 连接被拒绝 我检查了B域套接字绑定文件 它是存在的 我也在另一台机器上做了一些测试 效
  • 加载数据infile,Windows和Linux的区别

    我有一个需要导入到 MySQL 表的文件 这是我的命令 LOAD DATA LOCAL INFILE C test csv INTO TABLE logs fields terminated by LINES terminated BY n
  • linux perf:如何解释和查找热点

    我尝试了linux perf https perf wiki kernel org index php Main Page今天很实用 但在解释其结果时遇到了困难 我习惯了 valgrind 的 callgrind 这当然是与基于采样的 pe
  • nslookup 报告“无法解析 '(null)': 名称无法解析”,尽管它成功解析了 DNS 名称

    我在 ubuntu 上 并且正在运行 docker 默认桥接网络 我有 Zookeeper kafka 的容器化版本 以及我编写的与 kafka 对话的应用程序 I do a docker exec it

随机推荐

  • Python中如何使用boolean类型的数据

    在写代码的过程中 遇到了定义boolean类型变量的问题 之前一直试图用java或者c定义布尔变量的方法 一直不奏效 经过一旦学习之后才明白 和java竟然只是大小写的问题 在python中将java中的true携程True 将false携
  • Educational Codeforces Round 149 (Rated for Div. 2)A~D

    Grasshopper on a Line 题意 给出n和k 求从0到n最少走几步 以及步长 要求步长不能整除k 思路 从n往下找到 k不等于0的数 输出该数和n 该数即可 如果n k 0 那就只需要一步 代码 gt File Name a
  • 探索Java8——默认方法

    文章目录 什么是默认方法 不断演进的API 初始版本API 第二版API 概述默认方法 什么是默认方法 在传统的Java程序中 实现接口的方式是通过Implements把接口中的每一个方法提供一个实现 或者从父类继承他的实现 然而 在实际开
  • redis搜索 - KEYS命令

    文章目录 KEYS命令 使用 使用场景 KEYS命令 KEYS命令用于搜索匹配某个模式的所有key 例如常见的keys 命令 会返回所有的键 Time complexity O N 使用 KEYS命令支持以下正则匹配模式 h llo mat
  • [STM32]详解单片机GPIO输入模式配置-上拉下拉与浮空

    前面说到单片机的GPIO主要输出模式主要有推挽模式和开漏模式 除了连接到片内外设的模拟输入模式和复用输入功能以外 这里再说一下通用输入模式配置 STM32单片机的通用输入模式主要有输入浮空 输入上拉与输入下拉 当配置成上拉模式 即GPIO
  • python rsa加密之后byte类型存储到数据库中_python3 rsa加密

    遇到了跟你一样的问题 此js封装的源码 如下 希望看到的大神解决了的话帮我一下 RSA a suite of routines for performing RSA public key computations in JavaScript
  • c语言字符串相关函数的分析

    c语言中 常见的字符串相关函数主要分为两类 1 与字符串长度无关的函数 如strcpy strcat strcmp 2 与字符串长度有关的函数 如strlen strncpy strncat strncmp strlen 用于求字符串的长度
  • 1130:找第一个只出现一次的字符(C C++)

    题目描述 给定一个只包含小写字母的字符串 请你找到第一个仅出现一次的字符 如果没有 输出no 输入 一个字符串 长度小于100000 输出 输出第一个仅出现一次的字符 若没有则输出no 输入样例 abcabd 输出样例 c 代码 inclu
  • 【Unity】Delegate, Event, UnityEvent, Action, UnityAction, Func 傻傻分不清

    Unity Delegate Event UnityEvent Action UnityAction Func 傻傻分不清 Delegate 委托 函数指针 一个简单的例子 一对一依赖 一个简单的例子 一对多依赖 所以话说 委托有啥用呢 事
  • LDAP简介及其使用

    LDAP简介 LDAP Lightweight Directory Access Protocol 的意思是 轻量级目录访问协议 是一个用于访问 目录服务器 Directory Servers 的协议 这里所谓的 目录 是指一种按照树状结构
  • java button中加入背景图片不显示

    emmmm 写一下关于在button中添加图片作为背景的经历 就 先记录下错误的地方 JLabel stat new JLabel new ImageIcon img left png 这里再left png的路径的开头少了个点 就一直都不
  • Centos7安装Nessus教程

    本文为学习笔记 仅限学习交流 不得利用 从事危害国家或人民安全 荣誉和利益等活动 请参阅 中华人民共和国网络安全法 Nessus安装包 链接 https pan baidu com s 1FJMu8WMZPSjoqQpes GCng 提取码
  • C++中#ifndef, #define, #endif的作用和使用的注意事项

    在C 语言编程中 我们经常会接触到头文件 比如说声明类 或者声明命名空间等 而每次在编写xxx h的头文件时 编程书上都会让我们在代码的前后加上如下的三句代码 ifndef XXX H define XXX H endif 其中 代表中间具
  • DDP入门

    DDP 即动态动态规划 可以用于解决一类带修改的DP问题 我们从一个比较简单的东西入手 最大子段和 带修改的最大子段和其实是常规问题了 经典的解决方法是用线段树维护从左 右开始的最大子段和和区间最大子段和 然后进行合并 现在我们换一种方法来
  • 软件测试人员必备的60个测试工具清单,果断收藏了!

    据统计 中国软件外包市场的潜力和机会已远远超过软件王国印度 不过由于软件人才的严重不足致使我国软件发展遭遇 瓶颈 国家为了大力培养软件人才 不断采取积极有效的措施 我国对软件测试人才的需求数量还将持续增加 因此软件测试工程师也就成为了IT职
  • golang ---JSON-ITERATOR 使用

    jsoniter json iterator 是一款快且灵活的 JSON 解析器 Jsoniter 是最快的 JSON 解析器 它最多能比普通的解析器快 10 倍之多 独特的 iterator api 能够直接遍历 JSON 极致性能 0
  • 《图像分割Unet网络分析及其Pytorch版本代码实现》

    最近两个月在做学习图像分割方面的学习 踩了无数的坑 也学到了很多的东西 想了想还是趁着国庆节有时间来做个总结 以后有这方面需要可以来看看 神经网络被大规模的应用到计算机视觉中的分类任务中 说到神经网络的分类任务这里不得不提到CNN 卷积神经
  • 低代码,虽然有点毒瘤,但管用就好

    最近看到不少低门槛开发软件应用的新闻 30 分钟搭一款核酸检测登记应用 2 小时紧急上线抗疫求助应用 00 后低代码开发者毕业月薪过万 等等 近期 广西防城港市出现疫情 全市展开一轮大规模核酸检测 柳钢工人彭期文在钉钉上仅用 30 分钟就通
  • Sqli-labs靶场详细攻略Less 29-33

    Less 29 33 Less 29 GET Error based IMPIDENCE MISMATCH Having a WAF infront of web application 这一关在web应用前有一个waf 在关卡列表界面直接
  • Linux系统服务之inetd

    inetd进程介绍 inetd程序是一个Linux守护进程 您可能已经知道守护进程是一些特殊的程序 它们在被启动之后 自愿放弃对调用自己终端的控制权 守护进程与系统其余部分的接口只有依靠进程间通信 Interprocess Communic