You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker中/tmp目录执行二进制文件遇Permission denied的安全解决咨询

解决Docker中编译执行C++程序的权限问题

问题根源

出现fork/exec /tmp/a.out: permission denied的原因是默认tmpfs挂载启用了noexec选项,禁止在/tmp目录下执行二进制文件,而你的容器采用只读根文件系统,只能通过/tmp目录操作文件。

安全合规的解决方案

1. 调整tmpfs挂载参数

修改docker-compose.yml中的tmpfs配置,添加exec选项允许/tmp下执行文件,同时保留原有安全限制:

version: "3.9"
services:
  gpp:
    build: .
    environment:
      - token=test_token
      - code=#include <iostream>\r\n\r\nusing namespace std;\r\n\r\nint main() {\r\n   int a = 10;\r\n   int b = 20;\r\n   cout << a << " " << b << endl;\r\n   int temp = a;\r\n   a = b;\r\n   b = temp;\r\n   cout << a << " " << b << endl;\r\n   return 0;\r\n}
    network_mode: bridge
    privileged: false
    read_only: true
    tmpfs:
      - /tmp:exec,mode=1777
    security_opt:
      - "no-new-privileges"
    cap_drop:
      - "all"
  • exec:开启/tmp目录的执行权限,允许运行编译后的二进制文件
  • mode=1777:保持/tmp目录的默认权限,确保编译程序能正常读写

2. 额外安全加固措施

  • 保留cap_drop: all:移除所有不必要的内核能力,限制程序可执行的系统操作
  • 保留security_opt: no-new-privileges:阻止程序通过setuid/setgid等方式提升权限
  • 优化worker程序:严格校验输入的C++代码,限制代码长度、禁用危险系统调用(如system()、fork()),降低恶意代码风险

验证效果

重新构建并启动容器后,worker即可正常完成C++代码的编译与执行,不会再触发权限拒绝错误。

内容的提问来源于stack exchange,提问作者50_Seconds _Of_Coding

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 18:15:42