Страницы

Ограничиваемый запуск программ в GNU/Linux

Как известно, работа программ в GNU/Linux основана на предоставлении им избыточных возможностей в оптимистичном ожидании, что они воспользуются ими исключительно во благо. Оперативная память может выдаваться авансом в надежде на то, что удастся вывезти за счёт сброса блоков данных на накопитель. В результате любая программа, пытающаяся выполнить невозможное для данной системы, способна вывести её из строя.

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

Написал небольшой скрипт lime (limited execution) который позволяет легковесно ограничить вызываемую команду. Вдобавок к ограничению по памяти, осуществляемом через cgroup, через chroot применено ограничение доступа к домашнему каталогу и /tmp.

~/project: lime wc ~/.ssh/id_rsa
wc: /home/user/.ssh/id_rsa: No such file or directory

~/project: lime 12G gcc bomb.c
gcc: fatal error: Killed signal terminated program cc1
compilation terminated.

При включённом ограничении на домашний каталог snap-пакеты не работают. И замеры показывают, что в отношении ресурсов легковесность таких ограничений тоже весьма относительна:

~/project: run() { /usr/bin/time -f '%M KiB %e sec' $1; }
~/project: run true
1920 KiB 0.00 sec
~/project: run lime / true
5980 KiB 0.07 sec
~/project: run lime true
12288 KiB 0.30 seс

Комментариев нет:

Отправить комментарий