LINUX.ORG.RU

Не могу выполнить bash-скрипт на centos 7

 , , ,


1

2

Итак, есть 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: /home/bash/1.sh

И разрешил тем самым юзеру apache выполнять /home/bash/1.sh от имени любого другого юзера без пароля, в то время как команда sudo -u apache /home/bash/1.sh, данная в сеансе рута, запускает /home/bash/1.sh от имени юзера apache. Судя по "mkdir: cannot create directory '123': Permission denied", скрипт пытается создать каталог 123 где-то, где у apache нету прав на запись.

dexpl ★★★★★
()
Ответ на: комментарий от dexpl

тогда как правильно вызвать из PHP скрипта файл /home/bash/1.sh?

Попробовал прописать в php скрипте: exec('sudo -u root /home/bash/1.sh'); но это также не принесло нужного результата - директория не создалась.

manolls
() автор топика
Ответ на: комментарий от manolls

тогда как правильно вызвать из PHP скрипта файл /home/bash/1.sh?

Для начала в рутовом сеансе попробуй

su -s /bin/bash apache
sudo /home/bash/1.sh
, т. е. запустить сеанс от имени apache, а в нем запустить скрипт. Затем посмотри в error_log, сказал ли exec('sudo -u root /home/bash/1.sh') что-нибудь интересное. Ну и проверь, не в safe_mode ли php работает (exec() в safe_mode не выполняется).

dexpl ★★★★★
()
Ответ на: комментарий от manolls

В догонку — а что по задумке должен делать /home/bash/1.sh? Может проще дать apache'у права на запись туда, где нужно каталог создавать?

dexpl ★★★★★
()
Ответ на: комментарий от dexpl

Может проще дать apache'у права на запись туда, где нужно каталог создавать?

Это не то что бы проще, это единственно правильное решение.

Вопрос ТСу: почему не создаёшь каталог средствами PHP, а пытаешься вызвать шелл-скрипт?

ivn86
()

Во-первых: попробуй в /etc/sudoers написать:

apache ALL=(ALL,ALL) NOPASSWD: /home/bash/1.sh

Во-вторых:

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

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

Ты сам-то понял, что ты делаешь? Тебе потому и пишет Permission denied, что на /home права root.root 40775. А ты запускаешь «sudo -u apache» - то есть, пытаешься создать в /home каталог юзером (apache), у которого туда прав на запись нету.

«В итоге в php скрипте строка exec('sudo /home/bash/1.sh'); не работает.»

Ну и сделай: exec('sudo -u root -g root /home/bash/1.sh');

slamd64 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.