Категорії
Linux Solaris

Защита от fork бомб

Solaris

В Solaris есть удобный механизм для ограничения количества запускаемых процессов/потоков – это проэкт. Что бы пользователи не смогли положить сервер fork-бомбой, нужно им ограничить количество LWP. Создадим проект и поместим туда пользователя testuser:

#projadd -U testuser -K 'project.max-lwps=(privileged,2048,deny)' user.testuser

Теперь пользователь testuser не сможет запустить более 2048 потоков.

Для тестирования можно использовать такую бомбу:

#!/usr/bin/bash
:(){ :|:& };:

Больше for bomb на разных языках можно взять здесь

Linux

Если у вас запустили fork-бомбу, но у вас осталась ssh сессия, то можно убить все приложения вот так:

#exec busybox/python

откуда в цикле убить все процессы не порождая новых процессов.

Чтобы защититься от fork bomb достаточно выставить ограничения в файле /etc/security/limits.conf:

testuser hard nproc 2048
testuser hard nofile 2048

FreeBSD

Для защиты создаем соответствующий login class в /etc/login.conf

limited_profile:\
        :maxproc=2048:\
        :tc=default:

и потом его применить для конкретного пользователя:

# cap_mkdb /etc/login.conf
# pw usermod -L limited_profile testuser
# grep clamav /etc/master.passwd | cut -f5 -d':'
limited_profile

Но данные ограничения не будут работать, для jail’ов. То есть, внутри jail’a можно сделать fork bomb (например, root пользователь внутри самого jail’a может не иметь ограничений) и тем самым “положить” весь сервер. Для ограничения процессов с учётом jail’ов, нужно применять rctl (доступно, начиная с FreeBSD 9):

# rctl -a jail:myJail:maxproc:deny=100

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

Домашняя страничка Andy
Записки молодого админа
Самостоятельная подготовка к Cisco CCNA
Самостоятельная подготовка к Cisco CCNP
Powered by Muff