Як захистити Ubuntu від вилкової бомби


72

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

Я чув, що деяка ОС дозволяє адміністратору встановити деякий ліміт на користувацькі процеси, щоб пом’якшити наслідки вилок бомб, це захист у Ubuntu за замовчуванням чи людина, яка має привілей судо, повинна встановити це? Якщо так, то як?

Відповіді:


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в правилах, якщо ви хочете застосувати правило до суперпользователя.

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

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

Деякі додаткові відомості про вилкові бомби: вони не є шкідливим програмним забезпеченням чи чимось жахливим. Зазвичай вони складаються з чогось такого ж базового, як сценарій, який дзвонить собі двічі - тим самим збільшуючи свою присутність на машині експоненціально. Незважаючи на те, що вони мають невеликий слід пам’яті, враховуючи швидкий темп, який вони багаторазові, вони швидко заповнюють всю наявну оперативну пам’ять і машина замерзає або перезавантажується. Єдина небезпека - втрата збереженої інформації. Я б класифікував forkbomb набагато більше, ніж шахрайство, ніж шкідливе програмне забезпечення.

Важливе нагадування:

Ви рідко повинні коли-небудь виконувати що-небудь у командному рядку, коли ви не впевнені на 98% від його дії. Якщо ви не можете прочитати команди, які ви виконуєте - не робіть цього. Це стосується подвійних можливостей для нечитабельних шматочків шістнадцяткових / базових64 символів, які можна використовувати для затемнення всіляких неприємностей. Якщо ви не впевнені в команді, ви завжди можете шукати її дії в Ubuntu Manpages і бути додатковими обережними при використанні, 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? (чи будь-яке інше ім’я функції?)
кіт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.