我将文件存储在 NFS 挂载上,希望防止它们被删除。用例是,我有一个 Web 应用程序的演示版本,该版本在每个演示中使用相同的图像 - 当有人删除记录时,它会删除相关的图像、文件等,但我不想删除这些图像,因为它们被每个人都使用。他们应该能够删除其他图像等,但不能删除我选择的图像。
以前它们在本地磁盘上,我使用:
chattr +i file
这很有效——我把所有的 ifles 都移到了 NFS,当我尝试这样做时,我得到了:
chattr: Inappropriate ioctl for device while reading flags on file
目前,我有一个 cron,它每 15 分钟运行一次,并将这些文件从备用目录复制回正确的位置,这虽然有效,但并不理想,尤其是因为这意味着注册演示的人可能会在那个时间窗口内看到丢失的图像,这看起来很垃圾。如果我真的被逼急了,我可以重写应用程序逻辑,但我希望在文件系统级别有一些可能有效的东西。
此回复(https://unix.stackexchange.com/a/90369/86224)建议启用 ACL,但我无法做到这一点,而且我似乎无法让 chmod 阻止文件被删除:
-rw-r--r-- 1 owner owner 24751 Dec 23 16:30 file.ext
NFS 上还有其他方法可以阻止文件被删除吗?
答案1
我思考这应该可行。
- 使要保护的文件归 root:root 所有。例如
chown root:root
- 确保在 nfs 挂载上启用了 root_squash。
- chmod 0644 文件。
- 如果可以的话,请将目录 chown root:root,并将目录 chmod 755。这是确保除 root 之外的任何人都无法删除它的唯一方法。
目录的所有者(通常是具有写权限的任何人)通常可以覆盖删除目录中文件的权限,因此如果您必须授予目录写权限,则所有赌注都将无效。
我知道你说过你无法启用它们,但我会强烈建议您查看 ACL。ACL 对于管理复杂环境中的权限非常有用。
答案2
在/etc/exports
使用ro
仅将共享导出为只读的选项。
/path/to/nfs webserver.com(ro)
如果您有想要以只读方式保护的选择性文件,我建议不要深入研究 ACL 和权限修改,只需进行静态资产挂载并将其导出为(ro)
.