Answers:
我不这么认为,在Ubuntu md5中,校验和仅用于某些文件。对于任何给定的软件包,可以在以下位置找到具有校验和的文件列表:
/var/lib/dpkg/info/<package>.md5sums
例如
/var/lib/dpkg/info/openssh-server.md5sums
这些文件通常不包含软件包已安装文件的完整列表,例如openssh-server.md5sums
bb5096cf79a43b479a179c770eae86d8 usr/lib/openssh/sftp-server
42da5b1c2de18ec8ef4f20079a601f28 usr/sbin/sshd
8c5592e0d522fa0f8f55f3c104479ef5 usr/share/lintian/overrides/openssh-server
cfcb67f58bcd1edcaa5a770863e49304 usr/share/man/man5/sshd_config.5.gz
71a51cbb514da3044b277e05a3ceaf0b usr/share/man/man8/sshd.8.gz
222d4da61fcb3c65b4e6e83944752f20 usr/share/man/man8/sftp-server.8.gz
您可以使用debsums命令(sudo apt-get install debsums)来检查具有md5签名的文件
debsums openssh-server
/usr/lib/openssh/sftp-server OK
/usr/sbin/sshd OK
/usr/share/lintian/overrides/openssh-server OK
/usr/share/man/man5/sshd_config.5.gz OK
/usr/share/man/man8/sshd.8.gz OK
/usr/share/man/man8/sftp-server.8.gz OK
与dpkg / 1.17.2中一样,--verify
根据此debian错误报告,它实现了options 。
请注意,这是对dpkg的相对较新的更改。Date: Thu, 05 Dec 2013 04:56:31 +0100
dpkg v1.17.2软件包中的一行显示了这一点。
这是--verify
dpkg手册页中引用的操作的简要说明。
-V, --verify [package-name...] Verifies the integrity of package-name or all packages if omit‐ ted, by comparing information from the installed paths with the database metadata. The output format is selectable with the --verify-format option, which by default uses the rpm format, but that might change in the future, and as such programs parsing this command output should be explicit about the format they expect.
因此,您可以使用与中类似的语法yum
执行验证,并以rpm格式获取结果。例如:
dpkg --verify openssh-server
或仅用于dpkg --verify
验证系统上安装的每个Packge。
聚苯乙烯
比如说dpkg --verify bash
,在我的机器上运行给了我类似的东西。(我正在运行dpkg / 1.17.5)
??5?????? c /etc/bash.bashrc
??5?????? c /etc/skel/.bashrc
似乎.deb软件包仅包含md5sums元数据用于验证。
??5?????? c
...
??5??????
意味着:MD5校验和不同,并且c =“它是一个配置文件”
sudo dpkg -V | grep -v '??5?????? c'
您可以签出工具清单。
# apt-cache search debsums
debsums - tool for verification of installed package files against MD5 checksums
通常,我会列出要验证的文件。
因此,这是一个简单的bash函数,可或多或少地执行您想要的操作:
dpkg-verify() {
exitcode=0
for file in $*; do
pkg=`dpkg -S "$file" | cut -d: -f 1`
hashfile="/var/lib/dpkg/info/$pkg.md5sums"
if [ -s "$hashfile" ]; then
rfile=`echo "$file" | cut -d/ -f 2-`
phash=`grep -E "$rfile\$" "$hashfile" | cut -d\ -f 1`
hash=`md5sum "$file" | cut -d\ -f 1`
if [ "$hash" = "$phash" ]; then
echo "$file: ok"
else
echo "$file: CHANGED"
exitcode=1
fi
else
echo "$file: UNKNOWN"
exitcode=1
fi
done
return $exitcode
}
像这样使用:
dpkg-verify /bin/ls /usr/bin/ld
我的环境输出:
/bin/ls: ok
/usr/bin/ld: UNKNOWN
当然,编写类似的别名/脚本来检查特定程序包中的文件应该相当简单。
我使用此命令检查所有软件包:
dpkg -l | awk {'print $2'} | xargs | debsums | grep -v 'OK'
您应该需要安装debsumbs,gawk和findutils软件包。
debsums: can't open fwupd file /var/lib/polkit-1/localauthority/10-vendor.d/fwupd.pkla (Permission denied) debsums: can't open geoclue-2.0 file /var/lib/polkit-1/localauthority/10-vendor.d/geoclue-2.0.pkla (Permission denied)