【问题标题】: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 == 执行脚本。

标签: c linux shell executable file-permissions


【解决方案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/77538https://stackoverflow.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 可以读取所有内容,无论权限如何。不过,这伴随着一大堆警告。确保您不会通过打开一个更大的安全漏洞来关闭一个小的安全漏洞。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-14
      • 2020-05-03
      • 1970-01-01
      • 2021-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多