URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID8
Нить номер: 6978
[ Назад ]

Исходное сообщение
"open_basedir и Crontab"

Отправлено bartwell , 03-Сен-10 15:50 
Подскажите, пожалуйста, как ограничить пользователя его домашней директорией, если он запускает скрипты кроном?

Содержание

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

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


"open_basedir и Crontab"
Отправлено bartwell , 03-Сен-10 19:47 
Разница в том, что если из-под апача, то для каждого виртуалхоста можно указать свой open_basedir. А как указать разные open_basedir для каждого пользователя?

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

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


"open_basedir и Crontab"
Отправлено bartwell , 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/ и т.д.


"open_basedir и Crontab"
Отправлено Pahanivo , 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 отказывает в открытия файла. Все символические ссылки распознаются и преобразуются, поэтому обойти это ограничение при помощи символических ссылок невозможно.

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


"open_basedir и Crontab"
Отправлено bartwell , 06-Сен-10 17:45 
Но ведь скрипт может быть расположен в /home/user1/dir1/dir2/ и тогда это специальное значение будет указывать именно на /home/user1/dir1/dir2/, а не на /home/user1/, как нужно...

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

mv/cp ? :))


"open_basedir и Crontab"
Отправлено bartwell , 06-Сен-10 17:59 
Эмм, в смысле, заставлять пользователей копировать все свои файлы в одну папку (/home/user1/)? ) Не подойдет )

"open_basedir и Crontab"
Отправлено Nimdar , 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 и т.д.


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

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


"open_basedir и Crontab"
Отправлено bartwell , 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 - так? Не повлечет ли это за собой проблем?


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

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


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

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


"open_basedir и Crontab"
Отправлено bartwell , 07-Сен-10 10:23 
Ну понятное дело, что она там есть. Я ж говорю, сама директива-то доступна и работает. Проблема в том, что php.ini один, а пользователей много. И для всех он один. А open_basedir нужен для всех разный.

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

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


"open_basedir и Crontab"
Отправлено bartwell , 07-Сен-10 11:57 
>ПОСТАВЬ ТОЧКУ!

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


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

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


"open_basedir и Crontab"
Отправлено bartwell , 07-Сен-10 12:10 
>и? у тебя скрипт шарится по всей файлухе? или сам скрипт лежит
>не в хомяке?

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


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

используй safe_mode


"open_basedir и Crontab"
Отправлено bartwell , 07-Сен-10 12:38 
>используй safe_mode

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


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

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


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

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


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

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


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

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


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

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


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

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


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

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



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

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


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


"open_basedir и Crontab"
Отправлено bartwell , 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");
?>
и получает ошибку, что ему нельзя оттуда инклудить файлы (неверно!).

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


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

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