LINUX.ORG.RU
ФорумAdmin

PHP safe mode права на файлы


0

0

Такая ситуация: в php включен safe mode, php создает файлы которые он(php) должен редактировать. Веб мастер заливает на сервак php скрипты под своим пользователем php работает под другим. Мне приходится менять юзера на php скрипты что бы все корректно работало. Как это можно оптимизировать что-бы мне не надо было менять юзера php скриптам. Оч не хочется выключать safe_mode_gid = Off


>Веб мастер заливает на сервак php скрипты под своим пользователем php работает под другим.

Веб мастер заливает по фтп? Сделай веб-морду и пусть работает через нее. Тогда пользователь будет один.

Ну или по крону проверять обновление файлов в каталоге и менять владельца.

KDE41user
()

особого выбора у тебя нет.

С включенным safe_mode_gid все что ты можешь сделать без костылей - это
заливать под тем же юзером, под которым работает апач. Но это очень не секьюрно.

Так же, можешь повесить в крон (а лучше в incron - чтобы по событию было) chown при аплоаде.

Лучшее решение - выключить сейф мод, ибо он тебе не сдался.

dreamer ★★★★★
()
Ответ на: комментарий от KDE41user

WM заливает по scp, а может и по ssh touch сделать, если лил по ftp то проблем не было.

Spinel
() автор топика
Ответ на: комментарий от dreamer

>Лучшее решение - выключить сейф мод, ибо он тебе не сдался. Проаргументируйте пожалуйста. Может я ошибаюсь но сейф мод спасет от дырявых скриптов нерадивых писателей.

Spinel
() автор топика

>Веб мастер заливает на сервак php скрипты под своим пользователем php работает под другим.

Нужно или от safe_mode отказываться (тем более, что в PHP6 его совсем уже не будет, да и сейчас он объявлен устаревшим) или менять подход к работе. safe_mode подразумевает всю работу от одного юзера.

...

В одном проекте, где safe_mode выключить было нельзя и работать нужно было ну на 100% от разных юзеров, у нас из PHP работа с файлами пользователя шла по FTP от его имени :)

Оч не хочется выключать safe_mode_gid = Off


Но почему? :)

KRoN73 ★★★★★
()

правами и группами.

А я каждому сайту свой апач поднимал от своего пользователя.

true_admin ★★★★★
()
Ответ на: комментарий от dreamer

заливать под тем же юзером, под которым работает апач. Но это очень не секьюрно.

В чём несекурность? Что один сайт к другому может что-нить залить?

true_admin ★★★★★
()

Кстати, были всякие mod_itk итп. Посмотри, может что-то рабочее на эту тему уже сделали.

true_admin ★★★★★
()
Ответ на: комментарий от true_admin

>Кстати, были всякие mod_itk итп

Почему «были»? mpm_itk прекрасно работает. Другое дело, что он в 10(!) раз тормознее, чем те же worker или prefork.

Так что если нужные per-user права с виртуальными хостами - то спасают только fast-cgi от юзера + apache от отдельного юзера для статики и доступность чтения от этого юзера (чтобы выкладывателю файлов голову не ломать, поможет guid на каталоги веб-сервера)

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

>Так что если нужные per-user права с виртуальными хостами

«Так что, если нужны per-user права с виртуальными хостами и высокой производительностью»

KRoN73 ★★★★★
()
Ответ на: комментарий от true_admin

это будет большая и, возможно, сразу неочевидная дыра:
например, в дальнейшем юзер захочет shell доступ и ему его дадут, забыв про то, что апач так же автоматически получил шелл...Ну и так далее .

я уж неговорю про то, что получив доступ (даже по FTP) под этим юзером, злоумышленник фактически получает доступ к всем сайтам, т.к. попадает в хоум диру апача.

короче, не стоит так делать :)

dreamer ★★★★★
()
Ответ на: комментарий от KRoN73

mpm_itk действительно жив, но я не советую его юзать в продакшене.
Лучше посмотреть на peruser, который вполне рабочий для серьезных нагрузок и не имеет всяких сайд-эффектов. (кстати у него есть поддержка чрута)

dreamer ★★★★★
()
Ответ на: комментарий от dreamer

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

true_admin ★★★★★
()
Ответ на: комментарий от KRoN73

Почему «были»?

давно темой запуска php-сайтов на апаче не интересовался, может за последние пару лет всё кардинально поменялось :)

true_admin ★★★★★
()
Ответ на: комментарий от dreamer

>Лучше посмотреть на peruser

А он жив? С год назад его последний раз смотрел - всё тоже самое было, что и за 2-3 года до того. Почти ни у кого не работает, масса жалоб в багзилле и т.п. А mpm_itk работал и работает сразу :)

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

