Я хочу перезапустить службу mysql нажатием кнопки, используя php.
Я разработал приложение, использующее php, до сих пор я пытался подходить к вещам и сталкивался с проблемой
<?php
if ($_GET['run']) {
# This code will run if ?run=true is set.
var_dump(exec("sh rst.sh"));
exit;
}
?>
<!-- This link will add ?run=true to your URL, myfilename.php?run=true -->
<a href="?run=true">Click Me!</a>
Я получаю:
string(55) "Restarting mysql (via systemctl): mysql.service failed!"
rest.sh:
#!/bin/bash
/etc/init.d/mysql restart
при выполнении вышеуказанного файла из строки commnad он запрашивает пароль.
любая помощь будет оценена.
Спасибо
Предоставление пользователю, выполняющему разрешения PHP/веб-сервера для перезапуска любой службы, как правило, является идеей кровати из соображений безопасности, даже не требующей разрешения на управление всеми системными демонами или полным sudo.
После того, как вы были предупреждены, вы должны убедиться, что пользователь, который запускает скрипт PHP, имеет разрешение на запуск команды перезапуска. Как уже было сказано, проблема, вероятно, мало связана с PHP. Есть несколько способов от вас перейти сюда:
Вы можете предоставить пользователю PHP разрешение sudo для запуска нужной команды, и ничего больше (как это сделать в другом месте) и вызывать команду непосредственно из PHP: sudo systemctl restart mysql
.
Сохраните файл rst.sh
, получите его от root, запишите его другим, кроме root, и установите бит SUID в этом файле. Таким образом, вы можете вызывать скрипт без sudo, но скрипт будет выполняться как root благодаря бит SUID.
# 1 чувствует себя безопаснее и проще.
В php попробуйте использовать эту команду
exec("/etc/init.d/mysql restart");
или нажмите эту команду на rst.sh
убедитесь, что chmod +x в файле rst.sh
Вы также можете попробовать с системой():
<?php
if ($_GET['run']) {
# This code will run if ?run=true is set.
var_dump(system("sh rst.sh"));
exit;
}
?>
<!-- This link will add ?run=true to your URL, myfilename.php?run=true -->
<a href="?run=true">Click Me!</a>
Хотя ваша проблема исходит из сценария, который вы используете (rst.sh). Проверьте команды в скрипте, вам, вероятно, потребуется системный вызов с sudo.
rst.sh
и любых функций, которые он вызывает?