如果我在命令行中回显HOME,我得到
/root
如果我输出
getenv('HOME')
在php中,我得到
/var/www
这会弄乱我的AWS (amazon web services)脚本,因为我有一个配置文件放在我的/root主目录中,其中包含我的凭据。我可以尝试不同的方式加载我的凭据,但我想知道为什么会发生这种情况。
问:为什么我的php $HOME环境变量不匹配我的bash shell $HOME?
A:因为您的web服务器运行在与您登录时不同的用户环境中。
例如: ps -eaf|grep http
root 856 1 0 Mar24 ? 00:04:10 /usr/sbin/httpd
apache 4960 856 0 Aug02 ? 00:00:02 /usr/sbin/httpd
apache 4961 856 0 Aug02 ? 00:00:00 /usr/sbin/httpd
apache 7411 856 0 Aug03 ? 00:00:00 /usr/sbin/httpd
apache 7413 856 0 Aug03 ? 00:00:00 /usr/sbin/httpd
apache 7416 856 0 Aug03 ? 00:00:00 /usr/sbin/httpd
apache 7420 856 0 Aug03 ? 00:00:00 /usr/sbin/httpd
<= In this case, the web server is run as daemon user "apache"
PS: 如果我在命令行中回显HOME,我得到
/root
这是坏的。一般情况下,您应该始终以普通用户身份登录,并"sudo"您需要运行的几个"特权"命令。
避免"root"登录是进入…的好习惯。尤其是当你开始专业管理一个网站时。
您和您的web服务器作为不同的用户运行。尝试执行echo shell_exec("whoami");
(或可执行文件的实际路径),您将看到它将打印类似www-data
的内容。这是一个标准的过程——即使你的代码被泄露了,web服务器运行的用户也没有权限读取任何其他数据。
这一点尤其重要,因为您是以root身份登录的。如果web服务器是在root用户下运行的,那么最小的漏洞都可能造成严重破坏。