Linux入门(服务)
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入门(服务)的更多相关文章
- linux入门系列14--ssh服务及主机远程管理
通过前面十余篇文章的介绍,相信已经初步入门Linux本地管理的基本方法了,后续的文章将介绍Linux中常用的服务部署以及如何为外部提供相应的服务. 系列文章第三篇"linux入门系列3--l ...
- linux入门系列18--Web服务之Apache服务1
前面系列文章讲解了Linux下通过文件传输.文件共享.邮件系统来分享和获取资源,本文讲解网络资源获取和共享的另外一种形式,通过Apache服务程序来提供Web服务. 本文先讲解目前主流的Web服务程序 ...
- linux入门系列18--Web服务之Apache服务2
接上一篇文章,在了解Apache基本配置以及SELinux相关知识后,继续演示Apache提供的虚拟主机功能以及访问控制方式. 如果还没看上一篇的建议先查看后再来,上篇文章"linux入门系 ...
- linux入门系列20--Web服务之LNMP架构实战
作为本入门系列最后一篇文章,将演示如何在CentOS7环境下搭建LNMP环境来构建个人博客网站. 常见搭建网站的方式有LAMP.LNMP.IIS.Nginx.Tomcat等等,本文演示比较流行的基于L ...
- 《Linux多线程服务端编程:使用muduo C++网络库》上市半年重印两次,总印数达到了9000册
<Linux多线程服务端编程:使用muduo C++网络库>这本书自今年一月上市以来,半年之内已经重印两次(加上首印,一共是三次印刷),总印数达到了9000册,这在技术书里已经算是相当不错 ...
- linux 入门教程
linux入门教程 搜索 Linux入门教程 前言 第一章 关于Linux的历史 第二章 图形界面还是命令窗口 第三章 Linux操作系统的安装 第四章 初步进入linux世界 第五章 Linux系统 ...
- 3,linux入门到上手-文件权限管理与配置
linux入门-文件权限管理与配置 一.关于linux的操作命令一般格式如下: 1,一行指令中第一个输入的部分绝对是"指令(command)"或"可可执行文件案(例如批次 ...
- Linux入门基础篇
Linux入门基础篇 Linux诞生 Linux发行版本说明 Linux官方网站 Linux内核官方网站 比较有名的Linux发行版 虚拟机(Virtual Machine),一个虚拟的系统,安装在系 ...
- Linux(1)- 服务器核心知识、Linux入门、VMware与centeos安装、远程连接linux、linux基本命令使用
一.服务器核心知识 1.电脑和电脑的硬件组成 现在的人们几乎无时无刻不在使用着电脑!不管是桌上型电脑(桌机).笔记型电脑(笔电).平板电脑,还是智慧型手机等等,这些东西都算是电脑.虽然接触这么多,但是 ...
随机推荐
- asp.net core系列 72 Exceptionless使用介绍
一.Exceptionless介绍 Exceptionless专注于.net平台提供实时错误和日志报告.主要包括:错误通知.智能分组异常.详细错误报告堆栈跟踪.支持离线.UI查看重要错误和确定优先级. ...
- 【Nginx】(主从热备)LVS+Keepalived+Nginx实现高性能负载均衡集群
一.LVS 1.1 概述 1.2 Nginx与LVS区别什么 二.Keepalived 2.1 概述 2.2 keepalived和其工作原理 三.LVS+Keepalived+Nginx 搭建双机主 ...
- linux中启动Zookeeper
1.先把zookeeper的安装包解压在/usr/local,如下: 2.进入zookeeper目录,创建一个data目录 3.进入同级conf目录下,里面有zoo_sample.cfg,修改该文件名 ...
- asp.net core 使用 signalR(一)
asp.net core 使用 signalR(一) Intro SignalR 是什么? ASP.NET Core SignalR 是一个开源代码库,它简化了向应用添加实时 Web 功能的过程. 实 ...
- [币严区块链]数字货币交易所之比特币(BTC)钱包对接 | 自建节点JSON-RPC访问
BTC钱包对接流程 一. 部署BTC钱包节点 二. 分析BTC钱包的API 三. 通过JSON-RPC访问BTC钱包API 四. 部署测试 一.部署钱包节点 交易平台对接BTC之前,要 ...
- SoloLear_C# Tutorial_Contents
一.Basic Concepts 基本概念 二.Conditionals and Loops 条件语句和循环 三.Methods 方法 四.Classes&Objects 类&对象 五 ...
- Dagger2 探索记1——四大基本组件(一)
喝很多自主学习的人,我接触Dagger 2 框架的原因是刚进公司的时候导师给安排的学习任务,学习方式是组内培训. 听到这个消息的我,以为是部门的人轮流给我讲课. 后来导师跟我说,组内培训的意思是,我先 ...
- C# DATETIME格式转换汇总 根据日期过期星期
C# DateTime.Now.Year --2019(年) DateTime.Now.Month --9(月) DateTime.Now.Day --19(日) DateTime.Now.Hou ...
- FJUT - OJ优先队列专题题解
题目链接http://120.78.128.11/Contest.jsp?cid=18 题面不贴了 都是英文题,看的我心力憔悴 =7= 一.Ugly Numbers 题目说一个数的质因数只包含2.3或 ...
- Docker笔记(十一):Dockerfile详解与最佳实践
Dockerfile是一个文本文件,包含了一条条指令,每条指令对应构建一层镜像,Docker基于它来构建一个完整镜像.本文介绍Dockerfile的常用指令及相应的最佳实践建议. 1. 理解构建上下文 ...