Linux 系统服务管理
Chen Kai CTO

在操作系统中,“服务”指后台常驻的进程或守护程序。本文介绍常见服务如 ntpd、firewalld、ssh 等的管理,并讲解如何使用 systemctl 命令进行启动、停止、重启与开机自启的配置。

一、什么是系统服务管理

在操作系统中,“服务”指的是在后台长期运行、对系统或用户提供某种功能的进程或守护程序。例如:

  • Windows 系统中的服务可通过 “services.msc” 可视化管理,包括 WiFi、蓝牙、音频、数据库等;
  • Linux 系统同样提供大量服务,例如网络、时间同步、计划任务、数据库守护进程等,都可用命令行或工具进行管理。

Windows 服务举例

  • WiFi 服务:依赖网卡硬件+网卡驱动+对应服务程序一起协作,让系统能够进行无线网络连接。
  • MySQL:若在 Windows 安装了 MySQL 数据库,可以通过 Windows 服务控制面板启动/停止服务,也可在命令行通过 net start mysql / net stop mysql 管理。
1
2
3
# Win 下示例:通过 cmd 管理服务
net start mysql
net stop mysql

Linux 则依赖一套统一的服务管理机制(如 Systemd),使用 systemctl 等命令行工具配置和管理这些服务,包括自动启动、重启、停止等操作。

二、Linux Systemd 服务管理

1.Systemd 基本作用

Systemd 是现代 Linux 发行版广泛使用的系统与服务管理器,它会在系统引导时启动各种服务,并维持它们的运行和状态。核心命令是 systemctl

常见操作:

用法 说明
systemctl start name 启动指定服务
systemctl stop name 停止指定服务
systemctl restart name 重启指定服务
systemctl status name 查看指定服务状态
systemctl enable name 开机自动启动
systemctl disable name 取消开机自启
systemctl is-active name 判断服务是否正在运行
systemctl is-enabled name 判断是否设置为开机启动

示例:

1
2
3
systemctl start crond
systemctl enable crond
systemctl status firewalld

2.systemctl 使用

CentOS 6 使用 service 来管理,CentOS 7 中的 servicechkconfig 都被整合到了 systemctl 里,向下兼容,可以使用旧的命令。

  1. 设置服务运行级别systemctl set-default multi-user.target / systemctl set-default graphical.target 等控制是否进入文本多用户/图形环境。

  2. 查看日志:配合 journalctl -u servicename 查看某服务相关日志。

  3. 编辑服务单元文件:在 /etc/systemd/system//usr/lib/systemd/system/ 下存放 .service 文件,自定义服务启动顺序、依赖等。

  4. 列出 active 运行中的服务

    ![image-20250127141849192](./Linux 系统服务管理/image-20250127141849192.png)

    1
    2
    3
    # 列出运行中的ssh服务
    systemctl list-units --type service --all | grep ssh
    # ssh.service loaded active running OpenBSD Secure Shell server

    unit:单元、服务,指的是如sshd、network、nginx这样的服务名。

之前的service命令原理补充: Linux的大部分命令都是去机器上寻找到某个文件,然后读取文件的配置加载功能。而service默认是去 /etc/init.d 目录下寻找服务管理脚本文件,然后根据指令service start network等去进行启动。

![image-20250203001009014](./Linux 系统服务管理/image-20250203001009014.png)

找到 ssh 这个文件进行打开,往下翻会出现下面的内容,这些就包含了一些相关的指令:

![image-20250203001145705](./Linux 系统服务管理/image-20250203001145705.png)

所以如果安装了某个软件后没有方便的启停管理脚本,可以自己写完后放到 /etc/init.d 目录下再调用就行。

通过 yumapt 等安装的程序,会自动生成对应的管理脚本,自动的在 systemctl 管理脚本目录下:

![image-20250203002716348](./Linux 系统服务管理/image-20250203002716348.png)

于是我们每次要关停服务的时候就不需要先 ps -efkill pid 了,非常省事。以 nginx 为例我们可以有两种运行方式:

  1. 直接运行命令
  2. 以服务管理模式运行systemctl

