这是我的情况。我正在运行一个使用 w3 total cache 的 WordPress 网站。这个网站的大部分内容一开始是动态的,然后是静态的。所以我将这些页面作为静态 HTML 缓存在一个文件夹中,我们称之为/home/test.com/wp-content/cache/page_enhanced/static/
。因此,该文件夹中的每个文件都是某人访问test.com/static
或test.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 并使用它们来阻止对这些文件的写入。