为什么我的php HOME环境变量不匹配我的linux bash shell中的HOME变量


Why does my php HOME environment variable not match the HOME variable in my linux bash shell?

如果我在命令行中回显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用户下运行的,那么最小的漏洞都可能造成严重破坏。