![image-20250203005916445](./Linux 系统服务管理/image-20250203005916445.png)

可以查看 nginx 的服务管理脚本,以后安装软件可以参照这个脚本来写:

![image-20250203010533155](./Linux 系统服务管理/image-20250203010533155.png)

三、常见自有服务与用途

Linux 系统自带许多基础服务,以下列举几个常用且重要的示例:

1.时间服务

ntpd & ntpsec

ntpd 是用来实现时间同步的守护进程。它会定期与上游时间服务器通信,使本机系统时钟准确一致。ntpsecntpd 的现代化版本,旨在提高安全性、减少代码复杂度,并提供更高效的时间同步服务。它与传统的 ntpd 在核心功能上类似,但经过优化,移除了许多遗留特性,以提升稳定性和安全性。

为什么需要时间同步?

在分布式系统、集群、日志分析等应用场景下,时间同步至关重要。例如:

​ • 定时任务的执行(如 cron 任务)

​ • 日志对比和分析(确保日志时间戳的一致性)

​ • 数据同步(如数据库主从复制)

​ • 分布式计算和安全协议(如 Kerberos 身份认证)

如果服务器时间不一致,可能会导致:

​ • 任务调度混乱(任务可能提前或延后执行)

​ • 日志分析错误(难以关联不同系统的日志)

​ • 通信异常(如 TLS 证书时间不匹配)

因此保证服务器之前的时间一致非常重要。一些要点如下:

  • NTP(Network Time Protocol)可实现毫秒级甚至更精确的时间同步,精度在局域网内可达 0.1 ms,在互联网上绝大多数地方的精度可以达到 1-50 ms。
  • /etc/ntp.conf/etc/chrony.conf 中配置上游时间服务器地址。
  • 启动服务后,ntpd 会定时校准本机时间。
1
2
systemctl enable ntpsec
systemctl start ntpsec

![image-20250203113641235](./Linux 系统服务管理/image-20250203113641235.png)

可以前往 /etc/ntpsec/ntp.conf 查看对应的配置文件:

![image-20250203115220880](./Linux 系统服务管理/image-20250203115220880.png)

以阿里云 ntp 服务器为例,要修改为这个服务器的时间可以:

1
2
3
server times.aliyun.com iburst prefer
server ntp.aliyun.com iburst
server cn.pool.ntp.org iburst

可以查看 /usr/lib/systemd/system/ntpsec.service 查看配置文件:

![image-20250203115608782](./Linux 系统服务管理/image-20250203115608782.png)

查看运行状态:

![image-20250203115835862](./Linux 系统服务管理/image-20250203115835862.png)

ntpd -q 可以监视 ntpsec 运行状态:

1
2
3
4
5
6
7
8
9
10
11
12
2025-02-03T12:11:49 ntpd[973215]: INIT: ntpd ntpsec-1.2.2: Starting
2025-02-03T12:11:49 ntpd[973215]: INIT: Command line: ntpd -q
2025-02-03T12:11:49 ntpd[973215]: INIT: precision = 0.042 usec (-24)
2025-02-03T12:11:49 ntpd[973215]: INIT: successfully locked into RAM
2025-02-03T12:11:49 ntpd[973215]: CONFIG: readconfig: parsing file: /etc/ntpsec/ntp.conf
2025-02-03T12:11:49 ntpd[973215]: CONFIG: Cannot open logfile /var/log/myntpsec.log: Permission denied
2025-02-03T12:11:49 ntpd[973215]: INIT: ntpd ntpsec-1.2.2: Starting
2025-02-03T12:11:49 ntpd[973215]: INIT: Command line: ntpd -q
2025-02-03T12:11:49 ntpd[973215]: CONFIG: restrict nopeer ignored
2025-02-03T12:11:49 ntpd[973215]: CLOCK: leapsecond file ('/usr/share/zoneinfo/leap-seconds.list'): good hash signature
2025-02-03T12:11:49 ntpd[973215]: CLOCK: leapsecond file ('/usr/share/zoneinfo/leap-seconds.list'): loaded, expire=2025-06-28T00:00Z last=2017-01-01T00:00Z ofs=37
2025-02-03T12:11:49 ntpd[973215]: IO: unable to bind to wildcard address :: - another process may be running: Address already in use; EXITING

