在 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给用户,我不能使用execphp导出到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

如何在 Amazon EC2 上配置 PHP + Apache?

Amazon EC2 EBS 自动备份单行手动工作,但不是来自 cron