<?php echo `whoami`; ?>
Итак, это возвращает «root», и я не знаю, как это предотвратить. Я использую WebHost Manager / CPanel, который должен создавать несколько пользователей / vhosts и запускать Apache как этот пользователь / группу. Этого не происходит.
Если я войду в WHM и открою раздел конфигурации PHP и SuExec, мои настройки будут следующими:
Default PHP Version (.php files) 5
PHP 5 Handler cgi
PHP 4 Handler none
Apache suEXEC on
В чем дело? Как я могу заставить Apache работать от имени правильного пользователя, а не root?
Если вы хотите, чтобы каждый сайт работал как собственный пользователь, правильная настройка обработчика PHP 5 - «suPHP», а не «CGI». Как только вы измените это, вы увидите, что ваш whoami
сообщает об отдельных пользователях.
Обратите внимание, что вам может потребоваться запустить EasyApache и выбрать «Mod SuPHP» во время этого процесса, чтобы перекомпилировать Apache / PHP, чтобы эта опция была доступна первой. Это делается под:
Главная >> Программное обеспечение >> EasyApache (Apache Update) или в командной строке /scripts/easyapache
Сам Apache, скорее всего, работает от имени пользователя apache, но благодаря SuExec скрипты PHP, принадлежащие пользователю root, будут выполняться от имени пользователя root. Вот почему ваш whoami
команда возвращает пользователя root.
Если вы измените владельца файлов в корне вашего документа на «apache» или «www-data» (в зависимости от того, какой из них использует ваш сервер), то та же самая команда вернет нового владельца файла.
Вероятно, также стоит убедиться, что все ваши PHP-скрипты chmod 555
и каталоги не принадлежат тому же пользователю, что и файлы. Это позволит CGI выполнять сценарии, но будет означать, что если ошибка когда-либо будет обнаружена в одном из сценариев PHP, он не сможет изменить себя или какой-либо другой сценарий и не сможет создать новый. скрипт в любом из каталогов. Есть еще много вещей, которые злоумышленник может сделать, если обнаружит уязвимость в PHP-скрипте, но все, что вы можете сделать, чтобы усложнить им задачу, того стоит.