【问题标题】:Create a file as executable program in C in Ubuntu在 Ubuntu 中用 C 语言创建一个文件作为可执行程序
【发布时间】:2012-05-26 04:27:26
【问题描述】:

我的程序通过 TCP 套接字接收可执行二进制文件。

我需要将此文件作为可执行程序保存到硬盘中。文件已成功接收,但问题是默认文件属性设置为不可执行。

如何在 Ubuntu 中将文件的属性更改为 C 中的可执行文件?

谢谢你, 问候, 机器人

【问题讨论】:

  • 答案是对的,但这可能不是一个好主意……
  • 您通过什么机制确定接收到的可执行文件绝不是恶意的?
  • @BasileStarynkevitch - 我正在为集群机器编程。发件人也将是在主节点上运行的整个应用程序的一部分。所以不存在任何恶意问题。
  • @R.. - 那么解决这个问题有什么好主意呢?
  • 那么代码应该安全传输,这样网络上的受感染机器就无法注入恶意代码。通过 ssh 或通过带有证书检查的 https 传输它,或者仅在安全通道上使用加密哈希/签名并通过其他不安全的通道发送二进制文件,都可以正常工作

标签: c++ c linux ubuntu


【解决方案1】:

int chmod(const char *path, mode_t mode)int fchmod(int fd, mode_t mode) ? 怎么样

apropos chmod
man 2 chmod

最基本的例子:

#include <sys/stat.h>
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char* argv[]){

   char * fpath = "/path/to/binary";
   int ret=0;
   if(ret = chmod(fpath, S_IRUSR|S_IXUSR) < 0){
      perror("chmod failed");
      exit(1);
   }

   printf("chmod ok\n");
   exit(0);
}

【讨论】:

    【解决方案2】:

    您是如何创建和编写文件的?如果您知道它将是可执行的,只需首先使用正确的模式制作文件即可。

    int fd = open("path/to/file", O_WRONLY | O_CREAT, 0777);
    

    除非umask 剥离可执行位(常用值是00220002,它们单独保留可执行位),否则path/to/file 将被创建为最初可执行的。

    【讨论】:

      【解决方案3】:

      您可以使用chmod 更改文件模式。阅读手册页(man 2 chmod) 了解详细信息(与 shell 命令chmod 大致相同)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-12-21
        • 2021-11-28
        • 1970-01-01
        • 2014-05-29
        • 1970-01-01
        • 2014-07-03
        • 2017-07-17
        相关资源
        最近更新 更多