Дополнительная защита веб-сервера

По наводке от моего товарища Lice пришлось ковырять как закрыть от PHP-скриптов доступ в другие каталоги. дело в том, что если не установлен PHP как CGI модуль, то варианта два. Либо SafeMode + doc_root, что совсем не приятно и мне не нравится. Причины расписывать тут не буду, т.к. не хочется устраивать холивар. В общем, я пошел по другому пути. В каждый виртуальный хост Апача я добавил такую конструкцию:

php_admin_value open_basedir /var/www/user/

Таки образом я избавился от неприятной вещи по типу fileread(‘/etc/passwd’);.

Дальше больше. Lice по FTP залил какой-то ПХП-шный shell и стали тестировать. Как я и ожидал, каталоги то он увидел, а вот скачать что-либо, кроме как из своего каталога — никак.

Вот теперь надо отрубить system и exec с кучей всего еще. В php.ini мы правим:

disable_functions = «apache_get_modules,apache_get_version,apache_getenv,apache_note, apache_setenv,disk_free_space,diskfreespace,dl,highlight_file,ini_alter,ini_restore,openlog, passthru,phpinfo,proc_nice,shell_exec,show_source,symlink,system,exec»

Отдельное огромное спасибо Lice за помощь.

Вы можете оставить комментарий, или поставить трэкбек со своего сайта.

7 комментариев(я)

  • 02.05.2008 08:52, Lecactus сказал:

    в пхп.ини все отрубилось нормально, а вот с параметром для виртуального хоста непонятно

    какуой именно путь прописывать если допустим корень сайта находится в /opt/webserver/site1

    • 02.05.2008 08:58, Silver Ghost сказал:

      Прописать путь выше которого скрипт работать не сможет. Ну и плюс добавить видимо /tmp или где там у тебя временный каталог для скриптов.

      • 02.05.2008 09:03, Silver Ghost сказал:

        ну в смысле корень сайта и пропиши… второй каталог можно прописывать через двоеточение. Пример: /opt/webserver/site1:/tmp

        • 02.05.2008 09:07, Lecactus сказал:

          прописывал путь до сайта, но при входе в админку у меня firestat сматерился на какие то пути

          • 02.05.2008 09:09, Silver Ghost сказал:

            FireStat у меня не стоит, Ты посмотри на какие пути он матерится и добавь их в разрешенные. И будет тебе счастье. :)

            • 02.05.2008 09:16, Lecactus сказал:

              прописал пути. сработало. спасибо

              • 11.01.2009 14:39, Sq!m сказал:

                Насчёт open_basedir.
                1. Под Windows разделителем служит “;”.
                2. Если хотя бы один из путей содержит пробел, то все пути вместе взятые должны быть обязательно закавычены (не важно двойная ковычка или одинарная).
                3. Если в каком нибудь пути содержится одинарная кавычка, то тоже нужно закавычить, но уже только с помощью двойных кавычек.
                4. Если путь содержит «;», то вам не повезло, никакое экранироание не поможет (проверялось на версии 2.2.11).
                Пример:
                php_admin_value open_basedir «C:/Program Files/Apache/htdocs;C:/WINDOWS/Temp»
                либо:
                php_admin_value open_basedir ‘C:/Program Files/Apache/htdocs;C:/WINDOWS/Temp’

                Если написать просто
                php_admin_value open_basedir C:/Program Files/Apache/htdocs;C:/WINDOWS/Temp
                или
                php_admin_value open_basedir “C:/Program Files/Apache/htdocs”;C:/WINDOWS/Temp
                то апач не запустится.

                (Обязательно)
                (Обязательно, не публикуется)

                Юзер за дедку, дедка за тоссер, тоссер за мэйлер - и отослали мессаж!
                Яндекс.Метрика beget