PHP erlaubt mir nicht, `shell_exec('git pull origin master 2>&1');` auszuführen.

PHP erlaubt mir nicht, `shell_exec('git pull origin master 2>&1');` auszuführen.

Wenn ich das Skript ausführe <?php chdir('/var/www/html'); echo shell_exec('git pull origin master 2>&1'); ?>, erhalte ich die Fehlermeldung:

error: cannot open .git/FETCH_HEAD: Permission denied

Folgendes habe ich getan:

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

Wenn ich jetzt gehe, http://example.com/pull.phperhalte ich die Fehlermeldung cannot open .git/FETCH_HEAD: Permission denied.

Um meine Berechtigungen zu bestätigen, habe ich mich als root angemeldet, um Folgendes zu tun chown -R apache:apache /var/www. Ich habe dies auch in meinem/etc/passwd

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

Was mache ich falsch?

Antwort1

SELinux erlaubt dem Webserver nicht, in beliebige Verzeichnisse zu schreiben. Sie müssen explizit definieren, welche Verzeichnisse SELinux beschreibbar machen soll, indem Sie deren Standardkontext festlegen httpd_sys_rw_content_tund dann den Kontext aller vorhandenen Dateien festlegen. Beispiel:

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

Sie sollten jedoch mit ziemlicher Sicherheit nicht die gesamte Site für den Webserver beschreibbar machen und auch keine Webseite einrichten, die direkt aufruft git. Beides macht alle Sicherheitsvorteile, die Sie durch SELinux erhalten hätten, zunichte, und letzteres hat seine eigenen potenziellen Probleme.

verwandte Informationen