我认为这样做sudo chmod a+x /root/file.to.execute
甚至sudo chmod 777 /root/file.to.execute
应该允许我(作为用户)运行相关程序。但这样做之后,我仍然无法以普通用户身份运行它。
还有什么可能出错?我看过的每个教程chmod
都说要这样做。
编辑:
$ sudo ls -l /root/.cabal/bin/pandoc
-rwxrwxrwx 1 root root 37443252 Feb 23 14:56 /root/.cabal/bin/pandoc
编辑:只需调用/root/.cabal/bin/pandoc -v
即可消除其他错误源:只需对程序进行最简单的调用。
答案1
答案2
可能存在各种潜在问题。
了解程序可能执行的操作的详细信息可能会很有用。例如,程序可能不允许写入以只读方式挂载的文件系统上的目录,即使文件指定 Unix 样式权限允许覆盖该文件(当以读/写方式挂载时)。
该文件的 Unix 样式权限设置(由 chmod 设置)看起来不错。根据您显示的输出,我同意这一点。那么让我们尝试查看其他内容。
一些快速的想法:mount 可能有 noexec(检查 /root 挂载点是否存在;我猜很可能不存在,在这种情况下您需要检查 / 挂载点)
由其他原因导致的权限。例如,脚本文件的第一行显示 !#/bin/my-interpretor,但您没有运行 my-interpretor 的权限
如果您收到权限错误,也许文件运行 my-interpretor,但随后该文件运行另一个出现错误的程序。
Frank 的回答提到了 SELinux。因此,除了文件上的权限之外,可能还有其他权限来源。如果文件是脚本文件,请尝试获取它。(即:不要运行“/path/file”,而是运行“. /path/file”——带有句点和空格,然后是文件名。或者“source”命令;详细信息可能取决于 shell。
也许另一个可能的原因可能与“ulimit -a”有关?(这可能是 shell 内部的命令,所以不要只使用“man ulimit”,而是使用“man $SHELL”)
也许其中一些想法有点不对劲,但这些只是我脑海中突然冒出的一些想法。所以,我并不是说这些都是可能的答案,甚至不是说所有这些都是绝对可能的;它们只是一些想法,也许其中一个是正确的。
故障排除思路:检查日志文件。检查返回值( echo $? )。如果 root 运行该程序会怎么样?如果某人使用“sudo”会怎么样?如果“wheel”组中的人运行该程序会怎么样?