在 Amazon Ec2 上为 apache 用户设置路径变量
Posted
技术标签:
【中文标题】在 Amazon Ec2 上为 apache 用户设置路径变量【英文标题】:Setting path variable for apache user on Amazon Ec2 【发布时间】:2014-02-01 04:22:08 【问题描述】:我已经做了好几个小时了,但我没有得到任何结果。
我无法将 /usr/local/bin
添加到 apache 用户 PATH
变量中。用户没有.profile
,我不能su
给用户,我不能使用exec
从php导出到PATH
并添加
SetEnv PATH /usr/local/bin
到http.conf
或.htaccess
文件都没有区别。我找不到 envvars
文件来更改它,但我怀疑还有其他问题。
我已经重新启动了 apache,实际上是我的服务器。
有什么帮助吗?
【问题讨论】:
请说明您希望观察的预期行为以及您改为观察的行为。那么,为什么你认为/usr/local/bin
不是$PATH
的一部分,你为什么要添加它?
它不是路径的一部分,因为当我从 php 中回显它时,它显示 /sbin:/bin:/usr/sbin:/usr/bin 我想将它添加到它以执行命令使用执行。我希望看到任何形式的变化,我可以从那里开始。
另外,普通用户的路径不同:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/opt /aws/bin:/home/ec2-user/bin 所以它是特定于 apache 用户的。我需要能够调用使用其他应用程序的应用程序,将源代码编辑为直接指向每个应用程序是不可行的。
【参考方案1】:
最终遵循 Alfe 在他的回答中提出的建议,除了我添加到 /etc/sysconfig/httpd
的 /etc/init.d/httpd
文件(更新时可以轻松覆盖)之外:
export PATH=$PATH:+$PATH:/usr/local/bin
【讨论】:
【参考方案2】:查看 /etc/passwd
以查看 apache 用户拥有哪个登录 shell(在 EC2 Ubuntu 实例上,它应该是 /bin/sh
,这是指向 /bin/dash
的链接)。然后查看该 shell 的手册页,找出登录时读取的配置文件。 (对于/bin/dash
,这将是用户主目录中的.login
。)在那些您应该能够根据需要扩展您的$PATH
。
编辑:
由于您似乎没有该用户的登录 shell:查看启动系统服务的 /etc/init.d/*
脚本。阿帕奇将是其中之一。它们以root
启动,并且可以更改当前用户(例如更改为 apache 用户)。在那里,您可能可以根据需要调整 PATH。
但是,修补这些脚本并不被视为典型配置。更新可能会覆盖您在那里修补的内容。
【讨论】:
Apache 的 /etc/passwd 指向 /sbin/nologin,所以它没有外壳(我不认为,我不是专业的 unix 人)。我找了那条路,什么也找不到 我明白了。可能只是切换当前用户,apache进程才刚刚启动而没有正确登录。在这种情况下,以 apache 用户身份运行的进程是万恶之源,必须在生成新子进程之前或生成新子进程时更改$PATH
本身。
我在回答中添加了另一种方法。
我好像没有 apache,我有 httpd。但是,其中没有关于路径或更改用户的任何内容
不,但你可以在那里更改它,因为它被子程序继承。以上是关于在 Amazon Ec2 上为 apache 用户设置路径变量的主要内容,如果未能解决你的问题,请参考以下文章
AWS Amazon Linux EC2 实例:apache 用户权限被拒绝写入目录
使用NGINX在端口80上为使用虚拟主机的Amazon EC2上托管的域的node.js应用程序提供HTTP流量
在 Amazon EC2 实例上安装 php 和 apache
在 Amazon Elastic Beanstalk(Apache、EC2)上安装 Mod_security