如何关闭Linux中的不必要服务?适配Ubuntu 22.04与CentOS 7的详细操作教程

如何关闭Linux中的不必要服务?适配Ubuntu 22.04与CentOS 7的详细操作教程

昨天凌晨2点,我运维的香港服务器 CPU 使用率飙升到了 100%,网络带宽也出现了莫名的占用。登录系统后,我发现几个不常用的服务居然在后台运行,占据了大量资源。

作为一名 DevOps 工程师,我深知“少即是多”的道理。Linux 系统默认会启动很多服务,其中一部分并非我们业务所需,甚至在某些场景下可能带来安全隐患。因此,我决定彻底梳理系统服务,并永久禁用那些“不该存在”的进程。这篇文章就是我在排查、停用、禁用这些服务过程中的完整实操记录。

一、前置准备:识别正在运行的服务

我们首先要明确:当前系统有哪些服务正在运行?哪些是必须的?哪些是不需要的?

1. 查看所有活跃服务(基于 systemd 系统)

systemctl list-units --type=service --state=running

这个命令会列出所有正在运行的服务。输出中重点关注那些你不熟悉的服务名,例如 avahi-daemon.service、cups.service、bluetooth.service 等,这些通常用于桌面环境,在服务器上并不常用。

2. 查看所有已启用的服务(开机自启)

systemctl list-unit-files --type=service | grep enabled

配合前一条命令可以判断:哪些服务是“当前正在运行且设为开机自启”的,我们可以优先处理这些。

二、实际操作:停止并禁用不需要的服务

我们以 cups.service(打印服务,服务器中基本用不到)为例,执行停用流程:

1. 停止服务(当前生效)

sudo systemctl stop cups.service

这一步立即终止服务运行。

2. 禁用服务(下次启动不再自动运行)

sudo systemctl disable cups.service

这个操作会移除开机启动项,确保下次重启不会再次激活该服务。

3. 若彻底移除(可选)

sudo apt purge cups -y # Debian/Ubuntu
sudo yum remove cups -y # RHEL/CentOS

如果你确认永远不需要该服务,可以将其完全卸载。

三、批量操作技巧:一次性禁用多项服务

有些服务器启动了多个无用服务,我们可以批量处理。以下是我用过的一段 Bash 脚本,用于停用多个目标服务:

#!/bin/bash
# unwanted-services.sh

services=(
    "cups.service"
    "avahi-daemon.service"
    "bluetooth.service"
    "ModemManager.service"
)

for svc in "${services[@]}"; do
    echo "Stopping and disabling $svc ..."
    systemctl stop "$svc"
    systemctl disable "$svc"
done

执行方式:

chmod +x unwanted-services.sh
sudo ./unwanted-services.sh

四、附加说明:如何防止服务被意外重新启动

有些服务即使被停用,在依赖更新或某些错误操作下可能会重新启用。为避免这种情况,可以使用 mask:

sudo systemctl mask bluetooth.service

这会将该服务链接到 /dev/null,彻底阻止它被启动。若以后想恢复,可以:

sudo systemctl unmask bluetooth.service

五、验证结果:确保服务状态已改变

使用以下命令确认服务状态:

systemctl is-active cups.service # inactive
systemctl is-enabled cups.service # disabled

六、附录:常见可禁用服务列表(仅供参考)

服务名 功能说明 适合禁用的场景
cups.service 打印服务 无打印需求的服务器
avahi-daemon.service 本地网络发现协议 无局域网广播需求
bluetooth.service 蓝牙连接 无蓝牙设备
ModemManager.service 管理拨号调制解调器 固定网络服务器
rpcbind.service NFS 和 RPC 支持 未启用相关功能
snapd.service Snap 应用管理 无使用 Snap 应用

⚠️ 请务必根据你系统实际应用场景判断是否禁用,某些服务可能是依赖组件的一部分。

七、小服务,大安全

这次停用无用服务的经历让我意识到:系统最可怕的不是“明显的异常”,而是“沉默的隐患”。通过逐一梳理和管理服务,我的系统空闲资源大幅提升,潜在攻击面也被有效收缩。

以下是对 “停止并禁用 Linux 系统中不需要的服务” 教程的补充,分别针对 Ubuntu 22.04 与 CentOS 7 的差异化操作细节与注意事项,方便你在不同发行版上精准实施:

八、Ubuntu 22.04 操作细节

Ubuntu 22.04 默认使用 systemd,但其生态中仍保留了一些特有服务管理工具(如 service 命令、snap 框架)。以下是具体建议:

1. 服务管理建议使用 systemctl 替代 service

尽管 service 命令依然存在,但推荐统一使用 systemd 方式:

sudo systemctl stop apache2.service
sudo systemctl disable apache2.service

2. 移除 Snap 服务(若未使用)

Ubuntu 22.04 默认启动 snapd.service 和多个 Snap 应用的后台服务(如 snapd.apparmor.service)。如果你不使用 Snap 应用(如 Firefox Snap 版),可考虑彻底移除:

sudo systemctl stop snapd.service
sudo systemctl disable snapd.service
sudo apt purge snapd -y

⚠️ 注意:Snap 相关服务依赖深,如卸载前需确认无必要组件依赖 Snap。

3. 常见可安全禁用服务

