为什么当我从 Web 下载二进制文件时,它没有设置可执行权限,但是当我使用 gcc 构建二进制文件时,它却设置了可执行权限?

use*_*425 6 permissions gcc executable

例如,如果我的文件 hello.c 只包含:

int main() {
   printf("Hello world");
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

我在 gcc 中构建了它,gcc hello.c -o hello然后我可以运行./hello它并运行。

但是,如果我尝试使用 eg 从网络下载二进制文件,则curl必须先使用 chmod 设置权限,然后才能运行它。有什么原因吗?gcc 和/或 curl 是否为文件设置了一些默认权限?

MLu*_*MLu 9

怎么curl知道文件是可执行的?从技术上讲,它可以检查其内容,但远远超出了它的curl意图。

默认权限由umask( http://en.wikipedia.org/wiki/Umask )确定,并且在从umask程序派生的权限之上可以添加可执行位(或完全使用不同的权限)。例如,gcc知道它正在制作可执行文件并因此设置 exec 位。另一方面curl并不意味着创建可执行文件,因此只使用默认权限。

  • @Alexander 有人肯定不应该。如果我想要一个文件是可执行的,我可以将它设置为这样,我不希望默认下载随机二进制文件可执行,这是一个安全风险。 (2认同)