У нас есть веб-сервер, на котором работает Lighttpd на FreeBSD.
Некоторым из наших клиентов требуется FTP-доступ к своему серверу. Для большинства из них достаточно chroting их с помощью FTP-демона в каталог "files", чтобы они могли загружать фотографии своих детей или еще чего-то, а затем мы просто настроили Lighty, чтобы он не запускал FastCGI, если запрос был сделан для файла в этот каталог. Но хотя бы одному клиенту нужен доступ ко всему корневому каталогу. Итак, я настроил демон FTP для umask 022 всех загруженных файлов (так что права доступа стали rw-r - r--) и подумал, что был очень умен.
Однако мое внимание привлекло (к счастью, не трудным путем), что сценарии PHP выполняются на сервере, если для файла просто установлен соответствующий бит чтения; бит выполнения (или его отсутствие) игнорируется. Что с этим? Я предположил, что бит выполнения должен быть установлен, чтобы файл был, вы знаете, выполнено…
Есть ли просто способ остановить Lighty и / или PHP от выполнения скриптов без выполнения битов? (Я уже пробовал #lighttpd на Freenode, но они не думали, что это возможно.)
IIRC, если вы запускаете PHP через CGI + PHPsuExec / suphp (или FastCGI + suExec / suphp), он очень суетливо относится к разрешениям (и владению) по умолчанию, хотя я не уверен, насколько это связано с PHP или PHPsuExec / suphp - вот почему некоторые (включая мой собственный общий веб-сервер) работают таким образом, а не через модуль Apache. Он требует, чтобы в сценариях был установлен бит выполнения для пользователя, и он не будет запускаться, если биты групповой записи или другой записи установлены с аналогичными проверками для каталогов, в которых находится сценарий.
Я использую Apache на машинах, на которых я использую PHP, поэтому я не могу сказать вам, как настроить это в lighttpd.
Бит выполнения не имеет ничего общего с HTTP-сервером. Это необходимо для сценариев CGI, потому что HTTP-сервер использует exec (3) (и его друзей) для их выполнения. С другой стороны, PHP-скрипты читаются и выполняются, потому что это позволяет конфигурация веб-сервера.
Итак, ваш быстрый выбор - удалить читать бит из сценариев PHP, который вам нужен HTTP-сервер не выполнить.
Прочтите руководство по настройке вашего веб-сервера и выясните, можно ли настроить его выборочно (для каждого каталога) на выполнение сценариев PHP (я запускаю lighttpd и не знаю, возможно ли это).