Подскажите, пожалуйста, как ограничить пользователя его домашней директорией, если он запускает скрипты кроном?
>Подскажите, пожалуйста, как ограничить пользователя его домашней директорией, если он запускает скрипты
>кроном?а какая разница кроном он запускает или нет?
Разница в том, что если из-под апача, то для каждого виртуалхоста можно указать свой open_basedir. А как указать разные open_basedir для каждого пользователя?
>Разница в том, что если из-под апача, то для каждого виртуалхоста можно
>указать свой open_basedir. А как указать разные open_basedir для каждого пользователя?
>http://www.php.ru/manual/features.safe-mode.html#ini.sect.sa...
тут написано вроде ... если я правильно понял что тебе надо ...
>>Разница в том, что если из-под апача, то для каждого виртуалхоста можно
>>указать свой 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. А как указать разные 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 отказывает в открытия файла. Все символические ссылки распознаются и преобразуются, поэтому обойти это ограничение при помощи символических ссылок невозможно.
Специальное значение . указывает, что базовой следует считать директорию, в которой расположен сам скрипт.
Но ведь скрипт может быть расположен в /home/user1/dir1/dir2/ и тогда это специальное значение будет указывать именно на /home/user1/dir1/dir2/, а не на /home/user1/, как нужно...
>Но ведь скрипт может быть расположен в /home/user1/dir1/dir2/ и тогда это специальное
>значение будет указывать именно на /home/user1/dir1/dir2/, а не на /home/user1/, как
>нужно...mv/cp ? :))
Эмм, в смысле, заставлять пользователей копировать все свои файлы в одну папку (/home/user1/)? ) Не подойдет )
>Но ведь скрипт может быть расположен в /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 и т.д.
>Как ты верно заметил, в случае php-apache это запросто.
>
>php-cli такое не пройдёт. Т.е. на твой вопрос
>> А как указать разные open_basedir для каждого пользователя?
>
>ответ - никак.
>
>Надо играть пользовательскими правами, т.е. запретить user1 лазить к user2 и т.д.
>я не видел в доках явного указания что фича работает только в модульном режиме ...
ткни плиз - cli не особо юзал
>>Как ты верно заметил, в случае 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 - так? Не повлечет ли это за собой проблем?
>я не видел в доках явного указания что фича работает только в
>модульном режиме ...
>ткни плиз - cli не особо юзалСама директива-то доступна и работает. Но если в режиме модуля апача можно указать эту директиву в <VirtualHost>, то в режиме командной строки никаких виртуальных хостов нет и указывать ее просто негде...
>>я не видел в доках явного указания что фича работает только в
>>модульном режиме ...
>>ткни плиз - cli не особо юзал
>
>Сама директива-то доступна и работает. Но если в режиме модуля апача можно указать эту директиву в <VirtualHost>, то в режиме командной строки никаких виртуальных хостов нет и указывать ее просто негде...о чудо! открываю php.ini и вижу эту директиву!
(повторяю, сам к cli режиме не пробовал - но я нигде не вижу надписи "не работает в cli")
Ну понятное дело, что она там есть. Я ж говорю, сама директива-то доступна и работает. Проблема в том, что php.ini один, а пользователей много. И для всех он один. А open_basedir нужен для всех разный.
>Ну понятное дело, что она там есть. Я ж говорю, сама директива-то
>доступна и работает. Проблема в том, что php.ini один, а пользователей
>много. И для всех он один. А open_basedir нужен для всех
>разный.ПОСТАВЬ ТОЧКУ!
>ПОСТАВЬ ТОЧКУ!Точка будет приравнена к текущей директории, а не к домашней. Это не подходит.
>>ПОСТАВЬ ТОЧКУ!
>
>Точка будет приравнена к текущей директории, а не к домашней. Это не
>подходит.и? у тебя скрипт шарится по всей файлухе? или сам скрипт лежит не в хомяке?
>и? у тебя скрипт шарится по всей файлухе? или сам скрипт лежит
>не в хомяке?Если скрипт лежит в /home/user1/www/dir1/script.php, то он не сможет например выполнить include("/home/user1/script.php");
>>и? у тебя скрипт шарится по всей файлухе? или сам скрипт лежит
>>не в хомяке?
>
>Если скрипт лежит в /home/user1/www/dir1/script.php, то он не сможет например выполнить include("/home/user1/script.php");
>используй safe_mode
>используй safe_modesafe_mode в 5.3 объявлен как deprecated... Не очень хорошее решение.
>>и? у тебя скрипт шарится по всей файлухе? или сам скрипт лежит
>>не в хомяке?
>
>Если скрипт лежит в /home/user1/www/dir1/script.php, то он не сможет например выполнить include("/home/user1/script.php");
>Если у тебя open_basedir будет /home/user1/, то никаких проблем не будет, я выше уже писал.
И чтобы два раза не вставать, да, можно использовать -с php.ini для каждого пользователя. Но как ты заставишь и проконтролируешь пользователей, чтобы они запускали скрипты именно так?
>И чтобы два раза не вставать, да, можно использовать -с php.ini для
>каждого пользователя. Но как ты заставишь и проконтролируешь пользователей, чтобы они
>запускали скрипты именно так?А если дать возможность добавлять задания только через WEB-панель... То, похоже, проблему можно решить этим способом.
>>>ПОСТАВЬ ТОЧКУ!
>>
>>Точка будет приравнена к текущей директории, а не к домашней. Это не
>>подходит.
>
>и? у тебя скрипт шарится по всей файлухе? или сам скрипт лежит
>не в хомяке?Так проблема, как я понимаю, в том, чтобы какой-нибудь особо продвинутый пользователь не мог шариться и/или запускать скрипт не в хомяке.
Короче, нечто вроде php-чрута.
>[оверквотинг удален]
>>> А как указать разные open_basedir для каждого пользователя?
>>
>>ответ - никак.
>>
>>Надо играть пользовательскими правами, т.е. запретить user1 лазить к user2 и т.д.
>>
>
>я не видел в доках явного указания что фича работает только в
>модульном режиме ...
>ткни плиз - cli не особо юзалЯ нигде не утверждал, что в cli не работает. Но в _данном_конкретном_ случае open_basedir не имеет смысла, ибо пользователей много, а параметр - один, и привязать его к конкретному пользователю невозможно.
>[оверквотинг удален]
>>>Надо играть пользовательскими правами, т.е. запретить user1 лазить к user2 и т.д.
>>>
>>
>>я не видел в доках явного указания что фича работает только в
>>модульном режиме ...
>>ткни плиз - cli не особо юзал
>
>Я нигде не утверждал, что в cli не работает. Но в _данном_конкретном_
>случае open_basedir не имеет смысла, ибо пользователей много, а параметр -
>один, и привязать его к конкретному пользователю невозможно.кто пишет скрипт - пользователь!
где он лежит - в хомяке!
используя "точку" можно по крайней мере запереть его там - хотя вообще какой глубинный смысл этого?
>[оверквотинг удален]
>>>ткни плиз - cli не особо юзал
>>
>>Я нигде не утверждал, что в cli не работает. Но в _данном_конкретном_
>>случае open_basedir не имеет смысла, ибо пользователей много, а параметр -
>>один, и привязать его к конкретному пользователю невозможно.
>
>кто пишет скрипт - пользователь!
>где он лежит - в хомяке!
>используя "точку" можно по крайней мере запереть его там - хотя вообще
>какой глубинный смысл этого?Уже в который раз забываешь один момент :)
А если скрипт "глубже" хоть на один каталог? Ему будет недоступен остальной хомяк, а этого делать нельзя. Пользователь должен иметь полную свободу в своём ~, и резвиться там как ему заблагорассудится, но не должен иметь возможности выйти из своего домашнего каталога.
>Уже в который раз забываешь один момент :)
>А если скрипт "глубже" хоть на один каталог? Ему будет недоступен остальной
>хомяк, а этого делать нельзя. Пользователь должен иметь полную свободу в
>своём ~, и резвиться там как ему заблагорассудится, но не должен
>иметь возможности выйти из своего домашнего каталога.я это прекрасно понимаю - учите пользователей грамотно писать скрипты
вообще тут вариант и сесть и рыбу съесть - надо тоже определится уже ...
>>Уже в который раз забываешь один момент :)
>>А если скрипт "глубже" хоть на один каталог? Ему будет недоступен остальной
>>хомяк, а этого делать нельзя. Пользователь должен иметь полную свободу в
>>своём ~, и резвиться там как ему заблагорассудится, но не должен
>>иметь возможности выйти из своего домашнего каталога.
>
>я это прекрасно понимаю - учите пользователей грамотно писать скриптыС какой это стати я, как админ, должен учить пользователей? Для этого есть их более опытные коллеги.
Чтобы не наломали дров, выделяется загончик, и пусть там делают что хотят.
>вообще тут вариант и сесть и рыбу съесть - надо тоже определится
>уже ...
>кто пишет скрипт - пользователь!
>где он лежит - в хомяке!
>используя "точку" можно по крайней мере запереть его там - хотя вообще
>какой глубинный смысл этого?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");
?>
и получает ошибку, что ему нельзя оттуда инклудить файлы (неверно!).Именно поэтому оба эти варианты непригодны.
>[оверквотинг удален]
>
>Вариант 2.
>Ставим в php.ini open_basedir=.
>К примеру, user1 пишет скрипт размещеный в /home/user1/www/script.php со следующим кодом
><?
>require("/home/user1/functions.php");
>?>
>и получает ошибку, что ему нельзя оттуда инклудить файлы (неверно!).
>
>Именно поэтому оба эти варианты непригодны.сделай уже все правами на диры + acl - хватит заниматься садомазо ...