码迷,mamicode.com
首页 > 其他好文 > 详细

服务管理

时间:2019-11-17 10:53:48      阅读:77      评论:0      收藏:0      [点我收藏+]

标签:基本   http   结合   pcb   建立   ops   nbsp   有序   body   

服务管理阅读量: 266
    • 服务介绍
    • 独立服务
    • 非独立服务

 

    • 服务介绍

      服务:常驻在内存中的程序,且可以提供一些系统或网络功能,那就是服务。

1 计算机中的系统服务有很多,比如:
2 apache提供web服务
3 ftp提供文件下载上传服务
4 ssh提供了远程连接服务
5 防火墙提供了安全防护服务等等

可以把计算机理解为一个地点 比如中关村大街 系统服务 理解为 中关村大街的理发店、饭店、商场等等,每一个都是一个系统服务,为客户提供不同内容的服务,计算机中的系统服务比如apache提供web服务、ftp提供文件下载上传服务、ssh提供了远程连接服务、防火墙提供了安全防护服务等等。

Linux服务器的主要任务就是为本地或远程用户提供各种服务。通常Linux系统上提供服务的程序是由运行在后台的守护进程(Daemon)来执行。一个实际运行中的Linux系统一般会有多个这样的程序在运行。这些后台守护进程在系统开机后就运行了,并且在时刻地监听前台客户地服务请求,一旦客户发出了服务请求,守护进程便为它们提供服务。

系统初始化进程是一个特殊的的守护进程,其PID为1,它是所有其他守护进程的父进程或者祖先进程。也就是说,系统上所有的守护进程都是由系统初始化进程进行管理的(如启动、停止等)。

rhel7之前采用的是systemV,rhel7开始采用的是systemd来管理服务

系统上所有的守护进程都是由系统初始化进程进行管理的(如启动、停止等)。

systemV介绍

启动系统服务的管理方式被称为 SysV 的 init, 同时init也是唯一一个由内核直接启动的进程 , 然后 init 去唤醒所有的系统所需要的服务,不论是本地服务还是网络服务。

• 服务的启动、关闭与查看等方式:

1 所有的服务启动脚本通通放置于 /etc/init.d/ 底下,基本上都是使用 bash shell script 所写成的脚本程序,需要启动、关闭、重新启动、观察状态时,可以通过如下的方式来处理:
2 启动:/etc/init.d/daemon start
3 关闭:/etc/init.d/daemon stop
4 重新启动:/etc/init.d/daemon restart
5 状态查看:/etc/init.d/daemon status

• 服务的依赖关系:

服务是会有依赖关系的,例如,你想使用nfs服务,在使用之前你必须启动portmap/rpcbind服务,否则nfs无法正常使用.init是无法帮管理员实现协同启动的,管理员必须时刻记得这些依赖关系

• 运行级别的分类:

上面说到 init 是由内核启动的, 然后 init 可以根据用户自定义的运行级别 (runlevel) 来唤醒不同的服务,以进入不同的操作界面。基本上 Linux 提供 7 个运行级别,分别是 0, 1, 2…6 ,

比较重要的是

1 单人维护模式、

3 纯文本模式、

5 文字加图形界面。

而各个运行级别的启动脚本是通过 /etc/rc.d/rc[0-6]/SXXdaemon 连结到 /etc/init.d/daemon , 连结名 (SXXdaemon) 的功能为: S为启动该服务,XX是数字,为启动的顺序。由于有 SXX 的设置,因此在开机时可以『依序执行』所有需要的服务, 同时也能解决相依服务的问题。

• 制定运行级别默认要启动的服务:

若要建立如上提到的 SXXdaemon 的话,不需要管理员手动建立连结, 通过如下的命令可以来处理默认启动、不启动以及查看启动状态 使用方法为:

默认启动: chkconfig daemon on

默认不启动: chkconfig daemon off

查看启动状态: chkconfig —list daemon

默认不启动: chkconfig daemon off

查看启动状态: chkconfig —list daemon

• 运行级别的切换行为:

