%3B%60%20auszuf%C3%BChren..png)
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.php
erhalte 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_t
und 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.