本文内容来自《鸟哥的私房菜》
=========================
先来看一看预设的 /etc/xinetd.conf 这个档案的内容是什么吧!
[root@linux ~]# vi /etc/xinetd.conf
#
# Simple configuration file for xinetd
#
# Some defaults, and include /etc/xinetd.d/
defaults
{
instances = 60 <==同一服务的同时连线数最多可达 60 个
log_type = SYSLOG authpriv <==登入后,会被纪录到登入档的资讯
log_on_success = HOST PID <==若成功的登入时,记录的资讯有哪些?
log_on_failure = HOST <==若登入失败,则记录的资讯又是如何?
cps = 25 30 <==同一秒钟内最大连线数量为 25 个,若超过 25 个,
则该服务会暂时停止 30 秒!
}
includedir /etc/xinetd.d <==更多的设定值在 /etc/xinetd.d 那个目录内
基本上,这个预设引数档的意义是:『当某个使用 super daemon 管理的服务启动时,除非该服务已经设定好管理的专案,否则将以上述 xinetd.conf 内的预设引数带入。』的意思,也就是说,这仅是预设值, 但我们可以自行指定新的设定值来取代 xinetd.conf 内的预设值啦! 也就是说,这个档案设定成,在预设的状态下『:一个服务最多可达 60 个连线,且同一秒内连线上的连线不可超过 25 个。而若登入的成功与否时, 会分别记录不同的资讯到登入档当中。』这样说,可以比较清楚了吧? ^_^ 至于更多的引数说明,我们会在底下再强调的!
既然这只是个预设引数档,那么自然有更多的服务引数档案啰~没错~而所有的服务引数档都在 /etc/xinetd.d 里面,这是因为上表当中的最后一行啊!这样瞭了吧! ^_^。 那么每个引数档案的内容是怎样呢?一般来说,他是这样的:
service
{
………….
}
第一行一定都有个 service ,至于那个
= : 表示后面的设定引数就是这样啦!
+= : 表示后面的设定为『在原来的设定里头加入新的引数』
-+ : 表示后面的设定为『在原来的引数舍弃这里输入的引数!』
用途不太相同,敬请留意呦!好了!底下再来说一说那些 attribute 与 value !
attribute
(功能)
assing_op
(允许的动作)
说明与范例
一般设定专案:
disable
yes
no
允许该 server 可以执行或者是不能执行!当设定为 yes 表示该服务不能执行! 这个设定是一定要的啦。如果我想要启动某个服务,那么这里就要设定成为:disable = no
socket_type
stream
dgram
raw
stream 为连线机制较为可靠的 TCP 封包,若为 UDP 封包则使用 dgram 机制。 raw 代表 server 需要与 IP 直接对谈!例如 telnet 使用 TCP ,所以:socket_type = stream
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
完整档名
这个就是指出这个服务的启动程式!例如要启动 telnet 的话,其实就是 in.telnetd 这支程式啦!所以这个时候在这里输入 server = /usr/sbin/in.telnetd
server_args
program
一些引数
这里应该输入的就是你的 server 那里需要输入的一些引数啦!例如 in.telnetd 当中,我们还可以加入某些引数!
log_on_success
PID
HOST
USERID
EXIT
DURATION
在『成功登入』之后,需要记录的专案:PID 为纪录该 server 启动时候的 process ID , HOST 为远端 WordPress 主机的 IP 、 USERID 为登入者的帐号、 EXTI 为离开的时候记录的专案、 DURATION 为该使用者使用此服务多久?
log_on_failure
HOST
USERID
ATTEMPT
RECORD
当登入失败之后被 syslog 登入的专案:HOST 为远端 WordPress 主机的 IP,USERID 为登入者帐号、 ATTEMPT 为记录登入失败者企图的意图为何、 RECORD 为记录远端 WordPress 主机的资讯!以及为何本机 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 的要求,转到另一部 WordPress 主机上去!呵呵!这个好玩呦! 例如当有人要使用你的 ftp 时,你可以将他转到另一部机器上面去!那个 IP_Address 就代表另一部远端 WordPress 主机的 IP 啰!
includedir
directory
表示将某个目录底下的所有档案都给他塞进来 xinetd.conf 这个设定里头!这东西有用多了, 如此一来我们可以一个一个设定不同的专案!而不需要将所有的服务都写在 xinetd.conf 当中!你可以在 /etc/xinetd.conf 发现这个设定呦!
安全控管专案:
bind
IP_Address
这个是设定『允许使用此一服务的介面卡』的意思!举个例子来说,你的 Linux WordPress 主机上面有两个 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 或者是 WordPress 主机名称可以登入!』如果是 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 登入你的 WordPress 主机使用该 server !
no_access
0.0.0.0
192.168.1.0/24
host_name
domain_name
跟 only_from 差不多啦!就是用来管理可否进入你的 Linux WordPress 主机启用你的 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 。
OK!我们就利用上面这些引数来架构出我们所需要的一些服务的设定吧! 参考看看底下的设定方法啰! 我们说过,使用 super daemon 来管理 WordPress 主机,最大的优点就是多了一道管理的手续, 所以,可以进行比较多的监控动作,像上一个小节我们提到的相关引数当中, 就能够发现到一些端倪了。在这里,我们举个简单的例子来说明一下整个 super daemon 的管理吧!但是要设定 telnet 的话,就得要安装 telnet 才行。 在 FC4 的版本上,我们安装的是 telnet-server-0.17-35 这个套件资料, 请您先以 rpm 的方式 来安装喔! ^_^
在预设的 /etc/xinetd.d/telnet 内容是这样的:
[root@linux ~]# vi /etc/xinetd.d/telnet
service telnet
{
flags = REUSE <==额外的引数使用 REUSE
socket_type = stream <==使用 TCP 的封包格式
wait = no <==可以有多个连线同时连进来
user = root <==启动者预设为 root
server = /usr/sbin/in.telnetd <==使用的是这支程式!
log_on_failure += USERID <==若登入错误,『加计』记录使用者 ID
disable = yes <==此服务预设关闭!
}
其实,主要的引数可以参考上一小节的表格,也可以直接利用『man xinetd.conf』来查阅! 不过,如果你对于这样的设定并不满意的话,其实还可以手动来修改呢! 因为我们知道, telnet 并不是个十分安全的服务,详细机制可以参考 站群服务器篇 的 远端连线站群服务器 来查阅, 所以,如果你想要更多的安全机制,举例来说,你想要让 telnet 在区域互联网内与 Internet 上面的连线机制有差异时,例如这样:
对内部网域开放较多许可权的部分:
假设 Linux WordPress 主机有两张互联网卡,对内的这一张 IP 为 192.168.1.100 ,且仅针对 192.168.1.0/24 这个网段提供登入。然后开放所有与 telnet 有关的许可权, 包含总连线数量与连线时间等。但是, 192.168.1.120 及 192.168.1.130 两个 IP 不允许登入;
对外部网域较多限制的设定:
对外的 IP 假设为 140.116.44.125 ,且仅允许台南的校园互联网 (140.116.0.0/16), 以及教育界的 WordPress 主机名称 (.edu.tw),另外,仅开放早上 1~9 点及 20~24 两个时段登入而已。 此外,最多容许十个连线进入。
在这样的规划情况下,我可以将刚刚上头的 /etc/xinetd.d/telnet 这个档案修改成为:
[root@linux ~]# vi /etc/xinetd.d/telnet
# 先针对对内的较为松散的限制来设定:
service telnet
{
disable = no <==预设就是启动 telnet 服务
bind = 192.168.1.100 <==只允许经由这个介面卡的封包进来
only_from = 192.168.1.0/24 <==只允许 192.168.0.0/24 这个网段
的 WordPress 主机连线进来使用 telnet 的服务
no_access = 192.168.1.{120,130} <==不许这些 PC 登入
instances = UNLIMITED <==同时允许连线不限制!
nice = 0 <==使用的优先顺序较高
flags = REUSE <==额外使用的引数
socket_type = stream <==使用 tcp 封包常用的连线型态
wait = no <==不需等待,可以同时允许多个连线
user = root <==启动程式的使用者身份
server = /usr/sbin/in.telnetd<==服务启动的程式
server_args = -a none <==上面那个程式的引数
log_on_failure += USERID <==错误登入时,要记录下来的内容
}
# 再针对外部的连线来进行限制呢!
service telnet
{
disable = no <==预设就是启动 telnet 服务
bind = 140.116.44.125 <==只允许经由这个介面卡的封包进来
only_from = 140.116.0.0/16 <==只允许 140.116.0.0 ~ 140.116.255.255
这个网段连线进来使用 telnet 的服务
only_from = .edu.tw <==重复设定,只有教务界才能连线!
access_times = 1:00-9:00 20:00-23:59
<==每天只有这两个时段开放服务
umask = 022 <==建立档案时的预设属性设定
instances = 10 <==同时只允许 10 个连线
nice = 10 <==使用的优先顺序较低
flags = REUSE <==额外使用的引数
socket_type = stream <==使用 tcp 封包常用的连线型态
wait = no <==不需等待,可以同时允许多个连线
user = root <==启动程式的使用者身份
server = /usr/sbin/in.telnetd<==服务启动的程式
server_args = -a none <==上面那个程式的引数
log_on_failure += USERID <==错误登入时,要记录下来的内容
}
在上面这个范例当中,我们用了很多的互联网 IP 显示方式,包括 192.168.1.0/24 , 以及 140.116.0.0/16 ,这代表『192.168.1.0~192.168.1.255 的所有 IP』以及『140.116.0.0 ~140.116.255.255 所有的 IP』更详细的说明,我们会在站群服务器篇内详谈的。 用了这个设定值之后,你会发现你的 telnet 针对两个网段来设计了! 设计完成之后,由于这是 xinetd 的设定档,所以启动的方式与观察的方式为:
# 如果您的 telnet 本来就有启动的话,那么会发现有一个连线存在你的系统中
[root@linux ~]# netstat -tulnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:23 0.0.0.0:* LISTEN 19255/xinetd
# 看到喔!是 xinetd 的 program name 呢!
# 重新修改 /etc/xinetd.d/telnet 之后,重新启动的方式与观察为:
[root@linux ~]# /etc/init.d/xinetd restart
[root@linux ~]# netstat -tulnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 140.116.44.125:23 0.0.0.0:* LISTEN 19281/xinetd
tcp 0 0 192.168.1.100:23 0.0.0.0:* LISTEN 19281/xinetd
# 有没有看到两个介面啊~而且, PID 会是同一个呢!