The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"open_basedir и Crontab"
Вариант для распечатки  
Пред. тема | След. тема 
Форум WEB технологии (PHP)
Изначальное сообщение [ Отслеживать ]

"open_basedir и Crontab"  +/
Сообщение от bartwell (ok) on 03-Сен-10, 15:50 
Подскажите, пожалуйста, как ограничить пользователя его домашней директорией, если он запускает скрипты кроном?
Высказать мнение | Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "open_basedir и Crontab"  +/
Сообщение от Pahanivo (ok) on 03-Сен-10, 19:31 
>Подскажите, пожалуйста, как ограничить пользователя его домашней директорией, если он запускает скрипты
>кроном?

а какая разница кроном он запускает или нет?

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

2. "open_basedir и Crontab"  +/
Сообщение от bartwell (ok) on 03-Сен-10, 19:47 
Разница в том, что если из-под апача, то для каждого виртуалхоста можно указать свой open_basedir. А как указать разные open_basedir для каждого пользователя?
Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

3. "open_basedir и Crontab"  +/
Сообщение от Pahanivo (ok) on 06-Сен-10, 06:27 
>Разница в том, что если из-под апача, то для каждого виртуалхоста можно
>указать свой open_basedir. А как указать разные open_basedir для каждого пользователя?
>

http://www.php.ru/manual/features.safe-mode.html#ini.sect.sa...
тут написано вроде ... если я правильно понял что тебе надо ...

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

4. "open_basedir и Crontab"  +/
Сообщение от bartwell (ok) on 06-Сен-10, 10:37 
>>Разница в том, что если из-под апача, то для каждого виртуалхоста можно
>>указать свой open_basedir. А как указать разные open_basedir для каждого пользователя?
>>
>
>http://www.php.ru/manual/features.safe-mode.html#ini.sect.sa...
>тут написано вроде ... если я правильно понял что тебе надо ...
>

Нет, это немного не то. Нужно чтобы крон запускал PHP-скрипты у пользователя user1 с open_basedir=/home/user1/, у пользователя user2 - open_basedir=/home/user2/ и т.д.

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

5. "open_basedir и Crontab"  +/
Сообщение от Pahanivo (ok) on 06-Сен-10, 17:35 
>>>Разница в том, что если из-под апача, то для каждого виртуалхоста можно
>>>указать свой open_basedir. А как указать разные open_basedir для каждого пользователя?
>>>
>>
>>http://www.php.ru/manual/features.safe-mode.html#ini.sect.sa...
>>тут написано вроде ... если я правильно понял что тебе надо ...
>>
>
>Нет, это немного не то. Нужно чтобы крон запускал PHP-скрипты у пользователя
>user1 с open_basedir=/home/user1/, у пользователя user2 - open_basedir=/home/user2/ и т.д.

цитирую (последнее предложение)

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

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

Специальное значение . указывает, что базовой следует считать директорию, в которой расположен сам скрипт.

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

6. "open_basedir и Crontab"  +/
Сообщение от bartwell (ok) on 06-Сен-10, 17:45 
Но ведь скрипт может быть расположен в /home/user1/dir1/dir2/ и тогда это специальное значение будет указывать именно на /home/user1/dir1/dir2/, а не на /home/user1/, как нужно...
Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

7. "open_basedir и Crontab"  +/
Сообщение от Pahanivo (ok) on 06-Сен-10, 17:53 
>Но ведь скрипт может быть расположен в /home/user1/dir1/dir2/ и тогда это специальное
>значение будет указывать именно на /home/user1/dir1/dir2/, а не на /home/user1/, как
>нужно...

mv/cp ? :))

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

8. "open_basedir и Crontab"  +/
Сообщение от bartwell (ok) on 06-Сен-10, 17:59 
Эмм, в смысле, заставлять пользователей копировать все свои файлы в одну папку (/home/user1/)? ) Не подойдет )
Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

9. "open_basedir и Crontab"  +/
Сообщение от Nimdar (ok) on 06-Сен-10, 19:05 
>Но ведь скрипт может быть расположен в /home/user1/dir1/dir2/ и тогда это специальное
>значение будет указывать именно на /home/user1/dir1/dir2/, а не на /home/user1/, как
>нужно...

