Apache 是否可以配置为仅提供全球可读的文件?

Apache 是否可以配置为仅提供全球可读的文件?

我正在运行一个实验性的、纯粹为了好玩的 Apache Web 服务器。这个服务器背后的部分想法是它应该对公众开放;例如,根文件系统应该对任何人都开放,供浏览。(事实上,它在这里:http://sylvester.s.zbasu.net/rootfs/) 因此,安全将不再是首要问题。

也就是说,有些东西 Apache 应该可以访问,但公众不应该。我遇到的例子是一个 Django 网站。该文件settings.py必须可以被 Apache 读取,否则 Django 将无法工作。但settings.py公众不能读取,因为它包含一个密钥。因此该文件应该归 拥有www-data,但 Apache 仍然应该拒绝为其提供服务。

一个可能的解决方案(感谢ellipsis753Freenode)是创建一个特殊指令(可能在文件中).htaccess,告诉 Apache 不要提供此文件。但是,我认为如果某个文件不是所有用户都可以读取的,那么 Apache 也不应该提供该文件。

我可以告诉 Apache,如果一个文件不是全世界可读的,那么它就不应该被提供吗?

答案1

如果您在 FastCGI 或 mod_wsgi 的守护进程模式下运行 Django 应用程序,则可以以不同于 Apache 运行的用户身份运行它。然后,您可以完全删除 Apache 和 World 读取您不想提供的任何文件的权限。

例如,请注意您的密码文件/etc/shadow已经无法访问,因为 Apache 没有权限访问它,而且它不是全局可读的。例如,如果您创建一个新用户,web-apps并将其添加WSGIDaemonProcess myapp user=web-apps ...到 Apache 配置中,那么您就可以让 Django 应用程序归该web-apps用户所有,而其配置文件不是全局可读的,就像文件shadow已经是全局可读的一样。

相关内容