жив. не для последних версий конечно, но у меня на 2.2.* и 2.0.* работает отлично на паре десятков серверов с хорошей нагрузкой. все собирается и никаких вылетов (иногда чайлды сегфолтятся, но это нормально)

dreamer ★★★★★
()

1) mod_itk. достаточно удачное и быстрое решение 2) suPHP 3) suexec 4) fastcgi

Решений для запуска ПХП процесса под своим пользователем достаточно много. Однако все сетуют на производительность того, либо иного решения.

Однако факты: тормозит в основном процесс порождения процесса и изменение пользователя процесса (setgid/setuid). Однако все-таки нужно признать, что производительность серверов растет с каждым годом и проблема становится все менее и менее актуальной. А приложения начинают потреблять все больше и больше ресурсов.

К примеру на производительности того же Битрикса не скажется выбор решения. :-) Ибо он кушает ресурсы сам.

В любом случае практически всегда безопасность прямо пропорциональна производительности.

zettich
()
Ответ на: комментарий от Spinel

> Аргументируй

расписывать не буду - лень, хватит одного факта - сейфмод приносит больше проблем, чем пытается решить.
это устаревшее решение, предложенное на заре пхп. обходится элементарно и пологаться на него опасно(думаешь, что защищен и расслабляешься)

dreamer ★★★★★
()

Хочу подытожить. Есть ли решение ситуации когда один apache или nginx mod_php или fastCGI php несколько сайтов, WMы заливают(scp...) свои скрипты в свои папки и при этом не могут редактировать чужие при этом safe mode on при условии что скрипты могут создавать и читать файлы.

Spinel
() автор топика
Ответ на: комментарий от dreamer

>расписывать не буду - лень, хватит одного факта - сейфмод приносит больше проблем, чем пытается решить.

это устаревшее решение, предложенное на заре пхп. обходится элементарно и пологаться на него опасно(думаешь, >что защищен и расслабляешься)

И что ты предлагаешь? Изучать код php скриптов на предмет потенциальных дыр?

Spinel
() автор топика
Ответ на: комментарий от Spinel

>Изучать код php скриптов на предмет потенциальных дыр?'

да, как ни странно(одна из мер). но конечно это должен делать кодер, а не админ.

если готоврить более по сабжу - я и другие здесь уже предложили достаточно действительно работающих решений.

dreamer ★★★★★
()
Ответ на: комментарий от dreamer

модули для apache не подойдут так как стоит nginx одна надежда на incron только он че-то сразу не завелся в syslog пишет команду но не выполняет

Spinel
() автор топика
Ответ на: комментарий от Spinel

> без отсылки в google.

~shi - тебе может сразу PoC написать ?
Ели в скрипте есть дыра, то glob()+include()+fopen()+... могут дать доступ куда надо. Остальное гугли сам.

dreamer ★★★★★
()
Ответ на: комментарий от dreamer

>glob()+include()+fopen()+... могут дать доступ куда надо. Не куда надо а куда можно!!!

Spinel
() автор топика
Ответ на: комментарий от Spinel

ну не так же буквально )))

вот, можешь поизучать -

http://sysadmins.ru/viewtopic.php?t=10009&view=next

http://source-x.blogspot.com/2008/12/php-526-errorlog-safemode-bypass.html

http://us3.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. Warning

This feature has been DEPRECATED as of PHP 5.3.0. Relying on this feature is highly discouraged.

dreamer ★★★★★
()
Ответ на: комментарий от Spinel

>модули для apache не подойдут так как стоит nginx

Ну и прекрасно.

nginx работает от юзера:группы nginx:httpd

php висит на fast-cgi, по отдельному серверу на юзера.
php-cgi1 = user1:group1
php-cgi2 = user2:group2
...

У юзеров владение каталогов userN:httpd и права rwxr-x---

Получается, что из своих каталогов через PHP юзеры могут читать/писать только свои каталоги. Чужие - недоступны. nginx может читать статические файлы всех юзеров.

Наконец, чтобы при заливке файлов не болела голова, нужно на каталоги пользователей поставить атрибут sgid. Тогда при создании нового подкаталога он будет создаваться от имени юзера и группы httpd.

KRoN73 ★★★★★
()
Ответ на: комментарий от Spinel

>при safe mode имеет значение владелец файла а не владелец процесса

При чём тут safe_mode? Я описал тебе, как получить взаимозащищённый/изолированный мультихостинг без DEPRICATED safe_mode.

KRoN73 ★★★★★
()
Ответ на: комментарий от Spinel

Нет. Не будет. Потому что бесполезная игрушка.

KRoN73 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.