ntpdate(一次性时间同步工具)

如果仅需临时更新时间,也可用 ntpdate(或 chronyc)命令:

1
ntpdate pool.ntp.org

可以添加 -u 参数,指定来自某台服务器或者某个服务器厂商,例如:

1
2
ntpdate -u ntp.aliyun.com
ntpdate -u 192.132.2.111

ntpdata 它会一次性与指定服务器进行同步,而非常驻守护进程。 ntpd 在实际同步时间时是一点点校准过来的,最终把时间慢慢校对,但 ntpdate 不会考虑其他程序是否会阵痛,直接调整时间,区别是一个是校准,一个是调整。总结来说 ntpdate 有如下缺点

  1. 暴力修改时间
    1. ntpdate 直接调整时间,可能导致依赖时序的程序(如定时任务、数据库同步)出错。
    2. ntpsec 采用 平滑调整 方式,避免系统出现 时间跳变 影响应用。
  2. 安全隐患
    1. ntpdate 依赖外部 NTP 服务器,如果服务器被攻击,可能导致伪造时间同步。

推荐使用 ntpsec 进行长时间运行的同步,避免 ntpdate 直接修改系统时间带来的问题。

timedatectl (管理系统时间和 NTP 设置)

timedatectl 是一个命令行工具,用于在 Linux 系统上查看和配置系统时间和日期相关设置。它提供了一种简单且统一的方式来管理系统时间,可用于查看当前时间、时区设置,更改时间和日期,启用或禁用 NTP 同步等操作。timedatectl 主要是整合了两类指令:

  • date:改时间日期(软件时间,程序计算的时间)

    ![image-20250203120351446](./Linux 系统服务管理/image-20250203120351446.png)

  • hwlock:改硬件时间(计算机的主板上有一个 BIOS 的系统以及纽扣电池提供电量),可以同步硬件时间和软件时间,但现在 timedatectl 直接都做同步了。

    ![image-20250203120334565](./Linux 系统服务管理/image-20250203120334565.png)

也就是说我们可以选择自己搭建一个 ntpsec,也可以选择直接使用 timedatectl 自动运行一个 ntpsec

![image-20250203121839638](./Linux 系统服务管理/image-20250203121839638.png)

我们可以做个实验,先把原来的 ntpsec 服务关掉,再开启 timedatectl 这边的服务:

![image-20250203122209417](./Linux 系统服务管理/image-20250203122209417.png)

发现出了问题,经过排查发现 timedatectl 是通过 systemd-timesyncd 管理 ntp 同步的,因此首先应该安装 systemd-timesyncd,然后开启它,再设置 timedatectl 里的 set-ntp

1
2
3
4
sudo apt install systemd-timesyncd -y
# systemctl status systemd-timesyncd
sudo systemctl start systemd-timesyncd
timedatectl set-ntp on

![image-20250203122508617](./Linux 系统服务管理/image-20250203122508617.png)

当我们启动了 ntp 服务后,会发现无法再使用 timedatectl 设置时间了:

![image-20250203122609864](./Linux 系统服务管理/image-20250203122609864.png)

查看当前时间和日期信息

可以使用以下命令查看系统当前的时间、日期、时区以及 NTP 同步状态:

1
timedatectl

执行该命令后,会输出类似如下信息:

![image-20250203105914072](./Linux 系统服务管理/image-20250203105914072.png)

查看可用时区

要查看所有可用的时区列表,可以使用以下命令:

1
timedatectl list-timezones

这会列出所有支持的时区名称,例如 Asia/ShanghaiEurope/London 等。

![image-20250203110010533](./Linux 系统服务管理/image-20250203110010533.png)

要修改时区或者系统中查看有哪些时区文件也可以手动去做,这也是 CentOS 6 中一般使用的方法:

![image-20250203110415833](./Linux 系统服务管理/image-20250203110415833.png)

