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

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

Я разрабатываю на OSX и вношу изменения с помощью SourceTree. Когда я вхожу в приложение через программу SFTP (Cyberduck), файл index.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. Как мне решить эту проблему?


person Cascade    schedule 09.10.2014    source источник


Ответы (1)


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

person Community    schedule 09.10.2014
comment
Идеально. Это очень ясное объяснение и решение. Спасибо. - person Cascade; 10.10.2014