Мешайте su просить пароль

Как работает fork-бомба: в C (или подобный C) код, называют функцию fork() назван. Это заставляет Linux или Unix или Unix-likes создавать совершенно новый процесс. Этот процесс имеет адресное пространство, идентификатор процесса, маску сигнала, открытые дескрипторы файлов, весь способ вещей, которые занимают место в несколько ограниченной памяти ядра ОС. Недавно созданный процесс также заставляет место в структуре данных ядра для процессов работать. К процессу, который звонил fork(), похоже, что ничего не произошло. Процесс fork-бомбы попытается звонить fork() с такой скоростью, как это может, так много раз, как это может.

Прием - то, что недавно созданный процесс также возвращается из fork() в том же коде. После ветвления у Вас есть два процесса, выполняющие тот же код. Каждый новый процесс fork-бомбы пытается звонить fork() с такой скоростью, как это может, так много раз, как это может. Код, который Вы дали как пример, является версией сценария Bash fork-бомбы.

Скоро, связанные с процессом ресурсы ядра всей ОС привыкают. Таблица процессов полна. Список ожидания-к-управляемому процессов является полным. Реальная память полна, таким образом, подкачка страниц запускается. Если это продолжается достаточно долго, раздел подкачки заполняется.

На что это похоже пользователю: все работает супер медленно. Вы добираетесь, сообщения об ошибках как "не могли создать процесс" при попытке простых вещей как ls. Попытка a ps вызывает бесконечную паузу (если она работает вообще), и отдает очень длинный список процессов. Иногда эта ситуация требует перезагрузки через шнур питания.

Fork-бомбы раньше назывались "кроликами" назад в былые времена. Поскольку они воспроизвели так быстро.

Только для забавы, я записал программу fork-бомбы в C:

#include <stdio.h>
#include <unistd.h>
int
main(int ac, char **av)
{
        while (1)
                fork();

        return 0;
}

Я скомпилировал и запустил ту программу под Дугой Linux в одном xterm. Я другой xterm я пытался получить список процессов:

1004 % ps -fu bediger
zsh: fork failed: resource temporarily unavailable

Оболочка Z в 2-м xterm не могла звонить fork() успешно, поскольку процессы fork-бомбы, связанные с 1-м xterm, израсходовали все ресурсы ядра, связанные с созданным процессом и выполнение.

4
28.05.2013, 13:11
1 ответ

Можно ослабиться requiretty начинание /etc/sudoer.

выборка из sudoers страницы справочника

requiretty      If set, sudo will only run when the user is logged in to a real 
                tty. When this flag is set, sudo can only be run from a login
                session and not via other means such as cron(8) or cgi-bin 
                scripts.  This flag is off by default.

По умолчанию эта строка говорит, что у всех должен быть tty доступ при использовании sudo:

Defaults requiretty

Можно ослабить его на пользователя и/или группу как это:

$ sudo visudo
# group
Defaults:%group !requiretty
# user
Defaults:user   !requiretty

примечание: ! средства not.

Дополнительную информацию см. в sudo и sudoers страницах справочника.

3
27.01.2020, 20:58

Теги

Похожие вопросы