За последние 24 часа нас посетили 17584 программиста и 1588 роботов. Сейчас ищут 1566 программистов ...

Запрет на доступ файлов на уровень выше

Тема в разделе "Установка PHP", создана пользователем Sonic, 6 сен 2011.

  1. Sonic

    Sonic Активный пользователь

    С нами с:
    6 сен 2011
    Сообщения:
    6
    Симпатии:
    0
    Добрый день.

    Имеется виртуальный хостниг c FreeBSD, на котором установлен PHP (MySQL, Perl и т.п.). На хостинге размещаются несколько сайтов, каждый в своей папке:

    /home/имя_аккаунта/сайт1.ru/docs/файлы_сайта

    /home/имя_аккаунта/сайт2.ru/docs/файлы_сайта

    и т.д.

    Владелец всех файлов и папок один.

    На данный момент любым php скриптом из сайта1 я свободно могу получить доступ к любому файлу в папке сайта2, что не есть хорошо.

    Собственно вопрос в том как запретить скриптам подниматься выше уровня папки docs, т.е. чтобы скрипт одного сайта не мог получить доступ к файлам другого?

    Хостер говорит, что так сделать не получится. Создать ещё пользователей, чтобы на каждую папку сайта приходился отдельный пользователь они тоже не могут.
    Выставление прав на файлы на "только для чтения" не спасает ситуацию, т.к. права теме же скриптами легко меняются.

    Очень надеюсь на вашу помощь, т.к. это большая угроза безопасности и я не знаю как решить данную проблему.

    P.S.
    Извиняюсь, если написал не в той теме, я посчитал, что данный вопрос больше относится к настройке PHP.
     
  2. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Есть мегакостыль под названием http://php.net/manual/en/features.safe-mode.html
    Поскольку это мегакостыль - в 5.3 оно помечено деприкейтед (т.е. запросто может в 5.4 перестать поддерживаться... к счастью). А вообще такие задачи решаются разными пользователями.
     
  3. karakh

    karakh Активный пользователь

    С нами с:
    11 дек 2007
    Сообщения:
    1.344
    Симпатии:
    0
    а просто выставить на хостинге document_root и open_basedir точно никак нельзя?
     
  4. Sonic

    Sonic Активный пользователь

    С нами с:
    6 сен 2011
    Сообщения:
    6
    Симпатии:
    0
    При включении Safe Mode сразу появляется куча ошибок на всех сайтах и на скорость работы тоже влияет в отрицательную сторону. Так что этот вариант не подходит.

    document_root для каждого сайта выставлен нормально, т.е., например, для сайта1 это /home/имя_аккаунта/сайт1.ru/docs

    хм, open_basedir вообще не задана. Подскажите, пожалуйста, как правильно задать open_basedir (доступ к php.ini у меня имеется)

    P.S.
    На хостинге стоит PHP Version 5.2.10
     
  5. karakh

    karakh Активный пользователь

    С нами с:
    11 дек 2007
    Сообщения:
    1.344
    Симпатии:
    0
    еще раз: open_basedir
    с 5.3 ставится через ini_set, в более старых версиях - силами хостера надо поставить свой open_basedir на каждый сайт
     
  6. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Ага, и еще запретить при этом все функции типа system, popen и т.д.
     
  7. karakh

    karakh Активный пользователь

    С нами с:
    11 дек 2007
    Сообщения:
    1.344
    Симпатии:
    0
    popen скорее всего можно оставить. system - да, но против лома приема нет
     
  8. Sonic

    Sonic Активный пользователь

    С нами с:
    6 сен 2011
    Сообщения:
    6
    Симпатии:
    0
    karakh, подскажите, пожалуйста, как можно задать open_basedir для каждого сайта?

    MiksIr, подскажите, пожалуйста, как можно запретить указанные вами функции?
     
  9. karakh

    karakh Активный пользователь

    С нами с:
    11 дек 2007
    Сообщения:
    1.344
    Симпатии:
    0
  10. Sonic

    Sonic Активный пользователь

    С нами с:
    6 сен 2011
    Сообщения:
    6
    Симпатии:
    0
    Спасибо большое. Осталось узнать как можно запретить некоторые функции
     
  11. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    С чего бы? Точно так же можно любую системную команду вызвать.

    disable_functions =exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source
     
  12. Sonic

    Sonic Активный пользователь

    С нами с:
    6 сен 2011
    Сообщения:
    6
    Симпатии:
    0
    Большое спасибо.

    Буду вносить изменения и тестировать.
     
  13. Sonic

    Sonic Активный пользователь

    С нами с:
    6 сен 2011
    Сообщения:
    6
    Симпатии:
    0
    Вот на счёт open_basedir вопрос. Можно ли с помощью этой директивы указать несколько каталогов? И если можно, то как?