当你要从纯文本界面 (runlevel 3) 切换到图形界面 (runlevel 5), 不需要手动启动、关闭该运行级别的相关服务,只要(init 5 )即可切换

systemd

• 并行处理所有服务,加速开机流程:

旧的 init 启动脚本是串行启动的模式,因此不相依的服务也是得要一个一个的等待。但目前我们的硬件主机系统与操作系统几乎都支持多核心架构了, systemd 就是可以让所有的服务同时启动,因此你会发现到,系统启动的速度变快了!

• 立即响应的启动方式:

systemd 全部就是仅有一个 systemd 服务搭配 systemctl 命令来处理,无须其他额外的命令来支持。不像 systemV 还要 init, chkconfig, service… 等等命令。 此外, systemd 由于常驻内存,因此任何要求都可以立即响应

• 服务依赖性的自我检查:

由于 systemd 可以自定义服务依赖性的检查,因此如果 B 服务是在 A 服务上面启动的,那当你在没有启动 A 服务的情况下仅手动启动 B 服务时, systemd 会自动帮你启动 A 服务

• 依 daemon 功能分类:

systemd管理的服务非常多,为了理清所有服务的功能,因此,首先 systemd 先定义所有的服务为一个服务单位 (unit),并将该 unit 归类到不同的服务类型 (type) 去。 旧的 init 仅分为 stand alone 与 super daemon,systemd 将服务单位 (unit) 区分为 service, socket, target, path, snapshot, timer 等多种不同的类型(type), 方便管理员的分类与记忆。

• 将多个 daemons 集合成为一个群组:

如同 systemV 的 init 里头有个 runlevel 的特色,systemd 亦将许多的功能集合成为一个所谓的 target 项目,这个项目主要在设计操作环境的建置, 所以是集合了许多的 daemons,亦即是执行某个 target 就是执行好多个 daemon 的意思!

• 向下兼容旧有的 init 服务脚本:

基本上, systemd 是可以兼容于 init 的启动脚本的,因此,旧的 init 启动脚本也能够通过 systemd 来管理,只是更高级的 systemd 功能就没有办法支持就是了。

虽然如此,不过 systemd 也是有些地方无法完全取代 init 的!包括:

1)在 runlevel 的对应上,大概仅有 runlevel 1, 3, 5 有对应到 systemd 的某些 target 类型而已,没有全部对应;

2)全部的 systemd 都用 systemctl 这个管理程序管理,而 systemctl 支持的语法有限制,不像 /etc/init.d/daemon 就是纯脚本可以自定义参数,systemctl 不可自定义参数。

3)如果某个服务启动是管理员自己手动执行启动,而不是使用 systemctl 去启动的 (例如你自己手动输入 crond 以启动 crond 服务),那么 systemd 将无法侦测到该服务,而无法进一步管理。

4)systemd 启动过程中,无法与管理员互动!因此,自行编写 systemd 的启动设置时,务必要取消互动机制

1 独立的服务和基于xinetd服务的区别:
2 独立的服务:服务独立的运行在内存中,服务响应速度快,但占用更多内存。
3 基于xinetd服务: xinetd服务是超级守护进程的一种。xinetd服务本身独立存在,管理一些服务。用户通过xinetd服务请求其管理的一些服务,然后xinetd返回请求服务的回复给用户,xinetd服务相当于proxy一样的角色。xinetd服务逐步被淘汰,大多数服务都是独立的服务。
    • 独立服务

从CentOS7 Linux开始,系统里的网络服务启动已经从传统的service改成了systemctl(一个systemd工具,主要负责控制systemd系统和服务管理器),管理开机自启动的命令也从chkconfig改为了systemctl,由systemctl一个命令代替了CentOS7以前系统中的service和chkconfig两个命令。

独立服务原理图

技术图片

系统服务的脚本也从传统的路的/etc/init.d(/etc/rc.d/init.d/),改到了/usr/lib/systemd(除此之外还有/etc/systemd/system),需要自启动运行的程序,一般存在这个系统服务目录下,即:/usr/lib/systemd/system目录,每一个服务以“服务名.service”结尾,该文件的内容一般分为3部分:

即[Unit]、[Service]和[Install]。

