Подскажите пожалуйста как можно запретить выполнение произвольного кода из PHP скриптов вне корня сайта. Просто нам сейчас изготовили сайт, где часть служебной информации расположена на уровень ниже корня сайта (DocumentRoot). В связи с этим у меня возникло желание запретить любые обращения из PHP скриптов куда бы то ни было кроме корня сайта и одного уровня ниже, типа ../Sessions. Сервер расположен на
CentOs 6.0
Apache 2.2.15
PHP 5.3.2
> Подскажите пожалуйста как можно запретить выполнение произвольного кода из PHP скриптов
> вне корня сайта. Просто нам сейчас изготовили сайт, где часть служебной
> информации расположена на уровень ниже корня сайта (DocumentRoot). В связи с
> этим у меня возникло желание запретить любые обращения из PHP скриптов
> куда бы то ни было кроме корня сайта и одного уровня
> ниже, типа ../Sessions. Сервер расположен на
> CentOs 6.0
> Apache 2.2.15
> PHP 5.3.2поиск, маны - не?
> поиск, маны - не?Этим сейчас и занимаюсь. Пока безуспешно. Была идея вывести апач в чрут, но т.к. сайт завязан на пхп и мускул здесь тоже все не так просто.
>> поиск, маны - не?
> Этим сейчас и занимаюсь. Пока безуспешно. Была идея вывести апач в чрут,
> но т.к. сайт завязан на пхп и мускул здесь тоже все
> не так просто.очень редкая конфигурация апача
вопрос как ограничить доступные каталоги для php - задается регулярно, В ПОИСК! В ГУГЛ!
> вопрос как ограничить доступные каталоги для php - задается регулярно, В ПОИСК!
> В ГУГЛ!Спасибо за обстоятельный ответ. Он мне очень помог. Все бы так отвечали. ГУГОЛ - и все ясно.
>> вопрос как ограничить доступные каталоги для php - задается регулярно, В ПОИСК!
>> В ГУГЛ!
> Спасибо за обстоятельный ответ. Он мне очень помог. Все бы так отвечали.
> ГУГОЛ - и все ясно.гугол+"php security" - первая ссылка
> гугол+"php security" - первая ссылкаСенкс. Посмотрю.
>> гугол+"php security" - первая ссылка
> Сенкс. Посмотрю.Зашел. Посмотрел. Не устроилою. Как выяснилось этот документ смотрел раньше. В нем рекомендации по ПХП программированию для обеспечения безопастности кода при реализации сайта. В моем же случае сайт написан сторонними людьми и проверять на безопастность тысячи строк кода - бесполезно. Проще написать новый сайт.
Т.ч. в моем случае надо рассматривать настройки апача и ОСи для ограничения доступа пхп скриптов. Т.ч. здесь я склоняюсь именно к чруту.
>>> гугол+"php security" - первая ссылка
>> Сенкс. Посмотрю.
> Зашел. Посмотрел. Не устроилою. Как выяснилось этот документ смотрел раньше. В нем
> рекомендации по ПХП программированию для обеспечения безопастности кода при реализации
> сайта. В моем же случае сайт написан сторонними людьми и проверять
> на безопастность тысячи строк кода - бесполезно. Проще написать новый сайт.товаришь, бздеть не надо.
надо просто научится читать> Т.ч. в моем случае надо рассматривать настройки апача и ОСи для ограничения
> доступа пхп скриптов. Т.ч. здесь я склоняюсь именно к чруту.там они также рассмотрены
> Этим сейчас и занимаюсь. Пока безуспешно. Была идея вывести апач в чрут,
> но т.к. сайт завязан на пхп и мускул здесь тоже все
> не так просто.у меня на неком хостинге работает апач+пхп в чруте.. ничего сложно .. ldd тебе расскажет что надо в чрут принести с собой.
мускул крутится без чрута.. создает сокет в каталоге с чрутом к которому и коннектится собтсвенно пхп
> ldd тебе расскажет что надо в чрут принести с собой.Можно уточнить, что это за зверь такой - ldd ?
>> ldd тебе расскажет что надо в чрут принести с собой.
> Можно уточнить, что это за зверь такой - ldd ?дак спросил бы сразу и про чрут за одно - че тянуть то?
> дак спросил бы сразу и про чрут за одно - че тянуть
> то?Так я и написал чуть выше:
>>>Была идея вывести апач в чрут, но т.к. сайт завязан на пхп и мускул здесь тоже все не так просто.
>>>>Была идея вывести апач в чрут, но т.к. сайт завязан на пхп и мускул здесь тоже все не так просто.как бээ после вопроса про ldd вообще есть сомнения в понимании термина chroot )
> Можно уточнить, что это за зверь такой - ldd ?Кроме Гугла в список нелюбимых попал, похоже, еще и man. Как же все запущено-то.
>> Можно уточнить, что это за зверь такой - ldd ?
> Кроме Гугла в список нелюбимых попал, похоже, еще и man. Как
> же все запущено-то.Зачем же так. Это первое что я сделал:
=====================
NAME
ldd - print shared library dependencies
=====================Просто не совсем понял смысла как с этим работать. Это что. Имеется ввиду поиск всех шаред библиотек, которые нужно закинуть в чрут, чтобы все работало? Так что-ли. Только это все следствие. Точнее второй (а то и третий шаг) настройки, оптимизации. А где сам мануал по организации чрута для связки апач+пхп+мускул. Именно его я искал.
> Просто не совсем понял смысла как с этим работать. Это что. Имеется
> ввиду поиск всех шаред библиотек, которые нужно закинуть в чрут, чтобы
> все работало? Так что-ли.Так что ли.
> Так что ли.Осталось найти грамотный мануал вывода всего хозяйства в чрут.
Хотя можно попробовать покопать еще в области настроек SELinux. М.б. через него удасться ограничить доступ апача в системные папки.
> Осталось найти грамотный мануал вывода всего хозяйства в чрут.можно было в этому посту уже в принципе освоить гугла )))
> Осталось найти грамотный мануал вывода всего хозяйства в чрут.Найдите. Я разрешаю.
> Найдите. Я разрешаю.Надо же. Еще один спец по ГУГЛЮ отыскался. Что бы я без вас всех делал. Ума не приложу.
> Надо же. Еще один спец по ГУГЛЮ отыскался. Что бы я без
> вас всех делал. Ума не приложу.При подобных Вашим вопросам Вам вряд ли удастся что-либо куда-либо приложить. За неимением предмета приложения. Вы бы за то время, которое тратите на глупости, которые Вы постоянно несете - уже раз 10 бы нашли уйму руководств по настройке Апача+пых-пых+мускул в чруте. Они есть, и немало - уверяю Вас.
> Они есть, и
> немало - уверяю Вас.Да кто-ж спорит. Второй день читаю. Просто, задавая вопрос, я думал что встречу тех, кто на эти грабли уже наступил и даст конкретные советы. Дельный совет пришел только один. Остальные сплошные ГУГЛЯторы, которым делать нечего и они пишут свои тупые посты направо и налево.
> делать нечего и они пишут свои тупые посты направо и налево.я надеюсь, настанет тот светлый день озарения, когда вы наконец то поймете, чьи именно посты в этом топе были тупы. если этот день не настанет в ближайшие время - крайне рекомендую сменить сферу деятельности
> я надеюсь, настанет тот светлый день озарения, когда вы наконец то поймете,
> чьи именно посты в этом топе были тупы.Это я уже понял. Желаю вам самому вместо конкретного ответа встретить подобный отсыл в гугол, когда вам что-то будет нужно.
> если этот день не настанет в ближайшие время - крайне рекомендую сменить сферу деятельности
А вот это не вам мне советовать. Я работаю в сфере IT уже более 25 лет (и программером и админом, и админом/программером баз данных) и "менять сферу деятельности" не собираюсь.
PS: Т.ч. идите сами в гугол. М.б. научитесь вежливости и культуре общения в форумах.
> PS: Т.ч. идите сами в гугол. М.б. научитесь вежливости и культуре общения
> в форумах.и это говорит человек который назадавал кучу идиотских вопросов, а потом обругал всех тупыли гуглерами? :)
> и это говорит человек который назадавал кучу идиотских вопросов, а потом обругал
> всех тупыли гуглерами? :)Коллега, тут случай действительно клинический. :)
>> ldd тебе расскажет что надо в чрут принести с собой.
> Можно уточнить, что это за зверь такой - ldd ?[ne4to@project ~]$ ldd /usr/lib64/php5.3/bin/php
linux-vdso.so.1 => (0x00007ffff73ff000)
libc-client.so.1 => /usr//lib64/libc-client.so.1 (0x00007fe2bf4ab000)
libz.so.1 => /lib64/libz.so.1 (0x00007fe2bf293000)
libreadline.so.6 => /lib64/libreadline.so.6 (0x00007fe2bf04c000)
libm.so.6 => /lib64/libm.so.6 (0x00007fe2bedcb000)
libsybdb.so.5 => /usr//lib64/libsybdb.so.5 (0x00007fe2beb77000)
libmcrypt.so.4 => /usr//lib64/libmcrypt.so.4 (0x00007fe2be944000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007fe2be740000)
libonig.so.2 => /usr//lib64/libonig.so.2 (0x00007fe2be4d7000)
libt1.so.5 => /usr//lib64/libt1.so.5 (0x00007fe2be278000)
libfreetype.so.6 => /usr//lib64/libfreetype.so.6 (0x00007fe2bdfda000)
libpng14.so.14 => /usr//lib64/libpng14.so.14 (0x00007fe2bddb3000)
libjpeg.so.8 => /usr//lib64/libjpeg.so.8 (0x00007fe2bdb79000)
libdb-4.8.so => /usr//lib64/libdb-4.8.so (0x00007fe2bd800000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fe2bd5e3000)
libgdbm.so.3 => /usr//lib64/libgdbm.so.3 (0x00007fe2bd3dd000)
libcurl.so.4 => /usr//lib64/libcurl.so.4 (0x00007fe2bd182000)
libbz2.so.1 => /lib64/libbz2.so.1 (0x00007fe2bcf72000)
libpcre.so.0 => /lib64/libpcre.so.0 (0x00007fe2bcd36000)
libssl.so.1.0.0 => /usr//lib64/libssl.so.1.0.0 (0x00007fe2bcada000)
libcrypto.so.1.0.0 => /usr//lib64/libcrypto.so.1.0.0 (0x00007fe2bc731000)
libresolv.so.2 => /lib64/libresolv.so.2 (0x00007fe2bc51b000)
libmysqlclient.so.16 => /usr/lib64/mysql/libmysqlclient.so.16 (0x00007fe2bc19b000)
libnetsnmp.so.15 => /usr//lib64/libnetsnmp.so.15 (0x00007fe2bbece000)
libxml2.so.2 => /usr//lib64/libxml2.so.2 (0x00007fe2bbb79000)
libc.so.6 => /lib64/libc.so.6 (0x00007fe2bb813000)
libpam.so.0 => /lib64/libpam.so.0 (0x00007fe2bb605000)
libncurses.so.5 => /lib64/libncurses.so.5 (0x00007fe2bb3b5000)
/lib64/ld-linux-x86-64.so.2 (0x00007fe2bf7b6000)
librt.so.1 => /lib64/librt.so.1 (0x00007fe2bb1ac000)
libgssapi_krb5.so.2 => /usr/lib64/libgssapi_krb5.so.2 (0x00007fe2baf6e000)
libkrb5.so.3 => /usr/lib64/libkrb5.so.3 (0x00007fe2baca0000)
libk5crypto.so.3 => /usr/lib64/libk5crypto.so.3 (0x00007fe2baa76000)
libcom_err.so.2 => /lib64/libcom_err.so.2 (0x00007fe2ba872000)
libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x00007fe2ba66f000)
libkrb5support.so.0 => /usr/lib64/libkrb5support.so.0 (0x00007fe2ba466000)
>>> ldd тебе расскажет что надо в чрут принести с собой.
>> Можно уточнить, что это за зверь такой - ldd ?
> [ne4to@project ~]$ ldd /usr/lib64/php5.3/bin/phpСенкс.
Ещё проще - с mysql прекрасно можно работать не через сокет а по сети.
А изучали вопрос про chroot? Апач можно запустить в изолированном окружении и он не будет "знать" о реальной части системы.А настройки ниже корня - нормально, иначе доступ к ним будет через веб, что не правильно, т.к. можно подсмотреть, к примеру, пароль на БД.
> А изучали вопрос про chroot? Апач можно запустить в изолированном окружении и
> он не будет "знать" о реальной части системы.Этим я сейчас и занимаюсь.
> А настройки ниже корня - нормально, иначе доступ к ним будет через
> веб, что не правильно, т.к. можно подсмотреть, к примеру, пароль на
> БД.Полностью согласен. Хотя у данных "сайтописцев" как раз настройки на базу лежат выше корня сайта, но т.к. данному узверю разрешен вход только с локалхост, то, думаю, это не критично. Хотя и демонстрирует их "уровень", как программеров.
У меня-то вопрос был (учитывая их "уровень") в том, чтобы через кривые пхп скрипты невозможно было добраться до системных настроек ОСи. И в этом, пока вижу только пару механизмов. Либо чрут, либо СЕЛинух, либо их комбинация. Думал обойтись настройками апача, но инфу пока не нарыл.
> т.к. данному узверю разрешен вход только с
> локалхост, то, думаю, это не критично. Хотя и демонстрирует их "уровень",
> как программеров.Юзер для базы, может быть использован через SQL-иньекции для получения нужной информации типа других пользователей БД и их паролей, информации из БД и тп. Чтобы этого избежать доступ тогда у него должен быть только для нужной базы и ничего более. Ну если оттуда сопрут инфу, то "криворукость" программеров однозначна...
> У меня-то вопрос был (учитывая их "уровень") в том, чтобы через кривые
> пхп скрипты невозможно было добраться до системных настроек ОСи. И в
> этом, пока вижу только пару механизмов. Либо чрут, либо СЕЛинух, либо
> их комбинация. Думал обойтись настройками апача, но инфу пока не нарыл.Это системные механизмы, еще вроде можно запретить фукнции ПХП, которые это могут сделать. В документации по ПХП что-то такое мелькало. Как вариант. Ну и chroot, точно лишним не будет.
Один раз настроить и пусть "балуются" :)
> Юзер для базы, может быть использован через SQL-иньекции для получения нужной информацииСенкс. Об этом не подумал.
> Ну если оттуда сопрут инфу,
> то "криворукость" программеров однозначна...Особенно в свете закона №152 :)
> Это системные механизмы, еще вроде можно запретить фукнции ПХП, которые это могут
> сделать. В документации по ПХП что-то такое мелькало.Посмотрел. Запретить exec не удасться, т.к. он использован скриптами для вызова /usr/bin/convert
> Ну и chroot, точно лишним не будет.
> Один раз настроить и пусть "балуются" :)Попробую разобраться. Самому интересно.
>> А изучали вопрос про chroot? Апач можно запустить в изолированном окружении и
>> он не будет "знать" о реальной части системы.
> Этим я сейчас и занимаюсь.я какбы вообще не вижу смысла запускать Вам апач в чруте.. тем более если сайт нормально функционирует в safe_mode .. тогда вам понадобится только open_base .. это решит все ваши проблемы.
если с safe_mode проблемы .. то тогда в помощЪ open_base + disable_functions на предмет всякихЪ exec, system, etc.
а если заменить mod_php на php-cgi и выставить кошерные права на папки то вообще никто ничего не увидит .
> я какбы вообще не вижу смысла запускать Вам апач в чруте.. тем
> более если сайт нормально функционирует в safe_mode .. тогда вам понадобится
> только open_base .. это решит все ваши проблемы.Спасибо. Не знал. В safe_mode сайт вроде работает. Open_base, насколько я понял, это open_basedir. Ок. Посмотрю.
> если с safe_mode проблемы .. то тогда в помощЪ open_base + disable_functions
> на предмет всякихЪ exec, system, etc.Запретить exec не получится. Он использован для вызова /usr/bin/convert. Т.ч. надо посмотреть.
> а если заменить mod_php на php-cgi и выставить кошерные права на папки
> то вообще никто ничего не увидит .Ок. Посмотрю.
Из-за внешнего вызова /usr/bin/convert галерея сайта отказалась работать. Т.ч. теперь остался единственный действенный механизм защиты - чрут. Его и буду копать.PS: Все равно спасибо. Узнал кое что новое в защите пхп.
> Из-за внешнего вызова /usr/bin/convert галерея сайта отказалась работать. Т.ч. теперь
> остался единственный действенный механизм защиты - чрут. Его и буду копать.
> PS: Все равно спасибо. Узнал кое что новое в защите пхп.safe_mode_exec_dir
> safe_mode_exec_dirПопробовал сразу. Не помогло. Даже выносил convert в другую папку (в структуру сайта, на уровень ниже) - тоже мимо. От рута запускается - от апача нет. М.б. дело в шаредлабах. Может их (или ссылки на них) попробовать добавить в exec_dir.
> Попробовал сразу. Не помогло. Даже выносил convert в другую папку (в структуру
> сайта, на уровень ниже) - тоже мимо. От рута запускается -
> от апача нет. М.б. дело в шаредлабах. Может их (или ссылки
> на них) попробовать добавить в exec_dir.Предложу вариант из старой практики работы с биллингом UTM. Прописать в /etc/sudoers права Апачу на запуск convert с правами рута без пароля. Типа от такого:
apache ALL=(ALL) NOPASSWD:/путь/convert
> Предложу вариант из старой практики работы с биллингом UTM. Прописать в
> /etc/sudoers права Апачу на запуск convert с правами рута без пароля.
> Типа от такого:
> apache ALL=(ALL) NOPASSWD:/путь/convertПроверил. Не помогло. Хотя идея хорошая. Сенкс. Буду иметь ввиду.
>> Предложу вариант из старой практики работы с биллингом UTM. Прописать в
>> /etc/sudoers права Апачу на запуск convert с правами рута без пароля.
>> Типа от такого:
>> apache ALL=(ALL) NOPASSWD:/путь/convert
> Проверил. Не помогло. Хотя идея хорошая. Сенкс. Буду иметь ввиду.
>> safe_mode_exec_dir
> Попробовал сразу. Не помогло. Даже выносил convert в другую папку (в структуру
> сайта, на уровень ниже) - тоже мимо. От рута запускается -
> от апача нет. М.б. дело в шаредлабах. Может их (или ссылки
> на них) попробовать добавить в exec_dir.как сайт до этого работал ?? из под рута чтоли ?? оО
>> А изучали вопрос про chroot? Апач можно запустить в изолированном окружении и
>> он не будет "знать" о реальной части системы.
> Этим я сейчас и занимаюсь.
>> А настройки ниже корня - нормально, иначе доступ к ним будет через
>> веб, что не правильно, т.к. можно подсмотреть, к примеру, пароль на
>> БД.
> Полностью согласен. Хотя у данных "сайтописцев" как раз настройки на базу лежат
> выше корня сайта, но т.к. данному узверю разрешен вход только с
> локалхост, то, думаю, это не критично. Хотя и демонстрирует их "уровень",
> как программеров.Это говорит как раз о их грамотности, как программеров. В web root и ниже нужна только точка/точки входа скрипта, и статика, которую будет отдавать веб сервер.
То что вы описали, не нарушение безопасности, а её повышение и нормальная практика.