Apache. Документация на русском


Разделы:   1      2      3    4    5    6    7    8    9    10    11    12    13    14    15    16  

Раздел 2. Использование HTTP-сервера Apache

Пункты:   6    7    8    9    10    11    12    13    14    15    16    17    18    19    20    21    22    23    24      25      26  

 <         > 
  RU            EN  

Пункт 25. Поддержка suEXEC

Функция suEXEC предоставляет пользователям HTTP-сервера Apache возможность запускать программы CGI и SSI под идентификаторами пользователей, отличными от идентификаторов пользователя вызывающего веб-сервера. Обычно, когда программа CGI или SSI выполняется, она запускается от имени того же пользователя, который запускает веб-сервер.

При правильном использовании эта функция может значительно снизить риски безопасности, связанные с предоставлением пользователям возможности разрабатывать и запускать частные программы CGI или SSI. Однако, если suEXEC настроен неправильно, это может вызвать множество проблем и, возможно, создать новые дыры в безопасности вашего компьютера. Если вы не знакомы с управлением корневыми программами setuid и связанными с ними проблемами безопасности, мы настоятельно рекомендуем вам не использовать suEXEC.

Прежде чем мы начнем

Прежде чем с головой погрузиться в этот документ, вы должны знать, что в отношении вас и среды, в которой вы будете использовать suexec, делаются определенные предположения.

Во-первых, предполагается, что вы используете производную от UNIX операционную систему, поддерживающую операции setuid и setgid . Все примеры команд приведены в связи с этим. Другие платформы, если они поддерживают suEXEC, могут отличаться по своей конфигурации.

Во-вторых, предполагается, что вы знакомы с некоторыми основными понятиями безопасности вашего компьютера и его администрирования. Это включает в себя понимание операций setuid/setgid и различных эффектов, которые они могут оказывать на вашу систему и ее уровень безопасности.

В-третьих, предполагается, что вы используете немодифицированную версию кода suEXEC. Весь код для suEXEC был тщательно изучен и протестирован разработчиками, а также многочисленными бета-тестерами. Были приняты все меры предосторожности для обеспечения простой, но надежной базы кода. Изменение этого кода может привести к непредвиденным проблемам и новым угрозам безопасности. Настоятельно рекомендуется не изменять код suEXEC, если вы хорошо не разбираетесь в особенностях программирования безопасности и готовы поделиться своей работой с командой разработчиков HTTP-сервера Apache для рассмотрения .

В-четвертых, и последнее, это было решение группы разработчиков Apache HTTP Server НЕ делать suEXEC частью установки Apache httpd по умолчанию. С этой целью конфигурация suEXEC требует от администратора особого внимания к деталям. После должного рассмотрения различных настроек suEXEC администратор может установить suEXEC обычными методами установки. Значения этих параметров должны быть тщательно определены и указаны администратором для надлежащего обеспечения безопасности системы при использовании функций suEXEC. Именно с помощью этого подробного процесса мы надеемся ограничить установку suEXEC только теми, кто достаточно осторожен и решителен, чтобы использовать его.

Все еще с нами? Да? Хороший. Давайте двигаться дальше!

Модель безопасности suEXEC

Прежде чем мы начнем настройку и установку suEXEC, мы сначала обсудим модель безопасности, которую вы собираетесь внедрить. Таким образом вы сможете лучше понять, что именно происходит внутри suEXEC и какие меры предосторожности принимаются для обеспечения безопасности вашей системы.

suEXEC основан на программе-оболочке setuid, которая вызывается основным HTTP-сервером Apache. Эта оболочка вызывается при выполнении HTTP-запроса для программы CGI или SSI, которую администратор назначил для запуска с идентификатором пользователя, отличным от идентификатора главного сервера. Когда делается такой запрос, Apache httpd предоставляет оболочке suEXEC имя программы, а также идентификаторы пользователя и группы, под которыми должна выполняться программа.

