美文网首页
认识系统服务(daemon)

认识系统服务(daemon)

作者: epiiplus1equal0 | 来源:发表于2019-01-22 14:30 被阅读0次

系统为了某些功能必须提供一些服务, 这个服务就叫做service

service的提供总需要进程的运行, 实现这个service的程序就叫做daemon(后台程序)

1. daemon的主要分类

  • stand alone (独立进程)

    1.自行启动, 不必通过其他机制的管理

    2.启动并加载到内存后就常驻

    优: 响应时间快, 如WWW的daemon (httpd), FTP的daemon (vsftpd)

  • super daemon (总管进程)

    通过一个统一的daemon来负责唤起服务

    特点: 当没有请求时, 服务均未启动, 当有来自客户端的请求时, super daemon唤起对应的服务, 请求结束, 这个服务也会关闭并释放系统资源

    优: (1) 安全管控 (2) 不占资源

    • multi-threaded (多线程)

      全部客户的要求都拿来, 一次交办下去, 一个服务同时负责好几个进程

    • singel-threaded (单线程)

      一个一个来, 晚到的客户可能要等一等
      

2. 服务与端口的对应

当客户端连接我们的主机时, 我们主机是如何分辨不同服务的请求呢?

答: 通过端口号

可以修改/etc/services来修改一个服务的端口号, 不过很可能造成一些协议的错误, 除非你要架设一个地下网站

