Bootstrap

day9:自有服务与防火墙

一,自有服务概述

概述

系统自带的的一些服务,就像衣服是外来服务,上厕所是与生俱来的的。linux中哪些不用特殊操作就可以直接被systemctl操作的服务都是自带的服务,叫自有服务。

服务是一些特定的进程,自有服务就是系统开机就自动运行的一些进程,一旦客户发出请求,这些进程就自动为他们提供服务。

所谓的自有服务,简单来说,可以理解为linux系统预配置好的,不用我们配置,就可以使用的服务

常见的自有服务

ntpd:用于同步计算机的系统时间的服务

firewalld:防火墙服务

crond:计划任务服务

二,管理服务命令

概述

在centos7前,通过service和chkconfig两个命令管理服务

service:负责启动停止服务,显示服务状态

chkconfig:用于指定服务是否开机自启(服务持久化)

centos7开始,使用systemctl统一管理

systemctl服务命令

systemctl 【选项】 【服务名】

start【服务名】:启动服务

stop【服务名】:停止服务

status【服务名】:查看服务运行状态

restart【服务名】:重启服务

reload【服务名】:重新加载指定服务的配置文件(并非所有服务都支持,所以常用restart)

涉及持久化的修改不对当前状态失效,因为是对自启动的

disable【服务名】:永久停止服务自启动

enable【服务名】:永久开启服务自启动

list-units --type service --all:列出所有服务(不管是否启动)

list-units --type service:列出所有启动服务

三,ntp时间同步服务

ntp概述

NTP(Network Time Protocol,网络时间协议)是一种用于计算机系统间时间同步的协议,能够将网络中的各个设备(例如服务器和工作站)的时间与标准时间源同步。通过时间同步,NTP 可确保不同设备之间的时间保持一致,尤其是在分布式系统中,时间同步对于日志分析、数据协调和安全事件响应非常重要。

ntp时间同步原理

NTP 采用一种分层结构的模型,常称为 NTP 层级模型

  1. 层级划分

    • 第 1 层时间服务器(Stratum 1):这些服务器通过 GPS、原子钟等高精度时间源获取时间,是时间源的最上层。
    • 第 2 层时间服务器(Stratum 2)及以下:这些服务器通过第 1 层或其他上层服务器同步时间。层级越高,时钟的准确性可能越低,但在实际应用中,Stratum 2、Stratum 3 的服务器已经能提供足够精确的时间。
  2. 时间同步过程

    • 时间偏移与延迟计算:客户端和服务器在进行时间同步时,会交换几个数据包,通过比较这些数据包的发送和接收时间,计算时间偏移(offset)和网络延迟(delay),从而调整客户端时钟。
    • 循环校正:NTP 的时间同步并不是一次性的操作,而是通过定期与 NTP 服务器进行交互,持续调整本地时钟,保证时间的准确性。
  3. 同步精度:NTP 通常可以将设备时间同步到毫秒级,甚至微秒级。

获取同步服务器

要实现时间同步,必须从可靠的 NTP 服务器获取准确的时间信息。

通过网址查看:ntp.org.cn

一般来说使用:cn.ntp.org.cn

时间同步命令ntp

ntpdate 命令

用于手动与 NTP 服务器进行一次性的时间同步。

ntpdate [选项] <NTP服务器>

选项说明
-u使用 UDP 协议与 NTP 服务器通信(绕过端口 123 的限制)
-q只查询 NTP 服务器的时间,不进行实际同步
-b强制校正时钟,立即更新本地时钟
-d调试模式,显示同步过程中更多信息

ntpq 命令(自动同步)

用于查询 NTP 守护进程(ntpd)的状态及相关信息。

ntpq [选项]

选项说明
-p显示 NTP 服务器和对等体的状态
-c rv显示 NTP 服务器的运行时变量
-n以 IP 地址的形式显示服务器,而非域名

ntpstat 命令

用于简单查看 NTP 同步状态。

ntpstat

输出说明:

  • synchronised to NTP server:表示已成功同步到某个 NTP 服务器。
  • unsynchronised:表示未与 NTP 服务器同步。
  • time correct to within:表示本地时间与 NTP 服务器的误差范围。

ntpd 命令

用于启动或管理 NTP 守护进程,使其定期与 NTP 服务器同步

ntpd [选项]

选项说明
-g在启动时允许 ntpd 进行大步调整时间(即使时间误差很大)
-q启动后与服务器同步一次后退出,不保持守护进程运行
-n在前台运行 ntpd(调试模式),不作为守护进程
-d打开调试模式,输出详细日志

timedatectl 命令

用于查看和设置系统时间,支持与 NTP 服务集成。

timedatectl [选项]

选项说明
status显示当前系统时间状态及 NTP 同步状态
set-ntp true/false启用或禁用 NTP 时间同步功能
set-time <时间>手动设置系统时间,例如 set-time "2024-10-25 14:30"
list-timezones列出可用时区
set-timezone <时区标签>更改时区

