一天一点学习Linux之系统服务管理

2011年06月23日 Linux基础 暂无评论 阅读 14,966 views 次

daemon介绍

大家可能常听到daemon,而什么是daemon可能不太清楚,我的理解是让服务启动的东东称为daemon。而服务(service)就是为我们提供服务(如web mail ftp等)的东东。所以说,我们是通过daemon来管理service的。而很多时候我们也把daemon说成service,其实这样也差不多了。

daemon 的分类

根据daemon的启动与管理方式来分,可以将daemon为可独立启动的daemon,和通过super daemon来统一管理的服务这两大类,下面来简单的介绍一下他们两个的区别:

独立启动的服务:这种类型的 daemon 可以独立启动而无需通过其他机制来管理,此类daemon启动并加载到内存后就一直占用内存与系统资源。最大的优点就是:因为是一直存在内存内,所以当有客户请求时,他的响应速度较快。

super daemon:这种服务的启动是由一个普通的daemon来统一管理(在RHEL/CentOS的系统中是xinetd)一些服务。这种管理方式的特点是:原本各项服务都是未启动的,当有客户来请求时,此时super daemon 才唤醒相对应的服务,当客户端的请求结束后,被唤醒的这个服务也会关闭并释放系统资源。所以说由super daemon管理的服务响应是比较慢的。

服务与端口

这个端口我相应大家都很清楚,可以用个比喻来说明一下IP与端口的作用。我们可以把IP当作互联网上的地址,而端口就是楼层号,不同的楼层就提供不同的服务了,哈哈……
想查看服务对应的端口,可以参考/etc/services。这里只能参考,因为我们可以改变服务的端口号。

daemon启动脚本的相关目录与文件
/etc/init.d/ 此目录是放启动脚本的位置。在RHEL/CentOS上实际上是放在/etc/rc.d/init.d/,为什么呢?其实查看一下目录就知道了。/etc/init.d其实是/etc/rc.d/init.d的链接目录。

[root@yufei ~]# ls -ld /etc/init.d
lrwxrwxrwx. 1 root root 11 May 31 17:43 /etc/init.d -> rc.d/init.d

/etc/sysconfig/ 各服务的初始化环境配置文件。几乎所有的服务都会将初始化的一些选项设定写到这个目录下。

/etc/xinetd.conf, /etc/xinetd.d/ :super daemon 配置文件的目录。super daemon 的主要配置文件为 /etc/xinetd.conf ,super daemon所管理的其他 daemon 的设定则在 /etc/xinetd.d/ 里。

/etc/ :各服务的配置文件的目录,一般是以.conf结尾。

/var/run/ :各服务的程序的 PID 存放的地方。

服务的启动与停止或加载


我们先来看普通的daemon启动方式

用RPM或YUM安装的服务软件,服务的脚本基本上全部放在/etc/init.d/这个目录下,这里面的脚本一般都可以用VI打开来观察。脚本的内容大致有:脚本的描述、环境调用、搜寻配置文件、加载functions、服务的启动停止与加载、最后还会有脚本的参数。

这里面的脚本可以用脚本的相对路径或绝对路径来执行,当然RHEL/CentOS上还提供了一个命令service来直接调用这里面的脚本。

我们以SSHD为例来看一下

[root@yufei ~]# /etc/init.d/sshd --help
Usage: /etc/init.d/sshd {start|stop|restart|reload|force-reload|condrestart|try-restart|status}

这个提示很清楚,结合脚本文件你就会看明白,参数执行了哪些东西,这就留给大家自己研究吧。

[root@yufei ~]# cd /etc/init.d/
[root@yufei init.d]# ./sshd restart
Stopping sshd:                                             [  OK  ]
Starting sshd:                                             [  OK  ]

用相对路径启动也是一样的,当然还可以在任何目录下用service来直接执行某个服务,至于为什么他会调用/etc/init.d/里面的脚本,大家看一下/sbin/service这个文件就知道了。

[root@yufei init.d]# service sshd restart
Stopping sshd:                                             [  OK  ]
Starting sshd:                                             [  OK  ]

再来看看Super daemon 的启动方式

其实Super daemon 本身也是普通的daemon,只是要通过他来管理一些不常用的服务而已。所以说,xinetd他的启动方式与普通的daemon是一样的,而由他管理的服务都在/etc/xinetd.d/目录下,这里面的服务开启与关闭,都是由此目录下的服务文件本身来控制的。大家可以打开来看看,每个文件里面都有disable = yes或disable = no这样的内容,如果是YES,那就是不启动了,如果是NO,就是启动了。

下面我们以telnet为例来给大家演示

