这是我的情况。 我正在运行一个使用w3总caching的WordPress网站。 这个网站的很大一部分是dynamic的,然后是静态的。 所以我将这些页面作为静态HTMLcaching在文件夹中,我们称之为/home/test.com/wp-content/cache/page_enhanced/static/ 。 因此,该文件夹中的每个文件都是HTML代表,如果他们访问了test.com/static或test.com/static/foo或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 )。
我希望这些文件以当前的forms存在,直到我作为sudo进入文件夹并手动删除这些文件。
并非所有/home/test.com/wp-content/cache/page_enhanced/文件都应该以当前的forms存在,只是/static/目录及其子目录。
所以我去了/home/test.com/wp-content/cache/page_enhanced/static/并运行find ./ -type f -exec chmod 444 {} \; 。 令我吃惊的是,大多数文件已经被删除(它必须由PHP脚本,我是唯一一个ssh访问)。
我怎样才能防止发生? 专用的Ubuntu Web服务器。 似乎很容易,但我是一个网页开发人员,我只知道有足够的危险。
编辑:我不想在文件夹上设置权限,因为会有一些事情需要caching,然后提供。 所以,一旦有人search到了,那么http://test.com/search/weird+search+term+foo+bar应该被dynamiccaching为_index.html ,所以下次有人search它时,就不必经过PHP和SQL处理。
所以次要的问题,我需要说我的目录中的任何文件应该自动获得这些权限,但这不是现在的问题。
如果apache作为拥有这些文件(可能是“apache”)的“用户”帐户运行,那么作为文件的拥有者,它可以改变权限,这将允许它删除它们。 或者,如果apache以root身份运行,它可以在很大程度上按照自己的喜好进行操作。
一些想到的选项可能会将文件的所有权更改为apache未运行的帐户,不以root身份运行apache(如果是),或者设置某些文件系统中存在的某些更深奥的权限值和操作系统。 几个例子包括设置文件系统属性(man'chattr'和检出-i“不可变”选项),文件系统级访问控制列表(man'setfacl')或强制访问控制系统(如selinux)。
只需在一个单独的位置创build它们,然后使用只读绑定装载到它。
例如:
你想要/home/test/x是只读的。
创build一切/home/test/x.writable/* 。
mount -o bind -o ro /home/test/x.writable /home/test/x
另一个解决scheme是启用分区上的ACL,并使用它们来阻止写入这些文件。