Как защитить Ubuntu от вилочной бомбы

72

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

Я слышал, что некоторые ОС позволяют администратору накладывать некоторые ограничения на пользовательские процессы, чтобы смягчить последствия разветвленных бомб. Является ли эта защита в Ubuntu по умолчанию или кто-то с привилегиями sudo должен установить это? Если так, то как?

dblang
источник

Ответы:

73

Вы можете легко ограничить количество процессов, которые могут быть созданы в Ubuntu и большинстве других дистрибутивов Linux, изменив /etc/security/limits.conf

sudoedit /etc/security/limits.conf

Затем добавьте эту строку в конец этого файла:

*    hard     nproc     nnn

где:

  • hard устанавливает ограничение на уровне ядра, чтобы его нельзя было изменить без перезагрузки.
  • nproc максимальное количество процессов на пользователя.
  • nnn это число, которое вы должны рассчитать для вашей системы по:

    ps aux -L | cut --delimiter=" " --fields=1 | sort | uniq --count | sort --numeric-sort | tail --lines=1
    

Приведенная выше команда выведет список всех процессов для всех пользователей, включая потоки , суммирует их и перечислит имя пользователя с наибольшим количеством процессов. Чтобы быть в безопасности, перед запуском вышеуказанной команды откройте столько приложений, сколько вам обычно нужно, а затем удвойте это число в целях безопасности.

После того, как этот лимит будет установлен, вам нужно будет перезагрузиться, но это повлияет на каждого пользователя без полномочий root в системе. Так что если любой пользователь без полномочий root выполнит разветвленную бомбу, у него будет такое жесткое ограничение.

Ограничения групповых и групповых символов по умолчанию не применяются к пользователю root . Используйте буквальное имя пользователя rootв правилах, если вы хотите применить правило к суперпользователю.

Кроме того, если вы не хотите перезапускать в ближайшее время, вы можете использовать, sudo ulimit -u 800который наложит ограничение только на запущенный сеанс, но может быть легко обойден вилкой с sudoпривилегиями!

После перезапуска /etc/security/limits.confбудет использовано все, что находится внутри .

Некоторые дополнительные сведения о вилочных бомбах: они не являются вредоносными программами или чем-то ужасным. Как правило, они состоят из чего-то такого базового, как скрипт, который вызывает себя дважды, тем самым экспоненциально увеличивая свое присутствие на компьютере. Несмотря на то, что у них небольшой объем памяти, учитывая их быстрый темп, они быстро заполняют всю доступную оперативную память, и машина зависает или перезагружается. Единственная опасность - потеря несохраненной информации. Я бы классифицировал вилочную бомбу как шутку, а не как вредоносное ПО.

Важное напоминание:

Вы редко когда-либо выполняете что-либо в командной строке, если вы не уверены на 98% в его действиях. Если вы не можете прочитать команды, которые выполняете - не делайте этого. Это применяет двойные к нечитаемым кускам шестнадцатеричных / base64 символов, которые могут использоваться, чтобы скрыть все виды злобности. Если вы не уверены в какой-либо команде, вы всегда можете найти ее действия в справочных страницах Ubuntu и соблюдать дополнительные меры предосторожности при ее использовании, sudoпоскольку она будет выполняться от имени пользователя root.

Марко Чеппи
источник
@MarcoCeppi: ваш номер был не за горами для типичного пользователя Unity: вывод для расчета в настоящее время составляет 404 для моей системы ...
Fabby
1
Если я, скажем, добавлю что-то вроде alias ":(){ :|: & };:"="echo 'No.'"моего .bashrc- он будет выполнять каждый вход?
UniversallyUniqueID
Есть ли недостаток в выборе более высокого лимита nproc? Кажется, что не так много места с лимитом, равным или даже удвоенным текущим числом процессов, будет ли предел намного выше, даже 10 000 или более, все еще эффективен против вилочной бомбы? О том, сколько оперативной памяти потребляет каждый форк / процесс? Может быть, есть более универсальный предел, связанный с оперативной памятью?
Xen2050
1

Мне нравится простой способ создать псевдоним, хотя псевдоним не всегда применяется, проверьте ответ выше.

alias :="echo No."

В настоящее время

$ :(){ :|: & };:
bash: syntax error near unexpected token `('
Адриан Вебстер
источник
22
конечно, это общее решение; как это остановить a(){ a|a & };a? (или любое другое имя функции?)
кошка