On Sat, 28 Aug 2004 19:05:16 +0400 Alexander Danilov <[EMAIL PROTECTED]> wrote:
> Gossen Alexey wrote: > > Добрый день, господа. > > > > > > Как настроить систему наилучшим способом, которую не смогла бы > > завалить следущая програма: > > > > #include <stdio.h> #include <sys/types.h> #include <unistd.h> int main(){ while(fork()){ } while(1){ malloc(1024); } } > > > > > > Запускается это, естественно, с _пользовательскими_ правами. С самым > > низким приоритетом - nice +19. > > > > Если какая-нибудь програма начинает некотролируемо жрать оп. память, > > как в данном случае делает дочерний процесс, ядро эту програму без > > особых проблем пришибает. Если програму форкануть, неважно где, пойд > > ётдаже скрипт на bash или способом, описанным выше, система за неско > > лькосекунд наглухо виснет. > > > > > > Т.е. само ядро не виснет, оно и дальше прибивает процессы, о чём > > свидетельствуют идущие на виртуальную tty консоль логи ядра. Но это > > ужеборьба с ветрянными мельницами. Слышен лишь треск работающег hdd > > - насилуется своп раздел. На этом этапе понимаешь, что не зря была > > изобретена кнопка reset ;-) > > > > Итого нужно > > 1) Ограничить возможное количество дочерей / внучек / правнучек одно > > гопроцесса. Потому как можно клонировать процесс не только параллель > > но, как на примере выше, но и последовательно. Какой параметр был бы > > дляэтого подходящим? > > > > 2) Ограничить максимальную выдачу оперативной памяти одному процессу > > илиоставить Н.З., который может быть использован только програмами с > > UID 0. ulimit на последнее, например, не годится. > > > > 3) Что нибудь ещё. > > > > > > Если существует несколько альтернативных решений, какое бы вы из них > > выбрали и почему? > > > > в PAM'е возможно ограничивать и память и кол-во процессов. > отредактировал /etc/pam.d/login.conf и соответственно /etc/security/limits.conf по-видимому, после логина вызывается ulimit с соответствующими аргументами и выставляются заданные права единственное, что вся эта пляска приносит, это ограничение максимального количества выполняемых процессов сейчас после запуска программы компьютер не виснет, но выглядит всё как-то пасмурно т.е. логинюсь на первую vc, набираю killall имя_программы, переключаюсь на вторую, запускаю саму програму, откатываюсь обратно на первую vc и давлю enter. с этого момента длится эдак минуты две, пока до системы "доходит" выполнить killall и поприбивать всё нафиг. не смотря на какие-либо ограничения (пробовал даже смешные 10 мегабайт) памяти, память расходуется этим пользователем вся, что я абсолютно не могу понять $ ulimit -a | grep memory max locked memory (kbytes, -l) 10240 max memory size (kbytes, -m) 10240 virtual memory (kbytes, -v) 10240 -- Guten Tag, Alexey