在apache envvars中获取系统范围的环境变量是否安全?

时间:2017-07-03 10:14:43

标签: php linux apache environment-variables

我正在尝试在Linux上设置一个环境变量,它应该在shell和Apache中都可用。

我将变量添加到/etc/environment,因此文件看起来像这样:

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
MY_VAR="foo"

要在apache中使用MY_VAR,这是我在/etc/apache2/envvars中添加的内容:

. /etc/environment
export MY_VAR=$MY_VAR

经过大量的研究,这是我能够在整个系统范围内获得相同环境变量的唯一方法,而不必在Apache中声明它们两次。

此方法是否存在安全问题?

2 个答案:

答案 0 :(得分:0)

我能够解决自己的问题。我从MY_VAR删除了/etc/environment并创建了一个单独的文件/etc/profile.d/apache.sh,如下所示:

export MY_VAR="foo"

然后我在/etc/apache2/envvars中采购了这个文件,如下所示:

. /etc/profile.d/apache.sh
  • apache.sh中设置的任何变量都可在系统范围内以及在Apache
  • 中使用
  • 由于apache.sh是一个脚本,与/etc/environment不同,变量不必在envvars中再次“导出”
  • 没有安全风险,因为没有不需要的变量神奇地传递给Apache
  • 无论您想在系统范围内以及Apache上使用哪些变量,都可以将其添加到apache.sh,如果只需要在Apache中,则可以在envvars中添加

答案 1 :(得分:0)

通常,在采购脚本时不需要使用关键字export

因此额外的脚本(即my_apacheenv.sh)应具有以下格式:

VARIABLE_A="some hardcoded value"
VARIABLE_B="${DYNAMIC_ONE}"
VARIABLE_C="${APACHE_HOSTNAME}"

并确保将其标记为可执行文件(chmod +x /path/to/my_apacheenv.sh)。

文件/etc/apache2/envvars应包含:

. /path/to/my_apacheenv.sh

然后,您可以在会话中或作为环境变量以任何常规方式定义DYNAMIC_ONEAPACHE_HOSTNAME的值。

对我来说,当它与docker-compose文件结合使用时效果非常好:

version: "3"
services:
  single-apache-php:
    build: ./../cicd/apache
    environment:
      APACHE_HOSTNAME: "my.dynamic.hostname.com"