Страница 1 из 1

apache php как защитить директории сервера

Добавлено: 2009-03-04 17:19:29
shuk007
Здраствуйте!

У меня на серваке на одном ip стоит несколько сайтов (VirtualHost)
И проблемма в том что с помощю функции dir() в пхп я смогу сканировать все каталоги сервера.
Я вкючил безопасный режим в пхп но не чего не изменилось.
ПОЖАЛУЙСТА помогите как сделать чтобы скрипт вне корневого каталога сайта не срабатывало, не сканировало....

Re: apache php как защитить директории сервера

Добавлено: 2009-03-04 17:25:08
zg

Re: apache php как защитить директории сервера

Добавлено: 2009-03-04 17:33:10
shuk007
я включил safe_mode НО к сожалению ничего не изменилось или я что то не то сделал

В php.ini изменил вот такие строчки:
были Off изменил их на

Код: Выделить всё

safe_mode = On
safe_mode_gid = On

Re: apache php как защитить директории сервера

Добавлено: 2009-03-04 17:36:29
zg
не не не, сэйф моде работает только с владельцами и группой, а есть ещё

Код: Выделить всё

open_basedir string 

Ограничивает список файлов, которые могут быть открыты в PHP, указанным деревом директорий независимо от того, используется защищенный режим или нет. 

Каждый раз, когда скрипт пытается открыть файл, например, при помощи функции fopen() или gzopen(), проверяется месторасположение файла. В случае, если он находится вне указанного дерева директорий, PHP отказывает в открытия файла. Все символические ссылки распознаются и преобразуются, поэтому обойти это ограничение при помощи символических ссылок невозможно. 

Специальное значение . указывает, что базовой следует считать директорию, в которой расположен сам скрипт. В этом случае следует быть осторожным, так как рабочую директорию скрипта можно легко изменить при помощи функции chdir(). 

Опция open_basedir может быть отключена в конфигурационном файле httpd.conf (например, для некоторых виртуальных хостов) точно таким же образом как и любая другая директива: "php_admin_value open_basedir none". 

Для Windows-систем разделителем списка директорий служит точка с запятой. Для всех других операционных систем в качестве разделителя используется двоеточие. В случае, если PHP работает как модуль веб-сервера Apache, все указания open_basedir для родительских директорий наследуются. 

Указанное значение в действительности является префиксом, а не названием директории. Это означает, что запись "safe_mode_include_dir = /dir/incl" позволяет открывать файлы, находящиеся в директориях "/dir/include" и "/dir/incls", в случае, если они существуют. Если вы хотите указать доступ к конкретной директории, используйте завершающий слеш, например: "safe_mode_include_dir = /dir/incl/".
это написано в http://ru.php.net/manual/ru/ini.sect.safe-mode.php

Re: apache php как защитить директории сервера

Добавлено: 2009-03-04 17:45:18
shuk007
Огромное вам спасибо!!
Вы не могли бы одну пример привести пожалуйста
У меня в httpd.conf VirtualHost ы таким образом сконфигурированы:

Код: Выделить всё

<VirtualHost xxx.xxx.xxx.xx:80>
    ServerName example.com
    ServerAlias texample.com www.example.com
    ServerAlias www.exampleftp.com
    DocumentRoot /data/home/public_html/example.com
    ServerAdmin webmaster@example.com
    UseCanonicalName off
    <IfModule mod_suphp.c>
        suPHP_UserGroup www www
    </IfModule>
 </VirtualHost>
<VirtualHost xxx.xxx.xxx.xx:80>
    ServerName example2.com
    ServerAlias texample.com www.example2.com
    ServerAlias www.exampleftp2.com
    DocumentRoot /data/home/public_html/example2.com
    ServerAdmin webmaster@example2.com
    UseCanonicalName off
    <IfModule mod_suphp.c>
        suPHP_UserGroup www www
    </IfModule>
 </VirtualHost>
вот таким образом я использовал:

Код: Выделить всё

<VirtualHost xxx.xxx.xxx.xx:80>
    ServerName example2.com
    ServerAlias texample.com http://www.example2.com
    ServerAlias http://www.exampleftp2.com
    DocumentRoot /data/home/public_html/example2.com
    ServerAdmin webmaster@example2.com
    UseCanonicalName off

   php_admin_flag safe_mode on
   php_admin_flag safe_mode_gid on
   php_admin_value open_basedir /data/home/public_html/example2.com

    <IfModule mod_suphp.c>
        suPHP_UserGroup www www
    </IfModule>
 </VirtualHost>

НО при перезагрузки Apachа пишет что модуль не включен:

Код: Выделить всё

root# /usr/local/etc/rc.d/httpd restart
Invalid command 'php_admin_flag', perhaps mis-spelled or defined by a module not included in the server configuration
Invalid command 'php_admin_value', perhaps mis-spelled or defined by a module not included in the server configuration

Re: apache php как защитить директории сервера

Добавлено: 2009-03-04 18:26:24
zg

Код: Выделить всё

<VirtualHost *:80>
    ServerName dva.com
    ServerAlias www.dva.com dva.ru www.dva.ru dva
    ServerAdmin some@admin
    DocumentRoot "/usr/local/www/apache22/data/dva"
    <Directory "/usr/local/www/apache22/data/dva">
         AllowOverride All
         Order Deny,Allow
         Allow from all
         Options All
    </Directory>
    <IfModule mod_php5.c>
        AddType application/x-httpd-php .php
        DirectoryIndex index.php index.html index.htm
        php_admin_value open_basedir "/usr/local/www/apache22/data/dva"
    </IfModule>
</VirtualHost>

Код: Выделить всё

zg# apachectl configtest
Syntax OK
zg#

Код: Выделить всё

zg# php "/usr/local/www/apache22/data/dva/index.php"
Root directory
Array
(
    [0] => /COPYRIGHT
    [1] => /bin
    [2] => /boot
    [3] => /cdrom
    [4] => /compat
    [5] => /dev
    [6] => /dist
    [7] => /etc
    [8] => /home
    [9] => /lib
    [10] => /libexec
    [11] => /media
    [12] => /mnt
    [13] => /proc
    [14] => /rescue
    [15] => /root
    [16] => /sbin
    [17] => /sys
    [18] => /tmp
    [19] => /usr
    [20] => /var
)
zg# links -dump http://dva
   Root directory
zg#

Re: apache php как защитить директории сервера

Добавлено: 2009-03-04 18:45:19
shuk007
а как установить mod_php5.c в Apache, у меня он не установлена

Re: apache php как защитить директории сервера

Добавлено: 2009-03-04 19:12:50
zg
shuk007 писал(а):установить mod_php5.c в Apache

Код: Выделить всё

zg# grep php /usr/local/etc/apache22/httpd.conf
LoadModule php5_module libexec/apache22/libphp5.so
zg#

Re: apache php как защитить директории сервера

Добавлено: 2009-03-13 15:03:48
shuk007
у меня не получилось :st: