我再次发现了系统的这种奇怪行为。我正在运行 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