小编Ala*_*rez的帖子

我可以信任我的环境变量吗?

我正在编写一个bash具有公共库的实用程序集合.我编写的每个脚本都必须有一段代码,用于确定库相对于可执行文件的路径.不是实际的代码,而是一个例子:

#!/bin/bash

DIR="$( cd -P "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
. $DIR/../lib/utilities/functions
Run Code Online (Sandbox Code Playgroud)

我没有尝试搜索库的前导码,而是使用环境变量来指示库的位置.

#!/bin/bash

. $TOOLS_LIBRARY_PATH
Run Code Online (Sandbox Code Playgroud)

我可以使用包装器程序来设置该环境变量,或者我可以在我自己的路径中设置它.可能有更好的方法来组织bash工具集,但问题是:

我可以信任我的环境变量吗?

这是其中之一,我从来没有真正考虑过这类问题.当其他语言编程,路径是用于查找库(例如LD_LIBRARY_PATH,PYTHONPATH,PERLLIB,RUBYLIB,CLASSPATH,NODE_PATH),但我从来没有停下来想想怎么可能是不安全的.

事实上,LD_LIBRARY_PATH为什么LD_LIBRARY_PATH不好阻止其使用.如果调用其安全机制,则忽略Ruby和Perl库路径环境变量,$SAFE并分别调用-T(污染模式).

到目前为止我的想法......

  • 用户可以设置TOOLS_PATH_LIBRARY为他们选择的库,但该实用程序将在他们的uid下运行.他们可以简单地直接运行他们的恶意库bash.
  • 我的工具sudo有些东西.有人可以将他们设置TOOLS_PATH_LIBRARY为利用这一点的东西.但是,这些工具不是通过sudo它们运行的,它们只是sudo在这里和那里调用.用户必须是sudoer任何情况下,他们可以直接打电话sudo.
  • 如果我不能相信TOOLS_PATH_LIBRARY,那我就不能相信PATH.所有程序调用都必须使用绝对路径.
  • 我已经看到shell程序对于绝对的程序使用别名,所以不ls使用调用,而是使用变量,比如LS=/bin/ls.根据我的阅读,这是为了防止用户将程序默认值重新定义为别名.请参阅:路径,功能和安全性.Bash脚本最佳实践. . …

unix security bash environment-variables

17
推荐指数
1
解决办法
2779
查看次数

标签 统计

bash ×1

environment-variables ×1

security ×1

unix ×1