Перезапустите MySql Server из браузера, используя PHP / Shell Script в Linux

0

Я хочу перезапустить службу 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 он запрашивает пароль.

любая помощь будет оценена.

Спасибо

  • 0
    Это сообщение об ошибке из вашего скрипта CLI и не имеет ничего общего с PHP.
  • 0
    Имеет ли пользователь apache разрешение на выполнение rst.sh и любых функций, которые он вызывает?
Показать ещё 10 комментариев
Теги:
centos

3 ответа

0

Предоставление пользователю, выполняющему разрешения PHP/веб-сервера для перезапуска любой службы, как правило, является идеей кровати из соображений безопасности, даже не требующей разрешения на управление всеми системными демонами или полным sudo.


После того, как вы были предупреждены, вы должны убедиться, что пользователь, который запускает скрипт PHP, имеет разрешение на запуск команды перезапуска. Как уже было сказано, проблема, вероятно, мало связана с PHP. Есть несколько способов от вас перейти сюда:

  • Вы можете предоставить пользователю PHP разрешение sudo для запуска нужной команды, и ничего больше (как это сделать в другом месте) и вызывать команду непосредственно из PHP: sudo systemctl restart mysql.

  • Сохраните файл rst.sh, получите его от root, запишите его другим, кроме root, и установите бит SUID в этом файле. Таким образом, вы можете вызывать скрипт без sudo, но скрипт будет выполняться как root благодаря бит SUID.

# 1 чувствует себя безопаснее и проще.

0

В php попробуйте использовать эту команду

exec("/etc/init.d/mysql restart");

или нажмите эту команду на rst.sh

убедитесь, что chmod +x в файле rst.sh

  • 0
    все та же проблема вывода: string (55) «Перезапуск mysql (через systemctl): ошибка mysql.service!» rst.sh имеет разрешение на выполнение
  • 0
    попробуйте сделать это для направления на сервере, и проверьте, хорошо ли это, потому что вы не должны получать информацию не удалось
Показать ещё 2 комментария
0

Вы также можете попробовать с системой():

<?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.

  • 0
    Перезапуск mysql (через systemctl): сбой mysql.service! string (55) «Перезапуск mysql (через systemctl): сбой mysql.service!» Все еще получаю тот же результат.
  • 0
    Я не могу вставить пароль от брашера, так как это возможно?
Показать ещё 2 комментария

Ещё вопросы

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