27
8月
2024
17:23

《如何检查Linux操作系统的完整性》

27 8月 2024 17:23

如果更新操作系统时断电,则启动进入恢复模式后,您需要检查操作系统的完整性。

计划恢复操作系统完整性

  1. 恢复网络运行
  2. 清理本地包存储库
  3. 生成数据包校验和
  4. 检查包和配置文件的校验和
  5. <a href="#修复“修复软件包问题
    5.1 完成已安装但未配置的软件包的配置
    5.2 重新安装已更改校验和的软件包
    5.3 修复损坏的软件包
  6. 禁用第三方内核模块
  7. 使用 dpkg -V 最终检查操作系统完整性
  8. 列出并查看更改的配置文件
  9. 更新软件包版本
    10.Snap 和 Flatpak 的恢复
    11.重新启动

 

<a名称=“网络”>

1. 恢复网络

! !!如果网络正常,请跳过此点。

需要连接网线并启动网卡

ifconfig -a | less
sudo nano /etc/network/interfaces

自动ensp2s0
iface enp2s0 inet dhcp
名称服务器 8.8.8.8

sudo dhclient enp2s0
sudo resolvconf -u
sudo service networking restart
平雅如

<a名称=“干净”>

2.清除包缓存

sudo apt-get clean

此命令清除接收到的包文件的本地存储库。 必须进行清理才能为不是来自本地包缓存的包生成校验和,因为本地包缓存可能会被欺骗。

<a名称=“初始化”>

3. 生成数据包校验和

安装 debsums 实用程序

sudo apt install debsums

初始化 debsum(仅限 Ubunti Linux)。

sudo debsums_init 

<a名称=“检查”>

4. 验证包和配置文件的校验和

检查 所有文件,包括配置文件:

sudo debsums --all --changed --silent

或者简称

sudo debsums -acs

仅检查二进制文件,不包括配置文件:

sudo debsums --changed --silent

或者简称

sudo debsums -cs

切换 -a (或 --all)来检查每个文件,包括配置文件。
-c 开关仅显示更改的包(与 --changed 相同),
-s 开关(与“--silent”相同)抑制没有更改的行的输出。

!! !为了避免显示修改后的 .png 和 .svg,您可以使用以下命令的改进版本:

sudo debsums --all --changed --silent | sudo debsums --all --changed --silent | sudo debsums --all --changed --silent | grep -v '.png*\|.svg*'

_第二_选项更可取,不检查配置文件,从输出中排除对 png 和 svg 资源文件的更改:

sudo debsums -cs | grep -v '.png*\|.svg'

关键在哪里 -v 意味着反转选择 - 即选择“除”之外的所有内容。

说明 :在命令输出中使用 grep,我排除了 png 图像的提及。 和 svg。
图片与设计主题相关,例如,在我的例子中,与 adwaita-icon-theme-full 包相关(如何通过文件名找到包名,请参见 5.2)。

! 如果实用程序 德布苏姆 发现软件包有问题,可以使用组合键 Ctrl+C 中断该过程并转到说明中的下一步,因为 德布苏姆 只显示问题的存在,但不纠正它们。

<a名称=“修复”>

5. 解决包问题

<a名称=“配置”>

5.1 完成包配置

该命令强制配置已解压但未配置的包。 -a 开关告诉系统处理所有已解压但未配置的包。

sudo dpkg --configure -a

5.2 重新安装已更改校验和的软件包

使用命令 sudo apt --reinstall install 将软件包一一恢复 包名。 首先您需要找到包名称。

通常,软件包名称列在 debsums 命令输出右侧的括号中(例如,文本“from amdgpu-install package”),这意味着“from the amdgpu-install package”。

对于_未指定_包名称的文件,包名称可以通过其校验和被更改的文件的名称来确定。

例如,如果输出 缺少文件 /etc/dhcp/dhclient.conf 你可以确定这个文件属于哪个包

dpkg --search fqdn

其中 fqdn 是修改后的文件的完整路径,例如,/etc/dhcp/dhclient.conf

