运行sh脚本:尽管具有可执行位和root权限,但«权限被拒绝»


17

我在VirtualBox中安装了Debian (用于各种通常会破坏系统的实验),并尝试启动VirtualBox guest虚拟机附加脚本。我以root用户身份登录并尝试启动autorun.sh,但是得到了“权限被拒绝”。ls -l显示该脚本具有可执行权限。

抱歉,我无法复制输出-VirtualBox在没有插件的情况下绝对没有用,因为共享目录或共享剪贴板都不起作用。但是请您确定,我手动复制了权利:

#ls -l ./autorun.sh
-r-xr-xr-x 1 root root 6966 Mar 26 13:56 ./autorun.sh

起初我以为脚本可能执行了导致错误的操作。我尝试用替换/bin/sh#/pathtorealsh/sh -xv,但没有输出-似乎脚本甚至无法执行。

我什至不知道是什么原因造成的。


2
看起来应该可以。尝试使用bash明确运行它:`bash -x ./autorun.sh“。也许这会提供其他线索
。– nobar 2014年

2
输出什么mount | grep noexec
cuonglm

1
@Gnouc,你是对的,已安装的《 cdrom》已经放好了noexec。可能您可以将其发布为答案;同时,我正在尝试使用exec权限重新安装它。嗯,我什至不知道文件系统可以具有这样的属性。
Hi-Angel

如果您尝试通过运行来运行它,将会sh ./autorun.sh发生什么?
2016年

Answers:


29

也许您的文件系统已安装了noexec选项集,所以您无法运行任何可执行文件。从安装文档:

Noexec

不允许在已挂载的文件系统上直接执行任何二进制文件。(直到最近,仍可以使用/lib/ld*.so / mnt / binary这样的命令来运行二进制文件。此技巧自Linux 2.4.25 / 2.6.0起失败。)

尝试:

mount | grep noexec

然后检查您的文件系统是否在输出中列出。

如果是,则可以通过使用以下exec选项重新挂载文件系统来解决此问题:

mount -o remount,exec filesystem

那对我没用。我必须先卸载然后再正常安装。然后工作正常。
datakid

@datakid:你的FS是多少?
cuonglm '16

我在debian 9上遇到了这个问题,如果脚本以root身份运行,则某些文件被拒绝权限,但是如果我删除&脚本正常工作,它将像Windows行为一样标识为root。= [
Luciano Andress Martini

我收到一条非常奇怪的消息,原来是由于noexec:“ sh:75:script.sh:权限被拒绝”
tmm1

2

bash -x ./filename.filetype应该管用。当我被拒绝以root用户身份访问时,它对我有用。


否,因为最终问题出在noexec装载选项上,所以这行不通,因为可能还有更多文件需要执行。也就是说,filename.filetype尝试执行同一文件系统中的其他文件时会大吃一惊。您可以通过简化的测试轻松地检查它:创建一个两行脚本,打印“ hello”,然后再次调用自己,但不设置可执行权限。如果使用来执行它-x,它将打印“ hello”,但是递归调用行将触发错误。
Hi-Angel

1

我对这个问题的解决方案是使用source。我当时正在存储非常重要的数据。该卷安装为noexec。我有一个可执行的简单Shell脚本,但遇到了权限问题。

./fixsamplesheet.sh # this guy is executable
-bash: ./fixsamplesheet.sh: Permission denied

source fixsamplesheet.sh # worked fine

仅在我的Ubuntu上测试。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.