自有服务及软件包
自有服务,即不需要用户独立去安装的软件的服务,而是当系统安装好之后就可以直接使用的服务(内置)
一、自有服务概述
| 要点 | 说明 |
|---|---|
| 定义 | 系统安装后内置的、开机自动运行的服务(不需要用户独立安装) |
| 本质 | 自动运行的进程,一旦收到客户端请求就为其提供服务 |
| 类比 | Windows 系统中的"服务"------后台自动运行的进程 |
| 示例 | SSH 服务开机自启 → 客户端可随时通过 SSH 远程连接 |
二、systemctl 管理服务命令
1、显示服务
命令:systemctl
作用:管理服务
语法:systemctl 选项
选项:list-units --type service --all:列出所有服务(包含启动的和没启动的)
list-units --type service:列出所有启动的服务
用法一 :systemctl list-units - type service - all 不加具体服务名
示例代码:systemctl list-units - type service - all
含义:列出所有服务,包括已运行的和没有运行的空格可以翻页,q退出

用法二 :systemctl list-units - type service 不加具体服务名
示例代码:systemctl list-units - type service
含义:列出已运行的服务
空格可以翻页,q退出

2、查看启动和停止服务
命令:systemctl
作用:管理服务
语法:systemctl 选项 服务名
选项: status:检查指定服务的运行状况 start:启动指定服务
stop:停止指定服务
restart:重启指定服务
reload:重新加载指定服务的配置文件(并非所有服务都支持 reload,通常使用 restart)
3、服务持久化
所谓服务持久化,就是服务在开机的时候,是否自动启动。
命令:systemctl
作用:管理服务
语法:systemctl 选项 服务名
选项: enable:指定服务开机自动启动
disable:取消服务开机自动启动
三、常用自有服务(ntp,firewalld,crond)
| 服务名 | 含义 |
|---|---|
| ntpd | 用于同步计算机的系统时间的服务 |
| firewalld | 防火墙服务 |
| crond | 计划任务服务 |
1、ntp 时间同步服务
NTP(Network Time Protocol) --- 同步网络中各个计算机时间的协议。
①ntp 同步服务器原理
| 要点 | 说明 |
|---|---|
| 标准时间来源 | UTC(世界协调时),由原子钟报时 |
| 获取途径 | 原子钟、天文台、卫星、Internet |
| 等级传播 | NTP 按服务器等级(Stratum)传播时间,总层数 ≤ 15 |
②到哪里去找 ntp 服务器
NTP 授时网站:http://www.ntp.org.cn
④时间同步操作
同步服务器时间方式有 2 个:一次性同步手动同步、通过服务自动同步。
手动同步:
用法一:ntpdate 时间服务器IP
示例代码:ntpdate 120.25.115.20
含义:从服务器120.25.115.20同步标准网络时间到服务器120.25.115.20服务器由阿里云提供,可以从http://www.ntp.org.cn获取
注意:①执行时可能报错no servers can be used,可能是服务器不可达,可以使用ping命令长沙
②如果时间同步后还是不对,可能是时区问题,执行ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime同步时区
用法二:启动ntpd服务,并配置为开机启动
示例代码:systemctl enable ntpd
含义:启动ntpd服务,并配置为开机启动,服务启动后,系统会自动同步网络时间
注意:从网络同步时间,要确保自己的服务器可以访问互联网
ntpd 服务配置文件位置 /etc/ntp.conf
2、firewalld 防火墙
①什么是防火墙
防火墙:防范一些网络攻击。有软件防火墙、硬件防火墙之分
防火墙选择让正常请求通过,从而保证网络安全性。
Windows 防火墙:

②传统 Linux 防火墙

