一,自有服务概述
概述
系统自带的的一些服务,就像衣服是外来服务,上厕所是与生俱来的的。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 层时间服务器(Stratum 1):这些服务器通过 GPS、原子钟等高精度时间源获取时间,是时间源的最上层。
- 第 2 层时间服务器(Stratum 2)及以下:这些服务器通过第 1 层或其他上层服务器同步时间。层级越高,时钟的准确性可能越低,但在实际应用中,Stratum 2、Stratum 3 的服务器已经能提供足够精确的时间。
-
时间同步过程:
- 时间偏移与延迟计算:客户端和服务器在进行时间同步时,会交换几个数据包,通过比较这些数据包的发送和接收时间,计算时间偏移(offset)和网络延迟(delay),从而调整客户端时钟。
- 循环校正:NTP 的时间同步并不是一次性的操作,而是通过定期与 NTP 服务器进行交互,持续调整本地时钟,保证时间的准确性。
-
同步精度: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 [选项]
命令不重要,主要是在/etc/chrony.conf中改配置文件
选项 说明 sources
查看 NTP 服务器及状态 tracking
查看系统时钟与 NTP 服务器之间的偏差 # 指定 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 -p
或ntpstat
命令查看当前同步状态:
手动同步时间(可选)
如果不需要长期运行 NTP 服务,只需进行一次时间同步,可以使用
ntpdate
工具ntpdate 域名
总结
ntpd
和chrony
都是自动同步的服务。启动服务后,它们会根据配置文件自动从指定的 NTP 服务器获取时间并同步,不需要手动干预。
- 只需启动并启用开机自启动服务即可。
- 配置文件设置好后,服务会自动进行时间同步,无需手动干预。
建议只启用一个时间同步服务。选择
ntpd
或chrony
中的一个,并确保另一个服务已停止且未设置为开机自启动。
四,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 有三种工作模式:
Enforcing(强制模式):
- 在此模式下,SELinux 会强制实施安全策略,任何不符合策略的访问都会被拒绝,并记录事件。
Permissive(宽容模式):
- 在此模式下,SELinux 不会阻止任何操作,但会记录所有违反策略的尝试。适合于调试和测试。
Disabled(禁用模式):
- 在此模式下,SELinux 被完全禁用,所有访问请求都会被允许。
查看和设置 SELinux 模式
查看当前模式:sestatus
查看当前 SELinux 状态:getenforce
临时切换到宽容/强制模式:setenforce 0/1
永久设置模式(重启生效): 编辑
/etc/selinux/config
文件,修改SELINUX
参数:
五,计划任务crontab
crontab
是 Linux 中用于 计划和自动化任务的工具,可以设定任务在特定的时间、日期、或周期性地自动执行。
任务计划概述
cron
服务负责管理和执行计划任务。计划任务的常见用途包括:
- 定时备份数据
- 定时发送提醒
- 周期性清理日志文件
- 定时更新系统或应用
crontab
文件的结构
#crontab 文件的每一行表示一个任务,格式如下: * * * * * command_to_execute
每个
*
代表一个时间参数,依次为:分钟、小时、日期、月份、星期,具体含义如下:*表示取值范围每个数,-表示范围【1-7表示1到7包括中间的都是】,/表示每多少个常与*连用【*/10假如在分字段,表示每10分钟,如是5/10表示从第五分钟开始每10分钟,5,15,25……】, , 逗号表示去多个值【1,2,3遇到123都算】
字段 描述 范围 分钟 指定分钟 0-59 小时 指定小时 0-23 日期 指定日期 1-31 月份 指定月份 1-12 星期 指定星期几 0-7 (0 和 7 都表示星期日)
管理和编辑 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.allow
和cron.deny
,cron.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