php не позволяет мне выполнить `shell_exec('git pull origin master 2>&1');`

php не позволяет мне выполнить `shell_exec('git pull origin master 2>&1');`

При запуске скрипта <?php chdir('/var/www/html'); echo shell_exec('git pull origin master 2>&1'); ?>появляется сообщение об ошибке:

error: cannot open .git/FETCH_HEAD: Permission denied

Вот что я сделал:

ssh [email protected]
pwd # shows that I'm already at /var/www as my home directory
ls .ssh/ # shows that I have id_rsa and id_rsa.pub, and id_rsa.pub is given to github
cd html
git pull origin master # everything downloads perfectly
echo "<?php chdir('/var/www/html'); echo shell_exec('git pull origin master 2>&1'); " > pull.php

Теперь, когда я захожу, http://example.com/pull.phpя получаю ошибку cannot open .git/FETCH_HEAD: Permission denied.

Чтобы подтвердить свои разрешения, я вошел в систему как root, чтобы сделать chown -R apache:apache /var/www. У меня также есть это в моем/etc/passwd

apache:x:48:48:Apache:/var/www:/bin/bash

Что я делаю не так?

решение1

SELinux не позволяет веб-серверу записывать в случайные каталоги. Вам необходимо явно определить, какие каталоги SELinux должен разрешить записывать, установив их контекст по умолчанию, httpd_sys_rw_content_tа затем установив контекст всех существующих файлов. Например:

semanage fcontext -a -t httpd_sys_rw_content_t "/var/www(/.*)?"
restorecon -rv /var/www

Однако вам почти наверняка не следует делать весь сайт доступным для записи веб-сервером или настраивать веб-страницу, которая напрямую вызывает git. Оба эти варианта полностью сводят на нет любые преимущества безопасности, которые вы могли бы получить от SELinux, а последний имеет свой собственный набор потенциальных проблем.

Связанный контент