php - OpenShift 上的文件权限如何工作?

标签 php cgi openshift file-permissions

我认为我误解了有关 OpenShift PHP 应用程序中文件权限的一些基本知识。它们实际上是如何工作的?

我在 OSX 上进行开发并使用 SourceTree 推送更改。当我通过 SFTP 程序 (Cyber​​duck) 登录应用程序时,index.php 文件显示其权限设置为 600,但访问者可以在浏览器中正常查看它。

这让我感到惊讶,因为我认为该文件需要 644 的权限才能浏览(就像 Apache Web 服务器)。

在 OpenShift 上,文件权限 600、640 和 644 似乎都是等效的。这是正确的还是我做错了什么?

相关: 我的 OpenShift 应用程序有一个 cgi-bin 文件夹,其中包含一个只能从 PHP 文件执行(调用)的 cgi 程序。换句话说,任何 PHP 脚本都应该能够调用此 cgi 程序,但尝试直接浏览 cgi-bin 文件夹的访问者则不能。

我将cgi-bin文件夹和cgi程序文件权限都设置为700(因此只有“所有者”具有读/写/执行设置,并且没有为“组”和“其他人”授予权限)。但是访问者仍然可以直接浏览到程序 URL 并执行它(例如 www.example.com/cgi-bin/program.cgi) - 就好像权限是 777 一样。我该如何解决这个问题?

最佳答案

我认为您已经习惯了一个系统,其中一个用户拥有所提供的文件,而网络服务器作为另一个用户运行,但由于文件所有者(您的用户帐户是那个大长哈希)也是所有者在 OpenShift 上运行 Web 服务器的进程,则它使用权限的“6”部分,因此您添加的其他两位数字不会产生任何影响,这是有道理的。如果您不希望通过 Web 访问某个脚本,但希望 PHP 能够执行该脚本,那么您应该将其放置在包含 php 文件的 Web 目录之外。最简单的方法是在您的存储库中创建一个“php”文件夹,并将需要可通过网络访问的文件放入其中。这会将您的 documentRoot 更改为该 php 目录,并且您可以将脚本放在该目录之上,这样用户就无法通过 Web 请求执行它。

关于php - OpenShift 上的文件权限如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26276453/

相关文章:

php - 找不到 Laravel 模型关系类

php - 没有表单的提交按钮

tomcat - OpenShift 上的 Tomcat 7 未获取环境变量

php - 如何防止警告 : POST Content-Length and memory size

php - MySQL - 在两者之间找到一个值

python - 如何使用 cgi 包从 python 发送响应代码

c - 我的 C ping 脚本安全吗?

java - 为什么我的 CGI Java 到 HTML 输出最后会被切断?

node.js - Openshift redis 墨盒在 socket.io 脚本上出现奇怪的异常 ETIMEDOUT

node.js - 类型错误 : Cannot use 'in' operator to search for '$__firebase' in undefined