为什么我必须使用 sh 来执行 CD/DVD 介质中的脚本?

为什么我必须使用 sh 来执行 CD/DVD 介质中的脚本?

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

sh /media/cdrom/command

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

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

PS:如果您尝试直接使用 ./... 运行它,您会收到一个错误,该错误不会对问题提出任何提示(文件系统安装为 noexec):

bash: ./media/cdrom/command: No such file or directory

如果您将其作为 bash /media/cdrom/command 运行,则会出现相同的错误(我认为安装选项的验证也会由 bash 验证,即使对于在命令行上作为参数传递的命令也是如此。

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

/dev/scd0       /media/cdrom0   udf,iso9660 user,noauto,exec     0       0

答案1

文件系统通常是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.

答案2

这对游戏来说有点晚了,但我发现这是在寻找我的问题的答案,并认为我会为其他人的搜索插话。我们的 shell 脚本从 Windows PC 刻录到 CD,一旦安装到 Redhat 盒子中,就会显示为rw-rw-r--.我的解决方案是将文件放在 Redhat CM 服务器上,制作它r-xr-xr-x,然后从 Redhat 盒子将其刻录到 CD。一旦安装在目标计算机上,这些权限就显得相同,因此我只需运行/mnt/cdrom/install.sh

相关内容