Linux包管理器默认仅在校验仓库元数据和安装/升级时触发GPG验证,不自动校验所有已安装包;需分三步覆盖全部:启用全局校验策略、检查已安装包内嵌签名、手动验证关键系统组件。

Linux系统自带的包管理器默认就支持GPG签名校验,但不会自动校验所有已安装软件包——它只在校验仓库元数据和安装/升级时触发验证。要真正覆盖“所有软件”,需分三步操作:启用全局校验策略、检查已安装包的内嵌签名、手动验证关键包。
确认并开启仓库级GPG校验
这是最基础也最关键的一步,确保你用的源本身可信:
- RHEL/CentOS/Fedora(dnf/yum):检查
/etc/yum.repos.d/*.repo中每个仓库是否含gpgcheck=1和有效的gpgkey=指向(如file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora) - Debian/Ubuntu(apt):确认
/etc/apt/sources.list或/etc/apt/sources.list.d/*.list中的源行末尾有[arch=... trusted=yes]不是必须的,真正起作用的是密钥是否在/etc/apt/trusted.gpg.d/下且未过期 - 运行
sudo apt update或sudo dnf makecache,观察输出中是否有gpgv: Signature made ... using RSA key ID ...或类似提示,说明元数据签名正在被验证
批量检查已安装RPM包的内嵌签名
RPM包本身可携带GPG签名头,rpm 命令能逐个验证:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 列出所有已安装包并校验签名:
rpm -qa --qf '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' | xargs -I {} rpm -K {}.rpm 2>/dev/null | grep -v 'gpg OK$' - 更稳妥的做法是只查重点包(如核心工具):
rpm -K bash coreutils glibc systemd - 注意:输出中出现
gpg OK表示签名有效;gpg NOT OK或NOKEY表示签名损坏或系统缺少对应公钥
对APT管理的DEB包做针对性验证
apt本身不提供类似rpm -K的批量命令,但可通过以下方式间接确认:
- 查看某个已安装包是否来自可信源:
apt list --installed | grep package-name,再查其来源:apt policy package-name,看“Installed”行右侧是否显示可信仓库(如o=Ubuntu,a=jammy) - 手动验证单个DEB文件(如从官网下载的离线包):
dpkg-sig --verify package.deb(需先sudo apt install dpkg-sig) - 检查APT信任密钥是否完整:
apt-key list已弃用,改用gpg --list-keys --homedir /etc/apt/trusted.gpg.d/或直接ls -l /etc/apt/trusted.gpg.d/
补漏:验证关键系统组件的签名状态
内核、引导加载程序、initramfs等不属于常规包管理器校验范围,但安全性极高:
- 检查内核镜像是否带有效签名:
sudo sbverify --list /boot/vmlinuz-$(uname -r)(需启用Secure Boot) - 验证GRUB模块签名:
sudo grub2-file --is-trusted /boot/grub2/x86_64-efi/linux.mod - 检查已加载内核模块是否签名:
lsmod | awk '{print $1}' | xargs -I {} modinfo {} 2>/dev/null | grep -E '^(sign|sig)' | grep -q 'signature:' && echo "signed"

















