我正在尝试找到一个工具,它与 Windows 上的“sfc”命令或 AIX 上的“sysck”命令类似,可以验证文件内容、所有权和权限是否正确。“sfc”中的“替换损坏或丢失的文件”功能不是我想要的,而是“验证所有正确的部分是否位于正确的位置”功能。
我正在尝试执行的任务是验证嵌入式 Linux 产品上特定软件版本的多个不同安装和升级路径是否达到相同的整体文件系统状态 - 所有必需的文件和目录都存在,具有正确的内容(由 md5sums 或类似程序告知)、所有者、组和权限。
我要找的不是一组单独的命令(find、stat、test 等)。我要找的是工具,例如我上面提到的任何一个。
我搜索了所有地方,但是很多搜索结果都是“fsck”,所以任何正确的结果都被埋没了。
答案1
你可能正在寻找基于主机的 IDS,例如绊线- 它能够根据自定义策略检查权限、所有权和文件系统校验和。Windows SFC 本质上执行相同的操作,但会定期执行,并且使用 Microsoft 预定义的策略,系统管理员无法更改。
不幸的是,每次更新系统时,您都必须手动更改文件哈希和权限数据库,因为主要发行版不会为您提供用于系统完整性验证的预填充数据库:
(取自http://www.centos.org/docs/2/rhl-rg-en-7.2/ch-tripwire.html)
答案2
我能想到的最接近的东西(在基于 redhat 的系统上)是转速。这是 rpm 的验证部分,它将尝试检查 md5 总和、文件模式和所有权是否正确放置在被检查软件包中列出的文件中,使用 -a 您可以对组成系统的每个软件包进行检查。
rpm -aV
如果您想修复包的权限和模式(这一切都可能有点危险)。
rpm --setperms --setugids -a
但实现此目的的最佳方法是运行转速,检查输出并确保/说明每个包/文件产生的任何异常结果。然后,对于产生错误的文件/包,您可以重新安装包(如果文件不同)或重置验证输出中提供的包的 uids/gids/mode。
答案3
使用find + stat组合来得到想要的结果。
例如:find /path -type f -exec stat {} \;
# stat RTM_hpc.txt
File: `RTM_hpc'
Size: 2361 Blocks: 8 IO Block: 4096 regular file
Device: 822h/2082d Inode: 1059093 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 500/ chakri) Gid: ( 100/ users)
Access: 2011-12-08 14:07:42.028802069 -0600
Modify: 2011-05-31 08:18:46.000000000 -0500
Change: 2011-07-19 09:09:03.952958097 -0500
答案4
也许您可以使用 rkhunter 来满足您的需要。它会根据数据库检查权限和哈希值,但它更适合查找 rootkit。如果您需要更简单的东西,Tripwire 会更好。