【鸟哥的linux私房菜-学习笔记】daemon服务
2015-11-11 10:29
435 查看
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.conf defaults { # 服务启动成功或失败,以及相关登陆行为的记录文件 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.deny 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 "\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 管理的服务
相关文章推荐
- linux运维实战练习
- linux命令:Linux命令大全
- weblogic创建域(Linux系统)
- weblogic软件安装(Linux系统)
- 内核makefile自定义头文件添加 - [linux内核]
- Linux命令:nohup、df、du与/dev/null
- Linux内核模块添加的两种方法
- linux命令:grep
- linux命令:env
- linux命令:echo
- linux命令:tar
- linux ssh without passwd
- 详解Linux实际ID有效ID
- linux命令:du,看文件大小
- linux命令:rm
- CUPS让Linux打印变得更轻松(转)
- CentOS7下自定义目录安装mono+jexus教程
- 浅析 Linux 初始化 init 系统,第 3 部分: Systemd
- 浅析 Linux 初始化 init 系统,第 2 部分: UpStart
- 嵌入式Linux下CUPS移植