停止服务器执行没有执行位的脚本

我们有一台在FreeBSD上运行Lighttpd的web服务器。

我们的一些客户要求FTP访问他们的服务器。 其中大部分是使用FTP守护进程将它们chroot到一个“files”目录,以便他们可以上传他们孩子的照片或者不足,然后我们只需要Lightyconfiguration为不启动FastCGI,如果一个文件被请求那个目录。 但至less有一个客户需要访问他们的整个webroot。 好的,所以我build立了FTP守护进程,将所有上传的文件(所以权限变成了rw-r – r–),并认为我非常聪明。

然而,它已经引起了我的注意(幸运的是不困难的方式),如果文件只是具有相关的读位设置,PHP脚本可以在服务器上执行; 执行位(或不存在)被忽略。 那是怎么回事? 我认为执行位将不得不被设置为了文件,你知道, 执行…

是否有简单的方法来阻止Lighty和/或PHP执行没有执行位的脚本? (我已经在Freenode上试过了#lighttpd,但是他们似乎认为这是不可能的。)

执行位与HTTP服务器无关。 CGI脚本需要它,因为HTTP服务器使用exec(3)(和朋友)来执行它们。 另一方面PHP脚本被读取和执行,因为Web服务器的configuration允许它们。

  • 因此,您的快速select是从PHP脚本中删除您希望HTTP服务器执行的读取位。

  • 阅读您的Web服务器的configuration手册,并找出是否有select性(每个目录)执行PHP脚本(我运行lighttpd,不知道是否可能)。

IIRC如果您通过CGI + PHPsuExec / suphp(或FastCGI + suExec / suphp)运行PHP,默认情况下权限(和所有权)非常繁琐,尽pipe我不确定这是由于PHP还是PHPsuExec / suphp – 这就是为什么一些(包括我自己的共享Web服务器)以这种方式运行,而不是通过Apache模块。 它需要脚本具有执行用户位设置,并且不会运行,如果任何组写或其他写入位设置与脚本所在的目录相似的检查。

我正在使用PHP上的机器上运行Apache,所以我不能告诉你如何在lighttpd下configuration它。