Я пытаюсь выполнить сценарий .sh из PHP, однако он не выполняется.
Я проверил журналы ошибок и получаю ошибку «sh: Permission denied». Я проверил, под каким пользователем запускается php, и это делается под пользователем apache.
Я попытался сменить владельца .sh на пользователя apache, но результата нет.
Сначала я подумал, что это потому, что скрипт находится за пределами www / dir, однако даже когда я помещаю скрипт в ту же директорию, ошибка все равно появляется.
Есть ли какие-то решения, кроме добавления пользователя apache в список SUDOers?
Скрипт sh работает нормально, если я запускаю его из putty с помощью команды php filename.php.
bash
permissions
script
php
Робин Престо
источник
источник
x
) для файла? Вы указали интерпретатор сценария в строке Шебанга?chmod 775 yourscript.sh
. Это дастr-x
(чтение и выполнение) разрешения «другим» пользователям в этом файле.Ответы:
Попробуйте следующие предложения:
php -r "echo exec('whoami');"
r-x
разрешения для флагов:chmod 755 dir; chmod 755 file
+s
флаг (sudo) в файл (не рекомендуется):chmod u+s file
,safe_mode
.include_path
, например:php.ini
файл:include_path ".:/usr/local/lib/php:/your/dir"
.htaccess
файл:php_value include_path ".:/usr/local/lib/php:/your/dir"
/bin/sh
для вашего пользователя Apache (например, проверьте с помощью:)finger
.php.ini
не используете:disable_functions
дляexec
функцииselinux-utils
установили (система Linux с усиленной безопасностью), проверьтеgetenforce
/setenforce
настройте, как описано в ответе @Tonin .Исправление проблем:
php.ini
илиhttpd.conf
файл, не забудьте перезапустить веб-сервер,php.ini
все виды ошибок (display_error
,error_reporting
и т. Д.).источник
Такая проблема может зависеть от используемой вами ОС и от того, как она настроена. Некоторые дистрибутивы Linux (в основном основанные на RHEL, такие как CentOS или Fedora) поставляются с SELinux, активированным по умолчанию. Это можно проверить и временно изменить с помощью следующих команд:
Вы также можете получить более полное представление о текущей конфигурации с помощью:
Это изменение можно сделать постоянным, отредактировав
/etc/selinux/config
файл и установивSELINUX
переменную наpermissive
илиdisabled
.Но правильный способ решить эту проблему , если вы действительно находитесь в такой ситуации, это проверить
/var/log/audit/audit.log
файл журнала. Он будет содержать все события, связанные с правилами SELinux. Затем вы, вероятно, должны дать своему сценарию правильный контекст, т.е. быть авторизованным для запуска пользователем apache / php. Проверка контекста безопасности SELinux выполняется с помощьюls -Z
:Этот список Пользователь, Роль и Тип каждого файла / каталога. Здесь
httpd_sys_script_exec_t
тип дает файлам в каталоге cgi разрешение на выполнение httpd. Ваш сценарий оболочки, вероятно, должен иметь такой же тип.Вы также можете передать
audit.log
строки вaudit2allow
команду. Он выведет вам изменения, необходимые для того, чтобы сделать SELinux счастливым. Но обычно предлагаемые изменения необходимо вносить в саму политику SELinux, а это не то, что вам следует делать в вашем случае (тем не менее этот вывод может дать некоторую подсказку о том, что происходит).На следующей странице описывается похожая проблема и различные способы ее решения: http://sheltren.com/stop-disabling-selinux
источник
Так что я попал сюда после поиска аналогичной проблемы в Google. Я подумал, что комментарий о SELinux направил меня в правильном направлении.
В моем собственном случае я использовал собственный сценарий развертывания Git, который использует команду оболочки. Команда отлично работает на BASH, но в Git есть «отказано в разрешении» и «нет хранилища». Это было действительно странно, и я прошел через несколько исправлений, пока не наткнулся на этот ответ.
root@ls:~# /usr/sbin/setenforce Permissive
решил проблему для меня.источник
Моя ситуация немного отличается, но Google привел меня сюда, поэтому я решил поделиться ...
Мой сервер работает под управлением Debian стабильно, и попытка выполнить сценарий оболочки сработала один раз, затем разрешения автоматически изменились на 644, и была получена следующая попытка запустить сценарий
Permission denied
. Это оказалось проблемой для сервера самбы, и я до сих пор не заметил такой схемы.Разрешение QA Strange изменилось, когда было исправлено сохранение файла на разделе Samba из редактора Windows . Я не знал об
map archive = no
опционе даже после использования акций самбы в течение десятилетия.Что-то с использованием Notepad ++ на рабочем столе Windows может изменить права доступа к целевым файлам до 675 вместо 775, для которых настроен umask.
источник
Запуск корневых команд в PHP через Apache
У меня есть веб-приложение, которое должно выполнять команды оболочки в качестве пользователя root в функции PHP, и вы могли бы подумать, что это будет довольно просто ... но мне понадобилось несколько гуглов, чтобы получить все детали, поэтому вот мои полезные заметки по Это. Это в системе Linux с Apache, и мы будем использовать «sudo» в «shell_exec» для запуска команд.
Главное - отредактировать файл / etc / sudoers, и обычно вы можете (как root) использовать для этого команду «visudo».
Убедитесь, что apache может выполнять команды И не требует пароля:
Затем вам нужно закомментировать эту строку:
Если вы этого не сделаете, вы увидите эти ошибки в / var / log / secure: «извините, у вас должен быть tty для запуска sudo». Теперь вы готовы к работе, и код PHP прост:
$ results = shell_exec ('дата sudo');
источник