![有效地禁用大文件上的 fs-verity](https://linux22.com/image/199358/%E6%9C%89%E6%95%88%E5%9C%B0%E7%A6%81%E7%94%A8%E5%A4%A7%E6%96%87%E4%BB%B6%E4%B8%8A%E7%9A%84%20fs-verity.png)
如果FS_IOC_ENABLE_VERITY
ioctl 用于在文件上启用 fs-verity(例如,使用命令fsverity enable
),然后我想再次写入该文件,如何禁用它的 fs-verity?现在,我的解决方法是复制文件,然后删除原始文件,但是当文件很大时,这确实效率很低。
答案1
您无法通过设计来做到这一点。这个 wiki 页面关于 rpm 包的描述,为什么。
“一旦为给定文件启用了 fs-verity(在 RPM 情况下,发生在软件包安装时),就无法禁用它,并且该文件将变得不可变。人们仍然可以改名() 或者取消链接() 它(这确实是 rpm 在升级包时能够替换文件的方式),但实际内容无法更改。” ....
“假设攻击者安装(或访问)您的文件系统,取消链接 /bin/ls 并用新副本批量替换它(从而创建新的 inode)。攻击者没有您的签名密钥,因此他们无法对文件进行重新签名并对其启用 fs-verity(他们可以使用自己的密钥对其进行重新签名,但除非他们能够找到一种方法将其证书加载到内核密钥环中,否则不会有太大作用) 。为了防止这种情况,您现在有几个选择:”