在 Linux 系统管理中,systemd 已成为大多数现代发行版的默认初始化系统和服务管理器,它极大地简化了系统服务的管理和控制。之所以撰写本文,是因为挖矿病毒常常会利用 systemd 设置自动启动项,潜伏在系统中持续消耗资源牟利。因此,了解systemd服务相关内容,如常见默认启动项、服务配置文件存储路径、查看服务描述的方法等,对识别异常服务、保障系统安全至关重要。


一、常见默认启动项及简介

1.列出单元名称

要列出所有当前加载的服务单元,运行以下命令:

systemctl list-units --type service

默认情况下,systemctl list-units 命令仅显示活动设备。如果要列出所有已加载的单元,而不管它们的状态如何,则需在上述命令后加 –all 或 -a命令行选项运行。

要列出所有已安装的服务单元文件及启用状态,输入以下命令:

systemctl list-unit-files --type service

要仅验证特定服务单元是否正在运行,请运行以下命令:

systemctl is-active name.service

同样,要确定是否启用了特定服务单元,请键入:

systemctl is-enabled name.service

2.常见服务介绍

常见的输出结果中会出现以下服务项,它们在系统中各自承担着关键职责:

服务名称
描述

auditd.service

审计守护进程,记录系统安全事件

[email protected]

自动虚拟终端服务,主要负责在系统启动时自动创建多个虚拟终端(tty)。

chronyd.service

NTP 时间同步服务,确保系统时间准确

crond.service

定时任务调度器,执行计划任务

dbus-org.fedoraproject.FirewallD1.service

专为 Fedora 系统定制的防火墙服务组件,用于管理和配置firewalld防火墙

firewalld.service

动态防火墙管理服务

[email protected]

虚拟终端登录服务

irqbalance.service

中断均衡服务,专注于优化系统性能。它根据系统各 CPU 核心的负载情况,智能地分配硬件中断请求(IRQ),确保中断处理任务在多个 CPU 核心之间均匀分布

kdump.service

内核崩溃内存转储服务,用于调试,非必要可禁用

lvm2-monitor.service

LVM 逻辑卷监控服务

microcode.service

加载 CPU 微码更新

NetworkManager.service

网络连接管理器

NetworkManager-wait-online.service

等待网络就绪后再启动后续服务

rsyslog.service

系统安全核心:systemd 服务管理详解

系统日志收集服务

sshd.service

OpenSSH 守护进程,提供远程访问

tuned.service

系统性能调优服务

systemd-journald.service

日志记录守护进程(journald)

systemd-udevd.service

设备管理守护进程

polkit.service

权限控制服务(如 GUI 应用请求 root 权限)


二、 服务配置文件存储路径

systemd 服务的配置文件主要存储在以下几个目录中:

/etc/systemd/system:该目录用于存放自定义或覆盖默认配置的服务文件。系统管理员可以在这里创建、修改或删除服务配置文件,以满足特定的系统需求。任何位于此目录下的文件都具有最高优先级,当系统加载服务配置时,会优先读取这里的文件。挖矿病毒也可能会在此目录创建恶意服务配置文件,伪装成正常服务实现自启动。

/run/systemd/system:这个目录用于存储运行时生成的文件,包含运行时的 systemd 单元文件。它是系统在运行过程中动态生成和使用的目录,在系统启动和运行时,一些临时的或与当前运行状态相关的服务配置可能会存放在这里。相对而言,它是三个主要目录中被查看和使用频率较低的一个,但也不能排除病毒利用此目录进行隐蔽的可能性。

/lib/systemd/system:此目录存放由安装的软件包提供的默认服务文件。当安装一个软件包时,如果该软件包包含需要 systemd 管理的服务,那么对应的服务文件就会被安装到这个目录中。由于这是软件包默认安装的位置,用户可以在此基础上进行自定义配置,但不建议直接在该目录中存储自定义单元文件,因为软件包更新时,可能会覆盖掉这些自定义文件。若该目录出现不明来源的服务文件,很可能是病毒入侵的迹象。

当 Linux 系统启动时,systemd 会依次在这些目录中查找单元文件,并将找到的文件加载到内存中,根据文件中的配置信息来启动和管理相应的服务。


三、查看服务描述

要查看某个 enabled 服务的详细描述信息,可以使用以下方法:

使用systemctl status命令

对于列出的每个启动项(服务名),执行systemctl status <服务名>命令。例如,如果要查看httpd.service服务的描述和状态,运行systemctl status httpd.service。该命令会输出服务的详细信息,包括服务的描述(在Description字段中显示)、当前状态(是否正在运行、已停止等)、运行的进程信息、启动时间、上次启动结果等。通过这些信息,管理员可以快速了解服务的运行情况和相关配置。若服务描述模糊不清,或与已知正常服务描述不符,就需要警惕其是否为异常服务。

查看服务配置文件:服务的配置文件通常以.service为后缀,存放在上述提到的目录中。打开对应的服务配置文件,在文件的[Unit]部分,有一个Description字段,这里记录了对该服务的简短描述。例如,对于httpd.service文件,在[Unit]部分可以找到Description=The Apache HTTP Server,明确说明了该服务是 Apache HTTP服务守护进程。同时,配置文件中还包含其他重要的配置信息,如服务的依赖关系、启动命令、停止命令等,有助于深入了解服务的运行机制。若配置文件中出现异常的启动命令,指向陌生的可执行文件,很可能是病毒篡改的痕迹。


四、识别异常服务的方法

在了解常见默认启动项、服务配置文件路径和查看服务描述的基础上,结合挖矿病毒的特点,可通过以下方式区分正常与异常服务:

检查服务名称和路径:挖矿病毒为了隐藏自身,常使用与正常服务相似的名称,如将 “sshd” 改为 “sshdx”。通过systemctl list-unit-files | grep enabled命令查看启用服务时,若发现可疑名称,可进一步使用ls -l命令查看服务文件的实际路径。若路径并非来自系统默认软件包安装目录,而是突然出现在临时目录(如/tmp)或用户主目录下,很可能是恶意服务。

分析服务资源占用:挖矿病毒运行时会大量占用 CPU、内存等系统资源。使用top、htop等命令查看系统资源占用情况,若发现某个启用的服务占用资源持续居高不下,且服务描述和行为与正常情况不符,可怀疑该服务存在问题。此时可使用systemctl stop <服务名>暂停服务,观察系统资源占用是否下降,进一步验证其是否为异常服务。

查看服务依赖关系:正常服务的依赖关系通常是明确且符合系统逻辑的。使用systemctl list-dependencies <服务名>命令查看服务依赖,如果某个服务的依赖出现未知的组件或服务,或者依赖关系混乱,可能是被病毒篡改过。例如,一个普通的系统日志服务突然依赖于一个陌生的网络连接服务,就需要仔细排查该日志服务是否已被恶意利用。


参考链接

https://docs./en/documentation/red_hat_enterprise_linux/7/html/system_administrators_guide/chap-managing_services_with_systemd

-End-

如果觉得我的分享有用

[点赞+分享+关注]