设置时区

若要更改系统的时区,可以使用以下命令,将时区名称替换为你需要的时区:

1
timedatectl set-timezone Asia/Shanghai

设置时间和日期

可以直接使用 timedatectl 设置系统的时间和日期,例如设置为 2025 年 2 月 3 日 13:00:00:

1
timedatectl set-time "2025-02-03 13:00:00"

![image-20250203121555291](./Linux 系统服务管理/image-20250203121555291.png)

启用或禁用 NTP 同步

如果要启用 NTP 同步,使用以下命令:

1
2
timedatectl set-ntp true				# 启用
timedatectl set-ntp false # 禁用

ntpd 主要专注于通过 NTP 协议与时间服务器进行通信,实现系统时间的精确同步,是一个持续运行的守护进程,负责不断调整系统时间以保持与时间服务器一致。而 timedatectl 是一个管理系统时间设置的工具,它可以查看系统时间状态、更改时区、设置时间日期以及控制 NTP 同步的启用和禁用等操作。可以说 timedatectl 提供了一个用户操作界面,而 ntpd 则负责实际的时间同步工作,两者可以配合使用,例如使用 timedatectl 启用 NTP 同步后,ntpd 会按照配置进行时间同步操作。


2.firewalld (防火墙服务)

基本介绍

防火墙(Firewall)是一种网络安全工具(安全策略),用于控制和过滤网络流量,防止未经授权的访问,同时允许合法的数据通信。它就像一座智能大门,决定哪些数据包可以进入或离开计算机或服务器。

![Documentation - Architecture | firewalld](./Linux 系统服务管理/firewalld-structure+nftables.png)

防火墙的主要作用包括:

  • 拦截恶意流量:防止黑客攻击、病毒传播或未经许可的访问。
  • 保护内部网络:阻止外部设备直接访问你的计算机或服务器的敏感端口,可以禁止来自特殊站点的访问。
  • 流量管理:根据设定的规则(如 IP 地址、端口号)允许或阻止特定的数据通信,可以关闭不使用的端口,能够禁止特定端口的流出通信。

简单来说,防火墙就像保安,负责检查每个试图进入或离开你网络的“人”(数据包),并决定是放行、拦截还是询问管理员。防火墙分为硬件防火墙和软件防火墙:

  • 硬件防火墙:在硬件级别实现部分防火墙功能,另一部分功能基于软件实现,性能高,成本高
  • 软件防火墙:应用软件处理逻辑运行于通用硬件平台之上的防火墙,性能低,成本低

常见的防火墙服务有:

  • iptables(传统 Linux 防火墙),是有从前到后之分的

    1
    2
    iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT		# 接受22端口
    iptables -A INPUT -p tcp -m tcp --dport 98 -j DROP # 拒绝98端口
  • firewalld(现代 Linux 动态防火墙),其实也是创建 iptables 规则

  • ufw(Uncomplicated Firewall)(Ubuntu 友好型防火墙)

在 Linux 中,firewalld 是基于 iptables/netfilter 提供的一层动态防火墙管理,红帽系(RHEL/CentOS)常用,提供可实时加载规则,支持 zone、service、port 等管理方式。

firewalld 服务脚本

我们可以通过以下命令查看防火墙服务名以及查看服务脚本:

服务管理脚本其实就是帮我们执行软件提供的二进制命令,firewalld、nginx 和其他软件都是这样

![image-20250203192318288](./Linux 系统服务管理/image-20250203192318288.png)

启用与关闭

1
2
3
4
5
systemctl start firewalld
systemctl enable firewalld

systemctl stop firewalld
systemctl disable firewalld

firewalld 默认使用运行模式,运行模式是配置的防火墙策略立即生效,但不写入配置文件,与之相对的是永久模式,此模式下配置的防火墙策略写入配置文件,但要 reload 才生效。

常用规则操作

添加/删除端口允许规则

1
2
3
# 开放80端口
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --reload
  • --permanent:写入永久规则,需要 --reload 生效。

  • 若只想临时生效可不加 --permanent

  • 如果不加对应的协议会报错:

    1
    Error: INVALID_PORT: bad port (most likely missing protocol), correct syntax is portid[-portid]/protocol