[root@yufei ~]# cd /etc/xinetd.d/
[root@yufei xinetd.d]# yum install telnet-server
[root@yufei xinetd.d]# ls -l |grep telnet
-rw-r--r--. 1 root root  305 Sep  9  2004 telnet

[root@yufei xinetd.d]# grep disable telnet 
	disable		= yes

我们来启动看看   

[root@yufei xinetd.d]# service xinetd restart
Stopping xinetd:                                           [  OK  ]
Starting xinetd:                                           [  OK  ]
[root@yufei xinetd.d]# telnet localhost
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
telnet: connect to address 127.0.0.1: Connection refused	

发现telnet连不上

   
我们把disable        = yes换成no

[root@yufei xinetd.d]# vim telnet 
[root@yufei xinetd.d]# grep disable telnet 
	disable		= no 

重新启动xinetd

[root@yufei xinetd.d]# service xinetd restart
Stopping xinetd:                                           [  OK  ]
Starting xinetd:                                           [  OK  ]
[root@yufei xinetd.d]# telnet localhost
Trying ::1...
Connected to localhost.
Escape character is '^]'.
Red Hat Enterprise Linux Server release 6.1 (Santiago)
Kernel 2.6.32-131.0.15.el6.x86_64 on an x86_64
login: 

发现这时候的反应有点慢,过一会,就出现了login:的登陆信息了。在RHEL6.1上就算是用户名和密码正确,好像也无法正常登陆,应该是系统为了安全方面考虑,可能是禁止了什么,这个有兴趣的,自己研究吧。

这只是演示了一下关于由xinetd管理的服务启动的方法,我想大家应该很清楚了。当然,telnet是明文的,也是不安全的,所以我们把他卸载掉。

[root@yufei xinetd.d]# yum remove telnet-server -y
[root@yufei xinetd.d]# rm -fr telnet.rpmsave 

下面来分析一下/etc/xinetd.conf这个文件

这个文件中包含日志的记录方式与记录的内容设置、连接设置、网络设置和环境参数设置以及其他服务设置

我们主要来看连接限制设置

cps             = 50 10
instances       = 50
per_source      = 10
第一行表示:同一秒内的最大联机数为 50 个,若超过则暂停 10 秒 
第二行表示:同一服务的最大同时联机数
第三行表示:同一客户端的最大联机数

这个文件中的参数是一个全局的设置,你也可以对其管理的服务来进行其他更多我设置。他管理的服务就是/etc/xinetd.d/这个目录里面的,你可以打开某个服务看一下里面的参数设置,这里也不一一说明,主要讲一下,关于网络方面的设置。

only_from:只有这里设置的IP或者是主机名才可以使用某个服务。这个设置后面可以是某个网段如192.168.1.0/24,也可以是某个域如.opsers.org。如果说有多个不同的设置,就可以用+=来设置其他的内容。

no_access:和上面的一样,只是用来限制某些主机不能使用某个服务。

access_times:设置服务开放的时间。他的设置方式是[00:00-12:00],就是从某个时段到某个时段。如果有多个时间段,中间用空格空开就可以,如:01:00-9:00 20:00-23:59

tcp_wrappers

其实,任何以 xinetd 管理的服务,都可以通过 /etc/hosts.allow, /etc/hosts.deny 来限定访问权限,可以叫做防火墙(tcp_wrappers)。这种管理机制更方便用来集中管理。那么这两个文件是不是对系统中所有的服务都起作用呢?其实不是这样的,只有加载了libwrap.so函数的服务才能被 /etc/hosts.allow, /etc/hosts.deny 所能控制。下面我们就来看看

[root@yufei ~]# ldd $(which sshd) |grep libwrap.so
	libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f61d35bf000)
[root@yufei ~]# ldd $(which httpd) |grep libwrap.so
[root@yufei ~]# 

我们发现,SSH是支持 libwrap.so的,所以他可以通过/etc/hosts.allow, /etc/hosts.deny 这两个文件来控制权限了。

关于文件的格式使用可以通过man 5 hosts_options 和 man 5 hosts_access来查看。

基本格式如下

服务:IP 或领域 或主机名:动作

第一及第二个字段一些特殊参数:

ALL:代表全部的 program_name 或者是 IP 都接受的意思,例如 ALL: ALL: deny

LOCAL:代表来自本机的意思,例如: ALL: LOCAL: allow

UNKNOWN:代表不知道的 IP 或者是 domain 或者是服务

KNOWN:代表为可解析的 IP, domain 等等信息

特别要注意:

服务是启动该服务的程序,一般情况下,服务名在脚本中能看到。

一般情况下,我们把

1、允许进入的写在 /etc/hosts.allow 当中

2、阻止进入的则写在 /etc/hosts.deny 当中

而这两个文件判断的依据是ALLOW优先

下面我们来介绍一下服务的观察

