据我了解,通常让任何人提供将存储在环境变量中的信息被认为是安全的。shellshock 漏洞在这里是一个问题,因为这意味着当 bash 的新实例启动时,环境变量中函数定义末尾的代码将被执行,并且您显然不希望任何人在您的服务器上运行他们喜欢的任何代码. 函数定义本身显然没有安全风险,并且被允许,因为必须显式调用它们才能执行它们的代码。
我的问题是为什么恶意用户不能简单地定义一个函数,将他们的恶意代码包含为一个通用命令ls,然后希望脚本(或正在运行的任何东西)在某个时候使用这个命令?
我想到的一个例子:
$ export ls='() { echo "doing bad things..."; }'
$ bash -c ls
doing bad things...
Run Code Online (Sandbox Code Playgroud) 我正在尝试合并两个目录树,这些目录树具有许多公共元素,但每个目录树都有仅存在于两棵树之一中的元素。我mv遇到的主要问题是,当遇到两个具有相同相对路径的子目录时,它要么保留源(with -f)要么保留目标(with -n),但我不能让它合并两个子目录。我当然可以使用rsyncwith--remove-source-files但这实际上会复制数据,然后删除旧文件,而不是真正的移动。这两个目录树包含数百 GB 的数据,并且都在同一个分区上,所以如果可能的话,我很乐意做一个真正的移动。
现在我有,find * -type file -exec mv -n {} /destination/{}但这只会在目标目录已经存在时将文件从源移动到目标。我可以用类似的东西作为这个命令的开头,mv -n * /destination/但这只会带来顶级目录。有没有办法在一行中做到这一点?我总是可以在复制文件之前编写一个脚本来检查目录是否存在,但这似乎是一项基本任务,似乎应该有更简单的方法。