Ничего подобного. Если open_basedir будет установлен /home/user1/ (обязательно закрывать слешом, иначе будут доступны /home/user11, /home/user111, /home/user12, короче все /home/user1*), то скрипт может находиться как угодно глубоко в /home/user1.
Понятие "дерево директорий" подразумевает конкретную директорию со всеми поддиректориями.

Как ты верно заметил, в случае php-apache это запросто.

php-cli такое не пройдёт. Т.е. на твой вопрос
> А как указать разные open_basedir для каждого пользователя?

ответ - никак.

Надо играть пользовательскими правами, т.е. запретить user1 лазить к user2 и т.д.

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

10. "open_basedir и Crontab"  +/
Сообщение от Pahanivo (ok) on 06-Сен-10, 19:15 
>Как ты верно заметил, в случае php-apache это запросто.
>
>php-cli такое не пройдёт. Т.е. на твой вопрос
>> А как указать разные open_basedir для каждого пользователя?
>
>ответ - никак.
>
>Надо играть пользовательскими правами, т.е. запретить user1 лазить к user2 и т.д.
>

я не видел в доках явного указания что фича работает только в модульном режиме ...
ткни плиз - cli не особо юзал

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

11. "open_basedir и Crontab"  +/
Сообщение от bartwell (ok) on 06-Сен-10, 19:30 
>>Как ты верно заметил, в случае php-apache это запросто.
>>
>>php-cli такое не пройдёт. Т.е. на твой вопрос
>>> А как указать разные open_basedir для каждого пользователя?
>>
>>ответ - никак.

А есть ли возможность запускать php-скрипт в cli с определенным php.ini? Я видел в хелпе опцию "-c <path>|<file> Look for php.ini file in this directory", но не уверен в ее назначении. И опять-таки, как будет тогда полностью вызываться скрипт?
/home/user1/script.php > php -c /ini/user1.ini - так? Не повлечет ли это за собой проблем?

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

12. "open_basedir и Crontab"  +/
Сообщение от bartwell (ok) on 06-Сен-10, 19:32 
>я не видел в доках явного указания что фича работает только в
>модульном режиме ...
>ткни плиз - cli не особо юзал

Сама директива-то доступна и работает. Но если в режиме модуля апача можно указать эту директиву в <VirtualHost>, то в режиме командной строки никаких виртуальных хостов нет и указывать ее просто негде...

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

13. "open_basedir и Crontab"  +/
Сообщение от Pahanivo (ok) on 07-Сен-10, 09:17 
>>я не видел в доках явного указания что фича работает только в
>>модульном режиме ...
>>ткни плиз - cli не особо юзал
>
>Сама директива-то доступна и работает. Но если в режиме модуля апача можно указать эту директиву в <VirtualHost>, то в режиме командной строки никаких виртуальных хостов нет и указывать ее просто негде...

о чудо! открываю php.ini и вижу эту директиву!
(повторяю, сам к cli режиме не пробовал - но я нигде не вижу надписи "не работает в cli")

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

14. "open_basedir и Crontab"  +/
Сообщение от bartwell (ok) on 07-Сен-10, 10:23 
Ну понятное дело, что она там есть. Я ж говорю, сама директива-то доступна и работает. Проблема в том, что php.ini один, а пользователей много. И для всех он один. А open_basedir нужен для всех разный.
Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

15. "open_basedir и Crontab"  +/
Сообщение от Pahanivo (ok) on 07-Сен-10, 11:49 
>Ну понятное дело, что она там есть. Я ж говорю, сама директива-то
>доступна и работает. Проблема в том, что php.ini один, а пользователей
>много. И для всех он один. А open_basedir нужен для всех
>разный.

ПОСТАВЬ ТОЧКУ!

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

16. "open_basedir и Crontab"  +/
Сообщение от bartwell (ok) on 07-Сен-10, 11:57 
>ПОСТАВЬ ТОЧКУ!

Точка будет приравнена к текущей директории, а не к домашней. Это не подходит.

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

17. "open_basedir и Crontab"  +/
Сообщение от Pahanivo (ok) on 07-Сен-10, 12:05 
>>ПОСТАВЬ ТОЧКУ!
>
>Точка будет приравнена к текущей директории, а не к домашней. Это не
>подходит.

