为什么我必须使用 sh 从 CD/DVD 媒体执行脚本?

a1a*_*1an 6 bash permissions media dvd executable

我再次发现系统的这种奇怪行为。我正在运行 Debian 6.0.6 并且在直接从 CD/DVD 执行脚本时遇到了一些麻烦。最后我不得不使用:

sh /media/cdrom/command
Run Code Online (Sandbox Code Playgroud)

运行它。不得不求助于 sh 有什么大不了的?!如果脚本依赖于 bash 特性怎么办?真的很烦人,在我看来并没有增加安全性

有人知道这种行为的充分理由吗?

PS:如果您尝试直接使用 ./... 运行它,您会收到一个错误,该错误没有暗示任何问题的提示(文件系统已挂载 noexec):

bash: ./media/cdrom/command: No such file or directory
Run Code Online (Sandbox Code Playgroud)

如果你将它作为 bash /media/cdrom/command 运行,你会得到同样的错误(我认为即使对于在命令行上作为参数传递的命令,安装选项的验证也会被 bash 验证。

永久的解决方案是将 exec 添加到 /etc/fstab 中的挂载选项中,例如:

/dev/scd0       /media/cdrom0   udf,iso9660 user,noauto,exec     0       0
Run Code Online (Sandbox Code Playgroud)

pet*_*rph 9

文件系统通常noexec,nosuid默认挂载以稍微提高安全性。因此,即使您看到文件集上的可执行位,内核也会拒绝运行它。通过以interpreter path/to/script您请求系统运行的形式调用它interpreter,它反过来接收path/to/script作为参数并解析它从而绕过文件系统强加的限制(您可以通过编译的可执行文件实现相同的效果:)/lib/ld-linux.so.1 path/to/executable

因此一种选择是mount -o exec ...。您可能希望将该选项放入/etc/fstab- 通常通过将defaults选项替换为defaults,exec. 但是,除非您真的知道自己在做什么,否则我建议您不要这样做。

至于 BASH 的细节,我相信bash即使在作为sh. 而且您绝对可以自由地将其调用为bash path/to/script.