Яким чином перезавантажити named з php-скрипта stack overflow російською

Є VPS з centos 7 з root доступом. Потрібен час від часу з php скрипта виконувати там команду:

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

Виходячи з цього команда

не спрацює? Може є рішення?

Може можна дати користувачеві apache рут права? Як це зробити? І в плані безпеки, це безпечно?

На крайній випадок може накидати bash скрипт і підкажете як його запустити з php.

заданий 26 Березня '16 о 21:35

Відзначений як дублікат учасниками alexander barakin. zRrr. kff. D-side. PashaPash ♦ 31 Березня '16 о 8:37.

З таким запитанням задавали раніше і на нього вже отримано відповідь. Якщо представлені відповіді не є вичерпними, будь ласка, задайте нове питання.

Створюємо bash скрипт під рутом, скажімо він буде /usr/local/bin/namereload.sh:

Увага: краще вказати в скрипті повний шлях до systemctl, тому що швидше за все він лежить десь небудь в / sbin або / usr / sbin, а цих шляхів може не бути в PATH під час виконання php скрипта. Сам скрипт обов'язково повинен бути створений рутом і в каталозі доступному на запис тільки руту (і на читання всім), що б його вміст не міг поміняти непривілейований користувач.

Робимо скрипт здійсненним chmod a + x /usr/local/bin/namereload.sh

В / etc / sudoers додаємо рядок:

В php скрипт пишемо:

У такому варіанті все абсолютно безпечно. Єдина команда, яку може виконати під рутом користувач apache це перезапуск named.

Спасибі, напевно так і зроблю. Ще хотів запитати, а що якщо в файлі /etc/php-fpm.d/www.conf змінити user = apache group = apache на user = root group = root, так по ідеї php з під рута буде працювати і в функції exec ( ) можна буде виконувати будь-які команди? У плані безпеки це безпечно буде? (З огляду на що на VPS НЕ буде накікіх інших користувачів, крім мене) - sashaeee 27 Березня '16 о 16:19

@sashaeee давати рута php скриптів не варто. У якому-небудь з скриптів цілком може бути яка-небудь помилка, наприклад дозволяє отримати довільний файл. Якщо скрипт буде під рутом то він зможе отримати файл паролів. Так само, якщо папки де лежать скрипти не доступні на запис користувачеві апач, то впровадити будь-якої код через помилки в скриптах вкрай проблематично. А під рутом можна відразу через веб впроваджуватися в будь-яку частину системи - Mike 27 Березня '16 о 16:22

На жаль так і не вийшло мені запустити мій скрипт (Я створив файл /home/bash/namedreload.sh, зробив скрипт здійсненним, в кінець файлу etc / sudoers додав apache ALL = (ALL) NOPASSWD: # 47; home # 47; bash # 47; namedreload.sh але в скрипті exec ( 'sudo /home/bash/namedreload.sh'); не працює (При це якщо через putty увійти на сервер під рутом і виконати в командному рядку sudo /home/bash/namedreload.sh все працює (я для перевірки писав туди #! / bin / sh cd / home mkdir 123). Може бути підкажете в чому може бути справа? VPS я перезавантажувати. - sashaeee 27 Березня '16 о 18:50