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 は、Web サーバーがランダムなディレクトリに書き込むことを許可しません。SELinux が書き込みを許可するディレクトリを明示的に定義するには、ディレクトリのデフォルト コンテキストを設定しhttpd_sys_rw_content_t、次に既存のファイルのコンテキストを設定する必要があります。例:

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

ただし、サイト全体を Web サーバーから書き込み可能にしたり、 を直接呼び出す Web ページを設定したりすることはほぼ確実に避けてください。gitこれらは両方とも、SELinux から得られるセキュリティ上の利点を完全に無効にします。後者には独自の潜在的な問題があります。

関連情報