举个例子,我们现在使用以下命令从89端口启动一个简单的HTTP服务(首先需要将虚拟机设置为桥接模式):

1
python3 -m http.server 89

我们会发现输入这个网址并没有连接成功:http://0.0.0.0:89/

![image-20250204234359318](./Linux 系统服务管理/image-20250204234359318.png)

原因当然是我们在主机上要访问的是虚拟机的地址+端口号啦,但测试了虚拟机的地址后依然发现没有连接成功,我们回去看一下我们防火墙的规则,发现其实我们并没有开启89端口:

![image-20250204234438104](./Linux 系统服务管理/image-20250204234438104.png)

因此我们需要手动先开启端口再尝试连接:

![image-20250205000851177](./Linux 系统服务管理/image-20250205000851177.png)

大功告成:

![image-20250205000900921](./Linux 系统服务管理/image-20250205000900921.png)

接下来我们可以删除端口:

1
2
firewall-cmd --remove-port=89/tcp
# success

![image-20250205001405409](./Linux 系统服务管理/image-20250205001405409.png)

现在又不能连接上了~

补充 tcp协议和 udp 协议:

  • tcp 协议是一个安全可靠的连接,需要双向确认,客户端和服务端都需要确认对方连接上了才能通信。
  • udp 协议是一个不可靠的连接协议,客户端可以随便给服务端发,不需要对方确认

比如在一个很差的网络环境下,网页无法访问,无法做 DNS 解析,但 QQ 可以收发消息。因为网络网站服务用的都是 TCP 协议,而 QQ 和 ntp 用的都是 UDP 协议。

添加/删除服务

1
2
3
# 开放ntp服务(一般包含80端口规则)
firewall-cmd --permanent --add-service=ntp
firewall-cmd --reload

![image-20250205002650259](./Linux 系统服务管理/image-20250205002650259.png)

注意:我们有些服务其实是被包含在一些大模块下的,比如我们想要直接添加 nginx 服务是做不到的,但我们可以添加http服务,放行80端口即可:

![image-20250205004341309](./Linux 系统服务管理/image-20250205004341309.png)

如果 nginx 不是绑定在80端口就不好使了,得直接指定端口号进行添加:

![image-20250205004835538](./Linux 系统服务管理/image-20250205004835538.png)

![image-20250205004824003](./Linux 系统服务管理/image-20250205004824003.png)

总结就是最好直接针对端口号和协议号添加规则,而且 firewalld 使用起来限制比较多,可以直接使用 iptables,它支持很多复杂的参数,针对协议、来源端口、目标端口等,如公有云的安全组(阿里云提供的硬件防火墙)也是基于 iptables 这样的规则添加的。

zone概念

firewalld 中把网络接口与 zone 绑定,不同 zone(public、trusted、internal 等)可有不同规则策略,以细分安全级别。

区域名称 信任级别 默认策略 典型应用场景
drop 最低 丢弃所有传入流量,不回应任何请求,允许所有传出流量 最高安全性,完全隐藏设备,如黑洞防护
block 拒绝所有传入流量(返回 ICMP 端口不可达),允许所有传出流量 仅允许受信任的系统主动连接
public 允许出站连接,默认拒绝所有入站连接,仅允许 SSH 公共网络,如 WiFi 热点或陌生环境
external 用于 NAT 路由,默认只允许出站连接 服务器充当路由器,保护内部网络
dmz 允许外部访问特定服务,如 HTTP/HTTPS,默认拒绝所有其他流量 部署 Web 服务器或公共服务的隔离区域
work 允许内部可信网络的访问,默认允许 SSH、Samba 公司内部网络,适用于员工办公环境
home 允许家用网络的访问,默认允许 SSH、Samba、mDNS 家庭网络,适用于个人设备互通
internal 允许内部设备访问,默认允许 SSH、Samba、mDNS 受信任的局域网,如 VPN 连接
trusted 最高 允许所有流量(入站和出站) 完全信任的环境,如封闭内网

