Веб-сервер возвращает «Internal Server Error», при наличии ошибки «failed to setgid»
Симптомы
Веб-сервер возвращает ошибку «Internal Server Error», при этом в журнале веб-сервера видно, что PHP-скрипт завершается до отправки каких-либо заголовков.
В журнале «suexec" наблюдаются ошибки «failed to setgid».
Причины
Проблема связана с утилитой «suexec» и отсутствием у неё возможности использовать SUID (Set User ID) бит. Suexec (от «Set User ID Execute») - это механизм веб-сервера, который позволяет выполнять CGI скрипты от имени конкретного пользователя, а не от имени общего системного пользователя, такого как «www-data» или «apache».
Необходимо помнить, что неправильное использование этих битов может повлечь за собой серьезные уязвимости в безопасности системы. Всегда следует строго контролировать и ограничивать доступ обладателей привилегий «setuid/setgid» к соответствующим файлам и регулярно проверять уровень безопасности системы.
Решение
Установка для исполняемого файла /usr/sbin/suexec
атрибутов cap_setuid
и cap_setgid
с помощью setcap
.
Выполните команду:
setcap 'cap_setuid,cap_setgid+pe' /usr/sbin/suexec
После её выполнения перезапустите Apache:
Для Debian и Ubuntu
systemctl restart apache
Для CentOS, AlmaLinux, RockyLinux и CloudLinux
systemctl restart httpd
Рекомендуется сделать бэкап исходного исполняемого файла, чтобы в случае каких-либо проблем восстановить стандартную работу suexec.