и? у тебя скрипт шарится по всей файлухе? или сам скрипт лежит не в хомяке?

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

18. "open_basedir и Crontab"  +/
Сообщение от bartwell (ok) on 07-Сен-10, 12:10 
>и? у тебя скрипт шарится по всей файлухе? или сам скрипт лежит
>не в хомяке?

Если скрипт лежит в /home/user1/www/dir1/script.php, то он не сможет например выполнить include("/home/user1/script.php");

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

19. "open_basedir и Crontab"  +/
Сообщение от Pahanivo (ok) on 07-Сен-10, 12:26 
>>и? у тебя скрипт шарится по всей файлухе? или сам скрипт лежит
>>не в хомяке?
>
>Если скрипт лежит в /home/user1/www/dir1/script.php, то он не сможет например выполнить include("/home/user1/script.php");
>

используй safe_mode

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

20. "open_basedir и Crontab"  +/
Сообщение от bartwell (ok) on 07-Сен-10, 12:38 
>используй safe_mode

safe_mode в 5.3 объявлен как deprecated... Не очень хорошее решение.

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

22. "open_basedir и Crontab"  +/
Сообщение от Nimdar (ok) on 07-Сен-10, 14:17 
>>и? у тебя скрипт шарится по всей файлухе? или сам скрипт лежит
>>не в хомяке?
>
>Если скрипт лежит в /home/user1/www/dir1/script.php, то он не сможет например выполнить include("/home/user1/script.php");
>

Если у тебя open_basedir будет /home/user1/, то никаких проблем не будет, я выше уже писал.
И чтобы два раза не вставать, да, можно использовать -с php.ini для каждого пользователя. Но как ты заставишь и проконтролируешь пользователей, чтобы они запускали скрипты именно так?

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

26. "open_basedir и Crontab"  +/
Сообщение от bartwell (ok) on 07-Сен-10, 16:04 
>И чтобы два раза не вставать, да, можно использовать -с php.ini для
>каждого пользователя. Но как ты заставишь и проконтролируешь пользователей, чтобы они
>запускали скрипты именно так?

А если дать возможность добавлять задания только через WEB-панель... То, похоже, проблему можно решить этим способом.

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

23. "open_basedir и Crontab"  +/
Сообщение от Nimdar (ok) on 07-Сен-10, 14:20 
>>>ПОСТАВЬ ТОЧКУ!
>>
>>Точка будет приравнена к текущей директории, а не к домашней. Это не
>>подходит.
>
>и? у тебя скрипт шарится по всей файлухе? или сам скрипт лежит
>не в хомяке?

Так проблема, как я понимаю, в том, чтобы какой-нибудь особо продвинутый пользователь не мог шариться и/или запускать скрипт не в хомяке.
Короче, нечто вроде php-чрута.

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

21. "open_basedir и Crontab"  +/
Сообщение от Nimdar (ok) on 07-Сен-10, 14:15 
>[оверквотинг удален]
>>> А как указать разные open_basedir для каждого пользователя?
>>
>>ответ - никак.
>>
>>Надо играть пользовательскими правами, т.е. запретить user1 лазить к user2 и т.д.
>>
>
>я не видел в доках явного указания что фича работает только в
>модульном режиме ...
>ткни плиз - cli не особо юзал

Я нигде не утверждал, что в cli не работает. Но в _данном_конкретном_ случае open_basedir не имеет смысла, ибо пользователей много, а параметр - один, и привязать его к конкретному пользователю невозможно.

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

24. "open_basedir и Crontab"  +/
Сообщение от Pahanivo (ok) on 07-Сен-10, 14:46 
>[оверквотинг удален]
>>>Надо играть пользовательскими правами, т.е. запретить user1 лазить к user2 и т.д.
>>>
>>
>>я не видел в доках явного указания что фича работает только в
>>модульном режиме ...
>>ткни плиз - cli не особо юзал
>
>Я нигде не утверждал, что в cli не работает. Но в _данном_конкретном_
>случае open_basedir не имеет смысла, ибо пользователей много, а параметр -
>один, и привязать его к конкретному пользователю невозможно.

