Я только начал слышать о ruid2 и задавался вопросом, безопаснее ли он, чем fcgid? Я слышал, что это менее безопасно и более проблематично. Есть ли между ними разница?
Fastcgi то же самое, что и mod_fcgid
Я использую CPanel.
Они сравнивают яблоки, апельсины и бананы.
Первый, 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 после завершения запроса, чтобы воспользоваться корневым доступом. Кроме того, обратите внимание, что любой код, выполняемый внутри 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. Вне всяких сомнений, к постоянным соединениям с базой данных может получить доступ не тот пользователь, или кеши, такие как APC, могут в конечном итоге поделиться кодом между пользователями.