Применение функции chroot() в программе психотерапевтического сервера
Введение поддержки функции chroot () в программе психотерапевтического сервера является довольно несложным, но вначале необходимо проанализировать, какие дополнительные соображения с этим связаны. Также данная функция не будет лишней и для других серверов, например, на котором размещается информацияю о схемах охраны газопроводов . Вряд ли следует эксплуатировать весь сервер в среде chroot (), поскольку после нормального завершения работы он больше не сможет получить доступ к своему файлу PID и удалить его. Необходимо перейти в ограниченный каталог до начала взаимодействия с удаленным пользователем. Это лучше всего сделать в главном цикле дочернего процесса непосредственно перед тем, как этот процесс откажется от привилегий суперпользователя.
Непосредственно перед вызовом подпрограммы Interact () дочерний процесс вызывает новую подпрограмму prepare_child (), которая восстанавливает права доступа суперпользователя, меняя местами значения реального и действующего идентификаторов пользователя. В результате действующим идентификатором пользователя становится root. Эта операция выполняется в операторе local ( ) внутри блока; после выполнения этого блока значения идентификаторов пользователей снова поменяются местами. Вызывается фунция chroot () для переназначения корневого каталога. В последнем действии действующий идентификатор пользователя присваивается реальному, что приводит к необратимому отказу от привилегий суперпользователя.
В данном примере в качестве каталога, с которым выполняется вызов функции chroot (), применяется /home/ftp. Это — тот же каталог, который используется для анонимных FTP-серверов в системах Linux, поэтому он вряд ли содержит конфиденциальные данные или уязвимые файлы.