У меня есть сценарий 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
даже не содержат ввода пользователя, поэтому на данный момент я больше связанный с попыткой сделать выше, чем с созданием более безопасной файловой структуры/альтернативного способа сделать это.
То, что вы пытаетесь сделать, - это плохая идея, потому что вам нужно будет предоставить доступ к пользователю без пароля для пользователя Apache, что по существу похоже на то, что пользователь Apache равен root. Все, что потребуется для получения корневого доступа к вашему серверу, - это загрузить вредоносный PHP-скрипт и выполнить этот скрипт, выполняемый пользователем Apache. Вместо этого просто создайте файлы, которые вы пишете для записи пользователем Apache, выполнив:
chown -R www-data:www:data /var/www/html
И вместо этого вместо exec()
просто include
другой файл PHP в ваш основной скрипт.