Questions tagged «environment-variables»

对于与环境变量有关的问题,一组动态变量可能会影响正在运行的进程的行为和对资源的访问。使用此标记可解决有关环境变量的问题,或有关在运行过程行为和对资源的访问中因设置或修改变量值的影响而引起的问题的问题。


2
为什么在环境变量中定义功能的能力本身不是安全风险?
据我了解,通常认为让任何人提供将存储在环境变量中的信息都是安全的。shellshock漏洞在这里是一个问题,因为这意味着当新的bash实例启动并且您显然不希望任何人在您的服务器上运行他们喜欢的任何代码时,将在环境变量中的函数定义末尾执行代码。尽管函数定义本身显然没有安全风险,但允许使用,因为必须明确调用它们才能执行代码。 我的问题是,为什么恶意用户不能简单地定义一个函数,将其恶意代码作为通用命令包含在其中ls,然后希望脚本(或正在运行的任何东西)在某个时候使用该命令? 我想到的一个例子: $ export ls='() { echo "doing bad things..."; }' $ bash -c ls doing bad things...

1
为什么环境变量的位置变化如此大?
阅读乔恩·埃里克森(Jon Erickson)的《黑客:利用的艺术》一书,我正在尝试估算环境变量的地址SHELLCODE以利用程序。 每次我跑到getenv("SHELLCODE");位置时,结果都是完全不同的。 从我的外壳中提取: > for i in $(seq 10); do ./a.out SHELLCODE; done SHELLCODE is at 0xff9ab3a3 SHELLCODE is at 0xffcdb3a3 SHELLCODE is at 0xffb9a3a3 SHELLCODE is at 0xffa743a3 SHELLCODE is at 0xffdb43a3 SHELLCODE is at 0xfff683a3 SHELLCODE is at 0xffef03a3 SHELLCODE is at 0xffc1c3a3 SHELLCODE is at 0xff85a3a3 …

2
在systemd Docker容器中继承环境变量
我有一个运行systemd的Docker容器。我想将环境变量传递给它下面的应用程序。 当我从Docker(/sbin/init作为命令行)启动systemd时,Docker将变量公开给systemd,但不公开给子服务。如果我添加systemd.setenv=...到cmdline,则会传递变量。我正在寻找更清洁的解决方案。 如何公开传递给/sbin/init它启动的应用程序的环境变量? % docker run -v /sys/fs/cgroup:/sys/fs/cgroup:ro --privileged -ti \ -e VAR1=1 motiejus/systemd_fedora20 \ init systemd.setenv=VAR2=2 ... Welcome to Fedora 20 (Heisenbug)! ... [ OK ] Reached target Multi-User System. [root@740690365eb0 ~]# env | grep VAR VAR2=2 我希望VAR1=1在运行命令时看到。 换句话说,systemd可以将传递给它的变量传递给它启动的子级吗? 对于Dockerfile,请参阅github存储库。

1
我在哪里设置bash路径?
我想~/bin从我的路径中删除。几个月前,我对Linux(Ubuntu)感到陌生,但我不知道如何添加它。 当我搜索下面列出的所有文件时,什么都没有显示。 还有什么地方可以设置?它被后前置于$HOME/.profile前缀与PATH$HOME/bin 如果有什么不同,我可以从命令提示符和正在运行的脚本中获得相同的PATH。 #!/bin/bash { echo "first dir of PATH is: '${PATH%%:*}'" shopt -s nullglob cat \ /etc/profile \ /etc/bash.bashrc \ /etc/profile.d/*.sh \ $HOME/.bashrc \ $HOME/.bash_aliases \ /etc/bash_completion \ $HOME/.bash_completion* \ $HOME/.profile \ $HOME/.profile_zap \ $HOME/.bash_profile* \ $HOME/.bash_login* \ | sed -rne '/~\/bin/p' } 输出为: first dir of PATH …

2
在〜中设置单独的Linux环境的最佳方法
我在与其他几个人共享的开发服务器上完成大部分工作(涉及很多C / Python)。结果,我们所有人似乎都做了一些系统管理工作(没有sysadmin)。这通常可以正常工作,但是安装和维护程序包和库往往很麻烦。 最近,我发现自己在主目录中安装和构建了越来越多的软件包等。正规化/简化此过程的最佳方法是什么?现在,我只是./configuring在--prefix,设置路径,使我~/usr/bin先于usr/bin等等,然后尝试正确地设置LD_LIBRARY_PATHand C_INCLUDE_PATH和`PYTHONPATH,但这变得容易出错并且很痛苦。还有更多的“自动化”方法吗?

3
是否可以找出正在设置/添加到环境变量的文件及其优先顺序?
我的一些环境变量(中$PATH,$MANPATH和朋友)在不同的源文件是部分成立。 我发现自己希望有一种命令或方法来快速收集特定环境变量中的哪个部分来自哪个文件。 我的$ PATH,例如,明显受到集(加入).bashrc,/etc/paths,/etc/paths.d/X11...我还在寻找这多余地在我创建重复的路径定义,最后的神秘文件$PATH。 手动查明有助于环境变量的文件需要花费很多时间。必须有一种有用的方法来绕开跟踪所有设置者的不必要工作……或者我是唯一遵循这些思路的人吗?

2
在shell中间接扩展变量
我需要在bashShell中间接引用变量。 我基本上是想make通过写作做些什么$($(var))。 我尝试使用${$var}哪种方法是最直接的解决方案,bash但随后出现此错误: bash: ${$var}: bad substitution 有没有办法做到这一点? 我所试图做的是遍历所有参数($1,$2,$3,...)来使用迭代变量的程序并没有间接我不能做到这一点。

3
sudo之后LD_LIBRARY_PATH总是空白
每当我似乎手动安装软件时,都会出现共享库错误。执行后,echo $LD_LIBRARY_PATH它显示为.. 无。我尝试将文件添加/usr/local/lib到其中.conf,/etc/ld.so.conf.d但似乎从未执行过。 这是行不通的(用引号或其他方式): LD_LIBRARY_PATH="/usr/local/lib" export LD_LIBRARY_PATH sudo ldconfig -v 该值将被临时设置,但是如果我退出一个终端窗口,它将不会保留该值。重新启动也不执行任何操作。


2
更改用户并在Shell脚本中加载整个环境
我在使用我们的新贵脚本时遇到了麻烦,该脚本更改了用户并启动了一些ruby守护进程。 在过去,我只会bash -c "do the business" -l someuser确保使用该-l标志来模拟登录。 到目前为止,这一直很好,我们的ruby进程一直抛出以下错误:require: no such file to load -- rubygems (LoadError)经过调查后,我发现此错误仅在以root用户身份运行脚本时(即,当我sudo su或当被新贵运行时)发生。 我认为这是一个PATH问题,因为当我首先手动设置路径时,它可以解决问题。 有没有办法改变用户并加载整个环境? 我也曾尝试su user -c和sudo。 为了使测试更容易,我正在“扎根”(sudo su)并运行which bundle(捆绑是一件红宝石的东西)。 这是我得到的: sudo -i -u webuser which bundle #=>没有输出 su -l webuser -c which bundle #=>没有输出 sudo su - webuser -c which bundle #=>没有输出 但是以Webuser的身份登录 …

4
在bash(或其他)中设置变量环境变量
我希望脚本读取包含要设置的环境变量的键/值对的文件,然后进行设置。 到目前为止,我有这个: #!/bin/bash cat $1 | while read kv do key=${kv%=*} val=`echo ${kv#*=} | sed 's/^"\|"$//g'` export $key="$val" done 我想读取这样的文件: XAUTHLOCALHOSTNAME="localhost" DISPLAY=":0" XAUTHORITY="/tmp/some-XAuthority" 我只需要在脚本的作用域内将这些变量放在作用域中,因此无需解决在脚本中为父作用域设置变量的问题。 通过测试,我认为我的问题出在export $key="$val"哪里,因此我只需要替换该行即可。


5
通过Makefile将目录添加到PATH
将我在Makefile中修改的PATH导出到当前终端中时遇到一些麻烦。我试图将Makefile目录所在的bin文件夹添加到PATH中。 这是makefile的相关部分: PATH := $(shell pwd)/bin:$(PATH) install: mkdir -p ./bin export PATH echo $(PATH) 回显可以正确打印,但是如果我在终端中重做回显,则PATH保持不变。

3
使用sudo运行vim时“未指定协议”
最近,我开始使用时收到“未指定协议” sudo vim。我猜这只是一个警告,因为一切都正常工作(我可以打开,编辑和保存文件)。如果我使用该消息,则不会出现该消息,sudo -E vim因此我认为/etc/profile最近编辑时做错了什么,但不确定。我怎样才能解决这个问题?

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.