Как перезагрузить named из php скрипта?

verfaa

Профессор
Регистрация
29 Янв 2007
Сообщения
416
Реакции
49
Есть VPS с centos 7 с root доступом. Необходимо время от времени из php скрипта выполнять там команду:

Код:
systemctl reload named.service

Результат выполнения команды exec('whoami')
Код:
apache

Исходя из этого команда
Код:
exec('systemctl reload named.service', $arr);
не сработает? Может есть решение?

Может можно дать юзеру apache рут права? Как это сделать? И в плане безопасности, это безопасно?

На крайний случай может накидаете bash скрипт и подскажете как его запустить из php.
 
Последнее редактирование:
я бы сделал следующий костыль. поставить inotify. вызов скрипта создает в какой-то папке файл. директорию мониторить inotify и при появлении файла выполнять нужную команду и тереть файл
 
service bind9 restart )
 
А на Cron повесить не правильнее. Скрипт который что то проверяет потом делает с Cron как по мне более правильное решение.
 
Есть VPS с centos 7 с root доступом. Необходимо время от времени из php скрипта выполнять там команду:

Исходя из этого команда
Код:
exec('systemctl reload named.service', $arr);
не сработает? Может есть решение?

Сработает, но если данные идут от пользователя, лучше их экранировать например через escapeshellcmd(). Как вариант, можешь вообще юзать ssh из под php.
 
К сожалению, проблему я так и не решил. На данный момент пытаюсь создать .sh файл, дать ему права на выполнение и вызывать из php скрипта. Но и здесь возникли проблемы(

Итак, есть VPS (виртуализация OpenVZ) на котором установлен CentOS Linux release 7.2.1511 (Core)

Необходимо из PHP выполнить на нём bash скрипт с таким содержимым:
#!/bin/sh
cd /home
mkdir 456

В файл /etc/sudoers после строки
root ALL=(ALL) ALL
я добавил
apache ALL=(ALL) NOPASSWD: /home/bash/1.sh

В итоге в php скрипте строка exec('sudo /home/bash/1.sh'); не работает. В логах ничего интересного не нашёл.

Что интересно, если через putty войти на сервер под рутом и выполнить:
sudo /home/bash/1.sh
все работает, но если выполнить команду
sudo -u apache /home/bash/1.sh
она выдаёт:
mkdir: cannot create directory '123': Permission denied


Также заметил, что если в /home/bash/1.sh написать
#!/bin/sh
systemctl restart named

то команда sudo -u apache /home/bash/1.sh выдаёт:
Failed to restart named.service: The name org.freedesktop.PolicyKit1 was not provided by any .service files

Но при этом sudo /home/bash/1.sh всё нормально рестартит.

В чём может быть причина, я же добавил в /etc/sudoers: apache ALL=(ALL) NOPASSWD: /home/bash/1.sh
На файл /home/bash/1.sh стоят права 0755 Группа и владелец root [0]
 
Попробуйте следующим образом:
- добавляем в /etc/sudoers:
apache ALL=(ALL) NOPASSWD: systemctl reload named.service
- ремим в /etc/sudoers строку:
Defaults requiretty

- пробуем php exec("systemctl reload named.service");

---
 
Назад
Сверху