27
8月
2024
17:23

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

27 8月 2024 17:23

如果在操作系统的更新期间断开电源 - 在恢复模式下加载后,有必要检查OS的完整性。

计划恢复操作系统的完整性

  1. 网络的恢复
  2. 清洁包装的本地存储库
  3. 生成的控制量
  4. 检查控制量的软件包和配置文件
  5. 消除软件包问题
    5.1 已安装但不调整的软件包配置的完成
    5.2 重新安装软件包,其控制量变化
    5.3 校正“破碎”软件包
  6. 断开核的外部模块
  7. 使用dpkg -v -v 对OS完整性的最终检查
  8. 列表的汇编和查看更改的配置文件
  9. 更新软件包的版本
  10. Восстановление Snap и Flatpak
  11. Перезагрузка

 

1。 恢复网络

!!!!如果网络正常工作,我们会错过项目。

您需要连接以太网电缆并执行网卡的发布

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

Auto ENSP2S0
IFACE ENP2S0 INET DHCP
名称服务器8.8.8.8

sudo dhclient enp2s0
sudo resolvconf -u
sudo service networking restart
ping ya.ru

2。清洁包

sudo apt-get clean

此命令清洁所获得的软件包的本地存储库。 清洁对于通过不从本地数据包中的软件包生成控制量是必要的,可以更换它们。

3。 包装的控制量

DeBsums实用程序的安装

sudo apt install debsums

Debsums的初始化(仅在Ubunti Linux中)。

sudo debsums_init 

4。检查控制量和配置文件的控制量

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

sudo debsums --all --changed --silent

或缩写

sudo debsums -acs

要仅验证二进制文件,请不包括配置文件:

sudo debsums --changed --silent

或缩写

sudo debsums -cs

键-a(or -all)检查每个文件,包括配置文件。
键-c分散仅更改包装(与-CHAINGED),
键-s(与“ - silent”相同)抑制了线路的输出,那里没有变化。

!!!!为了不被更改和.svg显示,可以使用下一个改进的团队版本:

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

它比_ secondary _选项更可取,无需检查配置文件,除了PNG和SVG资源从资源文件中的更改输出的输出中更改外

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

钥匙 - v 在哪里表示颠倒选择 - 即带走“除了所有东西”。

说明 :使用GRA,在展示团队时,他取消了PNG图片的提及。 和SVG。
图片与设计的主题有关,例如,在我的情况下,与Adwaita-Ocon-theme-Full软件包有关(如何在段<a a href =“ #reinstall”> 5.2 5.2 中描述了如何查找名为文件的包的名称)。

呢如果实用程序 debsums обнаружила проблемы с пакетами, процесс можно прервать комбинацией клавиш Ctrl+C и перейти к следующему пункту инструкции, так как debsums лишь показывает наличие проблем, но не исправляет их.

5。 消除包裹问题

5.1包装配置的完成

该团队推出了未经包装但未调整的包裹的强制配置。 键-a表示处理所有未包装的系统,但未配置的软件包。

sudo dpkg --configure -a

5.2重新安装软件包,其中有控制量的变化

包装还原由sudo apt -reinstall install命令进行 包名。 首先,您需要找到包装的名称。

通常,在右侧的debsums命令的输出中指示了数据包名称(例如,“from amdgpu-install package” 的文本),这意味着从AMDGPU-INSTALL软件包中翻译为“翻译”。

在指示包的名称的文件中,可以通过文件名来确定包装的名称,该名称已更改控制量。

例如,如果结论 missing file /etc/dhcp/dhclient.conf 您可以确定给定文件所属的软件包:

dpkg --search fqdn

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

在此示例中,答案:
isc-dhcp-client

重新安装一个单独的软件包:

sudo apt --reinstall install package_name

或者

sudo apt-get --reinstall install package_name

地点:package_name是软件包的名称。

例如:

sudo apt --reinstall install isc-dhcp-client

如果不再需要包装(以前的配置中的“尾巴”),则可以将其删除。 就我而言,不使用AMD视频卡,我执行了一个命令来删除带有名称为“ Amdgpu install”的软件包:

sudo apt remove -y amdgpu-install

第5.2条我们在命令结论时重复 sudo 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)

