Як зупинити та виявити вилкову бомбу


14
#include <stdlib.h>
#include <unistd.h>

int main()
{
   while(1)
      fork();
}

Це код для вилкової бомби.

У нашому коледжі ми підключаємося через telnet, тобто протокол обслуговування клієнта. До сервера підключено близько 100 систем. Раптом ми побачили, як сервер стає повільним, а через деякий час він вийшов з ладу. Мені стало відомо, що хтось реалізував вилкову бомбу.

Як ми можемо виявити, в якій системі реалізована вилка бомба? І як ми можемо це зупинити?

Один із способів полягає в обмеженні максимальної кількості процесів, якими може володіти один користувач. Чи є якийсь метод, щоб зупинити його і знати, з якої системи він був реалізований?


19
Telnet? Серйозно? Вам справді слід використовувати SSH ...
ThiefMaster


Дивіться також unix.stackexchange.com/q/64611/17609
moooeeeep

добре це було перенесено так, але одна відповідь могла бути на рівні ядра. деякі патчі були попередньо зроблені, але жоден, схоже, не відповідає прийняттю. Моя суть полягає в тому, як це виявити: ну будь-який юнер буде знати, що він більше не може використовувати систему, тому точка виявлення, можливо, не є ключовою. Як відновитись? Поточна відповідь - перезавантажити, я зазначив би: спосіб сказати ядру запустити лише один процес (той, який ви хочете очистити від безладу) та зупинити всіх інших, якими б вони не були. Це може бути функція, доступна лише на системній консолі.
philippe lhardy

Відповіді:


16

Один із способів - обмежити кількість процесів, які може запускати користувач.

Просто увійдіть як root і відредагуйте цей файл, щоб додати користувачів та налаштувати їх обмеження.

# vi /etc/security/limits.conf

Додайте цей файл у файл

john hard nproc 10

Тепер користувач John може створити лише 10 процесів.


Я думаю, що вам доведеться перезавантажити, щоб нові налаштування набули /etc/security/limits.confчинності.
Дан Д.

2
Ні. Але вони застосовуються через PAM, тому вони застосовуються лише до нових логінів.
ThiefMaster

14

Щоб зупинити діючу вилкову бомбу, можливо, ви зможете використати killall <name>для вбивства всіх процесів бомби. Однак, оскільки вилка бомба зазвичай призводить до надзвичайно високого навантаження на систему, ви, можливо, не зможете запустити в неї SSH або виконати це. Тому перезавантаження може знадобитися або принаймні набагато швидше.

Якщо кожен користувач має свій власний обліковий запис у системі, ви можете просто перевірити домашній каталог кожного та знайти його. Швидше за все, він також завантажив вихідний код, тому знайти його не слід занадто складно. Якщо це був спільний рахунок для всіх студентів, вам не пощастило. Тим більше, що після завершення сеансу використання telnet або ssh користувача не маєте шансів дізнатися, хто його запустив.

Однак замість того, щоб карати користувача, який підірвав цю вилкову бомбу, вам слід скоріше виправити конфігурацію системи, щоб зняти вилкові бомби. Ви можете встановити межі процесу на кожного користувача, використовуючи /etc/security/limits.confі, таким чином, запобігти виходу бомби з вилкою під контроль - наприклад, наприклад, лише 50 процесів вилкової бомби не принесуть великої шкоди.


неможливо виявити, з якої системи його прихід aa?
Раджеш М

@ user1670364: Не зрозуміло, про що ви питаєте. Що ви маєте на увазі під його приходом? Ви можете сказати, якому користувачеві належить процес, що ще ви хочете знати?
Девід Шварц

@DavidSchwartz я маю на увазі можливе виявлення вилкової бомби, на якій системі вона реалізується?
Раджеш М

@ user1670364: Якщо ви маєте на увазі систему, яка насправді працює вилковою бомбою, вона є повільною. Якщо ви маєте на увазі відповідального користувача, саме той, хто володіє процесами, які розщеплюються.
Девід Шварц
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.