查看当前默认区域:

1
2
firewall-cmd --get-default-zone
# public

修改默认区域:

1
sudo firewall-cmd --set-default-zone=work

列出所有区域的名字:

1
2
firewall-cmd --get-zones
# block dmz drop external home internal public trusted work

查询某个区域的默认规则:

1
firewall-cmd --zone=public --list-all

![image-20250203194047421](./Linux 系统服务管理/image-20250203194047421.png)

变更某个接口的区域:

1
sudo firewall-cmd --zone=home --change-interface=eth0 --permanent

然后重新加载防火墙:

1
sudo firewall-cmd --reload

复杂规则

可借助 --add-rich-rule 来添加更复杂的匹配条件,如限制特定 IP 地址、端口、协议等;或直接使用 iptables 语法进行自定义,注意与 firewalld 的并存管理时要小心冲突。

3.计划任务(crontab)

计划任务让系统在指定时间周期自动执行某些脚本或命令,例如:

  • 定时备份数据库,每天凌晨 2 点;
  • 定时清理日志文件或临时文件夹。

编辑与常用操作

1
2
3
crontab -e       # 编辑当前用户的计划任务
crontab -l # 查看
crontab -r # 删除

条目格式
MIN HOUR DAY MONTH WEEKDAY command

![image-20250205103130393](./Linux 系统服务管理/image-20250205103130393.png)

注意:

  1. 写在定时任务里的命令必须是绝对路径,不容易出错
  2. 日期和星期是不能同时写的
  3. WEEKDAY 从 0 到 7 分别表示周日到周六
  4. 四个符号
    1. * 表示取值范围中的每一个数字
    2. - 是做连续区间表达式的,想要表达 1-7 就直接写 1-7 即可
    3. / 表示每多少个,例如想每十分钟一次,可以在分的位置写 */10
    4. , 表示多个取值例如想在 1 点、2 点、6 点执行,可以写 1,2,6

例如,每天凌晨 1:30 运行脚本 /usr/local/bin/backup.sh

1
30 1 * * * /usr/local/bin/backup.sh

每天凌晨2点30,执行 ntpdate 命令同步 ntp.aliyun.com 且不输入任何信息(也就是把命令结果重定向到黑洞文件 /dev/null):

1
30 2 * * * /usr/sbin/ntpdate -u ntp.aliyun.com &> /dev/null

现在做一个简单的测试,首先运行 crontab -e 进入写定时任务的界面:

![image-20250205113536906](./Linux 系统服务管理/image-20250205113536906.png)

可以看到定时任务已经生效了:

![image-20250205114021239](./Linux 系统服务管理/image-20250205114021239.png)

相关目录

  • /etc/crontab / /etc/cron.d:系统级计划任务配置。

    ![image-20250205115927338](./Linux 系统服务管理/image-20250205115927338.png)

  • /etc/cron.daily/, /etc/cron.hourly/, /etc/cron.weekly/, /etc/cron.monthly/:自动分类执行脚本。

要查看 crontab 的日志,可以查找:

1
grep CRON /var/log/syslog

![image-20250205115740974](./Linux 系统服务管理/image-20250205115740974.png)

黑名单和白名单

超级管理员可以通过配置来设置某些用户不允许设置计划任务,配置文件在 /etc/cron.deny,里面每行写一个用户名,白名单在 /etc/allow。白名单优先级高于黑名单,如果一个用户同时存在于两个名单中,则会被默认允许创建计划任务。

4.SSH (Secure Shell)

作用与原理

SSH (Secure Shell) 提供安全的远程登录方式,可替代明文的 telnet/rsh。常见服务端程序如 sshd,允许远程客户端 ssh user@host 方式连接。

  • 默认端口:22
  • 加密通信:所有数据(含密码)都通过加密隧道传输,确保安全性。

查看软件的网络配置:

![image-20250128145224693](./Linux 系统服务管理/image-20250128145224693.png)

