Linux守护进程Daemon及其管理

什么是Daemon(守护进程)

Service

常驻再内存中的进程,可以提供一些系统或者网络的功能,那就是服务Service。

Daemon 与 Service 的联系与区别

系统为了某些功能必须要提供一些服务service,但是service的提供总是需要进程的运行,所以实现这个service的程序就称为daemon。

  • service 与 daemon 不用特别区分。

Daemon 的主要分类

stand_alone

这种daemon可以自行单独启动服务。 常见的如www服务的daemon(httpd), FTP的daemon(vsftpd)。。。

被super daemon管理

Super daemon是一个特殊的daemon, 负责管理其他daemon的启动与否。如telnet就受super daemon 管理。

Linux服务的管理

服务与端口的对应

通过设置 /etc/services 让某一个服务与端口号对应。

daemon name   port/protocol       notes
ftp 21/tcp
http 80/tcp
http 80/udp

daemon 的启动

stand alone daemon 的启动

  • /etc/init.d/* 存放了各种服务的启动脚本可以通过它们来启动某一个服务
sudo /etc/init.d/sshd [start][stop][restart][status]
  • 还可以通过service 启动
service daemonName [start][stop][restart][status]

super daemon 与 它所管理的 daemon的启动

  • super daemon 本身也是一个 stand alone , 所以它的启动和之前一样。 但是他所管理的daemon就不是这样做了, 必须要在配置文件中设置该daemon。 配置文件就是 /etc/xinetd.d/* 中的文件。

里面可以设置很多参数如:

​ 启动与否, 每秒最大连接数, 反向代理, 以及设置一些简单的防火墙功能!

  • 如果在 /etc/xinetd.d/中没有该服务的配置, 则启用 /etc/xinetd.conf 为默认配置。

服务的防火墙管理

哪些可以用/etc/hosts.allow/deny 来管理

任何以xinetd 管理的服务, 或者支持 TCP Wrappers 函数的功能的服务,都可以通过 /etc/hosts.allo /etc/hosts.deny 来设置防火墙。

  • lld which sshd httpd : 查看是否支持 libwrap.so.0

结果 sshd支持, httpd 不支持!

配置文件的语法

服务                :              IP                 :    操作
sshd 223.1.3.0/24 deny

TCP Wrappers 的高级操作

  • spawn (action) : 利用后续的shell 进行额外的操作!
  • twist (action) : 立刻以后续的命令进行,且执行结束后终止该次链接请求

例子:

  • 利用safe_finger 去跟踪出对方的主机的信息
  • 将该耿总到的结果以Email的方式寄给本机的root
  • 在对方屏幕上显示不可登陆且警告他已经被记录的信息。

由于是阻挡的机制, 因此这个spawn 与 twist 的操作 大多是卸载 /etc/hosts.deny 文件中的。 我们将上述的操作写成类似如下:

sshd : ALL : spawn ( echo “security notice from host”) ; echo ; /usr/sbin/safe_finger @%h) | \

/bin/mail -s “%d-%h security” root & : twist (/bin/echo -e “\n\nWARNING connection not allowed. \n\n”)

系统开启的服务

查询

netstat -tunlp  ## 配合grep
service --status-all
ps -aux ## 配合grep

设置开机启动某个服务

小插叙: Linux 开机过程:

  • 打开电源, 开始读取BIOS, 进行硬件自我测试。
  • 通过 BIOS 取得第一个可开机的设备, 读取 MBR 取得启动装载程序
  • 通过启动装在程序的设置, 取得kernel 并加载内存且监测系统硬件
  • 内核主动调用init进程
  • init 进行系统初始化 (/etc/rc.d/rc.sysinit)
  • 以及init 的设置进行daemonstart (/etc/rc.d/rc[0-6].d/*) 。
  • 加载本机设置 (/etc/rc.d/rc.local)

chkconfig

chkconfig  --list  [服务名称]    
## 列出服务在各个运行级别下的开机启动与否

chkconfig --level N serviceD on/off