Linux (转)解析 xinetd.conf
一般而言,在 /etc/rc.d/init.d/ 里面的 scripts 都是发展者之
RPM 所提供的,如果您有兴趣自行发展你的软件的话,那么可以直接以这样的方式来独立启动的!不过,我们也可以经由
super daemon 来管理我们的服务,因为这个 super daemon 可以提供相当多的功能,尤其是安全性方面的功能,所以,我们就来谈一谈如何使用这个东西吧!
先来看一看预设的 /etc/xinetd.conf 这个档案的内容是什么吧!
# # Simple configuration file for xinetd # # Some defaults, and include /etc/xinetd.d/ defaults includedir /etc/xinetd.d |
内容格式: service <service_name> { <attribute> <assign_op> <value> <value> ... ... } |
在上面的预设范例当中,说明的是:『如果没有指定的
services ( defaults ) 那么就用 {} 里面的设定来执行之!』正常的情况之下有点像上面例子中的黄色字体所示,那个
<> 里头的数据我们先来说明一下:注:那个 assign_op
主要有三种形式,分别如下:
= : 表示后面的设定参数就是这样啦!
+= : 表示后面的设定为『在原来的设定里头加入新的参数』
-+ : 表示后面的设定为『在原来的参数舍弃这里输入的参数!』
用途不太相同,敬请留意呦!好了!底下再来说一说那些
attribute 与 value !
attribute (功能) |
assing_op (允许的动作) |
说明 (范例) |
一般设定项目: | ||
disable |
yes no |
允许该 server 可以执行或者是不能执行! 当设定为 yes 表示该服务不能执行! |
socket_type |
stream dgram raw |
当联机为 TCP 封包时,则使用 stream 类型 当联机为 UDP 封包时,则使用 dgram 类型 raw 代表 server 需要与 IP 直接对谈! |
protocol |
tcp udp ... |
这个东西说的是,联机的状态使用的是哪一种协议!?各个协议的代号可以参考 /etc/protocols 内容!此外,除非是你自己设定的服务,否则这个可以不用设定啦! |
wait |
yes no |
这就是我们刚刚提到的 Multi-threaded 与 single-threaded 的方式啦!一般来说,我们希望大家的要求都可以同时被启用,所以可以设定 wait = no |
user |
UID root |
还记得我们在 账号管理 那一篇提到的 UID 概念吗?对啦!这个 UID 就是那个 UID 啦!要注意的是,假如你的服务启动者不要以 root 为主的话,那么这个地方就可以改变其它的使用者,例如 nobody !这个咚咚也会有安全防护的机制存在!此外,需要注意这个 UID 必须存在于 /etc/passwd 。 |
group | GID | 跟 user 的意思相同!只是这个 GID 的使用者也必须存在于 /etc/group 当中! |
instances |
number UNLIMITED |
这个是『在同一时间之内,同一个服务可以允许的联机数目』的意思,你可以写入一个『数字』来控制联机数目,也可以使用 UNLIMITED 来告诉系统『没有上限』啰!例如你在同时段之内仅允许 ftp 联机有 30 个,那么这里就可以输入 30 啦! |
nice | -19 ~ 19 | 还记得我们在 程序管理 里面谈到的那个 nice 指令吗?!对啦!这里就是这个东西啰!数字越小( 负值 )代表该程序越优先被执行! |
server |
program /usr/sbin/in.ftpd |
这个就是指出这个服务的启动程序!例如要启动 ftp 的话,其实就是 in.ftpd 这支程序啦!所以这个时候在这里输入 server = /usr/sbin/in.ftpd |
server_args | 一些参数 | 这里应该输入的就是你的 server 那里需要输入的一些参数啦!例如 in.ftpd 当中,我们可能就需要输入 -l -a 这个参数说! |
log_on_success |
PID HOST USERID EXIT DURATION |
在『成功登入』之后,需要记录的项目:PID为纪录该 server 启动时候的 process ID ,HOST 为远程主机的 IP、USERID 为登入者的账号、EXTI 为离开的时候记录的项目、DURATION 为该使用者使用此服务多久? |
log_on_failure |
HOST USERID ATTEMPT RECORD |
当登入失败之后被 syslog 登入的项目:HOST为远程主机的 IP,USERID为登入者账号、ATTEMPT为记录登入失败者企图的意图为何、RECORD为记录远程主机的信息!以及为何本机 server 不能启动的原因!主要有 login, shell, exec, finger 等指令可以使用在这里!( 基本上,可以在 /etc/hosts.allow 或 /etc/hosts.deny 书写内容 )。 |
进阶设定项目: | ||
env | 'name=value' | 这一个项目可以让你设定环境变量,环境变量的设定规则可以参考 认识 BASH Shell 。 |
port | number | 这里可以设定不同的服务与对应的 port ,但是请记住你的 port 与服务名称必须与 /etc/services 内记载的相同才行! |
redirect | IP_Address port | 将 client 端对我们 server 的要求,转到另一部主机上去!呵呵!这个好玩呦!例如当有人要使用你的 ftp 时,你可以将他转到另一部机器上面去!那个 IP_Address 就代表另一部远程主机的 IP 啰! |
includedir | directory_path | 表示将某个目录底下的所有档案都给他塞进来 xinetd.conf 这个设定里头!这东西有用多了,如此一来我们可以一个一个设定不同的项目!而不需要将所有的服务都写在 xinetd.conf 当中!你可以在 /etc/xinetd.conf 发现这个设定呦! |
安全控管项目: | ||
bind | IP_Address | 这个是设定『允许使用此一服务的适配卡』的意思!举个例子来说,你的 Linux 主机上面有两个 IP ,而你只想要让 IP1 可以使用此一服务,但 IP2 不能使用此服务,这里就可以将 IP1 写入即可!那么 IP2 就不可以使用此一 server 啰! |
interface | IP_Address | 跟 bind 相同! |
only_from |
0.0.0.0 192.168.1.0/24 host_name domain_name |
这东西用在安全机制上面,也就是管制『只有这里面规定的 IP 或者是主机名称可以登入!』如果是 0.0.0.0 表示所有的 PC 皆可登入,如果是 192.168.1.0/24 则表示为 C class 的网域!亦即由 192.168.1.1 ~ 192.168.1.255 皆可登入!另外,也可以选择 domain name ,例如 .ev.ncku.edu.tw 就可以杜绝成大环工系的网域 IP 登入你的主机使用该 server ! |
no_access |
0.0.0.0 192.168.1.0/24 host_name domain_name |
跟 only_from 差不多啦!就是用来管理可否进入你的 Linux 主机启用你的 server 服务的管理项目! no_access 表示『不可登入』的 PC 啰! |
access_times |
00:00-12:00 HH:MM-HH:MM |
这个项目在设定『该服务 server 启动的时间』,使用的是 24 小时的设定!例如你的 ftp 要在 8 点到 16 点开放的话,就是: 08:00-16:00。 |
umask |
000 777 022 |
还记得在 档案权限 里面约略提过的 umask 这个东西吗?呵呵!没错!就是那个鬼玩意儿啰!可以设定使用者建立目录或者是档案时候的属性!系统建议值是 022 。 |
当然上面的参数不需要每个都设定啦!只要设定需要的就可以啦!而在 /etc/xinetd.conf
这个档案当中,一定会看到『 includedir = /etc/xinetd.d 』这一行!这说明的是,除了
/etc/xinetd.conf 之外,所有在 /etc/xinetd.d 的档案都是可以用来设定的啦!!好了,我们来举个简单的
telnet 的例子吧!那就是 /etc/xinetd.d/telnet 这个档案,如果你的 Mandrake
9.0 当中没有这个档案,那表示还没有安装telnet-server-krb5-1.2.5-1mdk这个套件,请先安装他吧!然后,他的内容有点像这样:
service
telnet { disable = yes <==服务预设是关闭的 flags = REUSE <==额外使用的参数 socket_type = stream <==使用 tcp 封包常用的联机型态 wait = no <==不需等待,可以同时允许多个联机 user = root <==启动程序的使用者身份 server = /usr/sbin/telnetd <==服务启动的程序 server_args = -a none <==上面那个程序的参数 log_on_failure += USERID <==错误登入时,要记录下来的内容 } |
上面的表格中,已经说明了每一项参数的意义!如果原本的默认值你并不满意,那么你可以修改成比较安全与多一点机制。假设你这个
Linux 是一部主机,而且他有两块网络接口,分别是对外的 140.116.44.125 与对内的
192.168.0.254 这两个,如果你想要让对内的接口限制较松,而对外的限制较严格,你可以这样的来设定呢:
#
先针对对内的较为松散的限制来设定: service telnet { disable = no <==预设就是启动 telnet 服务 bind = 192.168.0.254 <==只允许经由这个适配卡的封包进来 only_from = 192.168.0.0/24 <==只允许 192.168.0.0/24 这个网段 的主机联机进来使用 telnet 的服务 instances = UNLIMITED <==同时允许联机不限制! nice = 0 <==使用的优先级较高 flags = REUSE <==额外使用的参数 socket_type = stream <==使用 tcp 封包常用的联机型态 wait = no <==不需等待,可以同时允许多个联机 user = root <==启动程序的使用者身份 server = /usr/sbin/telnetd <==服务启动的程序 server_args = -a none <==上面那个程序的参数 log_on_failure += USERID <==错误登入时,要记录下来的内容 } # 再针对外部的联机来进行限制呢! |
呵呵!如上面的设定,我们可以将 telnet 的启动项目进行更多的限制!如此一来,将有助于我们的安全防护呢!尤其如果可以针对不同的接口来设定,嘿嘿!就更加的棒啰!不过,请注意喔!如果照上面的设定,那么您的主机上面将会开了两个 23 port 的接口,分别是给两个接口来使用的呢!嗯!真好玩?同样的,你也可以针对自己的喜好来设定你的其它 daemon 使他挂在 xinetd 底下呢!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)