linux 基础入门(9) 系统服务 systemctl 与 xinted的运用
9.系统服务
9.1系统服务
可以把计算机理解为一个地点比如中关村大街系统服务理解为中关村大街的理发店、饭店、商场等等,每一个都是一个系统服务,为客户提供不同内容的服务
服务:常驻在内存中的程序,且可以提供一些系统或网络功能,那就是服务。
计算机中的系统服务有很多,比如
apache提供web服务
ftp提供文件下载上传服务
ssh提供了远程连接服务
防火墙提供了安全防护服务等等
9.2守护进程
Linux服务器的主要任务就是为本地或远程用户提供各种服务。通常 Linux系统上提供服务的程序是由运行在后台的守护进程( Daemon)来执行。一个实际运行中的 Linux系统一般会有多个这样的程序在运行。这些后台守护进程在系统开机后就运行了,并且在时刻地监听前台客户地服务请求,一旦客户发出了服务请求,守护进程便为它们提供服务。
9.3特殊守护进程
系统初始化进程是一个特殊的的守护进程,其PD为1,它是所有其他守护进程的父进程或者祖先进程。也就是说,系统上所有的守护进程都是由系统初始化进程进行管理的(如启动、停止等)。
系统上所有的守护进程都是由系统初始化进程进行管理的(如启动、停止等)
systemV(红帽7之前)
ini按照优先级的高低,先后唤醒其他服务
服务有依赖关系
多命令协同工作管理服务
命令包括 init service chkconfig
systemd
并行启动,速度更快
服务依赖性的自我检查
一个命令管理服务
向下兼容int服务脚本
命令就一个systemctl
9.4服务分类
- 独立服务
采用 systemd管理,服务独立的运行在内存中,服务响应速度快,但占用更多内存。 - 非独立服务
xinetd服务本身独立存在,管理一些服务。用户通过 xinetd服务请求其管理的一些服务,然后 xinetd返回请求服务的回复给用户,相当代理。
9.4.1独立服务
独立服务运行在内存中,服务响应块,但占用更多内存。
独立服务的服务启动脚本 都在目录 /usr/lib/systemd/system里
systemctl命令
systemctl [command] [unit]
command主要有
start:立刻启动后面接的unit
stop:立刻关闭后面接的unit。
restart:立刻关闭后启动后面接的unt,亦即执行stop再 start的意思。
reload:不关闭unit的情况下,重新载入配置文件,让设置生效。
enable:设置下次开机时,后面接的unit会被启动
disable:设置下次开机时,后面接的unit不会被启动。
status:目前后面接的这个unt的状态,会列出有没有正在执行、开机时是否启动等信息。
is- active:目前有没有正在运行中。
is- enabled:开机时有没有默认要启用这个unit。
kill:不要被kill这个名字吓着了,它其实是向运行unit的进程发送信号
show:列出unit的配置。
mask:注销unit,注销后你就无法启动这个unit了
unmask:取消对unit的注销
部署独立服务 vsftpd
查看是否安装
[wangzirui@laotie system]$ yum list vsftpd
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: ap.stykers.moe
* extras: ap.stykers.moe
* updates: ap.stykers.moe
已安装的软件包
vsftpd.x86_64 3.0.2-25.el7 installed
Systemctl status vsftpd
可以查看当前vsftpd的状态
[wangzirui@laotie system]$ systemctl status vsftpd
● vsftpd.service - Vsftpd ftp daemon
Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled; vendor preset: disabled)
Active: inactive (dead)
Loaded是是否开机启动,是disabled。。Active是指是否现在启动,是Inactive,所以这个服务现在是没启动呢。
启动服务
sytemctl start vsftpd
[root@laotie system]# systemctl start vsftpd
没有回执说明已经启动成功。
现在来查看vsftpd的状态
[wangzirui@laotie system]$ systemctl status vsftpd
● vsftpd.service - Vsftpd ftp daemon
Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled; vendor preset: disabled)
Active: active (running) since 一 2020-02-10 22:20:40 CST; 1min 17s ago
Process: 4204 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, status=0/SUCCESS)
Main PID: 4206 (vsftpd)
Tasks: 1
CGroup: /system.slice/vsftpd.service
└─4206 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
2月 10 22:20:40 laotie systemd[1]: Starting Vsftpd ftp daemon...
2月 10 22:20:40 laotie systemd[1]: Started Vsftpd ftp daemon.
关闭vsftpd
[wangzirui@laotie system]$ systemctl stop vsftpd
[wangzirui@laotie system]$ systemctl status vsftpd
● vsftpd.service - Vsftpd ftp daemon
Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled; vendor preset: disabled)
Active: inactive (dead)
2月 10 22:20:40 laotie systemd[1]: Starting Vsftpd ftp daemon...
2月 10 22:20:40 laotie systemd[1]: Started Vsftpd ftp daemon.
2月 10 22:24:15 laotie systemd[1]: Stopping Vsftpd ftp daemon...
2月 10 22:24:15 laotie systemd[1]: Stopped Vsftpd ftp daemon.
关于restart和reload
restart 之后 他的Main PID会改变,而reload之后Main PID不会改变。
关于开机是否启动
Systemctl enable vsftpd
[wangzirui@laotie system]$ systemctl enable vsftpd
Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.
相当于把vsftpd.service连接到了multi-user.target.wants.然后实现了开机启动。这时候我们查看
[wangzirui@laotie system]$ systemctl status vsftpd
● vsftpd.service - Vsftpd ftp daemon
Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; enabled; vendor preset: disabled)
Active: active (running) since 一 2020-02-10 22:27:53 CST; 9min ago
Main PID: 4508 (vsftpd)
CGroup: /system.slice/vsftpd.service
└─4508 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
2月 10 22:27:53 laotie systemd[1]: Starting Vsftpd ftp daemon...
2月 10 22:27:53 laotie systemd[1]: Started Vsftpd ftp daemon.
Loaded变成了enabled。表示他开机就启动了
要不想让他启动了就disable就行了。
[wangzirui@laotie system]$ systemctl disable vsftpd
Removed symlink /etc/systemd/system/multi-user.target.wants/vsftpd.service.
禁用服务
[wangzirui@laotie system]$ systemctl mask vsftpd
Created symlink from /etc/systemd/system/vsftpd.service to /dev/null.
现在这种状态不能开始,不能暂停。
那有没有可以直接判定一个服务是否在服务呢?
Systemctl is-active vsftpd
[root@laotie system]# systemctl is-active vsftpd
active
9.5非独立服务
xinetd:超级守护进程,可以把—些小服务放到κinet里进行托管。托管后的好处就是可以使用 xinetd强大的参数来控制这些服务,并且增强安全性。
Xinetd提供类似于 inetd+ TCP Wrappers的功能,但是更加强大和安全。后面 xinetd已经取代了 inetd,并且提供了访问控制、加强的日志和资源管理功能。
TCP Wrappers是一个应用层的访问控制程序,其原理是在服务器向外提供的TCP服务上包裹一层安全检测机制。外来的连接请求首先要通过这层安全检测,获得认证之后才能被系统服务接收。
相关目录
xinetd服务的主配置文件:etc/ xinetd.conf
用于存放被托管的服务的目录:/etc/ xinetd.d/
部署一个非独立服务telnet
首先安装这个服务的服务端和客户端还有超级守护进程xinetd
[root@laotie system]# yum -y install telnet-server telnet xinetd
-y的意思就是默认都是Y,安装的时候省了来回的输入y了。
接下来进入/etc/xinetd.d/然后新建一个telnet的文件
[root@laotie system]# cd /etc/xinetd.d
[root@laotie xinetd.d]# vim 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将禁用一个服务,详见fags的 disable标签
disable =no
指定失败时登记的信息。总是登记表明错误性质的消息,默认时不登记仼何信息。该属性攴持所有操作符。∪ SERID
通过RFC1413调用捕获客户机用户的∪D。只可用于多线程的流服务
log on failure += USERID
使用的 TCP/IP socket类型,值可能为stam(TCP), dgram(UDP),raW和 Iseqpacket(可靠的有序数据包)
socket type= stream
指定传送给该进程的参数,但是不包括服务程序名
server args =--daemon
用来设定连接速率。它需要两个参数,第一个参数表示每秒可以处理的连接数,如果超过了这个连接数时,之后进入的连接将被暂时停止处理;第二个参数表示停止处理多少秒后,继续处理先前暂停处理的连接
cps=2530
指定该服务使用的协议,其值必须是在 etc/protocols中定义的。如果不指定,使用该项服务的默认协议
protocol = tcp
这个属性有两个可能的值。如果是yes,那么 xinetd会启动对方请求的进程,并停止处理该项服务的其他请求直到进程终止,适合于单线程服务;如果是no,那xnet会为每个请求启动的一个进程,而不管先前启动的进程的状态,适合于多线程服务
wait=no
设置服务进程的UD。若 xinetd的有效UD不是0,该属性无效
user=root
要激活的进程,必须指定完整的路径
server =/usr/sbin/sshd
指定传送给该进程的参数,但是不包括服务程序名
server= args
用空格分开的允许访问服务的客户机列表。如果不为该属性指定一个值,就拒绝仼何人访问这项服务。该属性支持所有操作符。
only_from=192.168.1.0/24
no_access=192.168.1.20192.168.1.200
最大连接数为3
instances =3
每个源P只能有1个连接
per source =1
只能9:00到18:00才能ssh连接
access times =9: 00-18: 00
指定日志记录到arog/ xinetd ssh. log里
log type=fe/ ar/log/xinetd_ssh. log#指定日志记录到 var/log/xinetd ssh. log里
服务端口
pot=7722
[root@laotie xinetd.d]# systemctl start xinetd
怎么证明是不是开启了,可以直接看网络的状态,用netstat这个命令
[root@laotie wangzirui]# netstat -ntpl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1076/cupsd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1354/master
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemd
tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN 1396/dnsmasq
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1080/sshd
tcp6 0 0 ::1:631 :::* LISTEN 1076/cupsd
tcp6 0 0 :::23 :::* LISTEN 1084/xinetd
tcp6 0 0 ::1:25 :::* LISTEN 1354/master
tcp6 0 0 :::111 :::* LISTEN 1/systemd
tcp6 0 0 :::22 :::* LISTEN 1080/sshd
可以看到23这个端口号,所以就可以进行talnet的启动了,
[wangzirui@laotie ~]$ telnet localhost
Trying ::1...
Connected to localhost.
Escape character is '^]'.
Kernel 3.10.0-1062.el7.x86_64 on an x86_64
laotie login: wangzirui
Password:
Last login: Tue Feb 11 00:15:56 on pts/0