服务名 默认状态 是否可禁用 禁用命令
bluetooth.service 已启用 ✅ 是 systemctl disable --now bluetooth.service
avahi-daemon.service 已启用 ✅ 是 systemctl disable --now avahi-daemon.service
cups.service 已启用 ✅ 是 systemctl disable --now cups.service
snapd.service 已启用 ⚠️ 需确认 见上文 Snap 部分

九、CentOS 7 操作细节

CentOS 7 同样使用 systemd,但其包管理系统为 yum(非 apt),默认服务集与 Ubuntu 有较大差异。

1. 使用 systemctl 停止和禁用服务

标准命令与 Ubuntu 类似:

sudo systemctl stop firewalld.service
sudo systemctl disable firewalld.service

2. 卸载服务使用 yum

以禁用并卸载 cups 服务为例:

sudo yum remove cups -y

3. firewalld 和 NetworkManager 注意事项

在 CentOS 7 服务器上,如果你使用的是 iptables 或已配置固定网络,以下两个服务可考虑禁用:

  • firewalld.service(前提是已手动配置防火墙或仅内网使用)
  • NetworkManager.service(如果是用 ifcfg-ethX 静态配置)

禁用示例:

sudo systemctl disable --now NetworkManager.service

4. 常见可禁用服务推荐

服务名 默认状态 是否可禁用 禁用命令
cups.service 启用 ✅ 是 systemctl disable --now cups.service
bluetooth.service 启用 ✅ 是 systemctl disable --now bluetooth.service
ModemManager.service 启用 ✅ 是 systemctl disable --now ModemManager.service
firewalld.service 启用 ⚠️ 需评估 systemctl disable --now firewalld.service
NetworkManager.service 启用 ⚠️ 需评估 systemctl disable --now NetworkManager.service

⚠️ 务必在网络配置手动完成的前提下禁用 NetworkManager,否则可能会导致网络中断。

操作项 Ubuntu 22.04 CentOS 7
包管理器 apt yum
默认网络服务 netplan + NetworkManager network + NetworkManager
可安全禁用服务 cups, avahi, snapd, bluetooth cups, bluetooth, ModemManager
服务管理命令 systemctl systemctl
开机启动配置路径 /etc/systemd/system/ /usr/lib/systemd/system/

以下是 基于特定发行版的完整服务清单禁用脚本,我分别为 Ubuntu 22.04 和 CentOS 7 提供了版本,适合用于初步系统瘦身或生产环境中关闭无用服务。你可以根据业务实际情况增删服务项。

十、Ubuntu 22.04 – 批量禁用常见无用服务脚本

适用于无桌面环境、纯服务器用途场景。脚本使用 systemctl 批量关闭并禁用部分默认启用但非必要的服务。

#!/bin/bash
# disable-unwanted-services-ubuntu2204.sh

# Ubuntu 22.04 常见可禁用服务列表
services=(
    bluetooth.service
    cups.service
    avahi-daemon.service
    ModemManager.service
    snapd.service
    ufw.service     # 替换为 iptables 的用户可以关闭它
)

echo "⏳ 开始禁用以下 Ubuntu 22.04 服务..."

for svc in "${services[@]}"; do
    if systemctl list-units --full -all | grep -q "$svc"; then
        echo "🔧 停止并禁用: $svc"
        systemctl stop "$svc"
        systemctl disable "$svc"
        systemctl mask "$svc"
    else
        echo "⚠️  服务不存在: $svc(已跳过)"
    fi
done

echo "✅ 所有目标服务已处理完毕。"

执行方式:

chmod +x disable-unwanted-services-ubuntu2204.sh
sudo ./disable-unwanted-services-ubuntu2204.sh

十一、CentOS 7 – 批量禁用常见无用服务脚本

适用于企业版 Linux(RHEL 7/CentOS 7)的服务器场景:

#!/bin/bash
# disable-unwanted-services-centos7.sh

# CentOS 7 常见无用服务
services=(
    bluetooth.service
    cups.service
    avahi-daemon.service
    ModemManager.service
    NetworkManager.service  # 如已配置 network-scripts 静态IP
    firewalld.service       # 如改用 iptables 或处于可信内网
)

echo "⏳ 正在批量停用 CentOS 7 的无用服务..."

for svc in "${services[@]}"; do
    if systemctl list-units --full -all | grep -q "$svc"; then
        echo "🔧 停止并禁用: $svc"
        systemctl stop "$svc"
        systemctl disable "$svc"
        systemctl mask "$svc"
    else
        echo "⚠️  服务不存在: $svc(已跳过)"
    fi
done

echo "✅ 所有服务已完成处理。"

🔒 加固建议:设置不可被激活

如需彻底防止服务被错误启用(即便通过依赖激活),请保留 mask 命令:

systemctl mask servicename.service

要恢复:

systemctl unmask servicename.service

📝 温馨提示

不要盲目禁用所有“你不认识的服务”,关键服务如 cron, ssh, rsyslog, systemd-logind 等必须保留。

建议在测试环境先运行,确保系统无副作用再部署到生产。

可结合 chkservice(图形化 TUI 工具)手动确认哪些服务已启用。

未经允许不得转载:A5数据 » 如何关闭Linux中的不必要服务?适配Ubuntu 22.04与CentOS 7的详细操作教程

相关文章

contact