【鸟哥的linux私房菜-学习笔记】daemon服务

来源:互联网 发布:java所有集合类 编辑:程序博客网 时间:2024/05/16 10:51

daemon 的主要分类

1.stand_alone:此 daemon 可以自行单独启动服务

这种类型的 daemon 可以自行启动而不必透过其他机制的管理; daemon 启动并加载到内存后就一直占用内存与系统资源。最大的优点就是:因为是一直存在内存内持续的提供服务, 因此对于发生客户端的要求时,stand alone 的 daemon 响应速度较快。常见的 stand alone daemon 有 WWW 的 daemon (httpd)、FTP 的 daemon (vsftpd) 等等。

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

当没有客户端的要求时,各项服务都是未启动的情况,等到有来自客户端的要求时, super daemon 才唤醒相对应的服务。当客户端的要求结束后,被唤醒的这个服务也会关闭并释放系统资源。

针对 super daemon 的处理模式有两种,分别是:

multi-threaded (多重线程);single-threaded (单个线程)。

daemon 工作形态的类型:

signal-control
这种 daemon 是透过讯号来管理的,只要有任何客户端的需求进来,他就会立即启动去处理!例如打印机的服务 (cupsd)。

interval-control
这种 daemon 则主要是『每隔一段时间就主动的去运行某项工作』。

服务与端口的对应

端口:用来分辨不同的服务。

查看常用服务与端口的对应关系:

[root@www ~]# cat /etc/services

daemon 的启动脚本与启动方式

daemon 的启动脚本 (shell script):

