# cat php.ini |grep lim
memory_limit = 8M ; Maximum amount of memory a script may consume (8MB)>Пытаюсь наложить ограничения по памяти на пользовательские php-скрипты.
>FreeBSD6.1 Apache2+PHP4+fastcgi+suexec.
>В login.conf завёл новый класс pupkiny со следующими ограничениям:
>pupkiny:\
> :passwd_format=blf:\
> :path=/bin /usr/bin /usr/local/bin:\
> :cputime-max=1h30m:\
> :datasize-max=8m:\
> :stacksize-max=2m:\
> :memorylocked-max=4m:\
> :memoryuse-max=10m:\
> :filesize-max=8m:\
> :coredumpsize=0:\
> :openfiles-max=24:\
> :maxproc-max=24:\
> :vmemoryuse-max=10m:\
> :priority=0:\
> :requirehome:\
> :nocheckmail=true:\
> :ignoretime=false:\
> :umask=027:
>Присвоил пользователю pupkin этот класс.
>Теперь, если пользователь pupkin напишет такой скрипт и запустит его на сервере,
>то получит облом, т.к. употребил всю доступную ему память.
>Скрипт:
><?
>set_time_limit(0);
>for ($a=0; $a<3000000; $a++) {
> if (!$flag) {
> $tmp_arr[$a]='1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890';
>
> }
> if (!($a%100)) {
>
> $tmp=memory_get_usage();
> echo($tmp.'<br>');
> }
> if ($tmp>400000000) {
>
> $flag=1; $a=$a-1;
>
> //unset($tmp_arr);unset($a);
>
> };
>}
>?>
>
>Вроде бы всё работает правильно, но стоит добавить в начало этого скрипта
>
>строчку
>
>ini_set('memory_limit','2048M');
>
>и пользователь спокойно забирает всю память+своп.
>Есть одно решение:
>в php.ini записать disable_functions = ini_set
> но оно не очень хорошее, т.к. с помощью ini_set можно установить
>кучу полезных настроек, не теребя админа и перестаёт работать phpMyAdmin и
> куча других прог.
>
>Как в таком случае ограничить пользовательские скрипты?