Рис. 2.1. Информация о ресурсах, выводимая командой ulimit –a
Аналогичная информация доступна для просмотра в виртуальных файлах limits, которые располагаются в нумерованных директориях, выделенных для каждого процесса в каталоге /proc (параграф о содержимом этого каталога следует ниже). В файле, имеющем вид таблицы, для каждого параметра задаются «жесткие» и «мягкие» лимиты. «Жесткие» лимиты задаются для всех пользователей, включая администратора. В рамках «жестких» пределов каждый пользователь может задавать для своих процессов «мягкие» ограничения, которые не должны выходить за обозначенные общими правилами границы.
Неограниченные права любого процесса позволяют обычному пользователю произвести атаку на захват ресурсов компьютерной системы. Так, команда
cat /dev/zero > /tmp/abcd
позволяет создать в доступном общем каталоге файл неограниченных размеров.
Наличие в командном файле бесконечного цикла
While 1
Mkdir 1
Cd 1
Touch 2
End
не только создает каталог бесконечной «глубины», но и путем создания множества пустых файлов истощает доступный ресурс индексных дескрипторов.
Десяток расточительных пользовательских процессов, порожденных командами типа
yes 12345 > /dev/null &,
существенно замедлят выполнение полезных программ и сервисов.
Порождение процессов в цикле (возможное число процессов, которые может создать пользователь, хоть и не бесконечно, но довольно велико) может на некоторое время заблокировать администратору отображение самой информации о процессах, поскольку утилита ps –ef будет непрерывно обновлять свои данные.
К счастью, с помощью вышеназванной команды ulimit есть возможность урезать аппетиты пользовательских программ как в отношении дискового пространства, так и в отношении количества создаваемых процессов. Лимит на максимальный размер файлов устанавливается командой
ulimit –f 100,
после чего создание файла размером более 100 блоков (1 блок = 1024 байта) станет невозможным. Ограничитель на число открываемых процессом файлов задается указанием значения при параметре -n. Для того чтобы ограничить максимальное число процессов, запущенных одним пользователем со всех терминалов, следует исполнить команду