Unit]: 服务的说明

Description: 描述服务

After: 描述服务类别

服务启动程序文件

[Service] 服务运行参数的设置

Type=forking 是后台运行的形式

ExecStart 为服务的具体运行命令

ExecReload 为重启命令

ExecStop 为停止命令

PrivateTmp=True 表示给服务分配独立的临时空间

注意:启动、重启、停止命令全部要求使用绝对路径

[Install] 服务安装的相关设置,可设置为多用户

WantedBy=multi-user.target

服务管理方式

systemctl [command] [unit]

command 主要有:

start:立刻启动后面接的 unit。

stop:立刻关闭后面接的 unit。

restart:立刻关闭后启动后面接的 unit,亦即执行 stop 再 start 的意思。

reload:不关闭 unit 的情况下,重新载入配置文件,让设置生效。

enabled:设置下次开机时,后面接的 unit 会被启动。

disable:设置下次开机时,后面接的 unit 不会被启动。

status:目前后面接的这个 unit 的状态,会列出有没有正在执行、开机时是否启动等信息。

is-active:目前有没有正在运行中。

is-enable:开机时有没有默认要启用这个 unit。

kill :不要被 kill 这个名字吓着了,它其实是向运行 unit 的进程发送信号。

show:列出 unit 的配置。

mask:注销 unit,注销后你就无法启动这个 unit 了。

unmask:取消对 unit 的注销。


    • 非独立服务

Xinetd 托管服务。又名:超级守护进程,可以把一些小服务放到xinetd里进行托管。拖管后的好处就是可以使用xinetd强大的参数来控制这些服务,并且增强安全性。(比如一个小服务没有一些控制功能,但支持xinetd拖管,你就可以拖管并使用xinetd的参数来控制它)。

Xinetd提供类似于inetd + TCP Wrappers的功能,但是更加强大和安全。后面xinetd已经取代了inetd,并且提供了访问控制、加强的日志和资源管理功能。

TCP Wrappers是一个应用层的访问控制程序,其原理是在服务器向外提供的TCP服务上包裹一层安全检测机制。外来的连接请求首先要通过这层安全检测,获得认证之后才能被系统服务接收。TCP Wrappers的功能有两种实现方式:一种是由tcpd守护进程实现的,常被用于inetd + TCP Wrappers的系统中(如FreeBSD等);另一种是通过每种服务程序调用libwrap.so链接库实现的,即libwrap.so库支持的网络服务程序都能使用TCP Wrappers来实现访问控制,常用于xinetd + TCP Wrappers的系统中(如CentOS等)。

非独立服务原理图

技术图片

超级守护进程:银行里还有一种窗口,提供综合服务,像汇款,转账,提款等业务;这种窗口附近也始终坐着一个人(xinet),她可能不提供具体的服务,提供具体服务的人在里面闲着聊天啊,喝茶啊,但是当有人来汇款时他会大声喊一句,小王,有人汇款啦,然后里面管汇款的小王会立马跑过来帮忙办完汇款业务。其他的人继续聊天,喝茶。这些负责具体业务的人我们就称之为超级守护进程。当然可能汇款人会有一些规则,可能不能往北京汇款,他就会提早告诉xinet,所以如果有人来汇款想汇往北京的话,管理员就直接告诉他这个我们这里办不到的,于是就根本不会去喊汇款员了,相当于提供了一层管理机制。

xinetd服务的主配置文件: /etc/xinetd.conf —保持默认即可

用于存放被托管的服务的目录:/etc/xinetd.d/

xinetd提供类似于inetd+tcp_wrapper的功能,但是更加强大和安全。它能提供以下特色:

* 支持对tcp、udp、RPC服务(但是当前对RPC的支持不够稳定)

* 基于时间段的访问控制

* 功能完备的log功能,即可以记录连接成功也可以记录连接失败的行为

* 能有效的防止DoS攻击(Denial of Services)

* 能限制同时运行的同一类型的服务器数目

* 能限制启动的所有服务器数目

* 能限制log文件大小

* 将某个服务绑定在特定的系统接口上,从而能实现只允许私有网络访问某项服务

