Questions tagged «environment-variables»

环境变量是可以在Shell或其他类似环境中设置的配置选项。从外壳程序内启动的所有程序都可以读取它们并进行自我配置。

8
SSH-通过每个连接设置环境变量-Godaddy共享主机
我的问题是,我必须在服务器上设置环境变量(如GIT_EXEC_PATH)。我需要每个连接都具有该变量(因此也需要bash和远程命令)。我设法使用.bash_profile通过bash设置了这些变量,但是远程命令存在问题。我发现有可能在实际的rsa密钥之前在〜/ .ssh / authorized_keys中编写命令,但是我并不想一直写在那里,我需要一个永久的解决方案...我发现〜/ .ssh / rc文件由每个ssh登录执行,因此我在其中放置了env变量声明,但是没有用。这些变量在rc文件中设置,但之后消失了。:S也许rc文件在子shell中运行:S是否可以在没有代码重复的情况下在bash和远程命令中定义这些变量? 编辑: 我编辑了问题,因为服务器是Godaddy共享主机,所以它具有唯一的配置。/ etc / ssh / sshd_config和/ etc / ssh / ssh_config文件为空。这些文件中有注释,如果您好奇,可以在这里复制。 〜/ .bash_profile是来源(仅通过bash连接), 〜/ .bashrc从未被获取, 〜/ .profile从未获得, 〜/ .ssh / environment从未被获取, 〜/ .ssh / rc是由bash和remote两者提供的,但是我认为它在subshel​​l中被调用,因为变量消失了。 〜/ .ssh / authorized_keys每次都源,但是我必须在每个rsa密钥之前编写命令(因此,我不需要对其进行配置)。 摘要: 我可以很好地配置bash(使用.bash_profile),但是不能配置远程调用。那就是问题所在。我正在寻找由bash和远程命令来源的文件。 例如: git-upload-pack命令找到exe文件,因为设置了GIT_EXEC_PATH env变量,但是对于远程:“ git clone user@domain.com:myrepo local / myrepo”,服务器找不到该命令,因为GIT_EXEC_PATH未设置。 编辑2: 根据这个,我的printenv日志:的〜/ …



2
为什么“ AcceptEnv *”不安全?
在中/etc/ssh/sshd_config,有一个名为的选项AcceptEnv,允许ssh客户端发送环境变量。我需要能够发送大量环境变量。这些更改来自客户端的每个连接,因此将它们放在服务器上的登录脚本中会更加困难。 我读过那"AcceptEnv *"是不安全的。我想了解为什么在尝试获取所有试图设置为放置在那里的环境变量的列表之前。 为什么认为它不安全?我可以举个例子吗?

1
根据请求字符串通过LDAP动态认证Apache?
是否可以将请求URI的一部分用作mod_authnz_ldap Require 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> 救命?

1
ssh中PermitUserEnvironment的安全风险
为了将env变量传递给ssh shell,我已经阅读了许多有关PermitUserEnvironment和文件使用的文章~/.ssh/environment。sshd官方文档和其他一些资源都暗示这样做有一些安全隐患。 启用环境处理可以使用户使用诸​​如LD_PRELOAD之类的机制绕过某些配置中的访问限制。 激活可能会带来哪些安全问题PermitUserEnvironment?我希望在这些环境变量中保留数据库连接详细信息,这是否明智?

4
非管理员命令提示符下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\ ...而%PATH%以cmd.exe管理员身份运行如下: Path=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\Wbem;%SYSTEMROOT\System32\WindowsPowerShell\v1.0\;C:\Program Files\Microsoft Windows Performance Toolkit\ 我尝试以新用户身份登录以创建新的配置文件,并且该配置文件上的问题仍然存在。HKEY_CURRENT_USER\Environment\PATH不存在,并且HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\Path与“计算机属性”->“环境变量”中定义的系统范围路径匹配。 是否有人对这可能是什么或我在哪里可以看到任何想法?


3
如何在批处理文件中设置全局PATH环境?
每次登录时,我们环境中的组策略都会覆盖PATH变量,并且当我运行“非标准”计算机时,它会完全出错(C:\ Windows vs C:\ WINNT,缺少目录等)。目前,我每次登录时都手动对其进行更改,但这开始变得烦人。 如果我使用SET命令更改批处理文件中的PATH变量,则它仅具有本地作用域,因此更改仅适用于批处理文件中的命令。 set PATH=C:\WINNT;C:\WINNT\System32 set PATH 该批处理文件将输出新路径,但如果set PATH此后在命令行上运行,它仍将是原始路径。 如何在批处理文件中设置全局 PATH环境?还是我可以使用另一种技术?

