On Mon, 4 Mar 2002, Дмитрий wrote:
> AS>>> Как всегда RTFM :) safe_mode, open_basedir
> Д>> safe_mode не работает когда PHP вкомпилирован в Апач.
> AS> Кто вам такую чушь сказал ? Может все-таки потрудитесь мануал изучить ?
>
> Вот, что написано по поводу safe_mode в "PHP4. Учебный курс", В.
Мдаа... И кто ж это такой умный тот manual писал ?
> Гилмор, изд-во Питер, 2001:
>
> "При включении безопасного режима (safe_mode) ограничивается
> использование некоторых потенциально опасных возможностей PHP. Для
> включения или выключения безопасного режима параметру safe_mode
> присваивается значение on или off. Механизм ограничения основан на
> сравнении идентификатора пользователя (UID) выполняющегося сценария с
> идентификатором пользователя того файла, к которому этот сценарий
> пытается обратиться. Если идентификаторы совпадают, функция
> выполняется; в противном случае попытка завершается неудачей.
> Безопасный режим не может использоваться в том случае, если PHP
> откомпилирован в виде модуля Apache. Дело в том, что при работе PHP в
> режиме модуля Apache все сценарии PHP работают под тем же
> идентификатором, что и Apache, что не позволяет различать владельцев
> разных сценариев..."
>
> "Глава. Безопасный режим и работа РНР в режиме модуля Apache.
>
> Следует помнить, что при работе РНР в режиме модуля Apache безопасный
> режим недоступен. Это объясняется тем, что модуль РНР работает в
> составе сервера Apache, поэтому все сценарии РНР работают под тем же
> UID, что и сам сервер Apache. Поскольку ограничения вызова функций в
> безопасном режиме основаны на сравнении UID, этот режим полноценно
> работает только при использовании CGI-версии РНР в сочетании с suExec.
> Дело в том, что CGI-версия РНР работает как отдельный процесс, что
> позволяет динамически изменять UID средствами suExec. Если вас
> интересует использование РНР в безопасном режиме, вероятно, вам
> следует остановить свой выбор на комбинации CGI/suExec, хотя за это
> приходится расплачиваться быстродействием..."
>
> Хотелось бы, чтобы уважаемый Andrew Sitnikov ткнул меня носом в
> мануал, где утверждается обратное.
>
-- http://www.php.net/manual/en/features.safe-mode.php --
When safe_mode is on, PHP checks to see if the owner of the current script
matches the owner of the file to be operated on by a file function. For
example: -rw-rw-r-- 1 rasmus rasmus 33 Jul 1 19:20 script.php
-rw-r--r-- 1 root root 1116 May 26 18:01 /etc/passwd
Running this script.php <?php
readfile('/etc/passwd');
?>
results in this error when safe mode is enabled: Warning: SAFE MODE
Restriction in effect. The script whose uid is 500 is not
allowed to access /etc/passwd owned by uid 0 in /docroot/script.php on
line 2
-- cut --
"owner of the current script" имеет вполне определенный смысл и не зависит
от того, под каким пользователем реально исполняется скрипт. Какую траву
курили авторы этого, с позволения сказать, учебника - мне неведомо. Во
всяком случае просто взять и проверить то, что они написали они явно не
пытались. Подумать головой - тоже. Ибо safe_mode был придуман *для* mod_php
в первую голову, о чем недвусмысленно написано в мануале:
-- http://www.php.net/manual/en/features.safe-mode.php --
The PHP safe mode is an attempt to solve the shared-server security
problem. It is architecturally incorrect to try to solve this problem at
the PHP level, but since the alternatives at the web server and OS levels
aren't very realistic, many people, especially ISP's, use safe mode for
now.
-- cut --
Если использовать CGI и suExec, то safe_mode - нафиг, по большому счету,
не нужен...
=============================================================================
= Apache-Talk@lists.lexa.ru mailing list =
Mail "unsubscribe apache-talk" to majordomo@lists.lexa.ru if you want to quit.
= Archive avaliable at http://www.lexa.ru/apache-talk =