当我运行脚本<?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
我究竟做错了什么?
SELinux 不允许 Web 服务器写入随机目录。
httpd_sys_rw_content_t
您需要通过将默认上下文设置为然后设置任何现有文件的上下文来明确定义 SELinux 应该允许哪些目录可写。例如:你几乎肯定不应该让整个网站都可以被 web 服务器写入,也不应该设置一个直接调用
git
. 这两者都完全否定了您从 SELinux 获得的任何安全优势,而后者也有其自身的一组潜在问题。