LInux入门之 服务

服务介绍

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

apache提供web服务

ftp提供文件下载上传服务

ssh提供了远程连接服务

防火墙提供了安全防护服务等等

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

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

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

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

SystemV

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

  • 服务的启动、关闭与查看等方式:
所有的服务启动脚本通通放置于 /etc/init.d/ 底下,基本上都是使用 bash shell script 所写成的脚本程序,需要启动、关闭、重新启动、观察状态时,可以通过如下的方式来处理:
启动:/etc/init.d/daemon start
关闭:/etc/init.d/daemon stop
重新启动:/etc/init.d/daemon restart
状态查看:/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 的启动设置时,务必要取消互动机制

独立的服务和基于xinetd服务的区别:

独立的服务:服务独立的运行在内存中,服务响应速度快,但占用更多内存。

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

#netstat -ntpl 查看启动情况


Linux入门(服务)的更多相关文章

  1. linux入门系列14--ssh服务及主机远程管理

    通过前面十余篇文章的介绍,相信已经初步入门Linux本地管理的基本方法了,后续的文章将介绍Linux中常用的服务部署以及如何为外部提供相应的服务. 系列文章第三篇"linux入门系列3--l ...

  2. linux入门系列18--Web服务之Apache服务1

    前面系列文章讲解了Linux下通过文件传输.文件共享.邮件系统来分享和获取资源,本文讲解网络资源获取和共享的另外一种形式,通过Apache服务程序来提供Web服务. 本文先讲解目前主流的Web服务程序 ...

  3. linux入门系列18--Web服务之Apache服务2

    接上一篇文章,在了解Apache基本配置以及SELinux相关知识后,继续演示Apache提供的虚拟主机功能以及访问控制方式. 如果还没看上一篇的建议先查看后再来,上篇文章"linux入门系 ...

  4. linux入门系列20--Web服务之LNMP架构实战

    作为本入门系列最后一篇文章,将演示如何在CentOS7环境下搭建LNMP环境来构建个人博客网站. 常见搭建网站的方式有LAMP.LNMP.IIS.Nginx.Tomcat等等,本文演示比较流行的基于L ...

  5. 《Linux多线程服务端编程:使用muduo C++网络库》上市半年重印两次,总印数达到了9000册

    <Linux多线程服务端编程:使用muduo C++网络库>这本书自今年一月上市以来,半年之内已经重印两次(加上首印,一共是三次印刷),总印数达到了9000册,这在技术书里已经算是相当不错 ...

  6. linux 入门教程

    linux入门教程 搜索 Linux入门教程 前言 第一章 关于Linux的历史 第二章 图形界面还是命令窗口 第三章 Linux操作系统的安装 第四章 初步进入linux世界 第五章 Linux系统 ...

  7. 3,linux入门到上手-文件权限管理与配置

    linux入门-文件权限管理与配置 一.关于linux的操作命令一般格式如下: 1,一行指令中第一个输入的部分绝对是"指令(command)"或"可可执行文件案(例如批次 ...

  8. Linux入门基础篇

    Linux入门基础篇 Linux诞生 Linux发行版本说明 Linux官方网站 Linux内核官方网站 比较有名的Linux发行版 虚拟机(Virtual Machine),一个虚拟的系统,安装在系 ...

  9. Linux(1)- 服务器核心知识、Linux入门、VMware与centeos安装、远程连接linux、linux基本命令使用

    一.服务器核心知识 1.电脑和电脑的硬件组成 现在的人们几乎无时无刻不在使用着电脑!不管是桌上型电脑(桌机).笔记型电脑(笔电).平板电脑,还是智慧型手机等等,这些东西都算是电脑.虽然接触这么多,但是 ...

随机推荐

  1. asp.net core系列 72 Exceptionless使用介绍

    一.Exceptionless介绍 Exceptionless专注于.net平台提供实时错误和日志报告.主要包括:错误通知.智能分组异常.详细错误报告堆栈跟踪.支持离线.UI查看重要错误和确定优先级. ...

  2. 【Nginx】(主从热备)LVS+Keepalived+Nginx实现高性能负载均衡集群

    一.LVS 1.1 概述 1.2 Nginx与LVS区别什么 二.Keepalived 2.1 概述 2.2 keepalived和其工作原理 三.LVS+Keepalived+Nginx 搭建双机主 ...

  3. linux中启动Zookeeper

    1.先把zookeeper的安装包解压在/usr/local,如下: 2.进入zookeeper目录,创建一个data目录 3.进入同级conf目录下,里面有zoo_sample.cfg,修改该文件名 ...

  4. asp.net core 使用 signalR(一)

    asp.net core 使用 signalR(一) Intro SignalR 是什么? ASP.NET Core SignalR 是一个开源代码库,它简化了向应用添加实时 Web 功能的过程. 实 ...

  5. [币严区块链]数字货币交易所之比特币(BTC)钱包对接 | 自建节点JSON-RPC访问

    BTC钱包对接流程 一.   部署BTC钱包节点 二.   分析BTC钱包的API 三.   通过JSON-RPC访问BTC钱包API 四.   部署测试 一.部署钱包节点 交易平台对接BTC之前,要 ...

  6. SoloLear_C# Tutorial_Contents

    一.Basic Concepts 基本概念 二.Conditionals and Loops 条件语句和循环 三.Methods 方法 四.Classes&Objects 类&对象 五 ...

  7. Dagger2 探索记1——四大基本组件(一)

    喝很多自主学习的人,我接触Dagger 2 框架的原因是刚进公司的时候导师给安排的学习任务,学习方式是组内培训. 听到这个消息的我,以为是部门的人轮流给我讲课. 后来导师跟我说,组内培训的意思是,我先 ...

  8. C# DATETIME格式转换汇总 根据日期过期星期

    C# DateTime.Now.Year --2019(年) DateTime.Now.Month --9(月) DateTime.Now.Day   --19(日) DateTime.Now.Hou ...

  9. FJUT - OJ优先队列专题题解

    题目链接http://120.78.128.11/Contest.jsp?cid=18 题面不贴了 都是英文题,看的我心力憔悴 =7= 一.Ugly Numbers 题目说一个数的质因数只包含2.3或 ...

  10. Docker笔记(十一):Dockerfile详解与最佳实践

    Dockerfile是一个文本文件,包含了一条条指令,每条指令对应构建一层镜像,Docker基于它来构建一个完整镜像.本文介绍Dockerfile的常用指令及相应的最佳实践建议. 1. 理解构建上下文 ...