如果您常常上网去查看一些数据的话,尤其是关于 Unix-Like 的相关操作系统,如
FreeBSD, Unix, Linux 等等,应该会常常听到 daemons 这个字眼,那么 daemon
是什么东西呀!?怎么这么常被见到?呵呵,Daemon 的字面上的意思就是『守护神、恶魔?』还真是有点奇怪呦!
^_^""
先来谈一谈 daemon 这个玩意儿是个啥咚咚?还记得我们在
程序与资源管理
一文当中提到过程序的概念,程序有的在 bash 当中执行程序而触发的,也有开机的时候,
系统自行触发而在背景当中执行的。当然也有系统管理员在开机完成后,登入系统来触发的等等。
不论怎么说,这个
daemon 其实就是一个『在背景当中执行的程序』啦!
比较特殊的是,所谓的
daemon 通常是负责系统上面的某个服务 (service) ,
好让系统可以接受来自用户或者是网络客户(client)的要求,而加以工作。
那么什么又是服务 (service)?所谓的服务很简单啦,意思是说,主机提供的功能。
这些功能主要分为系统上面的,以及针对网络的服务。针对系统上面的服务,例如我们第四篇提到的 crond
与 atd 等等,他主要负责 Linux 主机上面的工作排程;至于网络服务呢?
包括远程联机 SSH 服务器,或者是全球信息网 WWW 服务器等等,这些让客户端连接上来取得数据的服务,
就是网络服务啦!
那您了解了,之所以要有主机服务器就是希望他可以提供我们一些网络服务,或者是主机端自己的服务,
好让我们用户或者是一般用户可以工作的更愉快!而主机要提供这些服务,必须要有相对应的 daemon
来进行服务需求的监听,例如要提供工作排程的服务,就得要有 atd 或者是 crond 这两个 daemon 才行;
而 daemon 的启动,其实就是某个程序 (program) 的执行,配合这个程序的配置文件,
就能够有效的启动该程序,加载常驻到内存当中成为 daemon ,并提供相对的服务啰!
一般来说,当我们以 run level 3 或者是 run level 5 完整开机进入 Linux 主机后,
系统已经提供我们很多的服务了!包括打印服务、工作排程服务、邮件管理服务等等;
那么这些服务是如何被启动的?他们的工作型态如何?底下我们就来谈一谈啰!
Tips: 很多时候,我们不会很细的去切分什么是 daemon 而什么是 service,
简单的来说,你可以将 service 与 daemon 视作相同的东西!
反正就是某个在背景当中执行的程序,他可以提供某些功能就是了! ^_^
| |
daemon 的主要分类
如果依据 daemon 的启动与管理方式,基本上,可以将 daemon 分为可独立启动的 stand alone ,
与透过统一安全机制管理的 Super daemon 两大类,这两类 daemon 的说明是这样的:
stand_alone:
就字面上的意思来说,stand alone 就是『独立的启动』的意思,也就是说,该
daemon 启动之后,就直接常驻在内存当中啰!他虽然会一直的占用系统的资源,
但最大的优点就是,他会一直启动的啦!所以当有要求来的时候,他就会很快速的响应啰!常常用在这一种
daemon 的网络服务如常见的全球信息网 WWW 的 daemon (httpd) 这一个即是一例!
因为他需要比较快的响应速度啊!
super daemon:
相对于 stand alone 的执行方式,这一种服务的启动方式则是藉由统一的一个 daemon
来负责唤起该服务!这一个统一负责的
daemon 就是 inet 这支服务啦!不过,在后来的 Linux 发展套件中,则是使用
xinet 这个设定啰!我们这里以 FC4 的 xinet 来做说明。当有网络的服务要求来的时候,该要求会先送给
xinet 这个服务,然后 xinet 根据该网络要求送来的数据封包的内容 ( 该内容会记录
IP 与 port ) 来将数据封包送给实际运作的服务!而该服务这个时候才会启动的!最常见到的就是
ftp 这支网络服务啦!
这种 daemon 最大的优点就是当没有数据封包来的时候,该服务不会一直占据系统资源
( 该服务会在 sleeping 的状态吧! ) ,但是相对的,他的反应时间也会比较慢,
因为还要花费一段时间去『唤醒』该服务呀!
那么这两种启动的方式哪一个比较好呢?见仁见智啦!而且还要看该主机的工作负荷与实际的用途说!
例如当你的主机是用来作为
WWW 服务器的,那么 httpd 自然就以 stand alone 的启动方式较佳!事实上,我们常常开玩笑的说明
stand alone 与 super daemon 的情况,可以银行的窗口来作为说明的范例!
stand alone :
在银行里面,假设有一种单一服务的窗口,例如存钱窗口,所以,当你需要存钱的时候,
直接前往该窗口,就有『专人』为您服务啦!
super daemon :
在银行里面假设还有另外一种复合型态的窗口,同时提供转账、资金调度、
提款等等的业务,那当你需要其中一项业务的时候,就需要前往该窗口,
但是坐在窗口的这个营业员,拿到你的需求单之后,往后面一丢『喂!那个转账的仁兄!该你的工作了』
那么那个仁兄就开始工作去!然而里头还有资金调度与提款等负责业务的仁兄呢?他们在干嘛?
嘿嘿!看看报、喝喝茶啰!
那么这里就会引出另外一个问题啦!假设银行今天的人潮特别的汹涌,
所以这个窗口后面除了你之外还有很多的人!那么想一想,这个窗口是要『一个完成再来下一个』
还是『全部都把你们的单据拿来,我全部处理掉』呢?呵呵!是不是不太一样?基本上,
针对这种 super daemon 的处理模式有两种,分别是这样:
- multi-threaded:
就是我们提到的,全部的客户之要求都给他拿来,一次给他交办下去,所以一个服务同时会负责好几个程序。
- single-threaded:
这个就是目前我们『人类的银行』最常见的方式啦,不论如何,反正一个一个来,
第一个没有处理完之前,后面的请排队!嘿嘿!所以如果
client 的要求突然大增的话,那么这些晚到的 client 可得等上一等!
另外,需要注意的是,既然银行里头有这两种窗口同时存在,所以啰,在 Linux
系统里面,这两种 daemon 是可以同时存在的啦!也就是说,某些服务可以使用
stand alone 来启动,而有其他的服务则可以使用 xinet ( 或者是 inet )
大致的情况就是这样啦!瞭乎!?
不过,如果以 daemon 的工作状态来区分,则主要分为两类:
- signal-control
这种 daemon 是透过讯号来管理的,只要有任何需求进来,他就会立即启动去处理!
例如打印机的服务 (cupsd)
- interval-control
这种 daemon 则主要是『每隔一段时间就主动的去执行某项工作』,
所以,即使你设定好配置文件之后,他也不会立刻执行,而是某个时间点才会去工作。举例来说,
atd 与 crond 就是这种 (每分钟执行一次!)
另外,如果您对于开发程序很有兴趣的话,那么可以自行查阅一下『 man 3 daemon 』
看看系统对于 daemon 的详细说明吧! ^_^。
与服务有关的端口口对应资料:
/etc/services
现在我们知道系统所提供的服务是执行某个 program ,由该程序的功能所提供的。
也知道一部主机上面可能会同时拥有多个服务,当然,可能会有多个网络服务同时存在。
此时你会不会觉得很奇怪啊?我一部主机同时开启 WWW 与 FTP 时,
客户端跟我要数据,那么主机会响应什么数据给客户端啊?奇不奇怪呢?
其实,就如同上面提到的人类的银行一样,不同的服务有不同的窗口号码,
同样的,在 Linux 系统上面,不同的网络服务,确实有不一样的监听埠口 (listen port)。
我们可以透过指定指向主机的某个端口口 (port) 来连上我们想要的服务呢!
举例来说,我们可以在浏览器上面输入这样的网址:
有没有发现,两个网址都是指向 ftp.isu.edu.tw 这个义守大学的 FTP 网站,
但是浏览器上面显示的结果却是不一样的?是啊!这是因为我们指向不同的服务嘛!
一个是 http 这个 WWW 的服务,一个则是 ftp 这个服务,当然显示的结果就不同了。
那我们怎么知道那个 port 是由那个服务所启动的呢?
因为目前已经有很多既定的网络协议,这些通讯协议使用的 port 是固定的,
也是公认的标准的 port number ,我们可以称为 well known 的信息。
那么我们 Linux 主机有没有相关的信息呢?当然有啊!那就是
/etc/services 这个档案啊!我们取 FC4 的这个档案一部份来说明:
[root@linux ~]# vi /etc/services
......省略......
ftp-data 20/tcp
ftp-data 20/udp
ftp 21/tcp
ftp 21/udp fsp fspd
ssh 22/tcp # SSH Remote Login Protocol
ssh 22/udp # SSH Remote Login Protocol
telnet 23/tcp
telnet 23/udp
......省略......
http 80/tcp www www-http # WorldWideWeb HTTP
http 80/udp www www-http # HyperT
pop3 110/tcp pop-3 # POP version 3
pop3 110/udp pop-3
sunrpc 111/tcp portmapper # RPC 4.0 portmapper TCP
sunrpc 111/udp portmapper # RPC 4.0 portmapper UDP
netbios-ns 137/tcp # NETBIOS Name Service
netbios-ns 137/udp
netbios-dgm 138/tcp # NETBIOS Datagram Service
netbios-dgm 138/udp
netbios-ssn 139/tcp # NETBIOS session service
netbios-ssn 139/udp
......省略......
# 这个档案的内容是以底下的方式来编排的:
# <daemon name> <port 与数据型态> <该服务的说明>
|
像上面说的是,第一栏为 daemon 的名称、第二栏为该 daemon 所使用的 port
号码与其网络数据封包传送时候的类型,主要为确定联机后才进行数据传输的可靠的 TCP 封包,
以及较快速但不确定性较高的 UDP 封包等。
举个例子说,那个 e-mail 的发信协议为 smtp 这个服务,而这个服务的使用之
port 即为 25 啦!就这样!
Tips: 请特别注意!虽然有的时候您可以藉由修改 /etc/services 来更改一个服务的 port
号,不过并不建议如此做,因为很有可能会造成一些协议的错误情况!
这里特此说明一番呦!(除非您要架设一个地下网站,否则的话,使用
/etc/services 原先的设定就好啦!)
| |
Daemon 的命名规则:
每一个服务的开发者,当初在开发他们的服务时,都有特别的故事啦!
不过,无论如何,这些服务的名称被建立之后,被挂上
Linux 使用时,通常在服务的名称之后会加上一个 d ,例如例行性命令的建立的
at, 与 cron 这两个服务,通常会被称为 atd 与 crond,这个 d 代表的就是 daemon
的意思。所以,在
资源管理那一章中,我们使用了
ps 与 top 来观察程序时,都会发现到很多的 xxxd 的程序,呵呵!通常那就是一些
daemon 的程序啰!
系统的 Daemons 放在哪里:
我们说过, daemon 其实是一支可以在背景执行的程序,这个程序可以负责系统的某个服务。
而既然要负责某个服务,当然啰,就需要有所谓的配置文件啰~而为了让使用者可以很轻易的启动该服务,
因此各主要的 Linux distributions 都会替他们的系统进行较有亲和力的启动 daemon 的方式,
那就是利用 shell script 啦!这也是为何我们会在第三篇的时候建议您务必要学习 shell
script 的原因啊!^_^
举个例子来说,在 FC4 上面管理系统注册表档的服务为 syslogd 这个 daemon,
那么你如何启动这个 daemon 呢?可以查询一下 man 8 syslogd 来看看到底他需要如何被启动。
想必看的结果是『很烦ㄟ!』干嘛要这样启动啊!真是麻烦~
此时,启动 syslogd 这个 daemon 的 shell script (/etc/init.d/syslog) 就帮上忙了!
你只要『 /etc/init.d/syslog restart 』就能够重新启动 syslogd 呢!
真是很方便啊!而该 shell script 就会主动的去读取相关的配置文件,好让我们的设定生效啊!^_^
OK!那么这些 daemons 的 shell scripts 放在哪里啊?他们放置的地方依据 stand alone
与 super daemon 的差异而有所不同,基本上,是放在这些地方:
- stand alone:
这个放置在 /etc/init.d/
这个目录里面,几乎所有的
RPM 安装的套件之启动 scripts 都在这里啦!不过,实际上,我们的 FC4 是放置到 /etc/rc.d/init.d/* ,
但你依旧可以记忆成 /etc/init.d ,因为所有的 unix like 机器都有这个目录!
- super daemon:
这个工作的那一支服务其实就是 xinet
或者是 inet 啦!请注意, xinet 也是一个 daemon 呢!他是 stand
alone 启动的,也就是他会一直在监听大家的需求,所以 xinet 的启动 scripts
写在 /etc/init.d/xinetd 这个 scripts
里面啰!但是挂在这个 daemon 里头的服务之设定项目呢?嗯!就是写在
/etc/xinetd.conf 与 /etc/xinetd.d/* 这个目录里面的任何档案!
更详细的来说明每个目录底下的设定的话,总的来说,是这样的:
/etc/init.d/*
OK!先来了解一下 stand alone 的 daemon 是怎么启动的呢?!很简单,假如我们要启动
syslog
这支记录登录文件的服务,那么要启动他的话,就直接下达:
[root@linux ~]# /etc/init.d/syslog start
[root@linux ~]# service syslog start
|
那个 service 是一支程序,基本上,也只是用来启动 /etc/init.d/ 底下的 shell script
而已~至于指令或者是档案后面接的参数,亦即是档名之后加上 start
即可,或者是使用 Red Hat 系统有的这个 service script
来进行启动的功能!如果你还记得我们前几节提到过的
shell scripts 的话,那么或许还记得
case ..... esac
这个有选择性的项目的语法吧!?没错!这几支服务就是以 bash
scripts 里头的 case 语法写成的!因此,只要加上后面的参数,如此一来, scripts
就会自动的去找寻执行档来执行啰!如果有兴趣的话,
可以在你的系统里面的该目录下开一个档案来观看一下,就知道如何写啰!
/etc/xinetd.conf
这个档案就是设定 xinet 服务的参数档案啦!
/etc/xinetd.d/*
这个目录里面的所有档案就是个别挂上 xinet 的所有服务啦!例如赫赫有名的
wu-ftpd 及 telnet 与 pop3 等等!
daemon 的启动方式: service
知道了一些有关 daemon 的相关知识后,再来,那么我们如何启动一个 daemon 呢?
其实,我们知道所谓的 daemon 就是一支可以在系统背景下面运作的程序 (program) 啊,
所以,要启动该 daemon ,就是找到他的执行档,执行他就是了。
不过,因为该 daemon 的执行档所需要加的参数太多了!举例来说,你可以使用『man syslogd』及
『man sshd』来查阅一下该 daemon 要启动时的设定参数!
为了克服这样的困扰,所以各主要 Linux distributions 都会针对该服务设计一个比较亲和的
shell script 来进行启动的程序啊!那就是 /etc/init.d/ 底下的档案,以及
/etc/xinetd.d/ 底下的设定数据。因此,启动服务的方法就变得很简单了。
只要设定好该服务的配置文件,然后下达:
1. 启动 stand alone 服务的方式:以 syslog 为例:
[root@linux ~]# /etc/init.d/syslog start
2. 启动 super daemon 服务的方式:以 telnet 为例:
[root@linux ~]# vi /etc/xinetd.d/telnet (设定方式参考下节)
[root@linux ~]# /etc/init.d/xinetd restart
|
另外,除了这样的启动方式之外,我们还可以透过 Fedora ( Red Hat 系统 ) 所提供的 service
这个程序来进行 daemon 的启动喔!其实 service 仅是一支 script 啦,
他可以解析后面带有的参数,然后去到 /etc/init.d/ 去启动相对应的服务名称的 script 而已!
有兴趣的话,可以自行去解析 /sbin/service 这支 shell script 啊!
底下我们大略说明一下他的用法!
[root@linux ~]# service [service name] (start|stop|restart|...)
参数:
service name:亦即是需要启动的服务名称,需与 /etc/init.d/ 对应;
start|... :亦即是该服务要进行的工作。
范例:
范例一:重新启动 crond 这支 daemon :
[root@linux ~]# service crond restart
[root@linux ~]# /etc/init.d/crond restart
|
在上面的范例当中,其实启动方式以 service 这个程序,或者直接去到 /etc/init.d/ 底下启动,
都一样啦!自行去解析 /sbin/service 就知道为啥了! ^_^
Tips: 事实上,在 Linux 系统中,要『开或关某个 port 』,就是需要『
启动或关闭某个服务』啦!因此,你可以找出某个 port 对应的服务,程序对应的服务,
进而启动或关闭他,那么那个经由该服务而启动的 port ,自然就会关掉了!
| |
前面提到,Super daemon 就是一支总管许多服务的 daemon ,这支 daemon 在 FC4 上面即是 xinet 啰~
通常我们也称呼为 xinetd 啦~这支 daemon 来管理许多的服务是有好处的,
最大的优势就是『安全性较高!』。怎么说呢?因为 super daemon 可以透过额外的数据分析,
来管理谁可以、谁不能使用某个服务,因此,多了一道类似防火墙的手续,自然就能够比较安全一些啦。
而且他还可以记录该服务的使用状态,也可以记录错误登入的信息,用在管理一些比较危险的服务上面,
确实有他的必要性啦!
底下我们就来谈一谈,这个 super daemon 到底是如何分析的,
当然,就得要先谈一谈,这个 xinetd 的主要预设参数档: /etc/xinetd.conf 啰~
解析 xinetd.conf
先来看一看预设的 /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_name>
{
<attribute> <assign_op> <value> <value> ...
.............
}
|
第一行一定都有个 service ,至于那个 <service_name> 里面的内容,
则与 /etc/services 有关,因为他可以对照着 /etc/services 内的名称与 port number
来决定所要启用的 port 是那个啊!然后相关的参数就在两个大刮号中间。
attribute 是一些 xinetd 的管理参数, assign_op 则是参数的设定方法。
assign_op 的主要设定形式为:
= : 表示后面的设定参数就是这样啦!
+= : 表示后面的设定为『在原来的设定里头加入新的参数』
-= : 表示后面的设定为『在原来的参数舍弃这里输入的参数!』
用途不太相同,敬请留意呦!好了!底下再来说一说那些 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 |
-20 ~ 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 为远程主机的 IP、USERID 为登入者的账号、EXIT 为离开的时候记录的项目、
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 |
表示将某个目录底下的所有档案都给他塞进来 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 。 |
OK!我们就利用上面这些参数来架构出我们所需要的一些服务的设定吧!
参考看看底下的设定方法啰! ^_^
一个简单的 telnet 范例设定
我们说过,使用 super daemon 来管理主机,最大的优点就是多了一道管理的手续,
所以,可以进行比较多的监控动作,像上一个小节我们提到的相关参数当中,
就能够发现到一些端倪了。在这里,我们举个简单的例子来说明一下整个 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 主机有两张网络卡,对内的这一张 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),
以及教育界的主机名 (.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 这个网段
的主机联机进来使用 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 会是同一个呢!
|
呵呵!如上面的设定,我们可以将 telnet 的启动项目进行更多的限制!
如此一来,将有助于我们的安全防护呢!尤其如果可以针对不同的接口来设定,嘿嘿!
就更加的棒啰!不过,请注意喔!如果照上面的设定,那么您的主机上面将会开了两个
23 port 的接口,分别是给两个接口来使用的呢!嗯!真好玩?同样的,
你也可以针对自己的喜好来设定你的其他 daemon 使他挂在 xinetd 底下呢!
事实上,除了使用 xinetd 的配置文件来设定安全机制之外,
我们还可以利用额外的机制来抵挡某些不受欢迎的数据源喔!
那就是 /etc/hosts.allow 以及 /etc/hosts.deny 这两个档案的功能啦!
这两个档案可以藉由分析:
- 启动的服务名称 (daemon 执行档档名);
- 客户端的 IP 来源或网段来源。
来进行客户端使用者是否能够登入的判断呢!不过,虽然这两个档案已经被整合到 xinetd 里面去了,
不过,要获得更多的功能,还是得要安装 tcp_wrappers 这个套件才行!
因为,这两个档案本身就是 tcp_wrappers ( 其实是 /usr/sbin/tcpd 那个档案而已啦! ) 的配置文件啊!
而他也可以整合到整个系统的服务里头去,可以算是最最基础的一个防火墙架构啦! ^_^
其实, /etc/hosts.allow 与 /etc/hosts.deny 是 /usr/sbin/tcpd 的配置文件,
而这个 /usr/bin/tcpd 则是用来分析进入系统的 TCP 封包的一个软件,他是由 TCP Wrappers 所提供的。
那为什么叫做 TCP_Wrappers 呢?那么 wrappers 有包裹的意思,所以说,这个套件本身的功能就是在分析
TCP 网络数据封包啦!那么刚刚我们稍微提到我们网络的封包数据主要是以 TCP
封包为主,这个 TCP 封包的文件头至少记录了来源与目主机的 IP 与 port ,因此,若藉由分析
TCP 封包,就可以比对看我要不要让这个数据进入到主机里面来啰!所以啦,我们要使用
TCP_Wrappers 来控管的,就是:
- 来源 IP
- port (就是服务啦)
TCP_Wrappers 设定 TCP 封包是否可以进入的配置文件在 /etc/hosts.allow 与 /etc/hosts.deny
当中。因此,基本上,如果一个服务是受到 xinetd 或 TCP_Wrappers 的控制时,那么该服务就会受限于
hosts.allow 与 hosts.deny 的管理了!而如果你自己安装的套件当中( 亦即使用
Tarball 安装的方式之套件 ),除非有自行定义支持 TCP_Wrappers 的功能 ,否则就无法使用这个玩意啰!嘿嘿!
那么这两个档案是干嘛用的?刚刚不是提过哪!他主要是用来规范 TCP 封包的规则的,所以呢,
里面记录的当然就是:『某些 IP 在特定服务中是否能够进入主机』!那么要怎么写?
这两个档案的内容基本的语法是:
<service(program_name)> : <IP, domain, hostname> : <action>
|
所以我们要先找出来那个 service_name 才行,例如以我们刚刚的 telnet 为例,那个
service_name 是什么呢?其实指的就是在 xinetd.conf 配置文件中的 server 这个设定后面接的程序名称啦!所以,
telnet 在 FC4 底下的名称为 in.telnetd
因此,如果你不想让 140.116.44.202 这个地址及 140.116.32.0/255.255.255.0
这个 C class 的网域进入你的主机的话,那么可以这样在 /etc/hosts.deny 里面设定: (
关于 IP, 网域, 网段, 还有相关的网络知识,在这个基础篇当中我们不会谈到,
详细的数据请先自行参考服务器架设篇的内容! )
[root@linux ~]# vi /etc/hosts.deny
in.telnetd : 140.116.44.202 140.116.32.0/255.255.255.0 : deny
|
当然也可以写成两行,亦即是:
[root@linux ~]# vi /etc/hosts.deny
in.telnetd : 140.116.44.202 : deny
in.telnetd : 140.116.32.0/255.255.255.0 : deny
|
这样一来,对方就无法以 telnet 进入你的主机啦!方便吧!不过,既然如此,为什么要设定成
/etc/hosts.allow 及 /etc/hosts.deny 两个档案呢?其实只要有一个档案存在就够了,
不过,为了设定方便起见,我们存在两个档案,其中需要注意的是:
- 写在 hosts.allow 当中的 IP 与网段,为预设『可通行』的意思,亦即最后一个字段 allow 可以不用写;
- 而写在 hosts.deny 当中的 IP 与网段则预设为 deny ,第三栏的 deny 亦可省略;
- 这两个档案的判断依据是: (1) 以 /etc/hosts.allow 为优先,而
(2) 若分析到的 IP 或网段并没有纪录在 /etc/hosts.allow ,则以 /etc/hosts.deny 来判断。
也就是说, /etc/hosts.allow 的设定优先于 /etc/hosts.deny 啰!了解了吗?基本上,只要
hosts.allow 也就够了,因为我们可以将 allow 与 deny 都写在同一个档案内,
只是这样一来似乎显得有点杂乱无章,因此,通常我们都是:
- 允许进入的写在 /etc/hosts.allow 当中;
- 不许进入的则写在 /etc/hosts.deny 当中。
此外,我们还可以使用一些特殊参数在第一及第二个字段喔!内容有:
- ALL:代表全部的 program_name 或者是 IP 都接受的意思,例如 ALL: ALL: deny
- LOCAL:代表来自本机的意思,例如: ALL: LOCAL: allow
- UNKNOWN:代表不知道的 IP 或者是 domain 或者是服务时;
- KNOWN:代表为可解析的 IP, domain 等等信息时;
再强调一次,那个 service_name 其实是启动该服务的程序,举例来说, /etc/init.d/ssh 这个 script 里面,
实际上启动 ssh 服务的是 sshd 这个程序,所以,你的 service_name 自然就是 sshd 啰!
而 /etc/xinetd.d/telnet 内有个 server 的设定项目,
那个项目指到 in.telnetd 这个程序来启动的喔!要注意的很!(请分别使用 vi 进这两支 scripts 查阅)
好了,我们还是以 telnet 为例子来说明好了,现在假设一个比较安全的流程来设定,就是:
- 只允许 140.116.44.0/255.255.255.0
与 140.116.79.0/255.255.255.0 这两个网域,及 140.116.141.99 这个主机可以进入我们的 telnet 服务器;
- 此外,其他的 IP 全部都挡掉!
这样的话,我可以这样设定:
[root@linux ~]# vi /etc/hosts.allow
in.telnetd: 140.116.44.0/255.255.255.0
in.telnetd: 140.116.79.0/255.255.255.0
in.telnetd: 140.116.141.99
in.telnetd: LOCAL
[root@linux ~]# vi /etc/hosts.deny
in.telnetd: ALL
|
那么有没有更安全的设定,例如,当当有其他人扫瞄我的
telnet port 时,我就将他的 IP 记住!以做为未来的查询与认证之用!
是有的!只是,那就得要有额外的动作参数加在第三栏了。主要的动作有:
- spawn (action)
可以利用后续接的 shell 来进行额外的工作,且具有变量功能,主要的变量内容为:
%h (hostname), %a (address), %d (daemon)等等;
- twist (action)
立刻以后续的指令进行,且执行完后终止该次联机的要求 (DENY)
我们知道 finger 可以反向追踪网络封包的来源,所以,我希望这样:
- 利用 safe_finger 去追踪出对方主机的信息;
- 将该追踪到的结果以 email 的方式寄给 root ;
- 在对方屏幕上面显示不可登入的讯息
此时可以利用 spwan (action1) | (action2) : twist (action3) 来进行,
也就是说,其实在 /etc/hosts.deny 的第三个字段可以继续延伸下去的!整个信息有如这样:
[root@linux ~]# vi /etc/hosts.deny
in.telnetd: ALL: spawn (echo "security notice from host `/bin/hostname`" ;\
echo; /usr/sbin/safe_finger @%h ) | \
/bin/mail -s "%d-%h security" root & \
: twist ( /bin/echo -e "\n\nWARNING connection not allowed.\n\n" )
|
在上面的例子中,第三行的 root 那个账号,可以写成你的个人账号或者其他
e-mail ,以免很少以 root 身份登入 Linux 主机时,容易造成不知道的情况,另外,最后几行,亦即
:twist 之后的那几行为同一行。如此一来,当未经允许的计算机尝试登入你的主机时,
对方的屏幕上就会显示上面的最后一行,并且将他的
IP 寄到 root ( 或者是你自己的信箱 )那里去!
另外请注意,那个 /usr/sbin/safe_finger 是由 tcp_wrappers 套件所提供的,
所以您必须要安装该套件才行喔! ^_^
好了,现在假设您已经知道了 daemons 的启动档案放置的目录,也知道了服务与
port 的对应,那么要如何查询目前系统上面已经启动了的服务呢?不要再打混了!已经学过了
ps 与
top
应该要会应用才对耶!呵呵!没错,可以使用 ps 与 top 来找寻已经启动了的服务的程序与他的
PID 呢!不过,我们怎么知道该服务启动的 port 是哪一个?呵呵!好问题!可以直接使用
netstat 这个网络状态观察指令来检查我们的
port 呢!甚至他也可以帮我们找到该 port 的程序呢( PID )!这个指令的相关用途,我们在
程序与资源管理 那一章已经讲过了,
不清楚的话请回去查一查先~这里仅介绍如何使用喔~
观察系统启动的服务:
观察系统已启动的服务方式很多,不过,我们最常使用 netstat 来观察。
基本上,以 ps 来观察整个系统上面的服务是比较妥当的,因为他可以将全部的 process 都找出来。
不过,我们比较关心的,还是在于有启动网络监听的服务啊,所以,
鸟哥会比较喜欢使用 netstat 来查阅啦。
范例一:找出目前系统开启的『网络服务』有哪些?
[root@linux ~]# netstat -tulp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 *:ftp *:* LISTEN 1605/vsftpd
tcp 0 0 *:pop3 *:* LISTEN 1613/dovecot
tcp 0 0 *:ssh *:* LISTEN 1587/sshd
udp 0 0 *:bootpc *:* 26035/dhclient
# 看一看上头,Local Address 的地方会出现主机名与服务名称,
# 要记得的是,可以加上 -n 来显示 port number ,而服务名称与 port
# 对应则是写在 /etc/services 里头喔!
范例二:找出所有的有监听网络的服务 (包含 socket 状态):
[root@linux ~]# netstat -lnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 *:ftp *:* LISTEN 1605/vsftpd
tcp 0 0 *:pop3 *:* LISTEN 1613/dovecot
tcp 0 0 *:ssh *:* LISTEN 1587/sshd
udp 0 0 *:bootpc *:* 26035/dhclient
Active UNIX domain sockets (only servers)
Proto RefCnt Flags Type State I-Node PID/Program name Path
unix 2 [ ACC ] STREAM LISTENING 5188 1673/master private/tlsmgr
unix 2 [ ACC ] STREAM LISTENING 5192 1673/master private/rewrite
......以下省略......
# 仔细的瞧一瞧啊,除了原有的网络监听 port 之外,还会有 socket 显示在上面,
# 我们可以清楚的知道有哪些服务被启动呢!
范例三:观察所有的网络连接状态,查询是否有异常的联机。
[root@linux ~]# netstat -anp
# 利用这个指令可以查出有问题的联机,还可取得 PID,
# 可以用来 kill 掉任何一个觉得怀疑的程序呢!
|
利用 netstat 可以取得很多跟网络有关的服务信息,透过这个指令,我们可以轻易的了解到网络的状态,
并且可以透过 PID 与 kill 的相关功能,将有问题的数据给他剔除说~
当然啦,要更详细的取得 PPID 的话,才能够完全的抵挡有问题的程序啦!
另外,除了已经存在系统当中的 daemon 之外,如何在一开机就完整的启动我们所需要的服务呢?
底下我们就来谈一谈 chkconfig 及 ntsysv 这两个好用的东西!
设定开机后立即启动服务的方法:
就如同上面提到的,我们使用 netstat 仅能观察到目前已经存在于系统当中的 daemon ,使用
service 这个指令或者是 /etc/init.d/* start 的方法,
仅能在目前的环境下启动某个服务而已。那么重新启动后呢?该服务是否还是继续的自动启动?
这个时候我们就得要复习一下,到底我的 Linux 主机是怎么开机的呢?
- BIOS
- MBR (boot loader)
- kernel loading
- init program
- initial script (/etc/rc.d/rc.sysinit)
- daemon start (/etc/rc.d/rc[0-6].d/*)
- local setting (/etc/rc.d/rc.local)
大致的情况是这样,看到啰~整个服务可以被开机就启动的地方有两个,
一个是在 daemon start (/etc/rc.d/rc[0-6].d/*) 那个目录下,该目录下的档案主要以 S 及 K
开头,分别代表开机时启动与关机时关闭的意思,更多信息可以参考
开机关机流程与 loader 那个章节~
也就是说,如果我可以将要启动的服务写入 /etc/rc.d/rc[0-6].d 目录内,
那么该服务就可以在开机的时候自动的被启动了!就是这样简单~
至于另一个也可以在开机时启动的档案,那就是 /etc/rc.d/rc.local 这个档案喔!
你可以将任何想要在开机时启动的程序写入到这个档案当中,这个档案是以 shell script
的语法写成的,所以你可以轻易的就设定好你想要启动的数据了! ^_^
好了,既然如此的话,那么我是否要使用 ln 去到 /etc/rc.d/rc[0-6].d 当中设定相关的服务呢?
不需要的,因为我们 Fedora 有提供两个好用的指令来达成这个功能啊!那就是 chkconfig 与 ntsysv 喔!
chkconfig
[root@linux ~]# chkconfig --list
[root@linux ~]# chkconfig [--add|--del] [service_name]
[root@linux ~]# chkconfig --level [0123456] [service_name] [on|off]
参数:
--list :仅将目前的各项服务状态栏出来
--add :增加一个服务名称给 chkconfig 来管理,该 service_name 必须在
/etc/init.d/ 内!
--del :删除一个给 chkconfig 管理的服务
--level:设定某个服务在该 level 下启动 (on) 或关闭 (off)
范例:
范例一:列出目前系统上面所有被 chkconfig 管理的服务
[root@linux ~]# chkconfig --list |more
NetworkManager 0:off 1:off 2:off 3:off 4:off 5:off 6:off
.....中间省略.....
snmpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
yum 0:off 1:off 2:off 3:off 4:off 5:off 6:off
xinetd based services:
chargen: off
.....中间省略.....
telnet: off
# 这个 chkconfig 的输出主要分为两大部分,分别是 stand alone 的服务,
# 他会分出 0~6 个 run level 的资料,亦即上半部的显示,至于下半部则是
# super daemon 管理的服务的输出情况!由 super daemon 管理的服务,
# 是没有 run level 之分的喔!
范例二:显示出目前在 run level 3 为启动的服务
[root@linux ~]# chkconfig --list | grep '3:on'
范例三:让 atd 这个服务在 run level 为 3, 4, 5 时启动:
[root@linux ~]# chkconfig --level 345 atd on
|
瞧! chkconfig 是否很容易管理我们所需要的服务呢?真的很方便啦~
他的功能其实很简单,只是直接在 /etc/rc.d/rc[0-6].d 里面针对某服务进行连结档案的设定而已。
例如上面的范例三,基本上,他仅是在 /etc/rc.d/rc3.d/, /etc/rc.d/rc4.d/
及 /etc/rc.d/rc5.d/ 里面,建立一个连结档案,
该连结档案连结到 /etc/init.d/atd 里面就是了!这样说,可以理解吗?
既然这个玩意儿这么好用,那么我们可否将自己建立的服务给他加入 chkconfig 的管理当中?
当然可以啊!只是该服务必须要加入 init 可以管理的 script 当中,亦即是 /etc/init.d/ 当中才行。
举个例子,我们在 /etc/init.d/ 里面建立一个 myvbird 档案,
该档案仅是一个简单的服务范例,基本上,没有任何用途....
对于该档案的必须性是这样的:
- myvbird 将在 run level 3 及 5 启动;
- myvbird 在 /etc/rc.d/rc[35].d 当中启动时,以 S80 开始以 K70 结束。
那么我可以这样做:
[root@linux ~]# vi /etc/init.d/myvbird
#!/bin/bash
# chkconfig: 35 80 70
# description: 没啥!只是用来作为练习之用的一个范例
echo "Nothing"
# 这个档案很好玩喔!你可以参考你自己系统上面的档案;
# 基本上,比较重要的是第二行,他的语法是:
# chkconfig: [runlevels] [start number] [stop number]
# 其中, runlevels 为不同的 run level 状态, start number 与
# stop number 则是在 /etc/rc.d/rc[35].d 内建立以 S80myvbird
# 及 K70myvbird 为档名的设定方式!
[root@linux ~]# chkconfig --add myvbird
[root@linux ~]# chkconfig --list myvbird
myvbird 0:off 1:off 2:off 3:on 4:off 5:on 6:off
# 看吧!加入了 chkconfig 的管理当中了!再去看看 /etc/rc.d/ 底下的档案:
[root@linux ~]# find /etc/rc.d/ -type l | grep 'myvbird'|sort
/etc/rc.d/rc0.d/K70myvbird
/etc/rc.d/rc1.d/K70myvbird
/etc/rc.d/rc2.d/K70myvbird
/etc/rc.d/rc3.d/S80myvbird
/etc/rc.d/rc4.d/K70myvbird
/etc/rc.d/rc5.d/S80myvbird
/etc/rc.d/rc6.d/K70myvbird
# 很有趣吧!如果要将这些数据都删除的话,那么就下达这样的情况:
[root@linux ~]# chkconfig --del myvbird
[root@linux ~]# rm /etc/init.d/myvbird
|
chkconfig 真的是个不错用的工具吧!尤其是当你想要自己建立自己的服务时! ^_^
ntsysv
基本上, chkconfig 真的已经很好用了,不过,我们的 Fedora 还有提供一个更不错用的,
那就是 ntsysv 了!注意喔, chkconfig 很多的 distributions 都存在,但是 ntsysv
则是 Red Hat 系统特有的!
[root@linux ~]# ntsysv [--level <levels>]
参数:
--level :后面可以接不同的 run level ,例如 ntsysv --level 35
范例:
范例一:直接编辑目前 run level 底下的开机默认启动项目:
[root@linux ~]# ntsysv
# 此时,你可以使用底下的按键来进行选择:
# 上下键: 可以在中间的方框当中,在各个服务之间移动;
# 空格键: 可以用来选择你所需要的服务,前面的 [*] 会有 * 出现;
# tab 键: 可以在方框、OK、Cancel 之间移动;
# [F1]键: 可以显示该服务的说明。举例来说,移动到 myvbird 按下 F1 后
# 没错!不要怀疑,这个就是 /etc/init.d/myvbird 档案内的 description:
# 后面接的内容啊!了解了吗? ^_^
|
挺不错用的吧!还可以知道该服务的意义呢!也就是说,
如果你想要知道某个 /etc/init.d/ 底下的服务启动的信息为何,
直接以 vi 开启该档案,去察看一下 description: 的内容即可知道啊! ^_^
各个服务的简单说明
随着 Linux 上面软件支持性越来越多,加上自由软件蓬勃的发展,
我们可以在 Linux 上面用的 daemons 真的越来越多了。所以,想要写完所有的 daemons
几乎是不可能的,因此,鸟哥这里仅介绍几个很常见的 daemons 而已,
更多的信息呢,就得要麻烦您自己使用 ntsysv 或者是 vi /etc/init.d/* 里面的档案去瞧一瞧啰~ ^_^
Stand Alone Daemons |
服务名称 |
参数档预设启动的 port number鸟哥的建议:是否需要启动? |
基本说明 |
anacron |
/etc/anacrontab不需要使用 port 全天候启用的主机,不需要开启这个服务 |
当你的 Linux 主机并不是全天候开机的时候,这个 anacron 就可以帮你执行在『
crontab 』既定的时间内没有执行的工作!举个例子来说,当你的主机在晚上
12:00 会自动关闭,但是偏偏 crontab 这个例行性工作是在 4:00 工作,
这个时候例行性工作不是都没有做到吗?嗯! anacron 就可以使用啦! |
apmd |
/etc/sysconfig/apmd不需要使用 port一般主机不太需要这个 daemon |
apmd 是 Adventage Power Management daemon 的缩写,顾名思义,可以用来了解系统的『电池电量』,
如果对于手提式计算机才有需要吧我想! |
atd |
/etc/at.allow, /etc/at.deny不需要使用 port若有启动 cron ,或许可以忽略 |
这个总该不陌生了吧!就是 仅进行一次的工作排程啰!
如果忘记了!赶紧去查看一下! |
autofs |
/etc/sysconfig/autofs不需要使用 port如果是服务器,不需要启动,如果是 Desktop,建议使用 |
如果你的 Linux 是用来做为服务器的,那么这个服务就不需要启动了。
因为这个服务可以自动挂载很多的文件系统与装置,举例来说,自动挂载光盘啊、USB硬盘啊等等的。
如果是主机,我们可以自己好好的控制,不需要系统自动挂载。如果是个人桌面计算机,
那么启动这个 daemon 也不错! |
crond |
/etc/crontab不需要使用 port务必启动啊! |
用来执行例行性命令的 daemon ,请务必要启动他! |
cups |
/etc/printcap, /etc/cups/*默认使用 port 631没有打印机的话,就不要启动 |
这个服务在管理 Linux 主机上面的打印机的!
他可以用来作为本机打印机的管理,也可以用来管理网络打印机,
全名为 Common UNIX Printing System (CUPS)。如果您的网络环境当中有打印机,
而且想要透过 Linux 来提供给所有用户使用,那么就可以管理一下 cups 啰~ |
gpm |
/etc/sysconfig/mouse不需要使用 port不需要启动的 |
在文本模式里面可以使用 mouse 来从事『复制、贴上、移动光标』等等的功能!
如果你是个教师,需要使用鼠标在纯文本接口底下秀出结果的话,
再使用这玩意就好了。基本上,不需要启动他! |
httpd |
/etc/httpd/conf/httpd.conf, /etc/sysconfig/httpd使用 port 80 (and/or) 443
除非需要设定 WWW 服务器,否则不要启动 |
这个玩意儿可有趣的很哩~一般来说,新手最喜欢架设 Web 网站啰,
而 WWW 服务器,就是这个玩意儿啊~更详细的信息请参考服务器篇的内容 |
iptables |
/etc/sysconfig/iptables不需要使用 port连上 Internet 的主机务必启动 |
这个家伙就是 Linux 上面有名的『防火墙』啦~如果你的 Linux 是在区网内,
而且没有连上 Internet 的话,那么这个防火墙机制可以暂时不要启动,
因为可能会抵挡掉你主机所提供的服务。如果连上了 Internet ,不开这个,
会死的很惨~ |
kudzu |
/etc/sysconfig/kudzu不需要使用 port 如果系统已经稳定,不需要启动 |
这个 daemon 预设是启动的,他会在开机的时候去侦测你的硬件,
如果发现硬件有异动,或者是有新增其他的硬件,
那么 kudzu 服务会主动的以 Fedora 相关的设定软件来设定你的新硬件。
不过,对于稳定的系统来说,实在没有必要在开机的时候侦测一次硬件,因为....很慢~ |
named |
/etc/named.conf使用 port 53不需要启动,除非是 DNS Server |
这是个很复杂的玩意儿,那就是 DNS (Domain Name System)。除非你真的很了解 DNS,
否则这个服务不需要启动的! |
netfs |
/etc/fstab不需要使用 port如果你的主机有默认挂载网络上的磁盘文件系统时,才开启。 |
这个服务在自动的挂载 /etc/fstab 里头记录的关于网络文件系统,如 NFS, SMB (网芳)
等等,如果你的主机本身并没有挂载来自网络上的 filesystem,不需要启动。 |
network |
/etc/sysconfig/network, /etc/sysconfig/network-scripts/*
不需要使用 port务必启动 |
看檔名就知道啦!是用来管理网络的,所以,当然要启动了。
不论你有没有网络卡,这个服务都要启动,因为至少 network 会驱动 lo 这个网络接口。
更多的网络相关信息,参考服务器篇的内容。 |
nfs nfslock |
/etc/sysconfig/nfs随机使用 port,与 portmap 服务有关不需要启动 |
NFS 为 Network File System 的缩写,我们会在服务器篇谈这个服务,
一般来说,不需要启动这个玩意儿~ |
ntpd |
/etc/ntp.conf, /etc/sysconfig/ntpd使用 port 123不需要启动 |
这个服务的全名是:Network Time Protocol,意思就是在进行网络校时的一个服务。
一般来说,不需要启动他。 |
portmap |
/sbin/portmap 直接启动使用 port 111除非你有启用类似 NFS 的服务,否则不需要启动 |
这个咚咚与很多 RPC 的服务有关,例如 NFS 等等。一般来说,如果你的 Linux 尚未连上 internet,
这个服务不需要启动。不过,为了方便起见,各主要 linux distributions 都预设启动这个服务的。
鸟哥通常是关掉他!哈哈! |
postfix sendmail |
/etc/postfix/* 或 /etc/mail/* 使用 port 25预设要启动 |
这个就是邮件服务器啦!由于近来网络垃圾大增,所以,目前所有的 Linux distributions
预设都要启动 postfix 之类的邮件服务器后,我们发出的信件才会接收或者是传送。
预设的情况下,一定会有一个邮件服务器启动的,不要关闭他~
否则我们主机上面的账号彼此之间无法以 email 传送数据喔! |
smb |
/etc/samba/*使用 port 137~139, 445 等不需要启动 |
这个服务其实就是仿真 Linux 成为 Windows 的网络上的芳邻上头的主机啦~
由于我们还没有连上 Internet 啊,所以自然不需要启动他啦~ |
sshd |
/etc/ssh/*使用 port 22 务必启动 |
这个是取代 telnet 的远程联机服务器 daemon ,几乎所有的 Linux distributions 预设都会启动他~
我们也可以透过这个玩意儿让远程主机联机进来啊!所以当然是启动的啊! |
syslog |
/etc/syslog.conf不需要使用 port务必启动 |
这个是登录文件记录的一个重要的 daemon ,没有他,你的主机几乎没有事后监控的功能~
所以请务必启动。我们会在 认识登录档 当中来谈这个咚咚~ |
xfs |
使用 /usr/sbin/chkfontpath 直接启动与侦测使用 socket 7100如果是纯文本接口,则不需要启动 |
X Font Server, xfs,顾名思义,他是用来管理 X Window 的字形的一个服务,
如果你是 run level 5 ,或者是想要启动 X Window 的话,那么这个玩意儿就不能不启动。
不过,如果你跟鸟哥一样都是使用纯文本接口的话,这个玩意儿不用启动啦! |
xinetd |
/etc/xinetd.d/*, /etc/xinetd.conf不一定,要看设定值务必启动 |
刚刚上头才讲过这个玩意儿,不会就忘了吧?务必启动喔! |
Super Daemons |
chargen chargen-udp |
预设使用 port 19不需要启动 |
主要的功能在于提供类似远程打字的咚咚吧! |
daytime daytime-udp |
预设使用 port 13不需要启动 |
用来作为 daytime 的服务,这是 NTP (Network Time Protocol) 的上一代,
目的在进行时间的校正工作。不过,因为他不会计算网络联机过程当中的迟滞时间,
并且是以明码传送,因此除了特殊目的外,目前已经很少使用这玩意儿了 |
krb5-telnet |
预设使用 port 23不需要启动 |
用来取代传统的 telnet 服务!可提供 krb 5 的验证机制。 |
gssftp |
预设使用 port 21不必启动 |
用来取代传统的 ftp server,可提供 krb 5 的验证机制 |