执行文件需要读取权限?
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 身份执行 somescript
和 sudo
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 可以读取所有内容,无论权限如何。不过,这伴随着一大堆警告。确保您不会通过打开一个更大的安全漏洞来关闭一个小的安全漏洞。
【讨论】:
以上是关于执行文件需要读取权限?的主要内容,如果未能解决你的问题,请参考以下文章