在这个例子中,答案是:
isc-dhcp-客户端

重新安装单独的包:

sudo apt --reinstall install package_name

sudo apt-get --reinstall install package_name

其中: package_name 是包的名称。

例如:

sudo apt --reinstall 安装 isc-dhcp-client

如果不再需要该软件包(先前配置的“尾部”),您可以将其卸载。 就我而言,未使用 AMD 显卡,我运行命令来删除名为“amdgpu-install”的软件包:

sudo apt删除-y amdgpu-install

重复5.2,直到命令输出 须藤 debsums -cs 不会变空。

自动化系统修复过程

! 您可以使用一个命令重新安装所有软件包:

sudo apt-get install -y --reinstall $(dpkg -S $(sudo debsums -cs) | cut -d : -f 1 | sort -u)

! 没有图片:

sudo apt-get install -y --reinstall $(dpkg -S $(sudo debsums -cs) |  grep -v '.png*\|.svg' | cut -d : -f 1 | sort -u)

其中 sort -u 开关消除了重复的包名称。

(来源-askubuntu.com

注意:丢失的文件必须从包中手动安装。 比如我的例子,根据执行结果 须藤 debsums -cs 我必须手动重新安装 youtube-dl python3-pkg-resources python3-protobuf 等软件包。

sudo debsums -cs | grep -v '.png*\|.svg' | sort -u
sudo apt-get install -y --reinstall youtube-dl python3-pip python3-debian python3-pkg-resources python3-protobuf python3-levenshtein sound-theme-freedesktop

5.3 修复损坏的包

sudo apt install -f

其中 -f 与 --fix-broken 相同

sudo apt install --fix-broken

描述;此命令将尝试修复依赖关系已损坏的系统。

如果最后一个命令产生消息“安装后脚本子进程返回错误”,则中止。 " - 您需要从 apt install -f 命令的输出中确定软件包名称 包名 然后运行:

sudo rm /var/lib/dpkg/info/package_name
sudo dpkg --configure -D 777 package_name
sudo apt-get --reinstall install package_name

<a名称=“核心”>

6. 禁用无关的内核模块并删除不必要的组件

运行命令 debsums -cs 时,它找到文件 lsb-cprocsp-rdr-64 和 ini 文件 /etc/opt/cprocsp/config64.ini,与Linux操作系统无关。 这些文件来自外部组件 CryptoPRO CSP,我很久以前删除了它,但它们存在于系统中。

显示操作系统启动时加载的内核模块列表:

lsmod

仅第一列:

lsmod | cut -d " " -f 1 | sort | less

检查模块痕迹 进程进程(CryptoPro) 在文件夹“/etc/modprobe.d/”中

grep -Rnw '/etc/modprobe.d/' -e cprocsp 

在内核模块中未找到 cprocsp 样本。

可选组件安装在 /opt 文件夹中。 其中的内容需要受到控制。

我删除了不必要的“/opt/cprocsp”文件夹。

sudo rm -rf /opt/cprocsp

删除配置文件

sudo rm -rf /etc/opt/cprocsp

<a名称=“最终”>

7. 使用 dpkg -V 最终操作系统完整性检查

sudo dpkg -V

其中 -V 是检查系统上所有包的开关。 该命令通过比较已安装的软件包文件中的信息和 dpkg 数据库中存储的元数据信息来检查完整性。

和以前一样,我找到了要重新安装的软件包的名称,但在一个命令中“参数列表太长”,所以我将其分为多个步骤。

Этаp 1. 使用 dpkg -V 查找错误

sudo dpkg -V  > ~/files_missing.txt

! 该命令的执行时间为10分钟到一个小时。

查看工作结果:

cat ~/files_missing.txt

Этаp 2. 搜索对应的包文件:

cat ~/files_missing.txt | grep -v '\?\?\?' | sed "s/missing//"  > ~/files_missing2.txt
cat ~/files_missing.txt | grep '\?\?\?' | sed "s/??5??????//"  > ~/files_changed.txt

这里:

  • 在第一个文件 files_missing2.txt 中,不带掩码的文件被排除 ??5????,即仅丢失文件。
  • 在第二个列表中,包含带有掩码的 files_changed.txt 文件 ??5????- 即修改后的文件。

    第 1 部分。 定义包名称 缺席 要重新安装的文件:

    while read p; do
        echo "$p" 
        dpkg -S "$p" >> ~/reinstall.txt
    done 

第 2 部分。 定义包名称 改变了 要重新安装的文件:

    while read p; do
        echo "$p" 
        dpkg -S "$p" >> ~/reinstall.txt
    done 

将包名称复制到 ~/reinstall2.txt

    while read p; do
        echo "$p" 
        echo "$p" | cut -d ":" -f 1 >> ~/reinstall2.txt
    完成 

查看文件 重新安装2.txt 包含要重新安装的软件包列表

cat ~/reinstall2.txt

对 reinstall3.txt 文件进行排序(唯一)并删除逗号:

sort -u reinstall2.txt | sed 's/,//g' | sed 's/ /\n/g' | sort -u  > reinstall3.txt

根据文件中的列表重新安装软件包:

while read p; do

回显“$p"

    sudo apt-get install -y --reinstall "$p" 

完成<~/reinstall3.txt

<a名称=“会议”>

8. 编译更改的配置文件列表

编译更改的配置文件列表:
我们丢弃“缺失”的行。

sudo dpkg -V  | grep -v 'missing' > ~/files_changed.txt

文件列表 文件更改.txt 应该研究。 您还可以仅选择具有“c”列的行(已更改)

cat ~/files_changed.txt |  grep " c " | cut -d " " -f 3

我们研究该列表并检查列表中的每个 *.conf 文件。 如果您只需要重新安装某个软件包,最简单的方法是找到合适的软件包并重新安装。

例如:

dpkg --search /etc/ld.so.conf

libc-bin:/etc/ld.so.conf

sudo apt-get install -y --重新安装 libc-bin

dpkg --search /etc/sysctl.conf

过程:/etc/sysctl.conf

sudo apt-get install -y --reinstall procps

等等

<a名称=“升级”>

9. 更新软件包版本

解决未完全安装的软件包的问题。

sudo dpkg --configure -a

我像往常一样更新了版本:

sudo apt update
sudo apt upgrade -y

对未满足的依赖关系进行故障排除:

sudo apt --fix-broken install
sudo apt dist-upgrade

<a名称=“flatpak”>

10. Snap 和 Flatpak 恢复

万一商店 快照 安装后,我不知道用于检查包的特殊命令。 您可以重新安装软件包:

snap list
sudo snap remove package_name
sudo snap install package_name

多个包 - 删除:

for package_name in package_name1, package_name2, package_name3
do
    sudo snap remove $package_name
done

几个包-安装:

for package_name in package_name1, package_name2, package_name3
做
    sudo snap install $package_name
done

其中 package_name 是包的名称。

要更新快照存储中的软件包版本,您需要运行以下命令:

sudo snap refresh --ignore-running

检查从商店安装的应用程序包 扁平包装:

flatpak repair

恢复Flatpak并不是一个快速的操作,大约需要十分钟。

<a名称=“重新启动”>

11. 重新启动

如果文件是在说明的第 1 步中编辑的 /etc/网络/接口,您需要回滚更改:要么删除用于启动网卡(auto enp2s0,...)和DNS服务器(dns-nameserver ...)的行,要么将它们注释掉:

sudo nano /etc/网络/接口

自动enp2s0

iface enp2s0 inet dhcp

名称服务器 8.8.8.8

保存更改并退出:Ctrl+O、Ctrl+X。

我们重新启动操作系统:

sudo shutdown -r now

信息来源: askubuntu.com
最后编辑日期:2024 年 9 月 2 日 - 添加了有关 snap 和 flatpak 的第 10 节。



相关出版物