只读文件,防止删除

只读文件,防止删除

这是我的情况。我正在运行一个使用 w3 total cache 的 WordPress 网站。这个网站的大部分内容一开始是动态的,然后是静态的。所以我将这些页面作为静态 HTML 缓存在一个文件夹中,我们称之为/home/test.com/wp-content/cache/page_enhanced/static/。因此,该文件夹中的每个文件都是某人访问test.com/statictest.com/static/foo或时将获得的内容的 HTML 表示test.com/static/foo/bar。此文件夹中的任何文件在 6 个月左右内都不需要更新,但目录中将有 40K+ 个文件。

我运行了一个 Python 脚本 (Optimus Cache Prime) 来访问 sitemap.xml 中的所有页面,以生成将放入该文件夹中的所有文件。然后,Apache 收到对 的请求test.com/static/foo,跳过所有 PHP 和 SQL 处理并提供一个 HTML 文件(因此对 的请求http://test.com/static/foo提供了位于 的文件/home/test.com/wp-content/cache/page_enhanced/static/_index.html)。

我希望这些文件以当前形式存在,直到我以 sudo 身份进入文件夹并手动删除这些文件。

并非所有文件/home/test.com/wp-content/cache/page_enhanced/都应以当前形式存在,只有/static/目录及其子目录才应存在。

于是我去了/home/test.com/wp-content/cache/page_enhanced/static/并运行find ./ -type f -exec chmod 444 {} \;。令我惊讶的是,今天大多数文件都被删除了(一定是 PHP 脚本干的,我是唯一一个有 ssh 访问权限的人)。

我该如何防止这种情况发生?专用的 Ubuntu 网络服务器。这似乎很容易,但我是一名网络开发人员,我只知道足够多的东西会很危险。

编辑:我不想设置文件夹的权限,因为有些东西需要缓存然后才能使用。因此,一旦有人搜索它,http://test.com/search/weird+search+term+foo+bar就应该动态缓存_index.html,这样下次有人搜索它时,就不必经过 PHP 和 SQL 处理。

因此次要问题是,我需要说我的目录中的任何文件都应该自动获得这些权限,但目前这不是什么大问题。

答案1

如果 apache 以拥有这些文件的“用户”帐户(可能是“apache”)运行,那么作为文件的所有者,它可以更改权限,从而允许它删除它们。或者,如果 apache 以 root 身份运行,它基本上可以随心所欲。

一些可以想到的选项可能是将文件的所有权更改为 apache 未以之运行的帐户,不以 root 身份运行 apache(如果是),或者设置某些文件系统和操作系统中存在的一些更深奥的权限值。一些示例包括设置文件系统属性(man 'chattr' 并查看 -i“immutable”选项)、文件系统级访问控制列表(man 'setfacl')或强制访问控制系统(如 selinux)。

答案2

只需在单独的位置创建它们,然后使用只读绑定挂载即可。

例如:

您希望/home/test/x被设置为只读。

创造一切如/home/test/x.writable/*

mount -o bind -o ro /home/test/x.writable /home/test/x

另一个解决方案是启用分区上的 ACL 并使用它们来阻止对这些文件的写入。

相关内容