Итак, возможно ли на практике, что эта программа пользовательского пространства может вызвать сбой ОС или сделать машину недоступной для прокси-сервера?
Ну, теоретически у вас должен бытьТрудно заставить ОС рухнуть.Однако существует много сообщений об ошибках, в которых говорится, что на практике это более возможно, чем хотелось бы.
С другой стороны, без особых мер предосторожности добиться отказа в обслуживании будет довольно легко.Представьте себе пользовательскую программу, которая ничего не делала, но заливала прокси пакетами;это само по себе может, если не достигнуть прямого отказа в обслуживании, а затем сделать все крайне затруднительно.
Со сборкой программист может делать в основном все, что он хочет (например, манипулировать указателем стека), и мне интересно, насколько ограничительным/ Надежный Linux в этом отношении.
Однако мы намного лучше этого.Если бы все, что вам нужно для повышения привилегий, это «беспорядок с указателем стека», то в качестве поля была бы полная шутка.Ядро предназначено для написания , чтобы ни одна программа, несмотря ни на что, не могла вызвать сбой ядра.Как уже отмечалось, он несовершенен.
Мораль этой истории в том, что вы действительно не хотите запускать ненадежный код на компьютере, который вам небезразличен.Обычным ответом здесь будет виртуальная машина с контрольной точкой: запустите виртуальную машину, запустите ненадежный код на виртуальной машине, а затем по завершении или по истечении времени ожидания уничтожьте виртуальную машину.Таким образом, постоянный ущерб невозможен.Что касается других злоупотреблений, ваш прокси-сервер не позволит им размещать грязные интернет-сервисы, и это хорошо.В зависимости от ситуации с вашей виртуальной машиной могут быть хорошие инструменты для ограничения потребления ресурсов ЦП и сети, что поможет исключить другие возможности отказа в обслуживании.
Вы упоминаете, что ЦП должен работать на полную мощность.Аппаратная виртуализация довольно хороша , и производительность должна разумно отражать то, что было бы в реальной системе.
Между прочим, ничего выше не относится к Linux;это должно относиться ко всем заслуживающим доверия операционным системам общего назначения.
edit: Если вы действительно настаиваете на запуске напрямую на оборудовании, то:
- загрузка с устройства только для чтения(livecd или жесткий диск с блокировкой записи)
- не имеют записываемых носителей в системе
- Добавить сервер отключения, который может принудительно перезагрузить машину по запросу прокси-сервера в случае отказа в обслуживании;для этого существуют коммерческие решения
Это, по сути, дает вам возможности решения VM, но на аппаратном уровне.