x97Rang :) будь другом напиши что там у тебя в ulimit -u в бзди и слаке сдается мне что автор статьи прав и в новых ядрах ограничения количества процессов по умолчанию уж слишком огромное :( так что респек автору, за то что обратил наше внимание на это!!!!
надо для полного щастья надо делать:
#define PAGE_SIZE 4096
while(fork() >= 0) {
while(1) {
char * c = malloc(PAGE_SIZE);
c[0] = '\0';
}
}
Дабы страницы "загрязнялись" и VMM-у плохело еще больше.
>> Думаю, откровенная лажа, или пробовали на дистре из коробки, который установлен с настройками по дефолту. Прежде всего, отрывать лапы админу, и пинать по голове до до полного просветления!
Ну зачем же? Давайте лучше попинаем за это сам Линукс :). Ведь все та-а-ак любят пинать винду, если подобный косяк обнаруживается в ней. :)
>когда приходит пакет с отресом отправителя совпадающим с адресом получателя, и винда от этого дуреет . По слухам, lang атака опять работает в Windows после установки SP2 :)))
Наконец-то они пофиксали эту багу с обратной совместимостью!
> while(1) {
> char * c = malloc(PAGE_SIZE);
> c[0] = '\0';
> }
Основная "фича" (на самом деле -- _серьезный_ баг), благодаря которой
это чудо так сильно вредит Linux'у -- это VM overcommit.
Ядро сначала раздает налево-направо _ничем_ не обеспеченную VM,
а потом начинается swap of death. Что самое главное, новые процессы
в ходе этого безобразия _все равно_ плодятся: ну не знает fork,
что памяти уже нет...
А ежели оный overcommit вырубить к чертям собачьим, то _ничего_
особенного не произойдет.
> Дабы страницы "загрязнялись" и VMM-у плохело еще больше
Тогда VM _раньше_ закончится (или RLIMIT_AS исчерпается), и fork с
malloc'ом будут просто посылать на# незадачливого/злонамеренного
юзверя.
> ulimit -a core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited file size (blocks, -f) unlimited max locked memory (kbytes, -l) unlimited max memory size (kbytes, -m) unlimited open files (-n) 1024 pipe size (512 bytes, -p) 8 stack size (kbytes, -s) 8192 cpu time (seconds, -t) unlimited max user processes (-u) 2047 virtual memory (kbytes, -v) unlimited uname -a Linux xxx.xxx 2.4.18-bf2.4 #1 Son Apr 14 09:53:28 CEST 2002 i686 unknown
Ну, у меня в слаке то же самое, только -u побольше и -l=32. После запуска forkbomb.c не создать более ни одного процесса. Посидел, посмотрел на это, нажал Ctrl+C и пошёл лабать дальше. А что должно было случиться? Неприятно, что его, кроме Ctrl+C, никак не убить - killall -9 forkbomb не запустить, top тоже... А у тебя что?
Да, подробности. Slackware 10.1, ядро 2.6.11 самосбор, 512 Мб, RLIMIT_NPROC нигде не ставил (его при конфигурировании ядра надо выставлять? В .config ничего похожего нет - наверно, не выставлял).
> А у меня ничего, я это не запускал. Я это для того анонимуса который спросил что там в дебиан стейбл дает uname -a
Так я он и есть. Просто тут было сказано про взруливший debian. И чем он рулит? Ну хорошо, запустился forkbomb. Причём запустил его не юзер с командной строки, где можно сделать Ctrl+C. И не из иксов, которые можно перезапустить. Короче, Ctrl+C недоступна, Ctrl+Alt+Backspace не помогает. Как счастливый дебианец будет убивать forkbomb? У меня не получается ни запустить шелл в новой консоли (после ввода пароля - молчание), ни открыть терминал в иксах, НИЧЕГО. Максимальное число процессов исчерпано, новый не создать. Чего делать-то? Чем это лучше краха ядра? Тем, что reset юзер нажимает сам?
> Короче, Ctrl+C недоступна, Ctrl+Alt+Backspace не помогает. Как счастливый
> дебианец будет убивать forkbomb?
Зайдет как root и скажет kill -9 `pgrep forkbomb`
> У меня не получается ни запустить шелл в новой консоли (после ввода пароля
> - молчание), ни открыть терминал в иксах, НИЧЕГО. Максимальное число
> процессов исчерпано, новый не создать.
Hint: есть машины, где юзеров _много_, так вот проблемы _одного_ юзверя
всех остальных не е^Hинтересуют.
> Чего делать-то?
Идти к админу. Если Вы сам админ -- заходить _как root_ и прибивать.
> Чем это лучше краха ядра?
Тем, что
1) Всех остальных юзеров это не трогает.
2) Можно зайти как root и прекратить это безобразие _без_ потери
данных, результатов N-недельного счета, etc.
3) В совсем тяжелых случаях можно нажать кнопочку "Power" и acpid
_корректно_ сделает shutdown. Можно (в консоли, _не_ залогиниваясь)
нажать "аккорд" и перезагрузиться. По крайней мере, не похерятся
файловые системы...
P.S.
Да, я таки не спорю что resource management в Linux весьма крив.
Debian'овские патчи его не выпрямляют.
Проблема в том, что когда я в иксах запускаю xterm, то ulimit -a выдаёт не значения, которые я задавал для залогиненного в иксах юзера в его .bash_profile, а системно-дефолтные (которые я, к примеру, выставил в /etc/profile). Когда юзер заходит с консоли - да, всё пучком.
Соответственно, если я в таком xterm'е пускаю forkbomb - то всё, с консоли уже не залогиниться. Иксы стартуют автоматически - runlevel с ними дефолтный...
Соответственно, если я в таком xterm'е пускаю forkbomb - то всё, с консоли уже не залогиниться. Иксы стартуют автоматически - runlevel с ними дефолтный...
> Проблема в том, что когда я в иксах запускаю xterm, то ulimit -a
> выдаёт не значения, которые я задавал для залогиненного в иксах
> юзера в его .bash_profile,
1) А почитать мануал к pam_limits религия не позволяет?
2) Почитать мануал к bash'у (на предмет того, когда bash читает
.bash_profile, а когда .bashrc) тоже в облом, да?
3) А все равно они таки не могут увеличиться, если только user --
не root, если root -- то ему они до лампочки (за исключением патченых
ядер с MAC -- RSBAC, GrSecurity, etc)
> Когда юзер заходит с консоли - да, всё пучком.
Ну да, тогда bash запускается с ключом --login (Hint! Hint!).
>:(){ :|:& };:
Почитал я тут ваши комменты и решил тоже попробовать :)) Вышел из иксов, в голой консоли запустил бомбу. Появилось много сообщений одного и того же вида: ":: fork failed: resource temporarily unavailable" Я попробовал зайти на вторую консоль, получилось со второго раза. ps отказался показывать процессы, посмотрел лишь через sudo. Везде только zsh. Ладно. Переключился на первую консоль. Ctrl+S, Ctrl+C, Ctrl+Q и выключилась бомба :)) Такие вот приключения... сейчас загрузил Иксы и пишу вам :))
Система: ALTLinux Master 2.4
[c0der@mycomp ~]$ ulimit -a
cpu time (seconds) unlimited
file size (blocks) unlimited
data seg size (kbytes) unlimited
stack size (kbytes) 8192
core file size (blocks) 0
resident set size (kbytes) unlimited
processes 128
file descriptors 1024
locked-in-memory size (kb) unlimited
address space (kb) unlimited
file locks unlimited
[c0der@mycomp ~]$