jinhucheung / blog

学习笔记

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Linux 学习之认识系统服务(daemon)

jinhucheung opened this issue · comments

commented

1. 什么是daemon

daemon是在后台运行,并提供某项服务的程序,通过以服务名+字符d来规定daemon的名称

1.1 daemon的主要分类

daemon根据启动与管理方式,可分为独立启动的stand_alone,与通过一个super daemon来统一管理

  • stand_alone:此类型daemon可自行独立启动
    一直在内存中持续提供服务,对于客服端的请求,响应较快,常见的此类型daemon有提供WWW服务的daemon(httpd)与FTP服务的daemon(vsftpd)等
  • super daemon:一个stand_alone的daemon(xinetd,早期是inetd)管理
    其内部提供多种服务,当客服端请求时,xinetd才会去唤醒相应的daemon提供服务,请求结束后,此唤醒的daemon也会关闭

super daemon运行示意图如下:

daemon根据对请求的处理可分为单进程和多进程

daemon根据提供服务的工作状态可分为singal-control与interval-control

  • singal-control:此类daemon通过信号管理
    接收到客服端的请求,daemon就会去处理
  • interval-control:此类daemon每隔一段时间就主动去执行工作,我们需要在配置文件指定daemon的服务时间与工作内容,如周期例行工作调度的crond

1.2 服务与端口

因为我们主机仅有一个IP,当要提供各种服务时,应该如何处理,我们想要的是用户可访问的是主机上的某项服务,而不是直接开放主机资源出来

如果我们在指定通道上提供一个服务,用户只要访问我们主机上的这个通道,就可以使用服务.那么这个通道(窗口)就是端口.

为了规范服务与端口的对应,所以我们有了协议,约定某服务的指定端口,我们可以查看/etc/services的内容,里面有各服务的协议端口信息

commented

1.3 daemon相关文件

daemon不同与一般的进程,其启动除了需要执行文件外,还需配置文件,执行环境,运行数据存储等.
一个daemon的相关文件如下:

  • /etc/init.d/* : 放置stand_alone的daemon启动脚本
    该脚本会进行环境检测,配置文件分析等工作,可以用来管理daemon的状态
  • /etc/sysconfig/*(RedHat) /etc/default/*(Debian):服务初始化环境配置文件
    存放服务初始化的参数设置的文件,比如网络设置写在/etc/sysconfig/network中
  • /etc/*:各服务的配置文件
  • /etc/xinetd.conf /etc/xinetd.d/*:super daemon及所属daemon的配置文件
    /etc/xinted.conf是super daemon的配置文件,其是所属daemon最上级的配置文件,当所属daemon的配置文件(/etc/xinetd.d/*)中与xinetd.conf有相同项的配置,参考所属daemon
  • /var/lib/*: 各服务产生的数据
    一些会产生数据的服务将其数据写入/var/lib中,比如Mysql
  • /var/run/*: 各服务的PID记录
    为了能简单地管理各服务的进程,所以daemon会将其PID写入/var/run中

1.4 daemon的启动/关闭

1) stand_alone的/etc/init.d/*的启动/关闭

因为daemon的启动脚本帮我们完成了很多工作(检测环境,查找配置文件等),所以我们直接使用启动脚本来管理daemon
直接输入/etc/init.d/daemon名,会提示此脚本能接受的参数
比如启动/关闭syslog这个服务可以/etc/init.d/syslog start /etc/init.d/syslog stop

我们也可以用services来管理daemon,其用法如下:

  • service [service name] (start|stop|restart...)
  • service --status-all //查看目前系统所有stand_alone服务状态

2) super daemon所属daemon的启动/关闭

super daemon所属daemon在/etc/xinetd.d/*中有配置文件,当要启动daemon时,需要将其配置文件中的disable属性设置no,在通过/etc/init.d/xinetd重启xinetd,要关闭daemon也是这样做,将disable设为yes

commented

2. super daemon的配置

2.1 解析super daemon配置文件

super daemon配置文件(/etc/xinetd.conf)与其属的daemon的配置文件(/etc/xinetd.d/*)格式上类似.

xinetd.conf的配置文件形如

defaults
{
    instaces  =  50  #同一服务的最大同时连接数
    per_source = 10 #同一来源的客服端最大连接数
    cap  =  50 10 #同一秒内的最大连接数为50个,若超过则暂停服务10秒
}

includedir /etc/xinetd.d   # 更多设置值在/etc/xinetd.d目录内

而/etc/xinetd.d下的服务配置文件形如

service <service name>
{
    属性       操作符     值
}
其中操作符有= +=  -=

相关的属性与值的说明可以查看 man xinetd.conf

2.2 /etc/hosts管理

我们在xinetd配置文件中有两个值only_fromno_access其是用来限制IP访问的,only_from是允许访问的IP,no_access是限制访问的IP

除此之外,我们也可以通过/etc/hosts.allow与/etc/hosts.deny文件限制IP访问(hosts.allow优先与hosts.deny)
hosts.allow与hosts.deny的文件格式

<service name> : <IP,domain,hostname>:<atcion>
  • : 有allow/deny(允许/限制) 还有其他额外的操作(比如spawn与twist分析数据包,并加以处理)
  • 特殊的参数(第一/二个字段):
    • ALL : 代表全部的service或IP都接受
    • LOCAL:代表本机
    • UNKOWN:代表不可解析的IP等
    • KNOWN: 可解析的IP等
commented

3. 系统已启动的服务与开机启动服务

3.1 查看系统已启动的服务

1) 查看目前系统正在监听的网络服务

netstat -lnp

2) 查看目前系统的服务状态

service --status-all

3.2 开机启动服务

当我们要设置开机启动的服务时,可以通过chkconfigsysv-rc-conf

要了解开机的启动服务,需要知道开机的执行等级,执行等级可以理解成Linux的执行模式,共有[0-6]个等级,0为关机 3为命令模式 5为X window 6为重启

1) 查看系统已设置的开机启动服务

chkconfig --list [服务名]

其会列出各服务的不同等级的开启/关闭状态

2) 设置服务各等级的开机状态

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

3) Linux开机流程说明

  1. 打开计算机电源,开机读取BIOS并进行主机的自我测试
  2. 通过BIOS取得第一个可开机设备,读取主引导分区(MBR)取得启动装载程序
  3. 通过启动装载程序的设置,取得内核并加载内存且检测系统硬件
  4. 内核主动调用init进程
  5. init进程开始执行系统初始化(/etc/rc.d/rc.sysinit)
  6. 依据init的设置进行daemon start(/etc/rc.d/rc[0-6].d/*)
  7. 加载本机设置(/etc/rc.d/rc.local)