PHP exec («sudo…») не работает при вызове через Интернет?

1

У меня есть сценарий write_get.php который я бы хотел выполнить через пользователей, удаленно загружающих веб-страницу. Этот скрипт, в свою очередь, запускается

exec("sudo php save_file.php ".$arg1)

для записи некоторых файлов, требующих sudo разрешений. Это отлично работает, когда я запускаю write_get.php из командной строки на моем веб-сервере в качестве не привилегированного пользователя, но он не работает нормально, когда я вызываю скрипт, загружая его в веб-браузере. Веб-браузер представляет одно и то же сообщение, заставляя его выглядеть так, как будто ошибки нет, но файл, созданный save_file.php, никогда не создается. Все остальное, что должно произойти (другое создание временного файла, которое не требует sudo + вставка базы данных) отлично работает, но все остальное находится в write_get а не в sudo-requiring save_file.

Я предполагаю, что сервер каким-то образом блокирует этот вызов exec("sudo... когда он удаленно? Или если нет, то что здесь происходит? Самое главное, как я могу обойти это?


ps Я понимаю, что здесь, вероятно, важны проблемы с безопасностью, но, пожалуйста, знайте, что на этом сервере нет никаких конфиденциальных данных/чего-либо, и что файлы, созданные в скрипте, sudo-requiring от sudo-requiring даже не содержат ввода пользователя, поэтому на данный момент я больше связанный с попыткой сделать выше, чем с созданием более безопасной файловой структуры/альтернативного способа сделать это.

  • 2
    Пользователь, которого php и / или apache использует в списке sudoers и настроен ли он для выполнения без пароля?
  • 1
    проще поменять права доступа к файлу?
Показать ещё 9 комментариев
Теги:
permissions
apache2

1 ответ

0
Лучший ответ

То, что вы пытаетесь сделать, - это плохая идея, потому что вам нужно будет предоставить доступ к пользователю без пароля для пользователя Apache, что по существу похоже на то, что пользователь Apache равен root. Все, что потребуется для получения корневого доступа к вашему серверу, - это загрузить вредоносный PHP-скрипт и выполнить этот скрипт, выполняемый пользователем Apache. Вместо этого просто создайте файлы, которые вы пишете для записи пользователем Apache, выполнив:

chown -R www-data:www:data /var/www/html

И вместо этого вместо exec() просто include другой файл PHP в ваш основной скрипт.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню