sudo chmod o+x 但仍然无法以普通用户身份运行

sudo chmod o+x 但仍然无法以普通用户身份运行

我认为这样做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

要执行文件/path/to/file(以及一般访问它),用户帐户必须首先能够访问它,即,file用户的所有父母都必须拥有该x权限。

就你的情况而言,你需要这样做,chmod +x /root /root/.cabal /root/.cabal/bin但更好的方法可能是在本地安装 cabal 软件包(对于需要它们的用户)或全局安装 cabal 软件包(如果所有用户都应该拥有它们)。请参阅阴谋手册了解详情。

另请参阅相关问题这里这里有关目录权限的更多背景信息。

答案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”组中的人运行该程序会怎么样?

相关内容