【问题标题】:Is it safe to source system-wide environment variables in apache envvars?在 apache envvars 中获取系统范围的环境变量是否安全?
【发布时间】:2017-12-06 13:43:30
【问题描述】:

我正在尝试在 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 中获得相同环境变量工作的唯一方法,而无需两次声明它们。

这种方法是否存在任何安全问题?

【问题讨论】:

    标签: php linux apache environment-variables


    【解决方案1】:

    一般情况下,您在采购脚本时不需要使用关键字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"
    

    【讨论】:

      【解决方案2】:

      我能够解决我自己的问题。我从/etc/environment 中删除了MY_VAR,并创建了一个单独的文件/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

      【讨论】:

        猜你喜欢
        • 2019-12-15
        • 2011-02-11
        • 1970-01-01
        • 2020-11-25
        • 2021-05-16
        • 2013-06-17
        • 2021-09-26
        • 1970-01-01
        相关资源
        最近更新 更多