C 执行文件需要读取权限吗?

C 执行文件需要读取权限吗?,c,linux,shell,executable,file-permissions,C,Linux,Shell,Executable,File Permissions,我正在尝试在c(Linux)上制作一个简单的c-shell程序,它将执行脚本 我需要读取脚本文件才能执行它,但是如果它只有执行权限而没有读取权限,我如何读取它呢?执行文件不需要读取权限。 事实上,如果您有读取权限,但没有执行权限,则无法执行该文件。 执行权限允许您请求系统执行脚本文件 尝试: system("script.sh"); 为了执行脚本(在示例script.sh中) 您还可以使用: execve("script.sh"); 这将运行脚本,用指定脚本中的脚本替换您的脚本,并保持与脚本

我正在尝试在c(Linux)上制作一个简单的c-shell程序,它将执行脚本


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

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

尝试:

system("script.sh");
为了执行脚本(在示例script.sh中)

您还可以使用:

execve("script.sh");

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

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

尝试:

system("script.sh");
为了执行脚本(在示例script.sh中)

您还可以使用:

execve("script.sh");

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

执行此操作的经典方法是将包装器C应用程序设为根用户。无论权限如何,Root用户都可以读取所有内容。不过,这也带来了一大堆警告。确保你没有打开一个更大的安全漏洞来关闭一个小的安全漏洞。

这样做的经典方法是将包装器C应用程序设为root。无论权限如何,Root用户都可以读取所有内容。不过,这也带来了一大堆警告。确保你没有通过打开一个更大的安全漏洞来关闭一个小的安全漏洞。

简而言之

  • 只能使用执行权限执行的二进制文件
  • 脚本是文本文件,因此您需要读取权限
因此,您需要玩一些具有团体所有权、sudo或类似功能的游戏。

简而言之

  • 只能使用执行权限执行的二进制文件
  • 脚本是文本文件,因此您需要读取权限

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

是的,您需要
读取
权限才能执行脚本

但是,我想提到一种可能性,即
另一个用户
在没有
r
文件权限的情况下运行脚本

您可以允许someone
sudo
的身份执行
somescript
,作为另一个拥有
r+x
文件访问权限的用户。 但是,您应该有权访问
/etc/sudoers
(即成为
root
,或要求超级用户将记录从下面添加到
etc/sudoers

在中找到解决方案 和

是的,您需要
读取
权限才能执行脚本

但是,我想提到一种可能性,即
另一个用户
在没有
r
文件权限的情况下运行脚本

您可以允许someone
sudo
的身份执行
somescript
,作为另一个拥有
r+x
文件访问权限的用户。 但是,您应该有权访问
/etc/sudoers
(即成为
root
,或要求超级用户将记录从下面添加到
etc/sudoers

在中找到解决方案 和

你不能,你还需要给文件读权限。那么bash如何在没有读权限的情况下执行文件&如果你是用C编写的,你应该能够调用
system(…)
execlp(…)
等来执行可执行程序(无论是脚本、二进制还是其他)。您不需要先“读取”它来执行它。@ПППССПППСППСПППСПППаааааааМаС。。。不可能<代码>chmod 400==权限被拒绝<代码>chmod 100==权限被拒绝
chmod 500
==执行脚本。如果您不能执行脚本的副本,您还需要授予文件读取权限。那么bash如何在没有读取权限的情况下执行文件&如果您是用C编写的,您应该能够调用
system(…)
execlp(…)
等来执行可执行程序(不管是脚本、二进制还是其他格式)你不“读”它首先要执行它。@ППССССПССПССППССПСПСПССППСППСППСПСППСааааМаааааааааа107。不幸的是,我不能使用system(),我使用execve执行程序,但脚本只是文本file@Deduplicator嗯,你应该将内容复制到另一个你有执行权限的文件中……但那是另一回事!@clami219:或者直接转到用户空间动态加载程序,或者调用解释器,@Deduplicator Ok,但这不是这里的主题……我的意思是什么在这里,执行脚本(在这个术语的经典意义上,使用系统调用)不需要读取权限。如果可以读取它,当然可以执行它,但不能直接执行。不幸的是,我不能使用system(),我使用execve执行程序,但脚本只是文本file@Deduplicator嗯,你应该将内容复制到另一个你有执行权限的文件中……但那是另一回事!@clami219:或者直接转到用户空间动态加载程序,或者调用解释器,@Deduplicator Ok,但这不是这里的主题……我的意思是什么在这里,执行脚本不需要读权限(在这个术语的经典意义上,使用系统调用)。这是最好的答案!这是最好的答案!