У меня есть скрипт bash, который принимает параметр, вызывается в PHP через shell_exec (параметр script.sh). В принципе, моя цель - вызвать скрипт, принадлежащий другому пользователю, который не является apache.PHP Bash Script, вызывающий другой скрипт Bash
script.sh сценарий представляет собой файл, который содержит следующие элементы (сейчас есть некоторые обработки команд ошибок):
#/bin/bash
whoami>>whoami
echo $1 >> parameter
while read f; do
env>>envoutput
sudo -i -u archivescriptowner /path/to/archivescript.sh -command archive >> output
done < $1
В моей/и т.д./sudoers файла, у меня есть следующие:
apache ALL=(archivescriptowner) NOPASSWD: /bin/bash -c /path/to/archivescript.sh *
Когда я запустил этот скрипт, выполнив su -s /bin/bash
apache и передав параметр, он работает.
Когда я запускаю его через мою кнопку в PHP, archivescript.sh не выполняет
Whoami файл Apache написал ему
Файл параметров имеет право файл, написанный на него
окр показывает следующее
Term=xterm
LD_LIBRARY_PATH=/path/to/library
PATH=/sbin/:usr/sbin:/bin:/usr/bin
PWD=/var/www/html
LANG=C
SHLVL=4
=/bin/env
PWD выводит право, то есть, где мой сценарий прямо сейчас, он будет перемещен в будущем.
Выходной файл, когда он запускается нажатием кнопки, пуст.
Я в затруднении относительно того, почему это не работает. Любое понимание было бы полезно. Пожалуйста, дайте мне знать, если мне нужно предоставить дополнительную информацию.
Я думаю, что 'sudoers' вход должен просто сказать,'/путь/к/archivescript.sh', без '/ bin/bash -c' перед этим. – Barmar
Нет, это вряд ли имеет какое-либо отношение к проблеме. Здесь очень много здесь, что очень важно - верхушка моего списка вещей, чтобы проверить, является ли флаг -i 'причиной осложнений, и если веб-сервер работает с chroot. – symcbean
@Barmar Убирает/bin/bash -c запрашивает пароль при входе в систему как пользователь apache и не работает для php. При этом, если я удалю sudo -i, удаление/bin/bash -c работает для пользователя apache, но не с php. – user3481541