кто пишет скрипт - пользователь!
где он лежит - в хомяке!
используя "точку" можно по крайней мере запереть его там - хотя вообще какой глубинный смысл этого?

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

25. "open_basedir и Crontab"  +/
Сообщение от Nimdar (ok) on 07-Сен-10, 14:57 
>[оверквотинг удален]
>>>ткни плиз - cli не особо юзал
>>
>>Я нигде не утверждал, что в cli не работает. Но в _данном_конкретном_
>>случае open_basedir не имеет смысла, ибо пользователей много, а параметр -
>>один, и привязать его к конкретному пользователю невозможно.
>
>кто пишет скрипт - пользователь!
>где он лежит - в хомяке!
>используя "точку" можно по крайней мере запереть его там - хотя вообще
>какой глубинный смысл этого?

Уже в который раз забываешь один момент :)
А если скрипт "глубже" хоть на один каталог? Ему будет недоступен остальной хомяк, а этого делать нельзя. Пользователь должен иметь полную свободу в своём ~, и резвиться там как ему заблагорассудится, но не должен иметь возможности выйти из своего домашнего каталога.

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

28. "open_basedir и Crontab"  +/
Сообщение от Pahanivo (ok) on 07-Сен-10, 17:39 
>Уже в который раз забываешь один момент :)
>А если скрипт "глубже" хоть на один каталог? Ему будет недоступен остальной
>хомяк, а этого делать нельзя. Пользователь должен иметь полную свободу в
>своём ~, и резвиться там как ему заблагорассудится, но не должен
>иметь возможности выйти из своего домашнего каталога.

я это прекрасно понимаю - учите пользователей грамотно писать скрипты
вообще тут вариант и сесть и рыбу съесть - надо тоже определится уже ...


Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

30. "open_basedir и Crontab"  +/
Сообщение от Nimdar (ok) on 08-Сен-10, 15:28 
>>Уже в который раз забываешь один момент :)
>>А если скрипт "глубже" хоть на один каталог? Ему будет недоступен остальной
>>хомяк, а этого делать нельзя. Пользователь должен иметь полную свободу в
>>своём ~, и резвиться там как ему заблагорассудится, но не должен
>>иметь возможности выйти из своего домашнего каталога.
>
>я это прекрасно понимаю - учите пользователей грамотно писать скрипты

С какой это стати я, как админ, должен учить пользователей? Для этого есть их более опытные коллеги.
Чтобы не наломали дров, выделяется загончик, и пусть там делают что хотят.


>вообще тут вариант и сесть и рыбу съесть - надо тоже определится
>уже ...

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

27. "open_basedir и Crontab"  +/
Сообщение от bartwell (ok) on 07-Сен-10, 16:17 
>кто пишет скрипт - пользователь!
>где он лежит - в хомяке!
>используя "точку" можно по крайней мере запереть его там - хотя вообще
>какой глубинный смысл этого?

Nimdar правильно сказал. Хотелось бы наверное только добавить пример:

К примеру имеем двух пользователей (на деле их гораздо больше)

Вариант 1.
Ставим в php.ini open_basedir=/home/user1/
Результат: пользователь user1 не может подняться выше домашней директории (все верно), а у user2 вообще перестают работать PHP-скрипты (неверно!).

Вариант 2.
Ставим в php.ini open_basedir=.
К примеру, user1 пишет скрипт размещеный в /home/user1/www/script.php со следующим кодом
<?
require("/home/user1/functions.php");
?>
и получает ошибку, что ему нельзя оттуда инклудить файлы (неверно!).

Именно поэтому оба эти варианты непригодны.

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

29. "open_basedir и Crontab"  +/
Сообщение от Pahanivo (ok) on 07-Сен-10, 17:41 
>[оверквотинг удален]
>
>Вариант 2.
>Ставим в php.ini open_basedir=.
>К примеру, user1 пишет скрипт размещеный в /home/user1/www/script.php со следующим кодом
><?
>require("/home/user1/functions.php");
>?>
>и получает ошибку, что ему нельзя оттуда инклудить файлы (неверно!).
>
>Именно поэтому оба эти варианты непригодны.

сделай уже все правами на диры + acl - хватит заниматься садомазо ...

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру