系统服务(daemons)

来源:互联网 发布:云计算公司排名 编辑:程序博客网 时间:2024/05/21 22:56

系统提供的服务称为service,而service需要进程的运行,完成某个service功能的进程称为daemon


按照启动与管理方式,daemon可以分为:

1. stand alone:可以自行单独启动

这类daemon可以自行启动而不必通过其他机制进行管理,启动后会加载到内存中一直占用内存和系统资源,优点是持续提供服务,对客户端请求的响应速度快

2. super daemon:由一支特殊的daemon统一管理

这类daemon是通过一个统一的super daemon进行启动和管理(super daemon其实本身也是一个stand alone服务)。当客户端没有请求时服务不启动;请求到来后服务启动,结束后服务被关闭。缺点是服务的反应时间比较慢,优点有:(1)通过super daemon进行管理,而super daemon具有安全控管机制,类似网络防火墙;(2)服务在结束后释放系统资源

super daemon的处理方式有两种:(1)multi-threaded(多线程):一个服务同时负责好几个进程;(2)single-threaded(单线程):一个服务负责一个进程,完成后才进行下一个


按照daemon提供的工作状态,可分为:

1. signal-control:通过信号进行管理,只要客户端有请求就会立即处理

2. interval-control:每隔一段时间主动地去执行某项工作,如atd和crond


当客户端联接到主机时,通过端口号(port number)来分辨不同的服务,在/etc/services中可以查询到端口号的设置


daemon相关档案的位置:

/etc/init.d/*:放置启动脚本,系统上几乎所有的服务启动脚本都在这里

(直接运行/etc/init.d/下的某个文件会显示该指令可用的参数)

/etc/xinetd.conf:super daemon配置文件

/etc/xinetd.d/*:super daemon所管理的其他daemon的规则的放置处

/var/run:每个daemon启动后所取得的PID都会被记录在此处


可以通过/etc/init.d/*来启动、关闭、观察服务,也可以通过service程序来启动stand alone服务的脚本。其实service也是一个脚本,它可以分析service后接的参数,然后根据参数再到/etc/init.d/下正确的启动服务

service [服务名] (start/stop/restart...)

service --status-all

服务名:即服务名,要与/etc/init.d/下的文件对应

--status-all:将系统所有的stand alone服务的状态显示出来


实际上,在Linux中是通过启动或关闭某个服务来开启或关闭某个端口(port)的,因此可以找出某个port对应的服务进程,然后关掉它就可以关闭port


super daemon是通过xinetd这个进程实现的。如果想要修改super daemon负责的某个服务,先到/etc/xinetd.d/下修改相应的配置文件,再重启xinetd即可(xinetd本身是一个stand alone服务)


通过修改/etc/xinetd.conf可以修改super daemon所管理服务的默认值,具体每个服务的设定要到/etc/xinetd.d/下去修改,它们的格式为:

service 服务名

{

  <attribute>   <assign_op>   <value>   <value> ...

  ...

}

assign_op的选项有:

=:表示设定为后接的值

+=:表示在原基础上添加后接的值

-=:表示在原基础上去掉后接的值

具体的项目:


一般系统的防火墙分析主要是通过封包过滤或者软件进行分析。/etc/hosts.allow和/etc/hosts.deny可以对进程的网络应用进行管理,任何以xinetd管理的服务都可以通过/etc/hosts.allow和/etc/hosts.deny来设定防火墙,即针对IP或网域进行允许或拒绝的设定,来决定联机是否成功。其实/etc/hosts.allow和/etc/hosts.deny都是/usr/sbin/tcpd的配置文件,这个/usr/sbin/tcpd是用来分析进入系统的TCP网络封包的软件。TCP封包的头文件主要记录了来源与目的主机的IP和port,因此可以藉由TCP封包并搭配这两个配置文件来决定联机是否成功。TCP Wrapper管理的就是(1)来源IP和整个网域的IP段;(2)port。不支持TCP Wrapper的软件就无法使用/etc/hosts.allow和/etc/hosts.deny的设定值

观察tcpd服务的程序是否支持TCP Wrapper:ldd $(which tcpd)

ldd(library dependency discovery)可以查询某个程序的动态函数库支持状态,因此可以查询到有无支持TCP Wrapper的libwrap.so库


/etc/hosts.allow和/etc/hosts.deny配置文件的语法:

<service (program name)>:<IP, domain, hostname>:<action>

<服务(即程序名称)>:<IP,或网域,或主机名>:<行为>

首先找出要管理的程序名(写下档案名),然后写下要放行或阻挡的对象。注意这里的程序名其实是启动该服务的程序,例如ssh服务是通过脚本/etc/init.d/sshd启动的,所以应该使用sshd

例:tcpd:127.0.0.100:deny

1. 写在hosts.allow中的内容默认为可通行,"allow"可以省略

2. 写在hosts.deny中的内容默认为阻止,"deny"可以省略

3. 规则是首先判断hosts.allow,它的优先级更高,若分析到的IP或网段没有记录在其中,则判断hosts.deny

第一个和第二个字段还可以使用的特殊参数有:

ALL:代表全部的程序名或IP

LOCAL:代表来自本机的

UNKNOWN:代表未知的IP、domain或服务

KNOWN:可解析的IP、domain等信息


如果安装了TCP Wrappers还可以使用额外的操作,要加在<action>那一栏,具体的动作有:

spawn:可以利用后接的shell来进行额外的工作,且具有变量功能,主要的变量内容有:%h(host name),%a(address),%d(daemon)等

twist:立刻执行后续指令,且完成后终止本次的联机要求

例:在/etc/hosts.deny中添加:(safe_finger是一个指令)

rsync: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 "\nWARNING connection not allowed\n")

上面完成的操作是:

1. 利用safe_finger追踪对方主机的信息

2. 将追踪到的结果email给本机root

3. 给对方显示警告信息


Linux开机的过程:

1. 打开电源,读取BIOS并进行主机的自我测试

2. 通过BIOS取得第一个可开机装置,读取MBR取得开机管理程序

3. 通过开机管理程序的设定,取得kernel并加载内存且侦测系统硬件

4. 核心呼叫init程序

5. init程序执行系统初始化

6. 根据init的设定启动daemon(/etc/rc[0-6].d/*)

7. 加载本机设定(/etc/rc.local)

以上第六个步骤是以不同的执行等级呼叫不同的服务。在启动Linux时,可以进入不同的模式,这些模式就称为执行等级,如具有X window接口的run level 5,纯文本界面的run level 3等


chkconfig:管理系统服务默认开机是否启动(ubuntu下用sysv-rc-conf或update-rc.d代替)

chkconfig --list [服务名称]

chkconfig [--level [0-6]] [服务名称] [on/off]

--list:仅列出目前各项服务的状态

--level:设定某个服务在该level下启动或关闭

chkconfig设定的只是开机时是否会自启动,而不会改变该服务当前的状态


chkconfig还可以设定自己的系统服务(CentOS)

chkconfig [--add/--del]

--add:增加一个chkconfig管理的服务,该服务必须在/etc/init.d/下

--del:删除一个chkconfig管理的服务


ubuntu下使用update-rc.d来实现上述功能

chkconfig --add <service>                           update-rc.d <service> default

chkconfig --del <service>            ==            update-rc.d -f <service> remove

chkconfig --level <345> on                          update-rc.d <service> start 20 3 4 5


ntsysv:CentOS独有的类图形接口管理模式(ubuntu下可以用sysv-rc-conf代替)

ntsysv [--level <levels>]

--level:后接不同的run level,可以有多个,如:ntsysv --level 35


0 0