3. daemon的启动脚本与启动方式

  • /etc/init.d/* : 启动脚本的放置处

  • /etc/sysconfig/* : 初始化环境的配置文件

  • /etc/xinetd.conf, /etc/xinetd.d/* : super daemon的配置文件

  • /etc/* : 各服务各自的配置文件

  • /var/lib/* : 服务产生的数据库

  • /var/run/* : 各服务程序的PID记录处

    (每个distribution都会记录每一个daemon启动后取得的进程的PID并放置在/var/run/这个目录下)

3.1 stand alone的/etc/init.d/*启动

service [service name] {status|start|stop|restart|reload|...}
service --status-all #将所有stand alone的状态列出来
  • 端口与服务相对应, 想关闭某个端口, 需要找到端口对应的服务进程

3.2 super daemon及其受管服务启动方式

super daemon也是一个stand alone, 但super daemon所管理的服务如何得知呢?

grep -i "disable" /etc/xinetd.d/*

先修改/etc/xinetd.d/下的配置文件, 在重启xinetd就可以启动super daemon管理的服务

4. super daemon的配置文件

默认的配置文件: xinetd.conf

若服务的设定值没有指定, 则以xinetd.conf中的默认值为主

assign_op为参数的设置方式:

  • = : 后面设置的参数就是这样
  • += : 在原来的设置中加入新的参数
  • -= : 在原来的设置中舍弃新的参数
arrribute(功能) 说明与范例
服务的识别, 启动与程序
disable (启动与否) [yes|no] , 默认值为disable=yes
id (服务识别) [服务名称]
server (程序文件名) [program的完整文件名]<br />server=/usr/bin/rsync
server_args (程序参数) [程序的相关设置参数]
attribute (功能) 说明与范例
连接方式与连接数据包协议
socket_type (数据包类型) [stream|dgram|raw]<br />stream(tcp), dgram(udp), raw(服务与ip直接交互)
wair (连接机制) [yes(single)|no(multi)], 默认wait=no
instances (最大连接数) [数字或UNLIMITED], 此服务可接受的最大连接数
per_source (单用户来源) [数字或UNLIMITED] ,控制每一来源ip仅有一个最大的同时连接数
cps (新连接限制) [两个数字], 第一个数字为一秒内能够接受的最多新连接请求, <br />第二个数字为若超过第一个数字则关闭该服务的秒数
attribute (功能) 说明与范例
高级设置选项: 环境, 网络端口与连接机制等
env (额外变量设置) [变量名称=变量内容]
port (非正规端口号) [一组数字 (小于65534)]
redirect (服务转址) [IP port]
includedir (调用外部设置) [目录名称]
attribute (功能) 说明与范例
安全管控选项
bind (服务接口锁定) [IP]
only_from (防火墙机制) [0.0.0.0, 192.168.1.0/24, hostname, domainname]
no_access (防火墙机制) [0.0.0.0, 192.168.1.0/24, hostname, domainname]
access_times (时间控制) [00:00112:00, HH:MM-HH:MM]
umask [000, 777, 022], 设置用户新建目录或文件时的属性

5. 服务的防火墙管理: xinetd, TCP wrappers

5.1 /etc/hosts.{allow, deny}管理

任何以xinetd管理的服务都可以通过以上两个文件来设置防火墙

其实/etc/hosts.{allow, deny}都是/usr/sbin/tcpd (用来分析进入系统的TCP网络数据包的一个软件)的配置文件 , 通过分析TCP数据包并搭配这两个文件的规则比较, 就可以决定该连接是否能进入我们的主机

所以, 我们要通过TCP wrappers进行管控

#如何得知一个服务是否支持TCP wrappers呢?
ldd $(which command) | grep "libwrap.so"    
#ldd (library dependency discovery): 查询某个程序的动态函数库支持

#配置文件语法:
service_name    :    [IP|domain|hostname]    :    action
第一, 二个字段的特殊参数:
ALL: 代表全部的program_name或IP都接受的意思
LOCAL: 代表本机
KONWN: 代表可解析的IP或domain或服务
UNKONWN: 代表未知的IP或domain或服务

#实例:
1. 只允许140.116.0.0/255.255.0.0与203.71.39.0/255.255.255.0这两个域, 
及203.71.38.123这个主机可以进入我们的rsync服务器
2. 此外, 其他IP全部阻挡
vi /etc/hosts.allow
rsync    :    140.116.0.0/255.255.0.0
rsync    :    203.71.39.0/255.255.255.0
rsync    :    203.71.38.123
rsync    :    LOCAL
vi /etc/hosts.deny
rsync    :    ALL

6. TCP wrappers的特殊功能

#确定有没有安装TCP wrappers
rpm -q tcp_wrappers
  • spawn (action)

    可利用后续的shell来进行额外工作, 且具有变量功能, 主要变量为%h (hostname), %a (address), %d (daemon)等

  • twist (action)

    立即以后续的命令进行, 且执行完后终止该次连接的请求

详见<鸟哥的Linux私房菜>P565

7. 系统开启的服务

7.1 查看系统启动的服务

netstat -tulnp #查看系统目前启动的网络服务
netstat -lnp #查看所有有监听网络的服务 (包括socket状态)
service --status-all #查看所有服务状态

7.2 设置开机后立即启动服务的方法

在启动Linux系统时, 可以进入不同的模式, 这模式我们称之为执行等级(run level), 不同的执行等级有不同的功能与服务, run level 3 : 纯文本界面, run level 5 : 图形界面

chkconfig #管理系统服务默认开机与否
chkconfig --list [service_name]
chkconfig [--level [0123456]] [service_name] [on|off]
chkconfig [--add|--del] [service_name]
#--add: 增加一个服务名称给chkconfig来管理, 需要将该服务加入/etc/init.d/中
    #实例: 在/etc/init.d/内新建一个myalex的文件, 该文件必须是这样的:
    vi /etc/init.d/myalex
    #!/bin/bash
    # chkconfig: 35 80 70
    # description: 范例
    echo "Nothing"
    # 比较重要的是第二行, 语法是: chkconfig: [runlevels] [启动顺序] [停止顺序]
    # 启动顺序(start number)与结束顺序(stop number)则是在/etc/rc.d/rc[35].d内新建以
    # S80myalex及K70myalex为文件名的设置方式
    chkconfig --list myalex
    chkconfig --add myalex ; chkconfig --list myalex
    chkconfig --del myalex ; rm /etc/init.d/myalex

ntsysv #类图形界面管理模式, 红帽系统特有
ntsysv [--level [0123456]]
      本文基于<鸟哥的Linux私房菜>, 归纳整理, 在此致谢鸟哥.

相关文章

网友评论

      本文标题:认识系统服务(daemon)

      本文链接:https://www.haomeiwen.com/subject/onbljqtx.html