/etc/init.d/* :启动脚本放置处/etc/sysconfig/* :各服务的初始化环境配置文件/etc/xinetd.conf, /etc/xinetd.d/* :super daemon 配置文件/etc/* :各服务各自的配置文件/var/lib/* :各服务产生的数据库/var/run/* :各服务的程序之 PID 记录处

Stand alone 的 /etc/init.d/* 启动

几乎系统上面所有服务的启动脚本都在 /etc/init.d/ 底下,这里面的脚本会去侦测环境、搜寻配置文件、 加载 distribution 提供的函数功能、判断环境是否可以运行此 daemon 等等,等到一切都侦测完毕且确定可以运行后, 再以 shell script 的 case….esac 语法来启动、关闭、 观察此 daemon。

[root@www ~]# /etc/init.d/syslog用法: /etc/init.d/syslog {start|stop|status|restart|condrestart}# 什么参数都不加的时候,系统会告诉你可以用的参数有哪些,如上所示。

通过service启动:

[root@www ~]# service [service name] (start|stop|restart|...)[root@www ~]# service --status-all选项与参数:service name:亦即是需要启动的服务名称,需与 /etc/init.d/ 对应;start|...   :亦即是该服务要进行的工作。--status-all:将系统所有的 stand alone 的服务状态通通列出来

Super daemon 的启动方式

其实 Super daemon 本身也是一支 stand alone 的服务,所以它启动的方式与 stand alone 是相同的。但是他所管理的其他 daemon 就必须要在配置文件中配置为启动该 daemon 才行。配置文件就是 /etc/xinetd.d/* 的所有文件。

查看未启动的服务:

[root@www ~]# grep -i 'disable' /etc/xinetd.d/*

启动服务rsync:

# 1. 先修改配置文件成为启动的模样:[root@www ~]# vim /etc/xinetd.d/rsync# 请将 disable 那一行改成如下的模样 (原本是 yes 改成 no 就对了)service rsync{        disable = no....(后面省略)....# 2. 重新启动 xinetd 这个服务[root@www ~]# /etc/init.d/xinetd restart正在停止 xinetd:             [  确定  ]正在激活 xinetd:             [  确定  ]

**需要重启的时xinetd,因为rsync是由它管理的!而 xinetd 是一个 stand alone 启动的服务。

解析 super daemon 的配置文件

xinetd 可以进行安全性或者是其他管理机制的控管,也能够控制联机的行为。这些控制的手段都可以让我们的某些服务更为安全, 资源管理更为合理。因此一些对客户端开放较多权限的服务 (例如 telnet), 或者本身不具有管理机制或防火墙机制的服务,就可以透过 xinetd 来管理。

默认值配置文件: /etc/xinetd.conf

[root@www ~]# vim /etc/xinetd.confdefaults{# 服务启动成功或失败,以及相关登陆行为的记录文件        log_type        = SYSLOG daemon info  <==登录文件的记录服务类型        log_on_failure  = HOST   <==发生错误时需要记录的信息为主机 (HOST)        log_on_success  = PID HOST DURATION EXIT <==成功启动或登陆时的记录信息# 允许或限制联机的默认值        cps         = 50 10 <==同一秒内的最大联机数为 50 个,若超过则暂停 10 秒        instances   = 50    <==同一服务的最大同时联机数        per_source  = 10    <==同一来源的客户端的最大联机数# 网络 (network) 相关的默认值        v6only          = no <==是否仅允许 IPv6 ?可以先暂时不启动 IPv6 支持!# 环境参数的配置        groups          = yes        umask           = 002}includedir /etc/xinetd.d <==更多的配置值在 /etc/xinetd.d 那个目录内

服务的防火墙管理 xinetd, TCP Wrappers

一般来说,系统的防火墙分析主要可以透过封包过滤或者是透过软件分析,我们的 Linux 默认有提供一个软件分析的工具, 那就是 /etc/hosts.deny, /etc/hosts.allow 这两个配置文件。另外,如果有安装 tcp wrappers 套件时, 我们甚至可以加上一些额外的追踪功能。

/etc/hosts.allow, /etc/hosts.deny 管理

任何以 xinetd 管理的服务,都可以透过 /etc/hosts.allow, /etc/hosts.deny 来配置防火墙。

防火墙:简单的说,就是针对来源 IP 或网域进行允许或拒绝的配置, 以决定该联机是否能够成功达成连接的一种方式。

基本上只要一个服务受到 xinetd 管理,或者是该服务的程序支持 TCP Wrappers 函式的功能时,那么该服务的防火墙方面的配置就能够以 /etc/hosts.{allow,deny} 来处理。

范例一:测试一下达成 sshd 及 httpd 这两个程序有无支持 TCP Wrappers 的功能[root@www ~]# ldd $(which sshd httpd)/usr/sbin/sshd:        libwrap.so.0 => /usr/lib64/libwrap.so.0 (0x00002abcbfaed000)        libpam.so.0 => /lib64/libpam.so.0 (0x00002abcbfcf6000)....(中间省略)..../usr/sbin/httpd:        libm.so.6 => /lib64/libm.so.6 (0x00002ad395843000)       libpcre.so.0 => /lib64/libpcre.so.0 (0x00002ad395ac6000)....(底下省略)....# 重点在于软件有没有支持 libwrap.so 那个函式库

ldd (library dependency discovery) 这个命令可以查询某个程序的动态函式库支持状态,因此透过这个 ldd 我们可以轻松的就查询到 sshd, httpd 有无支持 tcp wrappers 所提供的 libwrap.so 这个函式库文件。

配置文件语法:

<service(program_name)> : <IP, domain, hostname> : <action><服务   (亦即程序名称)> : <IP 或领域 或主机名> : < 动作 ># 上头的 < > 是不存在于配置文件中的。写在 hosts.allow 当中的 IP 与网段,为默认『可通行』的意思,亦即最后一个字段 allow 可以不用写;而写在 hosts.deny 当中的 IP 与网段则默认为 deny ,第三栏的 deny 亦可省略;这两个文件的判断依据是: (1) 以 /etc/hosts.allow 为优先,而 (2) 若分析到的 IP 或网段并没有记录在 /etc/hosts.allow ,则以 /etc/hosts.deny 来判断。

TCP Wrappers 特殊功能

查询有无安装TCP Wrappers:rpm -q tcp_wrappers

更加细部的主要动作有:

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

twist (action):立刻以后续的命令进行,且运行完后终止该次联机的要求 (DENY)

为了达成追踪来源目标的相关信息的目的,此时我们需要 safe_finger 这个命令的辅助才行。而且我们还希望客户端的这个恶意者能够被警告。 整个流程可以是这样的:

利用 safe_finger 去追踪出对方主机的信息 (包括主机名、用户相关信息等);将该追踪到的结果以 email 的方式寄给我们本机的 root ;在对方屏幕上面显示不可登陆且警告他已经被记录的信息。

例子:

[root@www ~]# vim /etc/hosts.denyrsync : 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" )

意义:

rsync: 指的就是 rsync 这个服务的程序;

ALL: 指的是来源,这个范围指的当然是全部的所有来源啰,因为是 ALL 嘛!

spawn (echo “security notice from host $(/bin/hostname)” ; echo ; /usr/sbin/safe_finger @%h ) | /bin/mail -s “%d-%h security” root &: 由于要将一些侦测的数据送给 root 的邮件信箱,因此需要使用数据流汇整的括号( ),括号内的重点在于 safe_finger 的项目,他会侦测到客户端主机的相关信息,然后使用管线命令将这些数据送给 mail 处理, mail 会将该信息以标头为 security 的字样寄给 root !由于 spawn 只是中间的过程,所以还能够有后续的动作!

twist ( /bin/echo -e “\n\nWARNING connection not allowed.\n\n” ): 这个动作会将 Warning 的字样传送到客户端主机的屏幕上! 然后将该联机中断。

系统开启的服务

观察系统启动的服务:

范例一:找出目前系统开启的『网络服务』有哪些?[root@www ~]# netstat -tulp范例二:找出所有的有监听网络的服务 (包含 socket 状态):[root@www ~]# netstat -lnp 范例三:观察所有的服务状态[root@www ~]# service --status-all

配置开机启动服务

Linux 主机启动流程:

1.打开计算机电源,开始读取 BIOS 并进行主机的自我测试;2.透过 BIOS 取得第一个可启动装置,读取主要启动区 (MBR) 取得启动管理程序;3.透过启动管理程序的配置,取得 kernel 并加载内存且侦测系统硬件;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)

chkconfig: 管理系统服务默认启动与否

[root@www ~]# chkconfig --list [服务名称][root@www ~]# chkconfig [--level [0123456]] [服务名称] [on|off]选项与参数:--list :仅将目前的各项服务状态栏出来--level:配置某个服务在该 level 下启动 (on) 或关闭 (off)

ntsysv: 类图形接口管理模式

[root@www ~]# ntsysv [--level <levels>]选项与参数:--level :后面可以接不同的 run level ,例如 ntsysv --level 35    上下键: 可以在中间的方框当中,在各个服务之间移动;    空格键: 可以用来选择你所需要的服务,前面的 [*] 会有 * 出现;    tab 键: 可以在方框、OK、Cancel 之间移动;    [F1]键: 可以显示该服务的说明

chkconfig: 配置自己的系统服务

[root@www ~]# chkconfig [--add|--del] [服务名称]选项与参数:--add :添加一个服务名称给 chkconfig 来管理,该服务名称必须在 /etc/init.d/ 内--del :删除一个给 chkconfig 管理的服务
0 0
原创粉丝点击