Как работают права доступа к файлам в OpenShift?


Я думаю, что неправильно понимаю что-то фундаментальное о разрешениях файлов в PHP-приложении OpenShift. Как они на самом деле работают?

Я разрабатываю на OSX и продвигаю изменения с помощью SourceTree. Когда я вхожу в приложение с помощью программы SFTP (Cyberduck) индекс.php-файл показывает свои разрешения, установленные на 600, но посетители могут просматривать его нормально в браузере.

Это меня удивляет, так как я думал, что файл потребует разрешения 644 для просмотра (как веб-сервер Apache).

ВКЛ. OpenShift, похоже, что права доступа к файлам 600, 640 и 644 эквивалентны. Это правильно, или я делаю что-то не так?

Связанные: В моем приложении OpenShift есть папка cgi-bin, содержащая программу cgi, которая должна выполняться (вызываться) только из файла PHP. Другими словами, любой PHP-скрипт должен быть в состоянии вызвать эту программу cgi, но посетитель, пытающийся перейти непосредственно в папку cgi-bin, не должен.

Я установил права доступа как к папке cgi-bin, так и к файлу программы cgi. 700 (таким образом, только "владелец" имеет набор чтения/записи/выполнения, и никакие разрешения не предоставляются для "группы" и "других"). Однако посетители все еще могут перейти к URL-адресу программы напрямую и выполнить его (например, www.example.com/cgi-bin/program.cgi) - как будто разрешения были 777. Как мне решить эту проблему?

1 2

1 ответ:

Я думаю, что вы привыкли к системе, в которой один пользователь владеет обслуживаемыми файлами, а веб-сервер работает от имени другого пользователя, но поскольку владелец файлов (ваша учетная запись пользователя, которая является тем большим длинным хэшем) также является владельцем процесса, который запускает веб-сервер на OpenShift, то он использует "6" часть разрешений, поэтому имеет смысл, что другие две цифры, которые вы добавляете, не имеют значения. Если есть скрипт, который вы не хотите, чтобы он был доступен в интернете, но который вы хотите, чтобы PHP мог выполните, затем вы должны поместить его за пределами вашего веб-каталога, который содержит ваши файлы php. Самый простой способ сделать это-создать папку "php" в вашем РЕПО и поместить в нее файлы, которые должны быть доступны в интернете. Это изменит ваш documentRoot на этот каталог php, и вы можете поместить свой скрипт на один уровень выше, чтобы пользователи не могли выполнить его с помощью веб-запроса.