mod_ruid2 over mod_fcgid [closed]

Я только начал слышать о ruid2 и задавался вопросом, безопаснее ли он, чем fcgid? Я слышал, что это менее безопасно и более проблематично. Есть ли между ними разница?

Fastcgi - это то же самое, что и mod_fcgid

Я использую CPanel.

0
задан 26 June 2012 в 04:12
1 ответ

Это сравнение яблок, апельсинов и бананов.

Во-первых, FastCGI - это протокол для связи между постоянным приложением (или сервером приложений) и веб-сервером. Приложение с поддержкой FastCGI работает само по себе и получает запросы от веб-сервера, а затем возвращает ответы на веб-сервер для передачи клиенту. FastCGI был изобретен потому, что есть определенные накладные расходы при запуске новой программы, загрузке библиотек, чтении конфигурации и так далее. Большей части этих накладных расходов можно избежать, если запустить программу один раз и продолжать выполнять множество запросов. mod_fcgid - это реализация этого протокола. В данный момент, mod_fcgid имеет слабое место ( он предполагает, что один запущенный процесс FastCGI может обрабатывать только один запрос за раз и поэтому не работает с пулами соединений или диспетчерами процессов, такими как php-fpm или даже php-cgi используя PHP_FCGI_CHILDREN > 0 ), поэтому люди портировали старый mod_fastcgi с apache 1.x на 2.x.

Во-вторых, mod_ruid2 является заменой suexec / mod_suid2 , которая полностью ортогональна FastCGI. suexec - это специальная программа suid root, которую запускает apache и сообщает о необходимости изменения конкретному пользователю. Затем этот сценарий может запускать программу от имени этого пользователя. Обычно, как только это было сделано, он закрывается, поскольку больше не может переключиться на другого пользователя. mod_suid2 появился и позволил самому apache перейти от root к другому пользователю перед обслуживанием страницы. Это означало, что apache мог переключаться на пользователя, а затем открывать файлы и запускать программы CGI или даже запускать сценарии с использованием обработчика mod_ * (например, mod_php) в качестве конкретного пользователя, но поскольку сам apache теперь застрял в качестве этого пользователя, процесс apache имел для выхода и замены новым корневым процессом. mod_ruid2 утверждает, что использует модель «возможностей» POSIX, чтобы позволить apache переключаться с root на другого пользователя, сохраняя при этом возможность переключения обратно. Делая это, он может делать все, что может mod_suid2, но не должен выходить после каждого запроса. Как mod_suid2, так и mod_ruid2 требуют, чтобы apache использовал модель процесса mpm-prefork , поскольку каждый процесс может быть только одним пользователем. Все три из этих параметров могут использоваться для запуска сервера fastcgi, однако этот сервер зависнет от того, каким пользователем он был запущен (если способность mod_ruid2 изменять пользователей не наследуется, и в этом случае любой код позже может изменить его на root) .

С точки зрения безопасности обычно apache переключается на пользователя без полномочий root (например, www-data ) сразу после запуска. И для mod_suid2, и для mod_ruid2 требуется, чтобы apache работал с правами root до тех пор, пока он не обслужит запрос, что означает, что если в apache есть эксплойт, который может быть запущен до обслуживания запроса (например, во время обработки URL-адреса), злоумышленник может получить root-доступ к системе. В mod_ruid2, это может быть распространено на весь запрос, если злоумышленник может удерживать процесс apache до тех пор, пока он не переключится обратно на root после того, как запрос завершится, чтобы воспользоваться преимуществами root-доступа. Кроме того, обратите внимание, что любой код, выполняемый внутри apache (например, код PHP с использованием mod_php), имеет любые возможности, которые имеет сам apache. Следовательно, если apache может снова переключиться на root, то же самое может сделать любой PHP (или другой код), работающий в apache. suexec запускается только при запуске сценария и имеет длину только root, достаточную для того, чтобы решить, на какого пользователя переключиться и изменить этого пользователя. Однако он потенциально может позволить кому-то, кто использует apache без полномочий root, получить доступ к другому пользователю, запустив двоичный файл suexec.

Я ожидаю, что вы спрашиваете об этом, потому что хотите запускать сценарии PHP от имени других пользователей. По моему опыту, Типичный способ запустить размещенный PHP в качестве пользователя сценария - использовать suexec без FastCGI, чтобы каждый сценарий выполнялся как отдельный процесс. Некоторые люди комбинируют FastCGI и suexec , используя mod_fastcgi для запуска по крайней мере одного сервера FastCGI для каждого пользователя системы, которому разрешено запускать сценарии, а затем направляют запросы на сервер соответствующего пользователя. Для систем с большим количеством пользователей это может вызвать множество процессов PHP и занять много памяти, но все же может работать лучше, чем запуск и остановка одного процесса PHP для каждого отдельного запроса. Мне кажется, что mod_ruid2 намеревается достичь этого, используя mod_php, а не используя CGI, но я бы опасался, что это потенциально может нарушить многие предположения в mod_php. Сверху моей головы к постоянным соединениям с базой данных мог получить доступ не тот пользователь,

4
ответ дан 4 December 2019 в 11:57

Теги

Похожие вопросы