这是一个我似乎找不到好的答案的问题。
在 Windows/DOS 下,我们被“教导”可以从当前目录启动程序而无需为路径添加前缀。
但是,Linux 的默认行为是您必须为当前目录中的应用程序/脚本添加 ./ 前缀。
人们说允许程序/脚本在没有前缀的情况下执行是一种糟糕的安全做法。有很多“糟糕的安全做法”,但这对我来说没有意义。例如,我不会进入 /some/unfamiliar/directory 并开始执行 ls 之类的程序。我会 cd (进入我的主目录),然后输入 ls -la /some/unfamiliar/directory。当然,在糟糕的一天我会。
如果有人将一个名为 ls 的程序放在一个目录中,并将一个坏的 sysadmin cds 放入该目录并以 root 身份运行 ls 并且 ls 添加一个后门用户和其他邪恶的东西,我可以看到“威胁”。美好的。但是,通常在这种情况下,用户会抱怨“哦 ls 不起作用,您可以检查一下吗?”。我会 sudo su "user" 并尝试 ls 作为他。
除非我完全遗漏了什么,否则添加“。” 你的PATH真的有那么糟糕吗?
编辑:
到目前为止,所有答案都可以指出安全风险 - 但是 - 每个人都错过了 Windows 的论据。在 Windows 下,当前目录不在您的路径中,因此无法禁用仅运行 program.exe afaik 的功能。但是,命令提示符确实接受在命令前面加上 .\ 的能力(.\ 似乎可以工作,但是,您应该使用 \,否则最终可能会出现某种转义序列)。在 Windows 下,我们应该总是在命令前面加上前缀吗?另外,我们是否应该联系微软并告诉他们他们植入这种预期行为是不好的?
我的背景是 Windows,所以我倾向于期望当前目录中的程序能够运行,即使我知道这不是它在 Unix 世界中的工作方式。这就是我提出这个问题的原因。
扩展我关于“不良安全实践”的意思(以及为什么它们用引号引起来)是因为我们可以引用人们应该做的数百万甚至数十亿的安全实践......但我们没有,如果我们这样做了,一个人肯定会发疯。我们是否应该减轻可能干扰用户体验的所有安全风险?我说不,但那是因为我相信安全性应该对用户透明,但我喜欢 haus 在他的回答中的第一句话“与其他任何事情一样,它是一种心态。”。我认为我们应该就此搁笔。
一个使用 *nix 的新手(我实际上在 OS X 10.5 中使用了 bash shell),我想知道这个可能非常简单的答案是什么......
当我编写一个脚本(称为 my_script)并将其保存到当前目录时,为什么我必须在其名称前放置一个句点和一个正斜杠才能运行它?像这样:
./my_script
shell 不能告诉我要从当前目录运行它吗?Windows 似乎可以处理这种情况。
干杯本