2
start-stop-daemon可以使用环境变量吗?
我需要守护运行在Wine中的Windows应用程序,并在中创建一个pid /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 不幸的是,我在Ubuntu 8.04上的start-stop-daemon版本没有-e设置环境变量的选项。我认为您可以在命令前简单地设置$ DISPLAY,如下所示: VAR1="Value" start-stop-daemon ... 但这是行不通的。由于我使用该-c {user}选项以特定用户身份运行,因此我猜测存在环境切换,并且VAR1丢失了。我试过从正在运行的用户导出DISPLAY .profile和/或,.bashrc但是它也不起作用。 还有另一种方法吗?这有可能吗?我在俯视什么吗?

4
/ etc / environment中的环境变量(带有井号(井号))将值
在Ubuntu 12.04上,我具有如下定义的环境变量/etc/environment: FOO="value_before#value_after" 当我进入服务器检查值时,得到以下信息: $ env | grep FOO FOO=value_before 我猜它正在将#视为注释并删除它,但是,这可行: $ . /etc/environment $ export FOO $ env | grep FOO FOO=value_before#value_after 我已经尝试过这样的转义#: FOO="value_before\#value_after" 但这是行不通的,相反,我得到了这个: FOO=value_before\ 关于如何使哈希成为值一部分的任何想法?任何帮助都会很棒。 我在/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' 以及以上的其他各种组合。只要将它们通常设置在外壳中,它们中的许多都将起作用。但是它们似乎在/etc/environment文件中不起作用。

4
Apache 2:SetEnvIf“ IP范围”
如果我看到访问者来自特定的IP范围,则我想在我的Apache配置中设置一个环境变量。目前,我是这样进行的: SetEnvIfNoCase Remote_Addr "^194\.8\.7[45]\." banned=spammer-ip SetEnvIfNoCase Remote_Addr "^212\.156\.170\." banned=spammer-ip 我更喜欢这样的事情: SetEnvIfIpRange 194.8.74.0/23 banned=spammer-ip SetEnvIfIpRange 212.156.170.0/24 banned=spammer-ip ...因为我认为将IP地址转换为字符串然后执行正则表达式完全浪费资源。 我可以做一个 Deny From 194.8.74.0/23 ...但是后来我没有一个可以在403错误页面中检查的变量-查找拒绝访问的原因。 有什么建议我可能会错过吗?是否有一个Apache2 MOD可以基于“ IP地址范围”设置环境变量?

3
我可以在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 VAR到当我运行它(容器docker run -e GACODE=UA-12345-6 ...),并有使用nginx的ENV VAR(通过env GACODE;与$ENV{"GACODE"}这样的config.js文件可以使用传入的GoogleAnaltyics代码,而不是对其进行硬编码)。我不知道这是否可行(因此提出问题;)。仅使用nginx可使我的容器成为一个单进程,而如果必须使用io.js,则需要多个链接的容器,并且需要移动的部件会更加复杂。

4
如何将VAR从子Shell导出到父Shell?
我有一个Korn Shell脚本 #!/bin/ksh # set the right ENV case $INPUT in abc) export BIN=${ABC_BIN} ;; def) export BIN=${DEF_BIN} ;; *) export BIN=${BASE_BIN} ;; esac # exit 0 <- bad idea for sourcing the file 现在,这些VAR仅在子外壳中导出,但我也希望在我的父外壳中进行设置,因此在出现提示时,这些VAR仍正确设置。 我知道 . .myscript.sh 但是有没有“采购”的方法吗?因为我的用户经常忘记“来源”。 EDIT1:删除“ exit 0”部分-这只是我打字而没有先思考 EDIT2:添加更多有关我为什么需要这样做的详细信息:我的开发人员为2个应用(为了简单起见)编写代码:ABC和DEF。每个应用程序都由单独的用户usrabc和usrdef在生产环境中运行,因此已经设置了$ BIN,$ CFG,$ ORA_HOME等特定于其应用程序的内容。 所以 上面脚本中的ABC的$ BIN = …

1
如何在Nginx中设置服务器特定的ENV值?
我正在启动一个使用环境变量来设置数据库连接和其他几件事的项目。(他们不想使用配置文件,因为人们不小心会覆盖它们)。 无论如何,我正在使用nginx,虽然它支持env-似乎对其支持还不够好。您不能基于每个服务器块设置env值。换句话说,这是行不通的: server { listen 80; server_name domain; env FOO = "bar"; } 您必须这样做: env FOO = "bar"; http { server { listen 80; server_name domain; } } 这意味着我不能具有特定于虚拟主机的值。因此,我必须为每个站点创建一个完整的vhost配置,并仅激活我现在想要的那个,以便正确设置该值。 有什么办法可以解决此问题?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.