Я познакомился с увлекательным миром UNIX около года назад, но после, за неимением лучшего выражения, «столкновение отходов с быстро вращающимися лопастями» сегодня в результате моей работы; Я решил, что пришло время получить совет от профессионалов.
Мне просто было интересно, какие у меня были варианты защиты компьютера под управлением OS X 10.6 от вилочных бомб. Я спрашиваю об этом, потому что (будучи полной грудью, которой я являюсь) я каким-то образом предположил, что, поскольку система не уязвима для стандартной вилки-бомбы BASH, при запуске я получаю следующее:
"-bash: fork: Resource temporarily unavailable"
Что он также не будет уязвим для однострочника, написанного на C. Достаточно сказать, что я запустил его, все остановилось, и, очевидно, я ничего не мог сделать (кроме перезагрузки), потому что я не мог запустить любые новые процессы. Я посмотрел на ulimit, но на данный момент это все немного выше моей головы.
Если я установлю (более низкий?) Лимит процесса для каждого пользователя с помощью ulimit, смогу ли я тогда ssh войти в качестве другого пользователя и каким-то образом убить вилочную бомбу? Как видите, я новичок во всем этом - и, думая об этом, я не уверен, как бы я на самом деле убил это существо.
В любом случае, я хочу знать, как я могу предотвратить повторное появление вилки-бомбы (при запуске той же разветвленной программы на C), я знаю, что это может быть немного излишним для персональной машины, но если я могу сделать систему немного меньше уязвим для того, чтобы пользователь мог вызвать сбой, я бы хотел это сделать. Как минимум для моего душевного спокойствия.
Подводя итог (извините за мою долгую бессвязную бессвязную болтовню, здесь уже поздно, и, как вы, вероятно, можете сказать - я мало публикую в Интернете. Честно говоря, я больше скрываюсь; иначе, пожалуйста, не ешь меня живьем, если я задал глупый вопрос! :-p
Как я могу защитить свой Mac от взрыва бомбы из оболочки? (используя ulimit, если это лучший способ сделать это)
Если ulimit - это как это сделать, как мне сделать так, чтобы изменение ulimit придерживалось? Если я не ошибаюсь, он сбрасывается по умолчанию при перезагрузке.
После выполнения двух вышеуказанных пунктов, как я могу убить работающую вилку-бомбу с именем, скажем, DO_NOT_EXECUTE, которая размножается повсюду и заполнила все слоты моих процессов? В идеале я бы хотел, чтобы возникали те же ошибки, что и в BASH fb, когда я запускаю исполняемый файл C и позволяю мне просто CTRL-C для выхода, но я воспользуюсь любым методом, который смогу найти, который позволяет мне восстановить без перезагрузки.
Спасибо всем за терпение (и любую помощь, которую вы можете мне оказать),
oms
Взгляни на sysctl
чтобы отрегулировать пределы ядра. По какой-то причине на странице руководства MacOS X не упоминается kern.maxprocperuid
, так как упомянутые годы назад в Mac OS X Подсказки.
Что касается быстрого избавления от множества процессов, я бы использовал killall
.
полностью покрывает эту тему, включая внесение необходимых изменений. Я бы подумал, что вы будете защищены от этого, основываясь на разнице между пределами, показанными на
$ sysctl kern.maxproc kern.maxprocperuid
конечно, если ты были пользователем, который запустил вилочную бомбу, не повезло!