一个命令是ps,这个命令一般是用来查询系统中所有的进程

一个命令是netstat,他是用来显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。我们主要来介绍netstat (network statistics) 的用法

[root@yufei ~]# netstat --help

使用上面的命令会显示netstat的格式及相关参数,下面就介绍一下主要的参数意义。

-r, --route                显示路由表(和route命令一样,都可以加上后面的-n参数)

-i, --interfaces         显示网络接口的连接情况(eth0、lo)

-s, --statistics          显示IP、ICMP、IcmpMsg、TCP、UDP、UdpLite、TcpExt、IpExt的统计信息

-n, --numeric           以数字形式显示地址和端口号

-p, --programs        显示PID/Program name

-l, --listening            显示监听端口

-a, --all, --listening  显示所有连接和监听端口

-t, --tcp                     显示TCP传输协议的连线状况

-u, --udp                   显示UDP传输协议的连线状况

–e本选项用于显示关于以太网的统计数据。它列出的项目包括传送的数据报的总字节数、错误数、删除数、数据报的数量和广播的数量。这些统计数据既有发送的数据报数量,也有接收的数据报数量。这个选项可以用来统计一些基本的网络流量)。

从整体上看,netstat的输出结果可以分为两个部分,一个是Active Internet connections,称为活动的网络连接。列出下面的一些信息

Proto:显示连接使用的协议

Recv-Q:本地未收到的字节数 
Send-Q:远程主机未收到的字节数

Local Address:本地的地址与端口           
Foreign Address:远程的地址与端口          
State:连接的状态情况

另一个是Active UNIX domain sockets,称为活动的Unix域套接口。列出下面的一些信息

Proto:显示连接使用的协议

RefCnt:表示连接到本套接口上的进程号

Types:显示套接口的类型

State:显示套接口当前的状态

Path:表示连接到套接口的其它进程使用的路径名 

netstat与网络有密切关系,所以如果想更清楚的了解上面列出来的信息,最好是有点网络基础。当然,如果你没有也没有关系,下面我列举几个我们常用的命令组合,让大家来使用。

netstat -tl         查看当前tcp监听端口

netstat -ul        查看当前udp监听端口

netstat -tlp      查看当前tcp监听端口, 同时显示监听的程序名

netstat -tlpn    以数字方式显示上面的内容

netstat -tulpna    查看出正在连接的网络信息

以上这些信息基本上够用了,如果想了解更多的netstat相关用法,请用man来帮助。

服务的管理

上面讲了这么多,我相信大家对服务有了一个更深入的了解了,那么下面我们就来看看服务是如何来管理的。

要想管理好服务,就需要掌握chkconfig此命令的使用。先来看看这个命令的使用吧。

chkconfig --list [name]   
列出系统中(/etc/init.d/目录下)的服务(/etc/init.d/)状态。[name]加上则是查看某个服务的状态,不加就是查看系统中全部的服务状态

chkconfig --add <name>

把某个服务增加到/etc/init.d/目录下

chkconfig --del <name>

删除/etc/init.d/目录下的某个服务

chkconfig [--level <levels>] <name> <on|off>

设置某级别的某个服务的状态

上面的命令比较简单,但要注意几点:

1、要想管理某个服务,那么此服务必需要在/etc/init.d/目录下,才能够用chkconfig来管理,否则会出现“error reading information on service network: No such file or directory”这要的错误。

2、这个文件要有执行权限

3、/etc/init.d/目录下的服务文件都有一些共同点,那就是有一行类似# chkconfig: 2345 10 90这样的内容,就和第一行#! /bin/bash一样,是必需的,而不是我们平时所说的注释。三栏表示的意思是:不同的运行级别、启动顺序、关闭顺序。也就是说在/etc/rc.d/rcN.d/(N为2、3、4、5)下会有S10开头的对应文件和/etc/rc.d/rcN.d/(N为0、1、6)下以K90开头的对应文件。这个我们可以查看前面有关运行级别的相关信息。

最后说明一点,如果你的系统中没有xinetd的话,请安装些软件

[root@yufei ~]# yum install xinetd
[root@yufei ~]# chkconfig --list
省略
xinetd based services:
	chargen-dgram: 	off
	chargen-stream:	off
	daytime-dgram: 	off
	daytime-stream:	off
	discard-dgram: 	off
	discard-stream:	off
	echo-dgram:    	off
	echo-stream:   	off
	tcpmux-server: 	off
	time-dgram:    	off
	time-stream:   	off


本文关键字:一天一点 学习Linux RHEL6 系统服务 chkconfig tcp_wrappers

给我留言

Copyright © 羽飞博客 保留所有权利.   Ality主题 皖ICP备14013844号-1

用户登录