其中 ens 是真实的网卡配置文件。在网卡配置文件中,BOOTPROTO 这一个变量控制的是 IP 的获取方式,其中 dhcp 为动态分配,VMware 虚拟网卡会自动给你分配 IP 地址,而static 为静态 IP,即自己手动根据网络环境设置固定的 IP 地址。一般默认启动 network 服务都是获取 dhcp 动态 IP,可用范围一般是 192.168.0.2 到 192.168.0.254,同时会有一个默认的地址租期,这段时间内某台设备没用的话这个 IP 就会分配给别的设备,网关是流量出去的大门。

![TP-LINK](./Linux 系统服务管理/interlace,1.png)

要将动态 IP 修改为静态 IP,首先查看这个文件:

![image-20250130151023153](./Linux 系统服务管理/image-20250130151023153.png)

需要修改写入的内容形式可以为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 对于桥接模式

network:
version: 2
renderer: networkd
ethernets:
ens33:
dhcp4: no
addresses: [192.168.1.50/24]
gateway4: 192.168.1.1
nameservers:
addresses: [8.8.8.8, 8.8.4.4]

# 对于NAT模式
network:
version: 2
renderer: networkd
ethernets:
ens33:
dhcp4: no
addresses: [192.168.182.200/24]
gateway4: 192.168.182.2
nameservers:
addresses: [8.8.8.8, 8.8.4.4]

注意 address 写之前记得 ping 一下看看是否存在。最后修改完配置文件记得要重庆网络。

启动与管理

1
2
3
4
5
6
7
systemctl start sshd
systemctl enable sshd
systemctl status sshd
systemctl reload sshd
systemctl enable sshd # 设置开机自启
systemctl disable sshd
systemctl is-enabled sshd.service # 查看是否开机自启
  • sshd 为守护进程名,在某些发行版中也写作 ssh

主要配置

配置文件/etc/ssh/sshd_config

  • Port:指定 SSH 监听端口(可修改防止被暴力扫描)。
  • PermitRootLogin:是否允许 root 用户直接登录。
  • PasswordAuthentication:可禁止密码登录,改为公钥方式以提升安全。

常见使用场景

  1. 远程登录

    1
    ssh root@192.168.1.100
  2. 文件传输scpsftp 通过 SSH 通道安全地上传/下载文件。

  3. SSH 公钥免密:把本地公钥加到目标主机的 ~/.ssh/authorized_keys 里,即可免密码登录。

四、源码包与二进制包:软件安装模式

1.源码包

  • 优点:可自由编译选项、适配性好、可进行自定义特性;
  • 缺点:手动编译复杂、编译周期长、依赖配置繁琐。

编译安装流程一般为

  1. ./configure --prefix=... [--with-... etc]
  2. make
  3. make install

安装结果通常放在指定 prefix 路径,需自行创建服务脚本或 systemd unit 文件。

2.二进制包

  • RPM 系:RedHat/CentOS 等使用的包管理格式,如 yumdnf
  • DEB 系:Debian/Ubuntu 用 apt/dpkg 安装。
  • 优点:安装方便,自动处理依赖,大多数发行版官方仓库都提供常见软件包;
  • 缺点:可定制程度较低,版本可能不够新。

RPM(Red Hat Package Manager)是 RedHat 系统的底层包管理工具,yum/dnf 是对其的高层封装。

常见命令

1
2
3
4
5
rpm -ivh package.rpm     # 安装
rpm -Uvh package.rpm # 升级
rpm -e packagename # 卸载
rpm -qa # 查询已安装包列表
rpm -qi packagename # 查看包信息

更多使用方式

  • rpm -ql packagename:列出包中安装了哪些文件及路径。
  • rpm -qf /path/to/file:反查某文件属于哪个 RPM 包。
  • yum/dnf:自动依赖解析,在 /etc/yum.repos.d/ 定义源仓库;
    • yum install packagename
    • dnf update
    • yum remove packagename
  • 本文标题:Linux 系统服务管理
  • 本文作者:Chen Kai
  • 创建时间:2025-01-06 00:00:00
  • 本文链接:https://www.chenk.top/Linux 系统服务管理/
  • 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
 评论