3、firewalld 防火墙的概念
①区域
CentOS6x 中防火墙叫做 iptables
CentOS7.x 中默认使用的防火墙是 firewalld
firewalld 增加了区域的概念,所谓区域是指,firewalld预先准备了几套防火墙策略的集合,类似于策略的模板,用户可以根据需求选择区域。
常见区域及相应策略规则:
| 区域 | 默认策略 |
|---|---|
| trusted | 允许所有数据包 |
| home | 拒绝流入的流量,除非与流出的流量相关,允许 ssh, mdns, ippclient, amba-client, dhcpv6-client 服务通过 |
| internal | 等同于 home |
| work | 拒绝流入的流量,除非与流出的流量相关,允许 ssh, ipp-client, dhcpv6-client 服务通过 |
| public | 拒绝流入的流量,除非与流出的流量相关,允许 ssh, dhcpv6-client 服务通过 |
| external | 拒绝流入的流量,除非与流出的流量相关,允许 ssh 服务通过 |
| dmz | 拒绝流入的流量,除非与流出的流量相关,允许 ssh 服务通过 |
| block | 拒绝流入的流量,除非与流出的流量相关,非法流量采取拒绝操作 |
| drop | 拒绝流入的流量,除非与流出的流量相关,非法流量采取丢弃操作 |
②运行模式和永久模式
运行模式:此模式下,配置的防火墙策略立即生效,但是不写入配置文件
永久模式:此模式下,配置的防火墙策略写入配置文件,但是需要 reload 重新加载才能生效。
firewall 默认采用运行模式
4、firewalld 防火墙的配置
①查看,开启和停止 Firewalld 服务
命令:systemctl
作用:管理服务
语法:systemctl 选项 firewalld
选项: status:检查指定服务的运行状况
start:启动指定服务
stop:停止指定服务
restart:重启指定服务
reload:重新加载指定服务的配置文件(并非所有服务都支持 reload,通常使用 restart)
②管理 firewall 配置
命令:firewall-cmd
作用:管理 firewall 具体配置
语法:firewall-cmd 参数选项 1 ...参数选项 n
用法一 :firewall-cmd 选项
示例代码:firewall-cmd - get-default-zone
含义:查看默认使用区域,当前默认使用区域为public
用法二 :firewall-cmd 选项
示例代码:firewall-cmd - get-zones
含义:查看所有可用区域
用法三 :firewall-cmd 选项
示例代码:firewall-cmd - list-all
含义:列出当前使用区域配置
用法四 :firewall-cmd 选项
示例代码:firewall-cmd - list-all-zones
含义:列出所有区域的配置
用法五 :firewall-cmd 选项
示例代码:
firewall-cmd - zone=public - add-port=1024/tcp
含义:在public区域,添加允许tcp协议的1024端口通过的规则
firewall-cmd - zone=public - add-service=ftp
含义:在public区域,添加允许ftp服务通过的规则
用法五 :firewall-cmd 选项
示例代码:
firewall-cmd - zone=public - remove-port=1024/tcp
含义:在public区域,去掉允许tcp协议的1024端口通过的规则
firewall-cmd - zone=public - remove-service=ftp
含义:在public区域,去掉允许ftp服务通过的规则
用法六 :firewall-cmd 选项
示例代码:firewall-cmd - zone=public - add-rich-rule='rule family="ipv4" source address="192.168.0.100"reject'
命令参数解释:
- --zone=public: 指定操作的 zone 为 public
- --add-rich-rule: 添加自定义规则(- remove-rich-rule表示删除)
- rule family="ipv4": 指定 ipv4 规则
- source address="192.168.0.100": 匹配源 IP192.168.0.100
- reject: 注明采用拒绝策略
用法七 :firewall-cmd 选项
示例代码:firewall-cmd - permanent - zone=public - add-port=1024/tcp
含义:在public区域,使用permanent参数,永久添加允许1024端口通过的规则
用法七:firewall-cmd 选项
示例代码:firewall-cmd - reload
含义:重新加载配置
更多示例:
- 针对IP开放指定端口
firewall-cmd - permanent - add-rich-rule="rule family="ipv4" source address="211.23.142.80" port
protocol="tcp" port="80" accept"
firewall-cmd - permanent - remove-rich-rule="rule family="ipv4" source address="192.186.5.90"
port protocol="tcp" port="80" accept"
- 针对IP
firewall-cmd - permanent - add-rich-rule="rule family="ipv4" source address="192.168.0.233"
accept"
firewall-cmd - permanent - removeadd-rich-rule="rule family="ipv4" source
address="192.168.0.233" accept"
- 针对ip段
firewall-cmd - permanent - add-rich-rule="rule family="ipv4" source address="192.168.0.0/16"
accept"
firewall-cmd - permanent - remove-rich-rule="rule family="ipv4" source address="192.168.0.0/16"
accept"
firewall-cmd - permanent - add-rich-rule="rule family="ipv4" source address="192.168.1.0/24"
port protocol="tcp" port="9200" accept"
firewall-cmd - add-rich-rule="rule family="ipv4" source address="192.186.7.0/24" drop"
timeout=10
- 当用户来源IP地址是10.0.0.1主机,则将用户请求的5555端口转发至后端172.16.1.7的22端口
firewall-cmd - add-rich-rule='rule family=ipv4 source address=10.0.0.1 forward-port port=5555
protocol=tcp to-port=22 to-addr=172.16.1.7'
firewall-cmd - add-rich-rule='rule family="ipv4" source address="192.168.122.0" accept'
- 允许192.168.122.0/24主机所有连接。
firewall-cmd - add-rich-rule='rule service name=ftp limit value=2/m accept' - 每分钟允许2个新连接访问ftp服务。
firewall-cmd - add-rich-rule='rule service name=ftp log limit value="1/m" audit accept' - 同意新的 IP v4 和 IP v6 连接 FT P ,并使用审核每分钟登录一次。
firewall-cmd - add-rich-rule='rule family="ipv4" source address="192.168.122.0/24" service
name=ssh log prefix="ssh" level="notice" limit value="3/m" accept' - 允许来自192.168.122.0/24地址的新 IPv4连接连接TFTP服务,并且每分钟记录一次。
firewall-cmd - permanent - add-rich-rule='rule protocol value=icmp drop' - 丢弃所有icmp包
firewall-cmd - add-rich-rule='rule family=ipv4 source address=192.168.122.0/24 reject'
timeout=10 - 当使用source和destination指定地址时,必须有family参数指定ipv4或ipv6。如果指定超时,规则将在指定的秒数内被激活,并在之后被自动移除。
firewall-cmd - add-rich-rule='rule family=ipv6 source address="2001:db8: /64" servicename="dns" audit limit value="1/h" reject' - timeout=300 - 拒绝所有来自2001:db8: /64子网的主机访问dns服务,并且每小时只审核记录1次日志。
firewall-cmd - permanent - add-rich-rule='rule family=ipv4 sourceaddress=192.168.122.0/24service name=ftp accept' - 允许192.168.122.0/24网段中的主机访问ftp服务
firewall-cmd - add-rich-rule='rule family="ipv6" source address="1:2:3:4:6: " forward-port to-addr="1: 2:3:4:7" to-port="4012" protocol="tcp" port="4011"'
5、iptables
iptables 是用来设置、维护和检查 Linux 内核的 IP 分组过滤规则的。作为 Linux 下的一款防火墙,它的功能十分强大,它有 3 个表,每个表内有规则链。
(1)filter 是默认的表,包含了内建的链 INPUT(处理进入的分组)、FORWARD(处理通过的分组)和 OUTPUT(处理本地生成的分组)。
(2)nat 表被查询时表示遇到了产生新的连接的分组,由 3 个内建的链构成:PREROUTING(修改到来的分组)、OUTPUT(修改路由之前本地的分组)、POSTROUTING(修改准备出去的分组)。
(3)mangle 表用来对指定的分组进行修改。它有 2 个内建规则:PREROUTING(修改路由之前进入的分组)和
OUTPUT(修改路由之前本地的分组)。
常用的 iptables 命令和选项:
- iptables -A chain rule :向指定的链中添加一条规则。
- iptables -D chain rule :从指定的链中删除一条规则。
- iptables -L :列出当前的防火墙规则。
- iptables -F :清除所有防火墙规则。
- iptables-save :将当前的防火墙规则保存到文件。
- iptables-restore :从文件中恢复防火墙规则。
①查看 Iptables 规则
查看当前的 iptables 策略,使用 iptables -L命令,默认查看的是 filter 表的内容。
②设置 Chain 策略
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
这几条命令的意思是:
- 为 INPUT 表设置默认 POLICY 为 DROP,即全部包都丢弃
- 为 FORWARD 表设置默认 POLICY 为 DROP为 OUTPUT 表设置默认 POLICY 为 DROP
- 为 OUTPUT 表设置默认 POLICY 为 DROP
这样任何流入、传出或转发的包都将直接被丢弃,实现了防火墙效果。
需要注意的是,这样会关闭所有网络功能,需要重新添加规则才能访问网络。一般不推荐这样设置,而是根据需要针对特定端口/来源设置规则。
③清空已有规则
可以用以下规则来清空已有的规则:iptables -F
④端口转发规则
在 /etc/sysctl.conf 文件中开启数据转发功能(net.ipv4.ip_forward=1)
sysctl -w net.ipv4.ip_forward=1 #临时生效
使用 2 条命令:
iptables -t nat -A PREROUTING -d kaliip -p tcp - dport kali端口 -j DNAT - to-destination 目标主机ip:端口
iptables -t nat -A POSTROUTING -d 目标主机ip -p tcp - dport 目标主机端口 -j SNAT - to kaliip
例如:在本地通过访问 kali 的 8080 端口实现去访问其他服务器的 80 端口
iptables -t nat -A PREROUTING -d 192.168.2.10 -p tcp - dport 8080 -j DNAT - to-destination
192.168.2.11:80
iptables -t nat -A POSTROUTING -d 192.168.2.11 -p tcp - dport 80 -j SNAT - to 192.18.2.10
这两个 iptables 命令可以实现端口映射:
第一个命令:
-t nat: 指定 nat 表
- -A PREROUTING: 在 PREROUTING 链添加规则 用于处理输入流量
- -d 192.168.2.10: 目标地址为 192.168.2.10
- -p tcp --dport 8080: 协议为 tcp,目标端口为 8080
- -j DNAT --to-destination 192.168.2.11:80: 将流量 DNAT 到 192.168.2.11 端口 80
第二个命令: - -t nat: 指定 nat 表
- -A POSTROUTING: 在 POSTROUTING 链添加规则 用于处理输出流量
- -d 192.168.2.11: 目标地址为 192.168.2.11
- -p tcp --dport 80: 协议为 tcp,目标端口为 80
- -j SNAT --to 192.168.2.10: 将流量 SNAT 到源地址 192.168.2.10
功能:
将从外部访问 192.168.2.10 的 8080 端口的流量,DNAT 到内部服务器 192.168.2.11 的 80 端口。
然后将响应包的源地址 SNAT 为 192.168.2.10,这样只能通过这个 IP 访问内部服务器了。
查看规则
- 查看 NAT 表规则,能看到 DNAT/SNAT 等地址转换规则:
iptables -t nat -L - 查看具体链 (如 PREROUTING) 中的规则:
iptables -t nat -L PREROUTING
删除规则:iptables -t nat -F
⑤iptables 的常用操作
封锁指定 IP
如果发现有可疑 IP 可疑临时阻断
例如阻断入站 IP
sudo iptables -A INPUT -s 42.233.20.77 -j DROP
阻断出站 IP
sudo iptables -A OUTPUT -d 42.233.20.77 -j DROP
解封指定 IP
允许 IP 入站:
sudo iptables -A INPUT -s 42.233.20.77 -j ACCEPT
允许 IP 出站:
sudo iptables -A OUTPUT -d 42.233.20.77 -j ACCEPT
禁止外部 IP 访问 8080 端口
需要以下两条命令:
- 接收来自 127.0.0.1 的连接:
iptables -A INPUT -s 127.0.0.1 -p tcp - dport 8080 -j ACCEPT - 拒绝其他 IP 的连接:
iptables -A INPUT -p tcp - dport 8080 -j REJECT
具体命令参数解释:
- -A INPUT: 添加规则到 INPUT 表
- -s 127.0.0.1: 匹配源 IP 为 127.0.0.1
- -p tcp --dport 8080: 匹配 TCP 协议的 8080 端口
- -j ACCEPT: 接收的规则动作
- -j REJECT: 拒绝规则动作
允许外部 IP 访问 8080 端口
- 删除接受规则:
iptables -D INPUT -s 127.0.0.1 -p tcp - dport 8080 -j ACCEPT - 删除拒绝规则:
iptables -D INPUT -p tcp - dport 8080 -j REJECT
6、计划任务 crontab
①计划任务的作用
操作系统不可能 24 小时都有人在操作,有些时候想在指定的时间点去执行任务(例如:每天凌晨 2 点去重新启动Apache),此时不可能真有人每天夜里 2 点去执行命令,这就可以交给计划任务程序去执行操作了。
②查看计划任务
语法:crontab 选项
常用选项:
- -l:list,列出指定用户的计划任务列表
- -e:edit,编辑指定用户的计划任务列表,简单来说,计划任务就是一个文件
- -u:user,指定的用户名,如果不指定,则表示当前用户
- -r:remove,删除指定用户的计划任务列表
拓展:
crontab -e和vim /etc/crontab是两种添加或编辑计划任务的方法:
crontab -e: - 这个命令会打开当前用户的 crontab 文件进行编辑,文件位置是 /var/spool/cron/用户名
- 添加的任务只对当前用户生效
- 一般用户可以使用这个命令添加自己的定时任务
vim /etc/crontab: - 这个命令会直接编辑系统级的全局 crontab 文件 /etc/crontab
- 在这个文件中添加的任务是对所有用户都生效
- 只有 root 用户才有权限直接编辑这个文件
两者的主要区别在于: - crontab -e 添加用户个人任务
- vim /etc/crontab 添加系统范围内对所有用户生效的任务
在使用上: - 普通用户添加个人任务使用 crontab -e
- 作为管理员添加系统范围任务需要用 root 用户通过 vim /etc/crontab
所以总的来说:
crontab -e 用来管理个人任务
vim /etc/crontab 用来管理系统全局任务
③编辑计划任务
进入计划任务编辑文件:crontab -e
打开计划任务编辑文件后,可以在此文件中编写我们自定义的计划任务:
计划任务的规则语法格式,以行为单位,一行则为一个计划:
分 时 日 月 周 需要执行的命令
例如:0 0 * * * reboot,代表每天 0 时 0 分执行 reboot 指令。
取值范围(常识):
分:0~59
时:0~23
日:1~31
月:1~12
周:0~7,0 和 7 表示星期天
四个符号:
*:表示取值范围中的每一个数字
-:做连续区间表达式的,要想表示1~7,则可以写成:1-7
/:表示每多少个,例如:想每 10 分钟一次,则可以在分的位置写:* 10
,:表示多个取值,比如想在 1 点,2 点 6 点执行,则可以在时的位置写:1,2,6
特别补充:在 Linux 系统中,有些命令不能直接在计划任务中使用,使用后,其也不会生效。如 useradd 命令。如果想让其生效必须使用完整路径。
那么如何查询一个命令的真实路径在哪个位置?
答:使用 whereis 命令名称
④扩展
Crontab 权限问题
crontab 是任何用户都可以创建的计划任务,但是超级管理员可以通过配置来设置某些用户不允许设置计划任务 。
黑名单配置文件位于: /etc/cron.deny 里面写用户名,一行只能写一个
白名单还有一个配置文件:/etc/cron.allow (本身不存在,自己创建)
注意:白名单优先级高于黑名单,如果一个用户同时存在两个名单文件中,则会被默认允许创建计划任务
查看计划任务文件保存路径
计划任务文件具体保存在哪里呢?
/var/spool/cron/用户名文件中 ,如果使用 root 用户编辑计划任务,则用户文件名为 root
查看计划任务日志信息
在实际应用中,我们如何查看定时任务运行情况?
通过计划任务日志,日志文件位于 /var/log/cron
四、Linux 软件包
1、软件包概述
Linux 下也有很多可以安装的软件,而这些软件的安装包可细分为两种,分别是源码包和二进制包。
①源码包 vs 二进制包
| 对比维度 | 源码包 | 二进制包 |
|---|---|---|
| 本质 | 程序员编写的源代码程序 | 源码包编译成功后的产物 |
| 安装前 | 需要编译 | 无需编译,直接安装 |
| 安装难度 | 高(编译耗时长、易出错) | 低 |
| 优势 | 可自定义模块 | 安装/升级/查询/卸载简单 |
②两大主流二进制包管理系统
| 包管理器 | 发行版系列 | 安装命令 |
|---|---|---|
| RPM | Red Hat 系(Fedora, CentOS, SuSE) | rpm -ivh |
| DPKG | Debian 系(Debian, Ubuntu, Kali) | dpkg -i |
| 作用:rpm 的作用类似于豌豆荚,华为应用市场,App Store,主要作用是对 linux 服务器上的软件包进行对应管理操作,管理分为:查询、卸载、安装/更新 |
| 对比项 | redhat (centos)系列 | debian(kali,ubuntu) 系列 |
|---|---|---|
| 安装包格式 | rpm | deb |
| 安装包命令 | rpm -ivh 安装包.rpm | dpkg -i 安装包.deb |
| 包管理工具 | yum | apt-get |
| 是否支持 tar 包 | 是 | 是 |
2、如何获取 rpm 包
要想装软件,和 windows 下一样,先得找到安装包:xxx.rpm
软件包的获得方式:
a. 去官网去下载;
b. 不介意老版本的话,可以从光盘(或者镜像文件)中读取;
3、查询某个软件安装情况
语法:rpm -qa | grep 软件名称
选项:-q:查询,query -a:全部,all
用法一 :rpm -q firefox
说明:查询 firefox 浏览器的安装情况
用法二 :rpm -qa | grep firefox
说明:查询 firefox 浏览器的安装情况
4、卸载某个软件
卸载某个软件
语法:rpm -e 软件的名称(建议写完整的名称,通过 -qa 查询)
案例:卸载火狐浏览器
rpm -qa |grep firefox 首先查询 firefox 软件的完整名称
查询结果:firefox-45.7.0-2.el6.centos.x86_64
rpm -e firefox-45.7.0-2.el6.centos.x86_64
5、安装某个软件
命令:rpm
作用:管理 rpm 软件包
语法:rpm -ivh 软件包完整路径名称
选项:
-i:install,安装
-v:显示进度条
-h:表示以 "#" 形式显示进度条
6、更新某个软件
语法:# rpm -Uvh 完整的安装包路径
选项:
-U:upgrade,升级
-v:表示显示进度条
-h:表示以#形式显示进度条
7、rpm 扩展
①依赖关系
一个软件必须先有其他软件才能运行,例如之前 xmind 启动过程中提示的缺少 DLL,称之为依赖

②查看文件所属的包名
语法:# rpm -qf 需要查询的文件路径
选项:-f:查询文件所属包
示例代码:查询/etc/ntp.conf 属于哪个软件包?
