我试图找到一个工具,与 Windows 上的“sfc”命令或 AIX 上的“sysck”命令不同,它可以验证文件内容、所有权和权限是否正确。“sfc”中的“替换损坏或丢失的文件”功能不是我要找的,它是“验证所有正确的部分都在正确的位置”的功能。
我正在尝试执行的任务是验证嵌入式 Linux 产品上特定软件版本的许多不同安装和升级路径是否达到相同的整体文件系统状态——所有必需的文件和目录都存在,具有正确的内容(如 md5sums 或类似内容所述),所有者、组和权限。
单个命令的集合——查找、统计、测试等——不是我要找的。我正在寻找一种工具,例如我上面提到的任何一种。
我搜索了高低,但很多搜索都出现了“fsck”,以至于任何积极的点击都被埋没了。
您可能正在寻找像Tripwire这样的基于主机的 IDS——它能够根据自定义策略检查权限、所有权和文件系统校验和。Windows SFC 本质上做同样的事情,但定期进行,并且使用由 Microsoft 预定义且系统管理员无法更改的策略。
不幸的是,每次更新系统时,您基本上都必须对文件哈希和权限数据库进行手动更改运行,因为主要发行版不会为您提供预填充的数据库以进行系统完整性验证:
(取自http://www.centos.org/docs/2/rhl-rg-en-7.2/ch-tripwire.html)
我能想到的最接近的东西(在基于 redhat 的系统上)是rpm -aV。这是 rpm 的验证部分,它将尝试检查 md5 总和、文件模式和所有权是否正确放置在被检查包中列出的文件中,使用 -a 可以执行构成系统的每个包。
如果你想修复包的权限和模式(可能都有点危险)。
但实现这项工作的最佳方法是运行rpm -aV,检查输出并确保/说明每个包/文件产生的任何异常结果。然后在产生错误的文件/包上,您可以重新安装包(如果文件不同)或重置验证输出中提供的包上的 uids/gids/mode。
使用 find + stat 组合以获得所需的结果。
例如:find /path -type f -exec stat {} \;
如何定义“一切都在正确的地方”?
rsync -av --dry-run,可能对文件系统的参考副本使用 -c 和 --numeric-ids,对于某些用例可能效果很好。
也许你可以使用 rkhunter 来满足你的需要。它检查数据库的权限和散列,但更多的是用于查找 rootkit。Tripwire 会更好,但如果你需要更简单的东西。