chronyc 命令(如果使用 chrony

chrony 是另一种时间同步服务,chronyc 是其控制工具。

chronyc [选项]

选项说明
sources查看 NTP 服务器及状态
tracking查看系统时钟与 NTP 服务器之间的偏差
命令不重要,主要是在/etc/chrony.conf中改配置文件
# 指定 NTP 服务器池,通过 iburst 选项来加快初始同步速度
# iburst 表示如果与服务器的连接不可用,chrony 将连续发送多个请求加速时间同步
pool pool.ntp.org iburst

# 指定漂移文件路径,用于记录系统时钟的偏移量,用于逐步调整系统时钟的精确性
driftfile /var/lib/chrony/drift

# makestep 用于指定系统启动时进行时间同步调整的条件
# 1.0 表示允许的时间差阈值,3 表示在初始同步的前三次允许时间步进调整
# 如果系统时钟与 NTP 时钟的偏差超过 1.0 秒,将立即步进调整
makestep 1.0 3

# 启用硬件时钟同步,即 chrony 将定期把系统时间同步到硬件时钟(RTC),
# 确保系统重启时仍保持精确时间
rtcsync

# 允许特定 IP 范围内的客户端访问 chrony 的时间同步服务
# 这里允许 192.168.0.0/24 网段的所有客户端进行时间同步
allow 192.168.0.0/24

# 指定日志目录路径,chrony 会在该目录中存储相关的日志信息
logdir /var/log/chrony

# 配置密钥文件路径,用于 NTP 身份验证,默认情况下可以忽略
# 如果需要 NTP 认证,可在此处指定密钥文件路径
# keyfile /etc/chrony.keys

时间同步操作

安装ntp客户端

yum install -y ntp

配置ntp服务

编辑 /etc/ntp.conf 文件,添加或修改 NTP 服务器。

启动ntp服务(已经启动就重启)

systemctl start ntpd    # 启动 NTP 服务
systemctl enable ntpd   # 设置开机启动

查看同步状态

使用 ntpq -pntpstat 命令查看当前同步状态:

手动同步时间(可选)

如果不需要长期运行 NTP 服务,只需进行一次时间同步,可以使用 ntpdate 工具

ntpdate 域名

总结

ntpdchrony 都是自动同步的服务。启动服务后,它们会根据配置文件自动从指定的 NTP 服务器获取时间并同步,不需要手动干预。

  • 只需启动并启用开机自启动服务即可。
  • 配置文件设置好后,服务会自动进行时间同步,无需手动干预。

建议只启用一个时间同步服务。选择 ntpdchrony 中的一个,并确保另一个服务已停止且未设置为开机自启动。

四,firewalld防火墙

防火墙概述

firewalld 是一种动态防火墙管理工具,主要用于 Linux 系统,提供了一种简单的方式来管理系统的网络访问控制。它基于区域和服务的概念,可以在运行时动态地修改防火墙规则,而无需重启服务。

防火墙区域(就是策略)

firewalld 使用区域来定义网络连接的安全级别。每个区域可以包含一组规则,指定允许或拒绝的服务、端口和协议。以下是一些常见区域及其说明:

区域描述
drop丢弃所有流量,只有在允许的情况下才允许。
block拒绝所有流量,但允许特定的 ICMP 请求。
public公共区域,适合于不信任的网络。
external用于路由器、网关等,需要进行 NAT 的区域。
dmz适合于放置公开服务的区域。
work适合用于工作环境,提供有限的服务。
home适合家庭网络,提供信任的服务。
internal内部网络,通常用于安全性较高的环境。
trusted允许所有流量,无需限制。

防火墙命令

firewall-cmd [选项](使用命令就是临时的)

  • --permanent:永久修改。
  • --state:查看防火墙状态。
  • --reload:重新加载防火墙规则。
  • --list-all:查看所有已加载的规则。
  • --get-active-zones:查看当前活动的区域。
  • --get-zones:查看所有可用区域。
  • --set-default-zone=<zone>:设置默认区域。
  • --zone=<zone> --list-all:列出某个区域的所有规则。
  • --zone=<zone> --add-service=<service>:将服务添加到指定区域。
  • --zone=<zone> --remove-service=<service>:从指定区域移除服务。
  • --zone=<zone> --add-port=<端口>/<端口协议>:将端口添加到指定区域。
  • --zone=<zone> --remove-port=<端口>/<端口协议>:从指定区域移除端口。
  • --zone=<zone> --list-services:查看某个区域的服务。
  • --zone=<zone> --list-ports:查看某个区域的端口。
  • --zone=<zone> --add-source=<source>:将来源地址添加到指定区域。

永久的就是在命令后添加--permanent(不会立马生效,要重启)

selinux扩展

SELinux 有三种工作模式:

  1. Enforcing(强制模式)

    • 在此模式下,SELinux 会强制实施安全策略,任何不符合策略的访问都会被拒绝,并记录事件。
  2. Permissive(宽容模式)

    • 在此模式下,SELinux 不会阻止任何操作,但会记录所有违反策略的尝试。适合于调试和测试。
  3. Disabled(禁用模式)

    • 在此模式下,SELinux 被完全禁用,所有访问请求都会被允许。

查看和设置 SELinux 模式

查看当前模式:sestatus

查看当前 SELinux 状态:getenforce

临时切换到宽容/强制模式:setenforce 0/1

永久设置模式(重启生效): 编辑 /etc/selinux/config 文件,修改 SELINUX 参数:

五,计划任务crontab

crontab 是 Linux 中用于 计划和自动化任务的工具,可以设定任务在特定的时间、日期、或周期性地自动执行。

任务计划概述

cron 服务负责管理和执行计划任务。计划任务的常见用途包括:

  • 定时备份数据
  • 定时发送提醒
  • 周期性清理日志文件
  • 定时更新系统或应用
crontab 文件的结构
#crontab 文件的每一行表示一个任务,格式如下:
* * * * * command_to_execute

每个 * 代表一个时间参数,依次为:分钟、小时、日期、月份、星期,具体含义如下:

字段描述范围
分钟指定分钟0-59
小时指定小时0-23
日期指定日期1-31
月份指定月份1-12
星期指定星期几0-7 (0 和 7 都表示星期日)
*表示取值范围每个数,-表示范围【1-7表示1到7包括中间的都是】,/表示每多少个常与*连用【*/10假如在分字段,表示每10分钟,如是5/10表示从第五分钟开始每10分钟,5,15,25……】, 逗号表示去多个值【1,2,3遇到123都算】
管理和编辑 crontab

crontab  选项

-l:这将列出当前用户设置的所有计划任务。如果没有任务,则会显示为空。

-e :打开 crontab 文件并添加或修改任务

-r :可以删除当前用户的所有计划任务

-i:删除前进行确认,通常与 -r 一起使用

系统级任务计划

系统级的 cron 任务可以在 /etc/crontab 中查看,通常用于管理系统级任务。系统级任务的格式比用户级 crontab 多一个用户字段,用于指定执行任务的用户。

/etc/cron.d/ 目录下的文件也用于存放系统级任务。

黑名单与白名单(直接在文件中写用户名,一行只能写一个)
白名单

白名单是指仅允许特定的用户或任务运行。可以通过设置特定的 crontab 文件或配置文件,来限制只有白名单中的用户可以执行某些任务。(本身是不存在的要自己创建)

实现方法:

  • 编辑用户的 crontab:仅允许特定用户编辑 crontab 文件。例如,通过 /etc/cron.allow 文件来控制哪些用户可以使用 cron

黑名单

黑名单是指禁止特定的用户或任务执行。可以通过设置特定的 crontab 文件或配置文件,来限制黑名单中的用户无法运行某些任务。

实现方法:

  • 编辑用户的 crontab:通过 /etc/cron.deny 文件来控制哪些用户不能使用 cron

如果同时存在 cron.allowcron.denycron.allow 文件会优先考虑。如果用户在 cron.allow 中,则即使在 cron.deny 中也可以使用 cron

系统级白名单:可以在系统级 cron 目录(如 /etc/cron.d/)中设置特定的任务,仅允许这些任务被执行。

注意

crontab是来管理cron命令的,实际上还是cron在工作,所以不要忘了启动cron服务

六,扩展,自定义服务(nginx为例)

创建服务文件

服务文件通常位于 /etc/systemd/system/ 目录下,以 .service 结尾。使用文本编辑器创建一个新的服务文件。例如,创建一个名为 nginx.service 的文件:(服务文件可以放在任何地方,但是建议放在官方推荐目录)

编辑服务文件
[Unit]
Description=Nginx Web Server
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
PIDFile=/usr/local/nginx/logs/nginx.pid
Restart=on-failure

[Install]
WantedBy=multi-user.target
#ExecStart:启动 Nginx 服务。
#ExecReload:重新加载 Nginx 配置。
#ExecStop:停止 Nginx 服务。
#PIDFile:指定 Nginx 进程的 PID 文件路径。

#Type=simple:默认模式,直接运行启动命令,适用于不派生子进程的服务。
#Type=oneshot:适合一次性任务,服务会在启动命令完成后立即退出。
#Type=notify:服务在启动后会通知 systemd 已就绪,适用于较复杂的服务。
#Type=idle:服务会在其他任务空闲时运行,避免和其他服务同时启动。
#Type=forking 能让 systemd 知道 Nginx 启动完成后主进程会退出,这样 systemd 就会继续监视 Nginx 的子进程,以确保服务正常运行。
重新加载 systemd

sudo systemctl daemon-reload

启动看看

;