%3B%60%20%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%9B%E3%82%93.png)
スクリプトを実行すると<?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 から得られるセキュリティ上の利点を完全に無効にします。後者には独自の潜在的な問題があります。