Затем оболочка использует следующий процесс для определения успеха или неудачи — если какое-либо из этих условий не выполняется, программа регистрирует ошибку и завершает работу с ошибкой, в противном случае она продолжит работу:

  1. Является ли пользователь, выполняющий эту оболочку, действительным пользователем этой системы?

    Это делается для того, чтобы пользователь, выполняющий оболочку, действительно был пользователем системы.

  2. Была ли оболочка вызвана с правильным количеством аргументов?

    Оболочка будет выполняться только в том случае, если ей задано правильное количество аргументов. Правильный формат аргумента известен HTTP-серверу Apache. Если оболочка не получает нужное количество аргументов, она либо взломана, либо что-то не так с частью suEXEC вашего бинарного файла Apache httpd.

  3. Разрешено ли этому действительному пользователю запускать оболочку?

    Является ли этот пользователь пользователем, которому разрешено запускать эту оболочку? Только один пользователь (пользователь Apache) может выполнять эту программу.

  4. Имеет ли целевая программа CGI или SSI небезопасную иерархическую ссылку?

    Содержит ли путь к целевой программе CGI или SSI начальный символ «/» или обратную ссылку «..»? Это не разрешено; целевая программа CGI/SSI должна находиться в корне документа suEXEC (см. ниже). --with-suexec-docroot=DIR

  5. Допустимо ли имя целевого пользователя?

    Целевой пользователь существует?

  6. Является ли имя целевой группы действительным?

    Существует ли целевая группа?

  7. Является ли целевой пользователь НЕ суперпользователем?

    suEXEC не позволяет выполнять программы CGI/SSI. root

  8. Целевой идентификатор пользователя ВЫШЕ минимального идентификационного номера?

    Минимальный идентификационный номер пользователя указывается во время настройки. Это позволяет вам установить наименьший возможный идентификатор пользователя, которому будет разрешено выполнять программы CGI/SSI. Это полезно для блокировки «системных» учетных записей.

  9. Является ли целевая группа НЕ группой суперпользователей?

    В настоящее время suEXEC не позволяет группе выполнять программы CGI/SSI. root

  10. Идентификатор целевой группы ВЫШЕ минимального идентификационного номера?

    Минимальный идентификационный номер группы указывается во время настройки. Это позволяет установить наименьший возможный идентификатор группы, которому будет разрешено выполнять программы CGI/SSI. Это полезно для блокировки «системных» групп.

  11. Может ли оболочка успешно стать целевым пользователем и группой?

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

  12. Можем ли мы изменить каталог на тот, в котором находится целевая программа CGI/SSI?

    Если он не существует, он не может содержать файлы. Если мы не можем сменить каталог на него, то он может и не существовать.

  13. Находится ли каталог в веб-пространстве httpd?

    Если запрос относится к обычной части сервера, находится ли запрошенный каталог в корне документа suEXEC? Если запрос для UserDir , настроен ли запрошенный каталог внутри каталога как каталог пользователя suEXEC (см. параметры конфигурации suEXEC)?

  14. Является ли каталог НЕ доступным для записи кем-либо еще?

    Мы не хотим открывать каталог другим; только пользователь-владелец может изменять содержимое этих каталогов.

  15. Существует ли целевая программа CGI/SSI?

    Если он не существует, он не может быть очень хорошо выполнен.

  16. Является ли целевая программа CGI/SSI НЕ доступной для записи кем-либо еще?

    Мы не хотим давать никому, кроме владельца, возможность изменять программу CGI/SSI.

  17. Является ли целевая программа CGI/SSI НЕ setuid или setgid?

    Мы не хотим выполнять программы, которые затем снова изменят наш UID/GID.

  18. Целевой пользователь/группа совпадает с пользователем/группой программы?

    Является ли пользователь владельцем файла?

  19. Можем ли мы успешно очистить технологическую среду, чтобы обеспечить безопасность операций?

    suEXEC очищает среду процесса, устанавливая ПУТЬ безопасного выполнения (определяемый во время настройки), а также пропуская только те переменные, имена которых указаны в списке безопасной среды (также созданном во время настройки).

  20. Можем ли мы успешно стать целевой программой CGI/SSI и выполнить ее?

    Здесь заканчивается suEXEC и начинается целевая программа CGI/SSI.

Это стандартная операция модели безопасности оболочки suEXEC. Он несколько строг и может налагать новые ограничения и рекомендации для разработки CGI/SSI, но он был тщательно разработан шаг за шагом с учетом безопасности.

