标签: environment-variables

为什么“AcceptEnv *”被认为是不安全的?

在 中/etc/ssh/sshd_config,有一个选项AcceptEnv允许 ssh 客户端发送环境变量。我需要能够发送大量的环境变量。这些在来自客户端的每个连接上都会发生变化,因此将它们放在服务器上的登录脚本中会更加困难。

我读过那"AcceptEnv *"是不安全的。在我尝试获取所有试图设置的环境变量的列表之前,我想了解原因。

为什么它被认为是不安全的?我可以举个例子吗?

security linux ssh environment-variables

13
推荐指数
1
解决办法
1万
查看次数

我可以在 nginx 服务的静态文件中使用 nginx 环境变量吗?

如果我在 nginx 配置中使用环境变量,并且将 nginx 配置为仅提供静态文件(html、js、css - 例如 AngularJs 应用程序),有什么方法可以在 nginx 提供的 JS 文件中使用环境变量? 或者是运行非静态服务器(例如 io.js、php 等)的唯一方法。


顺便说一句,您不能在 nginx 的配置中本地使用环境变量。

当我在 nginx 配置中谈论环境变量时,我的意思是在这篇文章中:如何在 Nginx.conf使用环境变量,它们使用env APP_WEB_1_PORT_5000_TCP_ADDR;$ENV{"APP_WEB_1_PORT_5000_TCP_ADDR"};


准确解释您的用例

我的具体用例是我在 docker 容器中有一个由 nginx 驱动的 AngularJS 应用程序。该应用程序是一个“单页应用程序”,它完全使用在另一个系统上运行的 API。目前我在生产和暂存之间运行不同的 docker 容器,因为该应用程序有一些不同的配置,例如 Google-Analtyics 代码。这个特定于环境的数据保存在一个config.js文件中,这些值当前是硬编码的,mastergit 中的分支有一个值,而分支的值不同staging。我想更改设计,以便我可以将相同的容器用于生产和暂存。我想在运行它时将一个 ENV 变量传递到容器中 ( docker run -e GACODE=UA-12345-6 ...) 并让 nginx 使用 ENV 变量(通过env GACODE;$ENV{"GACODE"}这样的config.js文件可以使用传入的 GoogleAnaltyics 代码,而不是对其进行硬编码)。我不知道这是否可能(因此问题;))。仅使用 nginx 使我的容器成为单进程,而如果我必须使用 io.js 那么我将需要多个链接的容器,并且更多的移动部件更复杂)。

nginx environment-variables static-content docker

13
推荐指数
3
解决办法
2万
查看次数

使用基于请求字符串的 LDAP 动态验证 Apache?

是否可以将请求 URI 的一部分用作 mod_authnz_ldapRequire ldap-group指令的输入?

我正在尝试动态检查对一堆不同项目目录的访问,所有目录都在http://testserver.com/projects/下,这样访问的用户/projects/abc将被检查cn=abc,ou=groups,dc=test. 理想情况下,我希望在不为每个项目创建单独的 Location 指令的情况下执行此操作,因为很可能有数百个。

我想出了这个,它说明了一般概念,但它不起作用(project_name 不检索实际变量内容):

<Location /projects>
    SetEnvIf Request_URI "/projects/([-a-z0-9A-Z_]+)/" project_name=$1

    AuthType Basic
    AuthBasicProvider ldap
    AuthName "Restricted Resource - SVN (LDAP)"
    AuthLDAPURL "ldap://127.0.0.1:389/dc=test?uid"
    AuthLDAPGroupAttributeIsDN off
    AuthLDAPGroupAttribute memberUid
    Require ldap-group cn=%{project_name},ou=groups,dc=test
</Location>
Run Code Online (Sandbox Code Playgroud)

帮助?

ldap environment-variables mod-auth-ldap apache-2.2

12
推荐指数
1
解决办法
673
查看次数

PATH 中的环境变量未针对非管理员命令提示符展开?

我有一台 Windows 7 机器,当普通用户运行命令提示符时,它无法在%PATH%. 如果命令提示符改为以管理员身份运行(右键单击,以管理员身份运行),则%PATH%适当展开。

具体来说,%PATH%cmd.exe用户身份运行(通过 显示set path)如下:

Path=%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\Wbem;%SYSTEMROOT\System32\WindowsPowerShell\v1.0\;C:\Program Files\Microsoft Windows Performance Toolkit\
Run Code Online (Sandbox Code Playgroud)

...而%PATH%cmd.exe管理员身份运行如下:

Path=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\Wbem;%SYSTEMROOT\System32\WindowsPowerShell\v1.0\;C:\Program Files\Microsoft Windows Performance Toolkit\
Run Code Online (Sandbox Code Playgroud)

我尝试以新用户身份登录以创建新配置文件,该问题也仍然存在于该配置文件中。HKEY_CURRENT_USER\Environment\PATH不存在,并且HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\Path与计算机属性 -> 环境变量中定义的系统范围路径相匹配。

有没有人知道这可能是什么,或者我可以在哪里看?

windows-7 command-line-interface environment-variables path

12
推荐指数
1
解决办法
2万
查看次数

在 .bashrc 中设置环境变量的最佳方法是什么?

