[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: fork and memory protection



Gossen Alexey wrote:
Добрый день, господа.


Как настроить систему наилучшим способом, которую не смогла бы
завалить следущая програма:

#include <всё что надо>
int main(){
	while(fork()){
	}

	//исполняется дочерним процессом
	while(1){
		malloc(1024);
	}
}


Запускается это, естественно, с _пользовательскими_ правами. С самым
низким приоритетом - nice +19.

Если какая-нибудь програма начинает некотролируемо жрать оп. память,
как в данном случае делает дочерний процесс, ядро эту програму без особых проблем пришибает. Если програму форкануть, неважно где, пойдёт
даже скрипт на bash или способом, описанным выше, система за несколько
секунд наглухо виснет.


Т.е. само ядро не виснет, оно и дальше прибивает процессы, о чём
свидетельствуют идущие на виртуальную tty консоль логи ядра. Но это уже
борьба с ветрянными мельницами. Слышен лишь треск работающег hdd -
насилуется своп раздел. На этом этапе понимаешь, что не зря была
изобретена кнопка reset ;-)

Итого нужно
1) Ограничить возможное количество дочерей / внучек / правнучек одного
процесса. Потому как можно клонировать процесс не только параллельно,
как на примере выше, но и последовательно. Какой параметр был бы для
этого подходящим?

2) Ограничить максимальную выдачу оперативной памяти одному процессу или
оставить Н.З., который может быть использован только програмами с UID 0.
ulimit на последнее, например, не годится.

3) Что нибудь ещё.


Если существует несколько альтернативных решений, какое бы вы из них
выбрали и почему?


в PAM'е возможно ограничивать и память и кол-во процессов.



Reply to: