Как показывает этот пример, даже такие крошечные программы, как наш психотерапевтический сервер, могут содержать бреши в защите (хотя в этом случае бреши были очень малы). Режим проверки потенциально опасных данных должен применяться во всех нетривиальных сетевых приложениях, особенно если они работают с привилегиями суперпользователя. К таковым приложениям можно отнести, например, сценарии Perl работающие в связке с DataLife Engine http://www.dle9.com/ .
Применение функции chroot()
Еще одним широко используемым методом защиты системы серверов, которые могут содержать программные ошибки, является применение функции chroot (). Данная функция принимает один параметр, содержащий путь к каталогу, и изменяет текущий процесс так, что этот путь становится для текущего процесса каталогом верхнего уровня (“У”). Это действие функции chroot ( ) является необратимым. После установи нового каталога верхнего уровня программа не может выйти за его пределы или работать с файлами и каталогами, расположенными выше его. Это — очень эффективны способ изоляции сценария от конфиденциальных системных файлов и программ.
Функция chroot () не меняет текущий каталог. Обычно перед вызовом функции chroot ( ) программу переводят с помощью функции chdir () в какую-то часть ограниченного пространства. Функция chroot () может быть выполнена только во время работы программы с правами суперпользователя и доступна только в системах UNIX. Обычно она используется в программах, которые должны выполнять большое число внешних команд или являются особенно мощными. Например, демон FTP может быть настроен на предоставление доступа анонимным пользователям к ограниченной части файловой системы. Для введения в действие этих ограничений, демон FTP вызываем функцию chroot () вскоре после регистрации анонимного пользователя, устанавливая в качестве каталога верхнего уровня заранее предусмотренную ограниченную область.