Для получения дополнительной информации о том, как эта модель безопасности может ограничить ваши возможности в отношении конфигурации сервера, а также о том, каких угроз безопасности можно избежать с помощью правильной настройки suEXEC, см. раздел «Остерегайтесь Бармаглота» этого документа.

Настройка и установка suEXEC

Вот где мы начинаем веселье.

параметры конфигурации suEXEC

--enable-suexec
Этот параметр включает функцию suEXEC, которая никогда не устанавливается и не активируется по умолчанию. --with-suexec-xxxxx Должна быть предоставлена по крайней мере одна опция вместе с --enable-suexec возможностью разрешить APACI принять ваш запрос на использование функции suEXEC.
--with-suexec-bin=PATH
Путь к suexec двоичному файлу должен быть жестко запрограммирован на сервере из соображений безопасности. Используйте этот параметр, чтобы переопределить путь по умолчанию. например --with-suexec-bin=/usr/sbin/suexec
--with-suexec-caller=UID
Имя пользователя, под которым обычно запускается httpd. Это единственный пользователь, которому разрешено запускать оболочку suEXEC.
--with-suexec-userdir=DIR
Укажите подкаталог в домашних каталогах пользователей, где должен быть разрешен доступ suEXEC. Все исполняемые файлы в этом каталоге будут выполняться пользователем suEXEC, поэтому они должны быть «безопасными» программами. Если вы используете «простую» UserDir директиву (то есть без «*»), для нее должно быть установлено то же значение. suEXEC не будет работать должным образом в случаях, когда UserDir директива указывает на местоположение, которое не совпадает с домашним каталогом пользователя, указанным в файле passwd . Значение по умолчанию: " public_html ".
Если у вас есть виртуальные хосты, каждый из которых отличается от другого UserDir , вам нужно определить, чтобы все они находились в одном родительском каталоге; затем назовите этот родительский каталог здесь. Если это не определено должным образом, CGI-запросы "~userdir" не будут работать!
--with-suexec-docroot=DIR
Определить как набор DocumentRoot для httpd. Это будет единственная иерархия (помимо UserDir s), которую можно использовать для поведения suEXEC. Каталог по умолчанию — это --datadir значение с суффиксом " /htdocs ", например , если вы конфигурируете с " --datadir=/home/apache ", каталог " /home/apache/htdocs " используется в качестве корня документа для оболочки suEXEC.
--with-suexec-uidmin=UID
Определите это как наименьший UID, разрешенный для целевого пользователя для suEXEC. Для большинства систем обычно используются значения 500 или 100. Значение по умолчанию — 100.
--with-suexec-gidmin=GID
Определите это как наименьший GID, который может быть целевой группой для suEXEC. Для большинства систем обычно используется значение 100, поэтому оно используется как значение по умолчанию.
--with-suexec-logfile=FILE
Это определяет имя файла, в котором регистрируются все транзакции и ошибки suEXEC (полезно для целей аудита и отладки). По умолчанию файл журнала называется " suexec_log " и находится в вашем стандартном каталоге файлов журнала ( --logfiledir ).
--with-suexec-safepath=PATH
Определите безопасную среду PATH для передачи исполняемым файлам CGI. Значение по умолчанию: " /usr/local/bin:/usr/bin:/bin ".

Компиляция и установка оболочки suEXEC

Если вы включили функцию suEXEC с --enable-suexec опцией, suexec двоичный файл (вместе с самим httpd) создается автоматически, если вы выполняете make команду.

После сборки всех компонентов вы можете выполнить команду make install для их установки. Двоичный образ suexec устанавливается в каталог, указанный параметром --sbindir . Расположение по умолчанию — «/usr/local/apache2/bin/suexec».

Обратите внимание, что на этапе установки вам потребуются привилегии root . Чтобы оболочка могла установить идентификатор пользователя, она должна быть установлена как владелец и должна иметь установленный бит выполнения setuserid для файловых режимов. root

Установка параноидальных разрешений

Хотя оболочка suEXEC проверит, что ее вызывающий пользователь является правильным пользователем, как указано в параметре --with-suexec-caller configure , всегда существует вероятность того, что системный или библиотечный вызов, который suEXEC использует перед этой проверкой, может быть использован в вашей системе. Чтобы противостоять этому и потому, что это в целом является передовой практикой, вы должны использовать разрешения файловой системы, чтобы гарантировать, что работает только группа httpd, которая может выполнять suEXEC.