位置-u键不包括重复数据包。

(来源 -askubuntu.com

注意:缺少文件(“缺少文件”)必须从软件包手动安装。 例如,在我的情况下,根据执行的结果 sudo 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命令的输出中确定包的名称 package_name и затем выполнить:

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

6。断开外核模块的连接和可选组件的去除

执行debsums -cs命令时,我找到了LSB-CPROCSP-RDR-64和INI文件文件 /etc/opt/cprocsp/config64.ini 不属于Linux操作系统。 这些文件来自我长期以来删除的外部组件CryptoPro CSP,但它们存在于系统中。

启动操作系统时已加载的核模块列表的输出:

lsmod

只有第一列:

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

检查模块的痕迹 cprocsp (КриптоПро) в папке '/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

7。使用DPKG -V对OS的完整性的最终检查

sudo dpkg -V

其中-v是检查系统中所有软件包的关键。 团队通过比较来自已安装软件包文件的信息以及存储在DPKG数据库中的元数据的信息来检查完整性。

和以前一样,我找到了要重新安装的软件包的名称,但是在一个命令中,有一个“太长的参数”,因此我将其分为多个阶段。

阶段 1。 使用dpkg -v查找错误

sudo dpkg -V  > ~/files_missing.txt

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

查看工作的结果:

cat ~/files_missing.txt

阶段 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.tx包含带有掩码的文件 ??5?????? - то есть изменённые файлы.

    第1部分。 数据包名称的定义 缺少 用于重新安装的文件:

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

    第2部分。 数据包名称的定义 更改 文件以重新安装:

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

将数据包名称复制到文件〜/renstall2.txt

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

查看文件 reinstall2.txt со списком пакетов для переустановки:

cat ~/reinstall2.txt

逗号的排序(唯一)和删除,转到renstall3.txt文件:

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

根据文件列表重新安装数据包:

while read p; do
    echo "$p" 
    sudo apt-get install -y --reinstall "$p" 

完成<〜/renstall3.txt

8。更改配置文件列表的汇编

列出更改的配置文件:
我们丢弃了“缺少”的线。

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

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

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

我们研究列表并检查列表中的每个*。 如果您只需要重新安装软件包,则最简单的方法可以找到相应的软件包并重新安装它。

例如:

dpkg --search /etc/ld.so.conf
# libc-bin: /etc/ld.so.conf
sudo apt-get install -y --reinstall libc-bin 

dpkg --search /etc/sysctl.conf
# procps: /etc/sysctl.conf
sudo apt-get install -y --reinstall procps

И т.д.

9。包装的更新版本

解决未完全确定的包装问题。

sudo dpkg --configure -a

版本的更新以常规方式执行:

sudo apt update
sudo apt upgrade -y

解决不满意的依赖性问题:

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

10。恢复快照和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
do
    sudo snap install $package_name
done

package_name是软件包的名称。

要更新SNAP存储中的包装版本,您需要执行命令:

sudo snap refresh --ignore-running

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

flatpak repair

Flatpak修复 - 操作并不快,大约需要十分钟。

11。重新加载

如果说明在说明的第1段中进行了编辑 /etc/netwиork/interfaces,您需要回滚更改:要么删除启动网卡的行(Auto ENP2S0,...)和DNS服务器(DNS-Numberser ...),要么使它们:

sudo nano /etc/network/interfaces

#auto enp2s0
#iface enp2s0 inet dhcp

#nameserver 8.8.8.8

保存更改和输出:Ctrl+O,Ctrl+X。

我们执行操作系统的重新启动:

sudo shutdown -r now

信息来源:[askubuntu.com](https://askubuntu.com/questions/57704/is-there-a-a-untu-sanity-check)
上次编辑日期:02.09.2024-添加了关于Snap和Flatpak的第10节。



相关出版物