在 中设置变量时.bashrc,我应该使用它吗?

export VAR=value
Run Code Online (Sandbox Code Playgroud)

或者这就足够了吗?

VAR=value
Run Code Online (Sandbox Code Playgroud)

到底有什么区别(如果有的话)?

linux shell bash environment-variables

11
推荐指数
2
解决办法
2万
查看次数

如何在批处理文件中设置全局 PATH 环境?

每次我登录时,我们环境中的组策略都会覆盖 PATH 变量,并且当我运行“非标准”计算机时,它完全错误(C:\Windows vs C:\WINNT,缺少目录等)。目前,我每次登录时都会手动更改它,但这开始变得令人厌烦。

如果我使用 SET 命令更改批处理文件中的 PATH 变量,它仅具有本地范围,因此更改仅适用于批处理文件中的命令。

set PATH=C:\WINNT;C:\WINNT\System32
set PATH
Run Code Online (Sandbox Code Playgroud)

这个批处理文件将输出新路径,但如果我set PATH之后在命令行上运行,它仍然是原始路径。

如何在批处理文件中设置全局PATH 环境?或者我可以使用另一种技术吗?

windows batch-file environment-variables path

11
推荐指数
1
解决办法
4万
查看次数

ssh中PermitUserEnvironment的安全风险

为了将 env 变量传递给 ssh shell,我已经阅读了很多关于PermitUserEnvironment和 文件的使用的帖子~/.ssh/environment。官方sshd 文档和其他一些资源暗示了这样做的一些安全风险。

启用环境处理可能使用户能够使用 LD_PRELOAD 等机制绕过某些配置中的访问限制。

激活可能存在哪些安全问题PermitUserEnvironment?我希望在这些环境变量中保存数据库连接详细信息,这是可取的吗?

security ssh environment-variables

11
推荐指数
1
解决办法
2万
查看次数

PYTHONPATH 环境变量...之后如何创建每个子目录?

我目前这样做:

PYTHONPATH=/home/$USER:/home/$USER/respository:/home/$USER/repository/python-stuff
Run Code Online (Sandbox Code Playgroud)

我怎样才能使 PYTHONPATH 可以包含所有子目录?

PYTHONPATH = /home/$USER/....and-all-subdirectories
Run Code Online (Sandbox Code Playgroud)

linux unix python environment-variables

10
推荐指数
1
解决办法
3万
查看次数

start-stop-daemon 可以使用环境变量吗?

我需要守护在 Wine 中运行的 Windows 应用程序,并在/var/run. 由于它需要 X11 会话才能运行,因此我需要确保在运行用户的环境中设置了 $DISPLAY 变量。

假设我已经有一个 X11 会话在运行,并带有给定的显示,下面是我的/etc/init.d脚本中的 start-stop-daemon 行:

start-stop-daemon --start --pidfile /var/run/wine-app.pid -m -c myuser -g mygroup -k 002 --exec /home/myuser/.wine/drive_c/Program\ Files/wine-app.exe
Run Code Online (Sandbox Code Playgroud)

不幸的是,我在 Ubuntu 8.04 上的 start-stop-daemon 版本没有-e设置环境变量的选项。我认为您可以在命令之前简单地设置 $DISPLAY,如下所示:

VAR1="Value" start-stop-daemon ...
Run Code Online (Sandbox Code Playgroud)

但它不起作用。由于我使用该-c {user}选项以特定用户身份运行,因此我猜测有一个环境切换并且 VAR1 丢失了。我试过从正在运行的用户.profile和/或导出 DISPLAY,.bashrc但它也不起作用。

有没有另一种方法可以做到这一点?这甚至可能吗?我是否忽略了什么?

linux ubuntu daemon environment-variables pid

10
推荐指数
2
解决办法
1万
查看次数

/etc/environment 中的环境变量用磅(哈希)符号表示值

在 Ubuntu 12.04 上,我定义了一个环境变量,/etc/environment如下所示:

FOO="value_before#value_after"
Run Code Online (Sandbox Code Playgroud)

当我通过 ssh 进入服务器检查值时,我得到了这个:

$ env | grep FOO
FOO=value_before
Run Code Online (Sandbox Code Playgroud)

我猜它正在将#视为评论并将其剥离,但是,这有效:

$ . /etc/environment
$ export FOO
$ env | grep FOO
FOO=value_before#value_after
Run Code Online (Sandbox Code Playgroud)

我试过这样逃避#

FOO="value_before\#value_after"
Run Code Online (Sandbox Code Playgroud)

但这不起作用,我只是得到了这个:

FOO=value_before\
Run Code Online (Sandbox Code Playgroud)

关于如何使散列被视为值的一部分的任何想法?任何帮助都会很棒。

我在/etc/environment文件中尝试过的值:

FOO='value_before#value_after'
FOO="value_before#value_after"
FOO='"value_before#value_after"'
FOO="value_before\#value_after"
FOO='value_before\#value_after'
Run Code Online (Sandbox Code Playgroud)

以及上述的其他各种组合。当您通常在 shell 中设置它们时,其中的很多都将起作用。但它们似乎在/etc/environment文件中不起作用。

ubuntu environment-variables

10
推荐指数
1
解决办法
5142
查看次数