Если, например, ваш веб-сервер настроен на работу как:

 Пользователь www
Групповая веб-группа 

и suexec установлен в «/usr/local/apache2/bin/suexec», вы должны запустить:

chgrp webgroup /usr/local/apache2/bin/suexec
chmod 4750 /usr/local/apache2/bin/suexec

Это гарантирует, что работает только группа httpd, которая может даже выполнить оболочку suEXEC.

Включение и отключение suEXEC

При запуске httpd ищет файл suexec в каталоге, определенном параметром --sbindir (по умолчанию «/usr/local/apache/sbin/suexec»). Если httpd обнаружит правильно сконфигурированную оболочку suEXEC, в журнал ошибок будет выведено следующее сообщение:

[notice] suEXEC mechanism enabled (wrapper: /path/to/suexec)

Если вы не видите это сообщение при запуске сервера, сервер, скорее всего, не находит программу-оболочку там, где ожидает, или исполняемый файл не установлен setuid root .

Если вы хотите включить механизм suEXEC в первый раз, а HTTP-сервер Apache уже запущен, вы должны убить и перезапустить httpd. Перезапуска простым сигналом HUP или USR1 будет недостаточно.

Если вы хотите отключить suEXEC, вы должны убить и перезапустить httpd после удаления файла suexec .

Использование suEXEC

Запросы для программ CGI будут вызывать оболочку suEXEC, только если они предназначены для виртуального хоста, содержащего директиву SuexecUserGroup , или если они обрабатываются mod_userdir .

Виртуальные хосты:
один из способов использования оболочки suEXEC — через SuexecUserGroup директиву в VirtualHost определениях. Установив для этой директивы значения, отличные от идентификатора пользователя основного сервера, все запросы на ресурсы CGI будут выполняться как Пользователь и Группа , определенные для этого <VirtualHost> . Если эта директива не указана для a, <VirtualHost> то предполагается идентификатор пользователя основного сервера.

Пользовательские каталоги:
запросы, которые обрабатываются, mod_userdir будут вызывать оболочку suEXEC для выполнения программ CGI под идентификатором пользователя запрошенного пользовательского каталога. Единственным требованием, необходимым для работы этой функции, является разрешение выполнения CGI для пользователя и соответствие сценария проверкам безопасности, указанным выше. См. также --with-suexec-userdir параметр времени компиляции.

Отладка suEXEC

Оболочка suEXEC будет записывать информацию журнала в файл, определенный с помощью --with-suexec-logfile параметра, как указано выше. Если вы считаете, что правильно настроили и установили оболочку, просмотрите этот журнал и журнал ошибок для сервера, чтобы увидеть, где вы, возможно, сбились с пути.

Остерегайтесь бармаглота: предупреждения и примеры

ПРИМЕЧАНИЕ! Этот раздел может быть неполным. Последнюю редакцию этого раздела документации см. в версии онлайн-документации.

Есть несколько интересных моментов, касающихся оболочки, которые могут вызвать ограничения при настройке сервера. Пожалуйста, ознакомьтесь с ними, прежде чем отправлять какие-либо «ошибки» относительно suEXEC.

  • Достопримечательности suEXEC
  • Ограничения иерархии

    По соображениям безопасности и эффективности все запросы suEXEC должны оставаться либо в корневом каталоге документов верхнего уровня для запросов виртуального хоста, либо в одном корневом каталоге личных документов верхнего уровня для запросов userdir. Например, если у вас настроено четыре виртуальных хоста, вам потребуется структурировать все корни документов ваших виртуальных хостов из одной основной иерархии документов httpd, чтобы воспользоваться преимуществами suEXEC для виртуальных хостов. (Пример ожидается.)

  • переменная среды PATH suEXEC

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

  • Изменение кода suEXEC

    Опять же, это может вызвать большие проблемы , если вы попробуете это, не зная, что делаете. Держитесь подальше от него, если это вообще возможно.



 <         > 

Пункты:   6    7    8    9    10    11    12    13    14    15    16    17    18    19    20    21    22    23    24      25      26  

Рейтинг@Mail.ru