执行文件需要读取权限?

Posted

技术标签:

【中文标题】执行文件需要读取权限?【英文标题】:Read permission needed in order to execute a file? 【发布时间】:2014-06-17 20:43:02 【问题描述】:

我正在尝试在 C(用于 Linux)上创建一个类似 c-shell 的简单程序,该程序将执行脚本。

我需要读取一个脚本文件才能执行它,但是如果它只有执行权限,没有读取权限,我该如何读取它?

【问题讨论】:

不能,还需要给文件读取权限。 那么bash如何在没有读权限的情况下执行文件& 如果您使用 C 语言编写,您应该能够调用 system(...)execlp(...) 等来执行可执行程序(无论是脚本、二进制文件还是其他)。你不会先“阅读”它来执行它。 @Простопрограммист 那么 bash 如何在没有读取权限的情况下执行文件 ...它不能。 chmod 400 == 权限被拒绝; chmod 100 == 权限被拒绝; chmod 500 == 执行脚本。 ***.com/questions/15757357/…的可能重复 【参考方案1】:

总之,

只有执行权限才能执行的二进制文件。 脚本是文本文件,因此您需要读取权限。

因此,您需要玩一些具有组所有权、sudo 或类似的游戏。

【讨论】:

这是最好的答案!【参考方案2】:

是的,您需要read 权限才能执行脚本。

但是,我想提一下another_user 运行脚本的一种可能性,而无需对文件拥有r 权限。

您可以允许 somebody 以具有 @ 的 another_user 身份执行 somescriptsudo 987654328@ 访问文件。 但是,您应该有权访问/etc/sudoers(即成为root,或要求超级用户将下面的记录添加到etc/sudoers

# Run script as the user 'another_user' without asking for password
somebody ALL = (another_user) NOPASSWD: /usr/bin/somescript

解决方案位于 https://unix.stackexchange.com/a/77538 和 https://***.com/a/21309969/1566267

【讨论】:

【参考方案3】:

执行文件不需要读取权限。 事实上,如果你有读权限,但没有执行权限,你是无法执行文件的。 执行权限允许您要求系统执行脚本文件。

尝试:

system("script.sh");

为了执行一个脚本(在示例 script.sh 中)。

你也可以使用:

execve("script.sh");

这将运行脚本,用指定脚本中的脚本替换您的脚本,并保持与您的脚本相同的 pid(如 here 所示)

【讨论】:

如果你能读,你当然可以执行它,只是不能直接执行。 不幸的是我不能使用 system() ,我正在使用 execve 执行程序,但脚本只是文本文件 @Deduplicator 好吧,您应该将内容复制到您拥有执行权限的另一个文件中......但这是另一回事! @clami219:或者直接进入用户空间动态加载器,或者调用解释器,... @Deduplicator 好的,但这不是这里的主题......我的意思是执行脚本不需要读取权限(在术语的经典意义上,使用系统打电话)。【参考方案4】:

执行此操作的经典方法是使包装 C 应用程序 setuid 成为 root。 Root 可以读取所有内容,无论权限如何。不过,这伴随着一大堆警告。确保您不会通过打开一个更大的安全漏洞来关闭一个小的安全漏洞。

【讨论】:

以上是关于执行文件需要读取权限?的主要内容,如果未能解决你的问题,请参考以下文章

Linux 普通文件的读写执行权限说明

Linux文件和目录的读写执行权限总结

目录的执行权限

Linux文件权限

文件/目录权限说明

linux下有的目录有可执行权限,为什么?