* 能实现作为其他系统的代理。如果和ip伪装结合可以实现对内部私有网络的访问

它最大的缺点是对RPC支持的不稳定性,但是可以启动portmap,与xinetd共存来解决这个问题。

原则上任何系统服务都可以使用xinetd,然 而最适合的应该是那些常用的网络服务,同时,这个服务的请求数目和频繁程度不会太高。像DNS和Apache就不适合采用这种方式,而像FTP、 Telnet、SSH等就适合使用xinetd模式,系统默认使用xinetd的服务可以分为如下几类。

① 标准Internet服务:telnet、ftp。

② 信息服务:finger、netstat、systat。

③ 邮件服务:imap、imaps、pop2、pop3、pops。

④ RPC服务:rquotad、rstatd、rusersd、sprayd、walld。

⑤ BSD服务:comsat、exec、login、ntalk、shell、talk。

⑥ 内部服务:chargen、daytime、echo、servers、services、time。

⑦ 安全服务:irc。

⑧ 其他服务:name、tftp、uucp。

部署一个非独立服务 Telnet

#yum -y install telnet-server telnet xinetd

#cat /etc/xinetd.d/telnet

 1 service telnet
 2 {
 3 flags = REUSE
 4 socket_type = stream
 5 wait = no
 6 user = root
 7 server =/usr/sbin/in.telnetd
 8 log_on_failure += USERID
 9 disable = no
10 }
11 ================
12 #可以设置为yes或no, 设置为yes将禁用一个服务,详见flags的disable标 签
13 disable = no
14 #指定 失败时登记的信息。总是登记表明错误性质的消息,默认时不登记任何信息。该属性支持所有操作符。USERID: 通过RFC1413调用捕获客户机用户的UID。只可用于多 线程的流服务。
15 log_on_failure += USERID
16 #使用的TCP/IP socket类型,值可能为stream(TCP),dgram(UDP),raw和seqpacket(可 靠的有序数据包)
17 socket_type = stream
18 #指定 传送给该进程的参数,但是不包括服务程序名
19 server_args = --daemon
20 #用来 设定连接速率。它需要两个参数,第一个参数表示每秒可以处理的连接数,如果超过了这个连接数时,之后进入的 连接将被暂时停止处理;第二个参数表示停止处理多少秒后,继续处理先前暂停处理的连接
21 cps = 25 30
22 #指定该服务使用的协议,其值必须是在/etc/protocols中 定义的。如果不指定,使用该项服务的默认协议
23 protocol = tcp
24 #这个属性 有两个可能的值。如果是yes,那么xinetd会启动对方 请求的进程,并停止处理该项服务的其他请求直到该进程终止,适合于单线程服务;如果是no,那xinetd会 为每个请求启动的一个进程,而不管先前启动的进程的状态,适合于多线程服务
25 wait = no
26 #设置服务进程的UID。 若xinetd的有效UID不是0, 该属性无效
27 user = root
28 #要激 活的进程,必须指定完整的路径
29 server = /usr/sbin/sshd
30 #指定 传送给该进程的参数,但是不包括服务程序名
31 server_args = -i
32 #用空 格分开的允许访问服务的客户机列表。如果不为该属性指定一个值,就拒绝任何人访问这项服务。该属性支持所有操作符。
33 only_from = 192.168.1.0/24
34 no_access = 192.168.1.20 192.168.1.200
35 # 最大连接数为3
36 instances = 3
37 # 每个源IP只能有1个连接
38 per_source = 1
39 # 只能9:00到18:00才能ssh连接
40 access_times = 9:00-18:00
41 # 指定日志记录到/var/log/xinetd_ssh.log里
42 log_type = file /var/log/xinetd_ssh.log # 指定日志记录到/var/log/xinetd_ssh.log里
43 #服务端口
44 port = 7722

#systemctl restart xinetd

#netstat -ntpl 查看启动情况

技术图片

客户端连接测试

技术图片

服务管理

标签:基本   http   结合   pcb   建立   ops   nbsp   有序   body   

原文地址:https://www.cnblogs.com/fengpiaoluoye/p/11875490.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!